Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.89/64: Рейтинг темы: голосов - 64, средняя оценка - 4.89
420 / 357 / 47
Регистрация: 22.05.2013
Сообщений: 2,518

Текстовый файл читать построчно

01.09.2014, 04:18. Показов 12875. Ответов 30
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите новичку!

Не могу проделать вроде простую (для других языков) процедуру:
Перебрать строки текстового файла и обработать перед выводом каждую строку отдельно не зависимо от длины.

Ни где не смог "нагуглить" такого решения! Даже странно! Только работа с потоками и буферами байт/символов. Уже 2 учебника просмотрел на эту тематику... Писать строки легко, а читать - только побайтно...
Может неправильно ищу? Может нужны определенные готовые классы?

В делфи была команда ReadLn. Ява весь текст в особый класс памяти читает для быстрого поиска строк... А в с++ тупик!
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
01.09.2014, 04:18
Ответы с готовыми решениями:

Записать массив в текстовый файл построчно
Здравствуйте! Помогите пожалуйста с заданием, нужно объявить массив и записать его в текстовый файл построчно. Заранее спасибо! пока всё...

Fstream. ищу пример записи в текстовый файл и его же читать
Всем здрасьте. сейчас пока так открываю файл для записи строк std::ofstream output1; output1.open(FILENAME); // для записи if...

Как записать построчно слова через пробел в текстовый файл?
В каждую строку вводит только по одному слову, весь нет обрыл не могу найти. Дан какой либо текст, и надо его записать в n строк с каким то...

30
9 / 9 / 5
Регистрация: 15.11.2011
Сообщений: 115
02.09.2014, 11:16
Студворк — интернет-сервис помощи студентам
Позвольте вопрос: а если из всего читаемого файла нужно найти всего-навсего одну строчку, то насколько морально "перелопачивать" getlin'ом весь файл? В смысле, может лучше применить другой, более эффективный способ, без лишних движений? Насколько я понимаю, getline будет копировать каждую строку файла - это ведь большие накладные расходы.
0
Каратель
Эксперт С++
6610 / 4029 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
02.09.2014, 12:52
Цитата Сообщение от VIKT0R Посмотреть сообщение
а если из всего читаемого файла нужно найти всего-навсего одну строчку, то насколько морально "перелопачивать" getlin'ом весь файл? В смысле, может лучше применить другой, более эффективный способ, без лишних движений? Насколько я понимаю, getline будет копировать каждую строку файла - это ведь большие накладные расходы.
если знаем позицию строки(не путать с номером строки) то можно перемещатся ifstream::seekg, а так да перелопачивать весь файл
0
9 / 9 / 5
Регистрация: 15.11.2011
Сообщений: 115
02.09.2014, 13:17
К примеру, если поиск по двум-трем словам строки, не лучше ли будет сравнивать по словам, не копируя всю строку, а сразу переходя к следующей в случае несовпадения? Что-то типа:

C++
1
2
3
4
5
6
7
8
9
char ch;
 
while(in_file) {
   in_file.get(ch);
   if(ch == '\r' ) break;
}
 
char word[32];
in_file >> word;
0
Каратель
Эксперт С++
6610 / 4029 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
02.09.2014, 14:38
Цитата Сообщение от VIKT0R Посмотреть сообщение
Что-то типа
что-то типа у вас фигня и совсем не отображает мысль:
Цитата Сообщение от VIKT0R Посмотреть сообщение
К примеру, если поиск по двум-трем словам строки, не лучше ли будет сравнивать по словам, не копируя всю строку, а сразу переходя к следующей в случае несовпадения?
0
420 / 357 / 47
Регистрация: 22.05.2013
Сообщений: 2,518
02.09.2014, 16:51  [ТС]
Цитата Сообщение от Jupiter Посмотреть сообщение
если знаем позицию строки(не путать с номером строки) то можно перемещатся ifstream::seekg
Вот одно из отличий с++ от других языков... для меня текстовый файл - это массив строк, которые можно посмотреть в редкторе. Каждый символ задается через номер строки и номер символа в строке. Строки любой длины. Поиск слова, это взять очередную строку и ее просмотреть командой поиск слова, а не искать сразу в файле. При желании после просмотра строки №20 я могу венуться к строке №5. И это должен взять на себя класс работы с текстовым файлом, а не программист выстраивающий общую логику. Пусть памяти выделяется больше. Пусть делаем в 3-5 раз больше операций чем могли бы (иначе бы выбрал асемблер). Если это не микрочип или драйвер, то все равно в разы(или на порядок) будет быстрее чем на яве. Для меня главное скорость написания простой программы с простой логикой, а не заморочки с выбором оптимального метода...

Сейчас мне не нужен системный подход. Есть простое задание - надо максимально быстро его сделать. Для этого нужно изучить (поверхностно) 5-8 технологий. Чаще всего хватает намека указанием команды (примеры сам нагуглю). Одной из них были тестовые файлы для парсинга строк. Файлы похожи на ini или csv. Бумажных книг под руками нет (да и не горит пока), кроме брошурки на 150 страниц для новичка. Учиться с нуля по Дежавю-ПДФ-файлам на 1000 страниц тяжело и неприятно (они полезны как справочники "подзабывшему"). Учитывая разную трактовку понятий в С++ и в языках которыми я владею, гугл-запросы не всегда срабатывают правильно. К тому-же часто мне не нужно узнать все о работе с файлами, а нужно найти технологию, ближе всего похожую на ту, к которой я уже привык. Начинал с паскаля, поэтому ищу простые конструкции, похожие на паскалевские, а не монстры подходящие под любую ситуацию с файлами. Возможно потом, когда-нибудь займусь оптимизацией уже работающих исходников - вот тогда изучу более оптимальные технологии. А пока ресурсов (проц+память) хватает, "эффективность" кода в моих задачах - не главное.

Ответ в принципе получил... Очередной кусок технологии одолел... Двигаюсь дальше... Вопрос закрываю...
Всем спасибо!
0
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5288 / 2376 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
03.09.2014, 07:35
Цитата Сообщение от Tester64 Посмотреть сообщение
Вот одно из отличий с++ от других языков... для меня текстовый файл - это массив строк, которые можно посмотреть в редкторе. Каждый символ задается через номер строки и номер символа в строке. Строки любой длины. Поиск слова, это взять очередную строку и ее просмотреть командой поиск слова, а не искать сразу в файле. При желании после просмотра строки №20 я могу венуться к строке №5.
Вы как-то странно рассуждаете. Вот дан Вам текстовый файл. Что мешает написать программу, которая будет читать каждое слово отдельно (подсказка: слова обычно ограничиваются символом пробела и/или знаками препинания), или каждое предложение отдельно (подсказка: предложения обычно ограничиваются точкой), или каждую строку текста отдельно (подсказка: строки текста обычно ограничиваются символом перевода строки \n ). В чём проблема-то?
Желаете всё это дело запихнуть в массив строк, ну создайте массив std::string arrayOfStrings[] и запихните туда строки текста. Желаете номера для каждой строки, ну добавьте счётчик int counter и в цикле посчитайте и пронумеруйте каждую строку. Впрочем, даже этого не нужно - каждый элемент массива имеет свой индекс.
Для написания программы понадобятся строки (и, возможно, методы) класса std::string, оператор if else , циклы (while или for - какой Вам больше нравится) и функции заголовочного файла <cctype>. Ну и обычные объекты для ввода-вывода std::cin и std::cout.
Задача элементарная же.

Цитата Сообщение от Tester64 Посмотреть сообщение
Для меня главное скорость написания простой программы с простой логикой, а не заморочки с выбором оптимального метода...
Это выглядит так, как будто Вы жалуетесь, что С++ - это не Джава.

Цитата Сообщение от Tester64 Посмотреть сообщение
И это должен взять на себя класс работы с текстовым файлом, а не программист выстраивающий общую логику.
Нужен Вам какой-то класс - научитесь работать с С++ (прочитайте учебник Липпмана, Лажойе, Му 2014 года) и напишите класс, который будет делать то, что Вам нужно.

Добавлено через 8 минут
Цитата Сообщение от Tester64 Посмотреть сообщение
мне нужно найти технологию, ближе всего похожую на ту, к которой я уже привык.
Вы делаете ошибку, от которой предостерегают все серьёзные авторы книг по С++ (и, в частности, создатель языка С++ Бьярне Страуструп):
Программисты, переходящие с иных языков (например, С,
Fortran, Smalltalk, Lisp, ML, Ada, Eiffel, Pascal, Modula-2) должны четко осознать:
чтобы реально воспользоваться преимуществами языка C++, нужно потратить
время, изучить и на практике овладеть стилями и приемами программирования,
характерными для C++. То же относится и к программистам, привыкшим к работе с
ранними, менее выразительными версиями C++.
0
420 / 357 / 47
Регистрация: 22.05.2013
Сообщений: 2,518
03.09.2014, 08:13  [ТС]
Цитата Сообщение от gru74ik Посмотреть сообщение
Что мешает написать программу, которая будет читать каждое слово отдельно (подсказка: слова обычно ограничиваются символом пробела и/или знаками препинания), или каждое предложение отдельно (подсказка: предложения обычно ограничиваются точкой), или каждую строку текста отдельно (подсказка: строки текста обычно ограничиваются символом перевода строки \n ). В чём проблема-то?
Проблемы нет! Но если у меня стоит задача "найти в одной из строк", то я расчитываю что получением строк и выделением их на фоне файла, подсчетом их количества, поиском переноса строк во всех известных коомбинациях, прыжками по строкам в произвольном направлении займется фреймворк... Это жутко удобно пользоваться подобными готовыми "фреймворками", чем кажый раз практически писать их заново. Как и поиск слова в строке - это "класическое" решение, которое глупо писать по новому, рискуя наделать ошибок, когда тысячи (более опытных) кодеров до меня делали подобную операцию и наверняка кто-нибудь из них оформил поиск в виде удобной функции. На этом в свое время "популяризировался" паскаль/делфи - на доступности "готовых решений" и удобного использования их в "блочном" виде. Поиск строки в подобной схеме займет от силы 5-6 строк кода... Если это не основная функция программы, а (например) отладочная (от которой не жаль потом отказаться), то тратить на подобную функцию пару часов для детальной отладки вместо 5 минут - лень...

Добавлено через 26 минут
Цитата Сообщение от gru74ik Посмотреть сообщение
Это выглядит так, как будто Вы жалуетесь, что С++ - это не Джава.
Скорее возмущаюсь! У джавы есть куча фреймворков с руским описанием, а по си даже стандартные функции плохо описаны в электронных учебниках (с поиском, а не дежавю). Найти примеры можно лишь на форумах. Причем эти примеры в половине случаев не работают. В делфи примеры были встроенны прямо в хелп по каждой команде. А законченных решений можно было найти тучу с исходниками или в виде библиотек с детальными примерами и документацией. Как и целые узкоспециализированные сборники под определенные операции. Например под работу со строкой у меня была коллекция почти в сотню функций (число на руском, перенос строки, случайная строка, исправить все сдвоенные пробелы...). ИМХО у С++ история подлиннее будет чем у делфи и явы вместе взятых. Да и язык достаточно сложный для студента (это все признают). Так почему "порог входа в язык" не снизили примерами и фрейворками? Ведь С++ на порядки гибче любого языка! Пока что вижу что для "студентов" создают отдельный, "упрощенный" С++ типа Qt не особо совместимый с обычным...
Мне нужен классический С++, но профи-уровень мне не нужен. Он будет моим "второстепенным" языком для написания "защищенных вставок в яву" (ява-исходники легко можно получить из уже скомпилированной программы, но не с++). Например работа с ключами защиты программы - взял строку из файла, обработал, выдал результат. Сложность должна быть в шифровании строки, а не в чтении строк файла...
Пока у меня стадия "обучения" (месяц свободный), но потом не будет время на написание сложного и жутко оптизимированного кода. Уже начал писать свои фреймворки под разные "узкоспециализрованные" операции, но опыта не хватает! И возмущает что чужих подобных не нашел в инете...
0
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
03.09.2014, 09:09
Цитата Сообщение от Tester64 Посмотреть сообщение
по си даже стандартные функции плохо описаны в электронных учебниках
Уточню: в контексте данной конкретной темы остались ли вопросы и непонятки касательно функций работы с текстовыми файлами?
0
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5288 / 2376 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
03.09.2014, 09:12
Tester64, и вот ещё оттуда же (прям как будто для Вас писалось):
Цитата Сообщение от Бьярне Страуструп
Бездумный перенос на новый язык идей и методов программирования,
доказавших свою эффективность для другого языка, в типичном случае приводит к
неуклюжему, медленному и сложному в сопровождении коду. К тому же писать такой
код крайне утомительно, ибо каждая его строчка и каждое сообщение компилятора
об ошибке подчеркивают отличие применяемого языка от «старого». Вы можете
программировать в стиле Fortran, С, Smalltalk и т.п. на любом языке, но делать это
для языка с иной философией и неэкономно, и неприятно.
0
420 / 357 / 47
Регистрация: 22.05.2013
Сообщений: 2,518
03.09.2014, 09:15  [ТС]
Цитата Сообщение от 0x10 Посмотреть сообщение
Уточню: в контексте данной конкретной темы остались ли вопросы и непонятки касательно функций работы с текстовыми файлами?
Нет! Как я сказал в коментарии #25, решение нашел, вопрос закрываю!
0
03.09.2014, 09:18
 Комментарий модератора 
Цитата Сообщение от Tester64 Посмотреть сообщение
вопрос закрываю
А я на всякий случай и тему. А-то она все время куда-то сползает.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
03.09.2014, 09:18

Как из С++ передать данные в текстовый файл? и как читать текстовые файлы в С++?
Задача такая: у меня есть текстовый файл, в котором из матлаба передано некоторое число N. как теперь это число прочитать? потом...

В текстовом файле построчно записаны предложения. Записать во второй текстовый файл первое слово последнего предложения
В текстовом файле построчно записаны предложения. Записать во второй текстовый файл первое слово последнего предложения. Помогите...

Считывание из файла построчно и запись в файл построчно getline ()
# include &lt;iostream&gt; # include &lt;vector&gt; # include &lt;fstream&gt; # include &lt;string&gt; using namespace std; int main () { ...

Открываются 2 текстовых файла, сложить построчно числа из 1 и 2 файла, сумму вывести в третий файл построчно
Товарищи, помогите с кодом пожалуйста.=( 1. Создать текстовый файл и сохранить в нём текст из 10..100 слов. Слова в тексте разделены...

Дан текстовый файл, содержащий целые числа. Определить в каждой четной строке максимальное число и записать результаты в новый текстовый файл
Дан текстовый файл, содержащий целые числа. Определить в каждой четной строке максимальное число и записать результаты в новый текстовый...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
31
Закрытая тема Создать тему
Новые блоги и статьи
Про "Windows must die!"
kumehtar 04.11.2026
Знаете, чет накатило. . . . Когда-то это было почти боевым кличем: мол, нормальный человек сидит на DOS, OS/ 2 или Linux, а вот это вот - Must Die. А теперь человек произносит «мастдай» с усмешкой - и. . .
Красочные поля с номером страницы svg+background-image
russiannick 04.11.2026
Красочные поля с номером страницы не менее важны чем в эпоху бумажных книг. Посему спешу представить почтеннейшей публике этот важный инструмент который эти поля и формирует. В процессе разработки. . .
Вступаем в новую фазу генерации favicons, векторную.
russiannick 02.11.2026
Теперь нет нужды скрывать что используется простой svg. Исходный код изображения помещаем в поле и жмем кнопку. Исходник преобразуется в вид корректный для помещения в favicon или в url(). Нажатие. . .
Генератор паролей (вариант №4)
Maks 01.11.2026
После публикации 3-го варианта генератора паролей, разослал его своим коллегам (с целью оценки), в итоге были получены следующие рекомендации: 1. Вернуть возможность использования знаков | 1 l I;. . .
Генератор паролей (вариант №3)
Maks 30.10.2026
Финальная версия генератора паролей 1С. Доработка решения в этот раз коснулась только визуальной части, а именно, добавлен реквизит ДопПараметры (тип Булево), который скрывает/ отображает реквизиты:. . .
Магическое мышление и магия, современная наука не отличима от магии (говорит ИИ Джемени)
zorxor 30.10.2026
Джемени, расскажи, пожалуйста, что такое магическое мышление, что такое магия, почему современная наука чем-то напоминает магию? Фраза «Любая достаточно развитая технология неотличима от магии». . .
За какое время ИИ может подобрать пароль по хешу (рассказывает Джемени ИИ)
zorxor 30.10.2026
Расскажи, Джемени, если известен хэш МД5, например, за сколько ИИ сможет подобрать соответствующий пароль? Искусственный интеллект (ИИ) может подобрать простой или средний по сложности пароль по. . .
Кто убил Suno? Почему наше солнышко погасло? (диалог с ИИ Джемени)
zorxor 30.10.2026
Как убивали Suno. Хронология. «Убийство» музыкальной нейросети Suno — это затяжной процесс, в котором технологический хайп стартапа разбился о жесткую реальность судебных исков от гигантов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru