Чтение текстового файла построчно на C#
Два самых простых способа как прочитать текстовый файл построчно на C#. В обоих случаях используется using System.IO;. Напишу сразу примеры кода без всяких прелюдий.
Способ 1
Классический вариант чтения файла построчно:
StreamReader f = new StreamReader("test.txt"); while (!f.EndOfStream) < string s = f.ReadLine(); // что-нибудь делаем с прочитанной строкой s >f.Close();
Еще один пример, как можно организовать цикл построчного чтения:
string s; StreamReader f = new StreamReader("test.txt"); while ((s = f.ReadLine()) != null) < // что-нибудь делаем с прочитанной строкой s >f.Close();
Указать кодировку при чтении файла (например, DOS-кодировку) можно так:
StreamReader f = new StreamReader("test.txt", Encoding.GetEncoding(866));
Так же можно использовать обёртку using чтобы не закрывать файл после чтения.
string s; using (var f = new StreamReader("test.txt", Encoding.GetEncoding(1251))) < while ((s = f.ReadLine()) != null) < // что-нибудь делаем с прочитанной строкой s >>
Способ 2
Прочитать весь файл целиком в массив строк:
string[] lines = File.ReadAllLines("test.txt"); foreach (string s in lines) < // что-нибудь делаем с прочитанной строкой s >
По аналогии, кстати, можно и записывать построчно в файл, использовав StreamWriter, f.WriteLine и File.WriteAllLines. Побробнее смотрите в следующей статье.
Чтение файла построчно
Нужно открыть файл и прочитать его построчно, то есть взять первую строку занести её в переменную, проделать с ней определённые операции, потом брать вторую и т.д.
Отслеживать
9,375 7 7 золотых знаков 24 24 серебряных знака 57 57 бронзовых знаков
задан 6 окт 2013 в 6:48
Никола Кривошея Никола Кривошея
1,497 4 4 золотых знака 34 34 серебряных знака 72 72 бронзовых знака
Смотрите метод getline() Например: std::string name; std::getline (std::cin,name);
6 окт 2013 в 6:56
2 ответа 2
Сортировка: Сброс на вариант по умолчанию
вот код не вырванный из контекста
#include #include // подключаем строки #include // подключаем файлы using namespace std; // используем стандартное пространство имен int main() < string s; // сюда будем класть считанные строки ifstream file("C:\\PriceList.dat"); // файл из которого читаем (для линукс путь будет выглядеть по другому) while(getline(file, s))< // пока не достигнут конец файла класть очередную строку в переменную (s) cout file.close(); // обязательно закрываем файл что бы не повредить его return 0; >
Отслеживать
ответ дан 1 авг 2015 в 11:01
10k 14 14 золотых знаков 53 53 серебряных знака 118 118 бронзовых знаков
Ээээ. А вы уверены насчёт eof ? Если я не ошибаюсь, eof для istream ‘ов возвращает true не когда поток находится в конце файла, а когда поток находится в конце файла, и предыдущая попытка чтения из-за этого завершилась неудачно.
1 авг 2015 в 11:08
если честно я сам не уверен, насколько я понимаю при считывании очередной строки указатель сдвигается на конец этой строки. давно не кодил но пример отлично отрабатывает без ошибок. а вот сдесь cplusplus.com/forum/beginner/11304 тоже похожий код указан
Как построчно считать файл в c
1) На Раздел распространяются все Правила Форума.
2) Перед тем, как создать новый топик, убедитесь, что Вы читали Правила создания тем в Разделе.
3) Вопросы, не связанные с программированием (настройки MS Visual Studio, книги, библиотеки и т.д.),
обсуждаются в разделе C/C++: Прочее
4) Вопросы разработки .NET (Windows Form, C++/CLI и т.п.) приложений на Visual C++/C# обсуждаются в разделе .NET.
5) Нарушение Правил может повлечь наказание со стороны модераторов.
Модераторы: ElcnU
‘> чтение из файла построчно , прочитать файл с неизвестным кол-вом строк и неизв
- Подписаться на тему
- Сообщить другу
- Скачать/распечатать тему
Сообщ. #1 , 16.03.05, 10:57
Рейтинг (т): 2
есть файл открываю его с помощью fopen(fullfilename, «r+»))
как прочитать его по строчно причем кол-во строк неизвестно кол-во символов в строке тоже, так что функция fgets() отпадает если же пытаюсь исполсовать getline напромер как сдесь то компилятор выдает то что я использую неправильные аргументы какие именно не говарит
Сообщ. #2 , 16.03.05, 11:29
Рейтинг (т): 24
FILE* pfile = fopen( filepath, «r» );
if( pfile != NULL )
char buf[ 255 ];
while( !feof( pfile ) )
if( fscanf( pfile, «%[^\n]», buf ) != NULL )
//прочитана строка и лежит в buf
fscanf( pfile, «%h», &h );
fclose( pfile );
Сообщение отредактировано: bugger — 16.03.05, 11:32
Сообщ. #3 , 16.03.05, 12:18
Full Member
Рейтинг (т): 7
Цитата Grigor @ 16.03.05, 10:57
кол-во строк неизвестно кол-во символов в строке тоже, так что функция fgets() отпадает
почему сразу отпадает?
выдели пару килобайт, или мегабайт, 2Гб в твоём рапоряжении,а ты жмёшься
где ты такой текстовый файл найдёшь, где строка переваливает за килобайт?
Сообщ. #4 , 16.03.05, 12:27
Unregistered
боюсь предположить, что файл совсем и нетекстовый. а не проше ли целиком его прочитать а уже потом определять, где строчка начинается и заканчивается. для этого даже не надо отдельных буферков.
Сообщ. #5 , 16.03.05, 12:36
Рейтинг (т): 2
Grigor, код в студию+полный текст ошибки
Lucifer ощибка была такой
Eroor error C3861: ‘getline’: Bezeichner wurde auch mit einer argumentbezogenen Suche nicht gefunden (если по немецки не
знаеш посмотри что значит код ошибки в любимом MSDN)
FILE* pfile = fopen( filepath, «r» );
if( pfile != NULL )
char buf[ 255 ];
while( !feof( pfile ) )
if( fscanf( pfile, «%[^\n]», buf ) != NULL )
//прочитана строка и лежит в buf
fscanf( pfile, «%h», &h );
fclose( pfile );
уау bugger так все просто окасалось
P.S все бы так просто было
Сообщение отредактировано: ViGOur — 16.03.05, 14:18
Сообщ. #6 , 16.03.05, 13:08
Рейтинг (т): 2
почему сразу отпадает?
выдели пару килобайт, или мегабайт, 2Гб в твоём рапоряжении,а ты жмёшься
где ты такой текстовый файл найдёшь, где строка переваливает за килобайт?
да это верно но хочется быть уверенным что ничего не потеряется хоть при каких размерах и какие они не важно 1KB или 1 GB
вот эта ошибка.
http://msdn.microsoft.com/library/default. rErrorC3861.asp
Подозреваю просто описался(вместо buf написал baf и т.п.)
описАлся это врятли вроде все переменные были скопированы с того места где обявлял но компилятор ругался, хотя
сейчас уже не проверищ код уже переписан
Сообщ. #7 , 16.03.05, 13:50
Full Member
Рейтинг (т): 7
cqwerty, если бы файл был не текстовый речь не шла бы о текстовых функциях, ими не читают бинарные файлы, что приводит конкретно к потере данных
Grigor, что-то я тогда не понимаю суть вопроса
чем отличается вариант с fscanf, который тебя устроил и где выделяется буферок в 255 байт, от варианта с функцией fgets?
а проверить потерю данных для fgets можно проверкой символа перед первым нулём в буфере(исключая последнюю строку)
if(buf[strlen(buf)-1]!=’\n’)
вот и всё
после обработки всего файла можно сравнить всё что прочиталось с размером файла
даёшь fgets.
Как прочитать файл построчно?
Возможно ли с помощью API прочитать файл построчно? Я кроме ReadFile и ReadFileEx ничего что-то больше не нашел. Неужели придется как-то ухищряться чтобы это сделать?
8 ответов
15 июля 2006 года
191 / / 15.07.2006
В Windows API точно нет функции для построчного чтения файлов. Если вы используете API, зачем вам такой примитив, как построчное чтение? И какой тип переменной или массив вы собираетесь использовать для хранения этих строк?
16 июля 2006 года
1.6K / / 18.09.2005
Есть некий текстовый файл, каждую строку которого нужно сравнить с эталонной. Может есть какие соображения по этому поводу?
16 июля 2006 года
8 / / 15.07.2006
[QUOTE=kosfiz]Есть некий текстовый файл, каждую строку которого нужно сравнить с эталонной. Может есть какие соображения по этому поводу?[/QUOTE]
читаешь весь файл, сплитишь его по энтеру и сравниваешь
17 июля 2006 года
122 / / 22.09.2005
Функция ReadFile() читает столько байт, сколько ей укажут — читай по-байтно и ищи символ окончания строки.
17 июля 2006 года
3 / / 17.07.2006
Да на кой тебе АПИ для таких целей
stdio была,есть и будет:
😉
Если переживаешь за скорость, то набей асм-вставку
17 июля 2006 года
4.8K / / 20.01.2000
[QUOTE=forker]Да на кой тебе АПИ для таких целей
stdio была,есть и будет:
😉
Если переживаешь за скорость, то набей асм-вставку[/QUOTE]
Странная функция. 😀
А чем тогда не подошла std, с её уже готовой getline ?
18 июля 2006 года
3 / / 17.07.2006
2Green:
ну извиняйте 🙂
честно скажу, что не приходилось её использовать, поэтому и не вспомнил
18 июля 2006 года
2.5K / / 14.07.2006
[QUOTE=Host]Функция ReadFile() читает столько байт, сколько ей укажут — читай по-байтно и ищи символ окончания строки.[/QUOTE]
Побайтно нехорошо читать — медленно сильно.