Как подсчитать количество строк в файле c
Вопрос. В моей системе Linux есть файл с большим количеством строк. Как подсчитать общее количество строк в файле?
Использование «wc -l»
Существует несколько способов подсчета строк в файле. Но один из самых простых и широко используемых способов — использовать «wc -l». Утилита wc отображает количество строк, слов и байтов, содержащихся в каждом входном файле или стандартном вводе (если файл не указан) в стандартный вывод.
Итак, рассмотрим файл, показанный ниже:
1. Команда «wc -l» при запуске этого файла выводит количество строк вместе с именем файла.
2. Чтобы исключить имя файла из результата, используйте:
3. Вы всегда можете предоставить вывод команды команде wc, используя канал. Например:
Здесь можно указать любую команду вместо cat. Вывод любой команды можно передать команде wc для подсчета строк в выводе.
Использование awk
Если вы хотите использовать awk для определения количества строк, используйте приведенную ниже команду awk:
Использование sed
Используйте приведенный ниже синтаксис команды sed, чтобы найти количество строк с помощью GNU sed:
Использование grep
Наш старый добрый друг «grep» также может использоваться для подсчета количества строк в файле. Эти примеры предназначены только для того, чтобы вы знали, что существует несколько способов подсчета строк без использования «wc -l». Но если спросят, я всегда буду использовать «wc -l» вместо этих опций, так как их слишком легко запомнить.
С GNU grep вы можете использовать следующий синтаксис grep:
Вот еще одна версия команды grep для определения количества строк.
Еще несколько команд
Наряду с приведенными выше командами полезно знать некоторые редко используемые команды для определения количества строк в файле.
1. Используйте команду nl (фильтр нумерации строк), чтобы пронумеровать каждую строку. Синтаксис команды:
Не такой прямой способ получить количество строк. Но вы можете использовать awk или sed, чтобы получить счет с последней строки. Например:
2. Вы также можете использовать vi и vim с командой «:set number», чтобы установить число в каждой строке, как показано ниже. Если файл очень большой, вы можете использовать «Shift+G», чтобы перейти к последней строке и получить количество строк.
3. Используйте команду cat с ключом -n, чтобы пронумеровать каждую строку. Опять же, здесь вы можете получить количество строк с последней строки.

Мы часто храним наши данные в файлах, когда нам нужно, чтобы данные были постоянными и записывались на жесткий диск. Файлы можно использовать для хранения многих типов данных, включая текст, числа, изображения и т. д. Файлы хранят текстовые данные построчно, где каждая строка может содержать несколько символов и слов. Вам может понадобиться подсчитать количество строк в файле в различных случаях. В таких приложениях, как текстовые редакторы, номера строк обычно указываются перед каждой строкой файла. В этой статье мы обсудим, как подсчитать количество строк в файле.
Как считать строки в файле на C++?
Для подсчета строк в файле на c++ мы будем открывать файл только в режиме чтения, так как операции вывода не требуются. Как только файл будет открыт, мы прочитаем файл построчно, используя функцию getline(), и подсчитаем количество строк. Функция getline() принимает файловый поток в качестве первого аргумента и строковую переменную в качестве второго аргумента. После выполнения он считывает следующую строку в файловом потоке в строковую переменную. После этого он перемещает указатель файла.
Прежде чем писать программу, давайте посмотрим, как текстовый файл выглядит внутри. Это поможет нам понять, как работает наша программа.
Вы можете заметить, что после каждой строки автоматически вставляется символ новой строки (\n). В конце текстового файла есть индикатор конца файла (EOF). В нашей программе мы будем читать файл построчно, пока не дойдем до конца файла или EOF .
Чтобы проверить, достигли мы EOF или нет, мы будем использовать метод peek(). Точно так же, как мы заглядываем во что-то, чтобы получить информацию о том, что происходит, не сообщая об этом никому, метод peek() при вызове в файловом потоке считывает следующий символ, не перемещая указатель файла. Как только метод peek() прочитает символ EOF, мы перестанем считать количество строк в файле.
Программа C++ для подсчета строк в файле
Теперь давайте реализуем программу на C++ для чтения файла и подсчета количества строк в нем с помощью функции getline() и метода peek() в C++.
Выход вышеуказанной программы приведен ниже.
- В этой программе мы использовали конструктор ifstream для создания объекта файлового потока для открытия файла.
- Мы объявили строковую переменную для ввода имени файла. Пользователю предлагается ввести имя файла, который он хочет прочитать, и количество строк в нем.Если файл отсутствует в каталоге как файл кода, укажите полный путь к файлу, чтобы программа работала правильно.
- Программа обрабатывает ошибки при открытии файла, показывая соответствующее сообщение, когда по какой-либо причине файл не может быть открыт с помощью.
- Далее мы объявили линейную переменную для чтения каждой строки из файла и переменную count для подсчета количества строк в файле.
- В следующей строке мы открываем файл с помощью конструктора объекта ifstream, передавая имя файла в конструктор.
- Затем мы проверяем, был ли файл успешно открыт, используя метод is_open(). Если это так, мы готовы прочитать файл, в противном случае мы покажем пользователю сообщение о том, что файл не был открыт.
- Затем мы читаем файл в цикле, используя метод peek() и функцию getline(). Здесь мы проверяем, является ли следующий символ для чтения символом EOF (конец файла) или нет, используя метод peek(). Пока мы не достигнем конца файла, мы читаем файл построчно и увеличиваем количество. Наконец, мы отображаем количество строк.
Как посчитать строки в файле на C++, используя подход в стиле C?
Существует альтернативный способ подсчета количества строк в файле на C++. Мы можем использовать обработку файлов в стиле C, чтобы прочитать файл и подсчитать количество строк в нем. Для этого мы можем открыть файл с помощью метода fopen() и сохранить указатель файла в объект указателя FILE. Метод fopen() принимает два аргумента, первый аргумент представляет собой массив символов, обозначающий имя файла, а второй аргумент представляет собой параметр, указывающий режим открытия файла. Мы откроем файл в режиме только для чтения.
В этом методе вместо чтения каждой строки за раз мы читаем каждый символ за раз и проверяем, является ли символ символом новой строки ( \n ). Каждый раз, когда мы находим символ новой строки, мы считаем, что он завершил строку, и увеличиваем количество строк в файле. Здесь мы будем читать символы из файла с помощью функции getc(). Функция getc() принимает имя файла в качестве входных данных и возвращает следующий символ в файле.
В конце мы выходим из цикла, когда находим символ конца файла (EOF). Мы будем использовать тот же файл, что и выше, для подсчета количества строк.
Программа C++ для подсчета строк в файле с использованием подхода в стиле C
Теперь давайте реализуем программу, использующую функцию getc() для подсчета количества строк в файле на C++.
В этой статье мы покажем, как подсчитать количество строк в файле на C++.
Иногда вы можете работать с файлом и хотите узнать, насколько велик файл с точки зрения количества строк.
Несмотря на то, что в C++ нет прямой функции, которая получает количество строк, мы можем сделать это довольно легко, написав немного кода.
Итак, в этом коде мы возьмем простой текстовый файл и найдем, сколько строк он содержит.
Это показано в приведенном ниже коде.
Мы используем библиотеку для работы с файлами. В данном случае мы открываем файл и читаем его содержимое, в частности количество строк.
Мы используем библиотеку для вывода количества строк в файле.
Мы используем библиотеку, потому что собираемся считывать строки через строковую переменную.
Итак, мы переходим к основной функции.
В рамках этой основной функции первое, что мы делаем, — это создаем строку, строку.
Затем мы создаем подключение к файлу, из которого хотим читать, в данном случае это «file1.txt». Мы делаем это, создавая объект чтения ifstream и затем передавая имя файла в качестве его параметра. Вы создаете объект записи потока, если хотите записать в файл. Вы создаете объект чтения ifstream, если хотите читать из файла.
Затем мы выводим сообщение об ошибке, если есть проблема с открытием файла.
Затем мы создаем цикл while.
Суть цикла while заключается в том, что пока в файле остаются строки, мы хотим просмотреть каждую из них. Таким образом, во время каждой итерации строки мы можем увеличивать значение переменной numLines. Таким образом, мы можем отслеживать все линии. Когда C++ читает содержимое файла, он не читает все как единое целое. Он читает файл построчно, пока не дойдет до последней строки. На самом деле функция eof(), которую мы используем в этом коде, означает конец файла. Мы создаем цикл while, который выполняется до тех пор, пока читатель не достигнет конца файла, а затем останавливается. Таким образом, мы знаем, что с помощью этого счетчика мы посчитали все строки до конца файла.
Когда C++ достигает конца файла, цикл while завершается; таким образом, программа больше не читает строки.
Затем мы закрываем объект чтения, так как чтение файла завершено.
Таким образом, это эффективный и простой способ подсчета количества строк в файле на C++.
Я хотел написать программу, которая будет подсчитывать количество строк в текстовом файле. И я попытался изменить пример, чтобы сделать это. Вот что я написал:
Не работает. Он подсчитывает количество символов.
У меня вопрос, как программа понимает, когда доходит до конца строки? Есть EOF для конца файла, есть ли что-то подобное для конца строки?
Заранее спасибо за ответы.
Архитектура хорошего класса не похожа на швейцарский армейский нож; он должен быть больше похож на хорошо сбалансированный метательный нож.
– Майк МакШаффри
fgets() считывает файл по одной строке за раз, поэтому просто создайте цикл, который подсчитывает, сколько раз fgets() возвращает что-то отличное от указателя NULL.
Разве это не должно быть:

ahluka: Я не могу найти то, о чем вы говорите, в eerrrr FAQ. не могли бы вы дать мне ссылку, не могли бы вы?
> Использование fgetc для управления циклом while не является хорошей практикой — прочтите FAQ.
Это feof(), а не fgetc.
Нет ничего плохого в опубликованной петле.
> if (ch = «\n») NumberOfLines++;
1. использовать == не =
2. используйте ‘\n’ для символа, «\n» — это строка из 1 символа.
Если вы танцуете босиком на разбитом стекле неопределенного поведения, вы должны ожидать случайного пореза.
Если сначала у вас не получится, попробуйте написать свой номер телефона на экзаменационном листе.
«Служение бедным и обездоленным есть служение Богу»
Дополнительный вопрос по подсчету строк
Я решил задачу с подсчетом строк.
У меня почти есть это, но я не понимаю, как я должен кодировать для чтения файла.
Я продолжаю получать
Они делают то же самое, за исключением того, что getc — это макрос, поэтому не используйте его для кода с побочными эффектами, например:
cout — это C++. Что вы имеете в виду, говоря, что вы продолжаете получать это?
Ищите и найдете. quaere et invenies.
«Простота не предшествует сложности, а следует за ней». — Алан Перлис
«Тестирование может доказать только наличие ошибок, а не их отсутствие.» — Эдсгер Дейкстра
«Единственная настоящая ошибка та, из которой мы ничему не учимся.» — Джон Пауэлл
Читайте также:
- Как быстро выключить компьютер
- Гитарная установка не видит гитару через звуковую карту
- Резервное копирование файлового хранилища
- Где хранятся плейлисты aimp
- Kingdom Come Delivery как взламывать замки на ps4
Посчитать количество строк в файле

В файле input.txt записана информация из нескольких текстовых строк. Вывести содержимое этого файла на экран, посчитать количество строк в файле.
Лучшие ответы ( 1 )
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:
Вывести содержимое файла на экран, посчитать количество строк в файле
Помогите решить задачу пожалуйста! Вотт мое решение, но оно выводит ошибку в 12 строке.
Посчитать количество символов в созданом файле, а также определить количество знаков препинания
Программа №1 Создать файл и записать в него 3 строки. Посчитать количество символов в созданом.
Посчитать количество слов в файле
Нужно у файле посчитать количество слов. Кажеться правильно сделал, но ответ не правильный. Где.
Посчитать количество чисел в файле
в текстовом файле через пробел написаны числа- вывести на экран количество этих чисел
134 / 132 / 51
Регистрация: 25.05.2013
Сообщений: 233

Сообщение было отмечено Памирыч как решение
Решение
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
/* ============================================================================ Name : c_file_row_count.c Author : UranFlex Version : 0.1 alpha Copyright : GNU GPL Description : В файле input.txt записана информация из нескольких текстовых строк. * Вывести содержимое этого файла на экран, посчитать количество строк в файле. * C, Ansi-style. ============================================================================ */ #include #include #define FNAME "input.txt" // имя исходного файла int main( void ) { // пробуем открыть файл для чтения FILE* in = fopen( FNAME, "r" ); // обрабатываем ошибку открытия файла if ( in == NULL ) { perror( "Ошибка при открытии исходного файла" ); return EXIT_FAILURE; } size_t counter = 0; // предполагаем, что строк ноль в файле - т.е. пустой int ch, pre = EOF; // текущий символ, последний считаный символ printf( "%s %s\n", "Содержимое файла", FNAME ); // в цикле считаем сколько переводов строки в файле и запоминаем это в переменную counter // а также выводим на экран каждый считаный символ. // если файл пустой, то тело цикла не выполнится ни разу, так как первый считанный символ будет как раз EOF // и в pre останется EOF while ( ( ch = fgetc( in ) ) != EOF ) { // в цикле проходим весь файл посимвольно pre = ch; // запоминаем последний считаный символ if ( ch == '\n' ) // если нашли перевод строки, ++counter; // то увеличиваем счетчик строк putchar( ch ); // выводим очередной символ на экран } // весь смысл переменной pre в том, чтобы запомнить какой символ мы считали перед тем как наткнулись на EOF в файле // или в pre будет EOF - если тело цикла ни разу не выполнилось, это будет при пустом файле // последняя строка файла может заканчиваться не \n, а строку посчитать надо - вот для этого и нужна переменная pre if ( pre == EOF ) // если файл пустой puts( "Файл пустой!" ); // выводим информацию об этом else if ( pre != '\n' ) { // если pre содержит в себе не перевод строки, и файл не пустой ++counter; // то увеличиваем счетчик строк puts( "" ); } puts( "" ); // выводим на экран информацию о количестве строк printf( "%s %s %d", "Строк в файле", FNAME, counter ); return EXIT_SUCCESS; }
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь
Посчитать количество предложений в файле
Посчитать количество предложений в файле. В чем ошибка не понимаю. #include <stdio.h> #include.
Посчитать количество комбинаций определенных букв в текстовом файле
Доброй ночи всем, с си знаком первый день, посему прошу сильно не пинать)) Дано: Посчитать.
Как посчитать количество строк?
Есть такая программка, справочная. 1) Нужно сделать так, чтобы количество строк определялось.
Или воспользуйтесь поиском по форуму:
количество строк в файле

==1669==ERROR: AddressSanitizer: stack-buffer-overflow on address 0x7ffc258336f1 at pc 0x7efec39004ed bp 0x7ffc25833540 sp 0x7ffc25832cc8
WRITE of size 2 at 0x7ffc258336f1 thread T0
#0 0x7efec39004ec (/lib/x86_64-linux-gnu/libasan.so.5+0x6e4ec)
#1 0x7efec3901a3f in __isoc99_vfscanf (/lib/x86_64-linux-gnu/libasan.so.5+0x6fa3f)
#2 0x7efec3901b4e in __interceptor___isoc99_fscanf (/lib/x86_64-linux-gnu/libasan.so.5+0x6fb4e)
#3 0x55f58987d3d6 in get_size /home/student/Desktop/KR_STRUCT.c:16
#4 0x55f58987d51a in main /home/student/Desktop/KR_STRUCT.c:34
#5 0x7efec36c70b2 in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x270b2)
#6 0x55f58987d20d in _start (/home/student/Desktop/a.out+0x120d)
Address 0x7ffc258336f1 is located in stack of thread T0 at offset 49 in frame
#0 0x55f58987d2d8 in get_size /home/student/Desktop/KR_STRUCT.c:7
This frame has 2 object(s):
[48, 49) ‘pr’ (line 10) [64, 65) ‘p’ (line 10)
HINT: this may be a false positive if your program uses some custom stack unwind mechanism, swapcontext or vfork
(longjmp and C++ exceptions *are* supported)
SUMMARY: AddressSanitizer: stack-buffer-overflow (/lib/x86_64-linux-gnu/libasan.so.5+0x6e4ec)
Shadow bytes around the buggy address:
0x100004afe680: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0x100004afe690: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0x100004afe6a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0x100004afe6b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0x100004afe6c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
=>0x100004afe6d0: 00 00 00 00 00 00 00 00 f1 f1 f1 f1 f1 f1[01]f2
0x100004afe6e0: 01 f3 f3 f3 00 00 00 00 00 00 00 00 00 00 00 00
0x100004afe6f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0x100004afe700: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0x100004afe710: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0x100004afe720: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Shadow byte legend (one shadow byte represents 8 application bytes):
Addressable: 00
Partially addressable: 01 02 03 04 05 06 07
Heap left redzone: fa
Freed heap region: fd
Stack left redzone: f1
Stack mid redzone: f2
Stack right redzone: f3
Stack after return: f5
Stack use after scope: f8
Global redzone: f9
Global init order: f6
Poisoned by user: f7
Container overflow: fc
Array cookie: ac
Intra object redzone: bb
ASan internal: fe
Left alloca redzone: ca
Right alloca redzone: cb
Shadow gap: cc
==1669==ABORTING
Узнать количество строк в текстовом файле
Но этот способ занимает много времени и забивает оперативную память, при загрузке текстовых файлов размером более 1 гигабайта, это не актуально.
Отслеживать
задан 19 авг 2018 в 7:08
35 1 1 серебряный знак 10 10 бронзовых знаков
Воспользуйтесь ReadLines или если хотите тратить прямо минимум ресурсов, то чтение с буфером, чтение больших файлов — с этим можно просто посчитать количество переносов строки в файле
19 авг 2018 в 9:14
int count = System.IO.File.ReadAllLines(path_base).Count(); используя System.Linq, но тут нужно учитывать, что для 32 битных систем максимум файл в 4Gb, лучше использовать вариант из ответа ниже
19 авг 2018 в 17:17
2 ответа 2
Сортировка: Сброс на вариант по умолчанию
Пример с буфером в 10 мегабайт.
var linesCount = 1; int nextLine = '\n'; using (var streamReader = new StreamReader( new BufferedStream( File.OpenRead(@"D:\temp\11.xml"), 10 * 1024 * 1024))) // буфер в 10 мегабайт < while(!streamReader.EndOfStream) < if (streamReader.Read() == nextLine) linesCount++; >> Console.WriteLine(linesCount);
Отслеживать
ответ дан 19 авг 2018 в 16:29
33k 2 2 золотых знака 31 31 серебряный знак 76 76 бронзовых знаков
вместо ‘\n’ лучше использовать Enviroment.NewLine
19 авг 2018 в 17:19
@B.Vandyshev Enviroment.NewLine — это строка, а не символ. Я не могу сравнивать при чтении строку и символ. К тому же в винде это \r\n , в линуксе \n , то есть \n присутствует в любом случае, не зависимо от того, с каким окончанием строк сохранен файл.
19 авг 2018 в 17:22
@tym32167, а в маке вроде \r ?
19 авг 2018 в 17:25
@Grundy про мак к сожалению не знаю
19 авг 2018 в 17:26
@Grundy ну и здорово, значит ответ править не придется 🙂
19 авг 2018 в 17:29
int count = 0; string line; TextReader reader = new StreamReader(path_base); while ((line = reader.ReadLine()) != null) < count++; >reader.Close();
Отслеживать
ответ дан 19 авг 2018 в 7:17
35 1 1 серебряный знак 10 10 бронзовых знаков
File.ReadLines(path).Count() — является эквивалентом вашего кода. Метод ReadLines не читает весь файл сразу, в отличие от ReadAllLines .
19 авг 2018 в 7:41
А если файл большой (гигабайты) и состоит из одной-единственной строки? Облом. Если нужно решение, работающее на любых входных данных, то нужно читать файл блоками и искать в них символы конца строки.