Чтение определенной строки из файла
- Войдите на сайт для отправки комментариев
Сб, 02/05/2020 - 05:32
Уважаемые гуру ! Есть текстовый файл на cd карте состоящий из произвольного количества строк кириллицы в кодировке UTF-8 примерно такого вида :
На позитиве быть всегда Чтобы сбылась твоя мечта И в золоте всегда купаться Как можно чаще улыбаться
Если файл состоит из одной строки, я могу прочитать ee и перекодировав функцией в CP866 вывести на VFD дисплей. А вот как прочитать определенную строку из файла и вывести на дисплей тямы не хватает. Окончание строк можно например по символу \n определить,а как начало? Может сможет кто подсказать.
myFile = SD.open("text.txt"); // файл в кодировке UTF-8 if (myFile) { byte h = 0; char text[] = {}; while (myFile.available()) { text[h] = myFile.read(); h++; } myFile.close(); mySerial.println(RUS(text)); //вывод перекодированного текста }
Окончание строк можно например по символу \n определить,а как начало?
Например, по символу \n
А можно по подробней с примером как прочитать только 3 строку например пожалуйста? Не могу уловить суть прочтения любой строки по одному \n.
третья строка начнется после второго \n и продолжается до следующего \n или конца файла.
А можно по подробней с примером как прочитать только 3 строку например пожалуйста? Не могу уловить суть прочтения любой строки по одному \n.
По одному \n - никак, придется прочитать все . Читаете первую строку, отбрасываете. Вторую - так же. Следующая - та. что вам нужна :)
Если все строки разной длины - нет способа найти третью строку, не прочитав все предыдущие.
Всё верно строки разной длины,символ кириллицы занимает 2 байта,а остальные один. Всё я могу прочитать, а как откинуть ненужные строки не хватает знаний, по этому и обратился за помощью. Вот так я могу первую строку вывести. А как сделать что бы любую другую строку вывести на дисплей по наступлению какого-нибудь события не знаю как.
Я не знаком с этой библиотекой, но если у неё есть метод readln (), то просто прочитать и отбросить две строки, а третью использовать для перекодирования и последующего вывода. По идеи должен быть такой метод, но это не точно.
В #3 что не ясно ? Считываешь символы и сравниваешь с \n. Символы \n считаешь. Как число символов \n стало равно двум - значит дальше идёт третья строка ...
А в # 4 написано, что нельзя. И как быть ? Я прошу пример, а не теорию. По другому я не разберусь, особенно когда мнения расходятся.
#3 и #4 об одном и том же !!!
А в # 4 написано, что нельзя. И как быть ? Я прошу пример, а не теорию. По другому я не разберусь, особенно когда мнения расходятся.
да не выдумывайте, в #3 и #4 написано одно и тоже.
Алгоритм очень простой, отвлекитесь от строк вообще и работайте только с символами. Читаете символ, сравниваете с \n. Если символ равен \n - увеличиваем счетчик. Когда число \n будет равно 2 - все последующие символы начинаем сохранять в массив, пока не встретится еще один \n
Что тут не понятного? - остается написать код. Этого за вас делать, думаю, никто не станет. Я уж точно :) Весь смысл обучения в том, чтобы вы научились переводить алгоритмы в код самостоятельно
Если строки при формировании файла начинать со знака '#', например, то легко можно определить их начало.
Да, извиняюсь, не вник в суть! Я принцып понял как это работает. А как это в коде прописать я не знаю.
мы тут как чукчи - а чукча не писатель - чукча читатель
Если строки начинать с какого-нибудь символа, то они и на экране отобразятся. Если их только потом откидывать, но тогда для меня это вообще тёмный лес.
а смысл ?:) разве '#' в начале чем-то лучше '\n' в конце?
Это здорово, и я такой же читатель. Вот и застрял на одном месте несколько дней уже. Хотя там пару, тройку строк кода наверное.
Зачем их откидывать, если можно просто пропустить и не складывать со строкой?
Впрочем, способ проще посоветовать наврядли можно.
А как это в коде прописать я не знаю.
и что вы от нас хотите? Если вы такую элементарщину не знаете как записать - мы вам должны весь учебник программирования здесь в лицах разыграть. что ли?
а смысл ?:) разве '#' в начале чем-то лучше '\n' в конце?
Для мозга новичка это должно быть проще, как мне кажется. Искать начало по концу - это абстракция для человека, который уже поработал со строковыми массивами.
давайте теперь новый формат текстового файла изобретать ...
Вот эта строчка пропустит строку. Вызвать два раза и дальше можно работать с третьей
while(file.read() != '\n') {}
не все чукчи оказывается - нашелся один слабохарактерный ...
вангую ошибку при компиляции
А как это в коде прописать я не знаю.
и что вы от нас хотите? Если вы такую элементарщину не знаете как записать - мы вам должны весь учебник программирования здесь в лицах разыграть. что ли?
Опять ничего в интернете нет? Что ж такое-то... Какой у вас провайдер?
в #21 даже код написали (чуть поправить надо правда) и все равно не понятно ??? тогда в вашем случае медицина уже не поможет ...
в #21 даже код написали (чуть поправить надо правда) и все равно не понятно ??? тогда в вашем случае медицина уже не поможет ...
в #1 я так понимаю то же код из интернета ?
в #1 я так понимаю то же код из интернета ?
что по вашему делает код из #21 ?
Читает файл пока не встретит символ \ n. Точнее выполняет какие то действия в цикле пока не встретит \n
иными словами считывает строку ... (цикл там пустой)
а если два раза подряд ?
Считает вторую строку
не два раза, а две строки (пробежит все символы из двух строк и проигнорирует их) - следующая третья, а именно она вам и нужна ...
Это я понял, но мне нужно вывести одну строку например в 8.00,а другую в 10.00. На каждое событие писать эту функцию разное колличество раз?
Можно в цикле выполнять нужное количество раз.
Это я понял, но мне нужно вывести одну строку например в 8.00,а другую в 10.00. На каждое событие писать эту функцию разное колличество раз?
ну вот видите, как только разобрались с тем как строку получить - сразу новый вопрос как это делать для разных строк. И так будет бесконечно, по пять вопрлсов на каждую строчку - пока вы не научитесь находить ответы самостоятельно. Поэтому мы и не пишем код за новичков , потому что стоит начать - придется делать так постоянно
Вопрос изначально стоял как это делать для разных строк. Вывести одну строку я тупо мог просто записав её одну в файл.
Я правильно понимаю - всё ещё вопрос не решен ????????????????????????????????????????????????????????
Нет,не решен.
Надо срочно кэпа звать, без него не разобраться.
Всем спасибо, вопрос решен. while(file.read() != '\n') {} не понадобился пропуск строк. Подправить всего одну строчку нужно было из #5 поста. А сколько шума было.
Вдруг кому пригодиться.