Сохранение данных String в массив

SomlicH
Offline
Зарегистрирован: 11.01.2022

Считываю текстовые данные с SD карты. Сами данные читаются нормально, получается строка String. Но мне ее необходимо записать в массив (11 строк соответственно 11 элементов в массиве).

Погуглив нашел только массив char, но в него String нельзя записать. Я конечно создал 11 переменных типа String, но это как то странно, неужели нет массивов строковых, или я найти не могу информацию.

Подскажите пожалуйста, как правильно это можно осуществить?

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Из описания проблемы непонятно, что именно Вас не устраивает, и что именно Вы хотите "правильно осуществить".

В частности, непонятно, чем Вас не устраивает массив String.

rkit
Offline
Зарегистрирован: 23.11.2016

В учебнике очень хорошо написано, что такое массив и как с ним работать. И еще много чего полезного. Попробуй погуглить учебник.

SomlicH
Offline
Зарегистрирован: 11.01.2022

rkit пишет:

В учебнике очень хорошо написано, что такое массив и как с ним работать. И еще много чего полезного. Попробуй погуглить учебник.

Это я естественно первым делом сделал. Нигде не нашел упоминания про массивы String.

Вот код чтения с карты.

File myfile = SD.open("setup.txt");
    String finalString = "";
    char buff=0;
    int k = 0;
    while (myfile.available())
    {
     buff=(char)myfile.read(); 
     if (buff=='\n') {
      dmx_names[k]=finalString.toInt(); 
      Serial.println(finalString);
       k++; 
      finalString = "";
     } else if (buff=='-') {
      if (k==0){name0=finalString;}
      if (k==1){name1=finalString;}
      if (k==2){name2=finalString;}
      if (k==3){name3=finalString;}
      if (k==4){name4=finalString;}
      if (k==5){name5=finalString;}
      if (k==6){name6=finalString;}
      if (k==7){name7=finalString;}
      if (k==8){name8=finalString;}
      if (k==9){name9=finalString;}
      if (k==10){name10=finalString;}
        Serial.println(finalString);
      finalString = "";
     } else{ 
      finalString += buff;
     }
  }
  myfile.close(); 

Т.е. в файле у меня строки типа: Настройки-5
Я первую часть до символа - помещаю в переменную name0 (согласно индексу) а вторую в массив dmx_names[k], вот тут String нормально преобразуется в Int.
Я думал его можно объявить как допустим String names[11]; Но при таком варианте при выводе в Serial там пусто, хотя данные то есть я их проверяю строкой Serial.println(finalString);.

В общем не понимаю в чем затык. Переменные как в моем примере работают, все нормально, но с массивом то было бы проще.

b707
Offline
Зарегистрирован: 26.05.2017

SomlicH пишет:

Погуглив нашел только массив char, но в него String нельзя записать.

только массив char нашли? а что, массивов инт или лонг не существует уже?

А если есть, может вы догадаетесь. что если в массиве нужно хранить переменные типа String. то нужно брать массив String?

b707
Offline
Зарегистрирован: 26.05.2017

SomlicH пишет:

Я думал его можно объявить как допустим String names[11]; Но при таком варианте при выводе в Serial там пусто, хотя данные то есть я их проверяю строкой Serial.println(finalString);.

показывайте код, как вы обьявляли массив и как выводили его в Сериал

rkit
Offline
Зарегистрирован: 23.11.2016

SomlicH пишет:

 Нигде не нашел упоминания про массивы String.

Учебники читают, а не ищут в них упоминания.

SomlicH
Offline
Зарегистрирован: 11.01.2022

b707 пишет:

SomlicH пишет:

Я думал его можно объявить как допустим String names[11]; Но при таком варианте при выводе в Serial там пусто, хотя данные то есть я их проверяю строкой Serial.println(finalString);.

показывайте код, как вы обьявляли массив и как выводили его в Сериал

Вернул обратно код, который был раньше, с объявлением массива String names[11]; Пришлось набирать заново, т.к. уже под новый вариант переделал. И о чудо все работает....
ДАже не знаю что сказать. Полтергейст какой то. Больше спасибо, видимо где то была ошибка.

b707
Offline
Зарегистрирован: 26.05.2017

SomlicH пишет:

Вернул обратно код, который был раньше. И о чудо все работает....
видимо где то была ошибка.

так бывает, когда твердо не знал, но забыл... Ркит был прав - учебник надо читать, а не просматривать...

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

SomlicH пишет:

ДАже не знаю что сказать. Полтергейст какой то. 

Так Вы поди на правильном инструментарии экономите? Вот и расплата за то, что жабе поддались.

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

Что такое МАССИВ он не знает, а от этого незнания и "полтергейсты" всякие появляются )))

SomlicH
Offline
Зарегистрирован: 11.01.2022

ЕвгенийП пишет:

SomlicH пишет:

ДАже не знаю что сказать. Полтергейст какой то. 

Так Вы поди на правильном инструментарии экономите? Вот и расплата за то, что жабе поддались.

Согласен, не использовал, каюсь...

BOOM пишет:

Что такое МАССИВ он не знает, а от этого незнания и "полтергейсты" всякие появляются )))


Хм, я разве спрашивал, что такое понятие МАССИВ? Я хотел проконсультироваться по поводу особенностей массива именно типа String. Вот специально погуглил учебники, можете показать где есть информация именно о этом типе массива? Например Программируем Arduino. Основы работы со скетчами Монк Саймон. Нет, есть массивы char c указателями *char. Про новый класс String только что существует опасность связанная с динамическим выделением памяти и всё, больше ничего. Нет примеров.
По этому и задал вопрос. С остальными то массивами проблем нет. В коде выше видно, что Int массив используется адекватно. 
А по поводу кода, вполне могла быть ошибка, исходной версии нет, проверить не могу. Спасибо уважаемому b707 за то,что заставил вспомнить код и я сам эту ошибку видимо исправил.

b707
Offline
Зарегистрирован: 26.05.2017

SomlicH пишет:

Вот специально погуглил учебники, можете показать где есть информация именно о этом типе массива?

звучит примерно как "Почему я не вижу в продаже специальной версии ПДД РФ для водителей Ситроенов?"

на картинках в учебнике только Жигули и Волги, а также фургоны и трамваи, как же мне учиться?

SomlicH
Offline
Зарегистрирован: 11.01.2022

Аналогия понятна, но не совсем применима, все таки распределение памяти в микроконтроллерах имеет свои особенности, особенно в связи с с тем, что основное моё - программирование это ПК, а Ардуино всего лишь хобби. Ладно спасибо на помощь, заканчиваю флуд. Вместо указаний на учебники (в которых этого реально нет) можно было просто написать, что объявление массива стандартно и аналогично Int - ищи проблему в коде. Еще раз спасибо, за уделенное время.

b707
Offline
Зарегистрирован: 26.05.2017

SomlicH пишет:

 объявление массива стандартно и аналогично Int - ищи проблему в коде.

 Объявление массива String действительно стандартно и совпадает с любым другим типом. А вот использование имеет свои особенности - но особенности эти не относятся исключительно к типу String, а связаны с тем, что в классе String используется динамически выделямая память.

Однако для вашего примера это не имеет значения и в рамках вашего кода разницы между массивом int и массивом String нет.

Не надо обижаться, вас никто не троллит, но заявление "я умею работать с массивами инт, но не умею String" равносильно заявлению "я не знаю массивов вовсе"

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

SomlicH пишет:

BOOM пишет:

Что такое МАССИВ он не знает, а от этого незнания и "полтергейсты" всякие появляются )))


Хм, я разве спрашивал, что такое понятие МАССИВ? Я хотел проконсультироваться по поводу особенностей массива именно типа String. Вот специально погуглил учебники, можете показать где есть информация именно о этом типе массива? Например Программируем Arduino. Основы работы со скетчами Монк Саймон. Нет, есть массивы char c указателями *char. Про новый класс String только что существует опасность связанная с динамическим выделением памяти и всё, больше ничего. Нет примеров.
По этому и задал вопрос. С остальными то массивами проблем нет. В коде выше видно, что Int массив используется адекватно. 
А по поводу кода, вполне могла быть ошибка, исходной версии нет, проверить не могу. Спасибо уважаемому b707 за то,что заставил вспомнить код и я сам эту ошибку видимо исправил.

Вот b707 правильно написал выше:

b707 пишет:
"я умею работать с массивами инт, но не умею String" равносильно заявлению "я не знаю массивов вовсе"

Массив - это лишь ещё один тип данных.. И с ними можно работать.

Или ты на все задачи "упоминания" или "примеры" ищешь? Начни думать головой.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

SomlicH пишет:

Хм, я разве спрашивал, что такое понятие МАССИВ? Я хотел проконсультироваться по поводу особенностей массива именно типа String. Вот специально погуглил учебники, можете показать где есть информация именно о этом типе массива?

Никаких особенностей "массива именно типа String" не существует. Именно поэтому и нет никакой "информации именно о этом типе массива".

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

Чо пристали то, он же крутой программист:

SomlicH пишет:

основное моё - программирование это ПК, а Ардуино всего лишь хобби.


Из-за таких программистов 640кб перестало хватать на нужды общества))))

Rumata
Rumata аватар
Offline
Зарегистрирован: 29.03.2019

BOOM пишет:

Из-за таких программистов 640кб перестало хватать на нужды общества))))

Ога, кто бы говорил))  Сам то делением на ноль упражнялся надысь :-)

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

Дык я нигде себя программистом и не называл, мне можно!)