Как узнать количество строк в файле c
Короче сабж. Ничего стандартное по этому я не нашёл не в MFC C(Stdio)File, не в STL. Пришлось делать самому с перечётом всех строк:
#include "windows.h" #include #define NEWLINE "\n" DWORD GetFileLineCount(LPCTSTR lpszFile) < DWORD dwLines = 0; HANDLE hFile = ::CreateFile(lpszFile, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if(hFile != INVALID_HANDLE_VALUE) < DWORD dwSize = ::GetFileSize(hFile, NULL); if(dwSize > 0) < DWORD dwReaded; // dummy char *pszBuf = new char[dwSize + 1]; pszBuf[dwSize] = '\0'; // zero termination for strtok() if(::ReadFile(hFile, pszBuf, dwSize, &dwReaded, NULL)) < char *pch = strtok(pszBuf, NEWLINE); while(pch != NULL) < dwLines++; pch = strtok(NULL, NEWLINE); >> delete [] pszBuf; > ::CloseHandle(hFile); > return dwLines; >
Может есть варианты получше и не пользующие CRT. Я не против посмотреть
Кстати тема для RSDN Q&A (базовые сервисы->файлы. ) Там можно было и расписать лучшие варианты.
Re: Как узнать количество строк в текстовом файле?
| От: | Lexey |
| Дата: | 21.03.02 12:43 |
| Оценка: |
Здравствуйте Janis Baumanis, Вы писали:
JB>Может есть варианты получше и не пользующие CRT. Я не против посмотреть
Memory-mapped file + memchr. Искать лучше \r, а не \n, т.к. переводы строк разные бывают.
Мне писать влом.
JB>Кстати тема для RSDN Q&A (базовые сервисы->файлы. ) Там можно было и расписать лучшие варианты.
К базовым сервисам это, ИМХО, никаким боком не относится.
«Будь достоин победы» (c) 8th Wizard’s rule.
Re: Как узнать количество строк в текстовом файле?
| От: | Кодт |
| Дата: | 21.03.02 12:50 |
| Оценка: |
Здравствуйте Janis Baumanis, Вы писали:
JB>Короче сабж. Ничего стандартное по этому я не нашёл не в MFC C(Stdio)File, не в STL. Пришлось делать самому с перечётом всех строк:
char* scan = pszBuf; int count = 0; do < scan = strstr(scan, NEWLINE); count++; >while(scan);
Если файл большой, то имеет смысл читать его поблочно
// проверить на конец строки на стыке блоков (для Dos/Win) bool bCarryCR = false; const DWORD dwBlockSize = 1024; char* pszBuf = new char[dwBlockSize+1]; while(dwSize > 0) < DWORD dwRead = dwSize >dwBlockSize ? dwBlockSize : dwSize; ::ReadFile(hFile, pszBuf, dwRead, &dwRead, NULL); pszBuf[dwRead] = 0; if(bCarryCR && pszBuf[0] == '\n') count++; bCarryCR = false; // посчитать. if(dwSize // конец файла break; if(pszBuf[dwRead-1] == '\r') bCarryCR = true; dwSize -= dwRead; > delete[] pszBuf;
JB>Может есть варианты получше и не пользующие CRT. Я не против посмотреть
Файл-маппинг позволит избежать чтения в new char[dwSize+1]
(но потребуется следить за концом памяти)
JB>Кстати тема для RSDN Q&A (базовые сервисы->файлы. ) Там можно было и расписать лучшие варианты.
Соберете подборку, напишете — будет здорово.
Перекуём баги на фичи!
Re: Как узнать количество строк в текстовом файле?
| От: | Рек | |
| Дата: | 21.03.02 13:03 | |
| Оценка: | 5 (1) | |
Здравствуйте Janis Baumanis, Вы писали:
JB>Короче сабж. Ничего стандартное по этому я не нашёл не в MFC C(Stdio)File, не в STL. Пришлось делать самому с перечётом всех строк:
Re: Как узнать количество строк в текстовом файле?
| От: | Алекс | http://wise-orm.com |
| Дата: | 22.03.02 07:24 | |
| Оценка: |
Здравствуйте Janis Baumanis, Вы писали:
JB>Короче сабж. Ничего стандартное по этому я не нашёл не в MFC C(Stdio)File, не в STL. Пришлось делать самому с перечётом всех строк:
JB>
JB>#include "windows.h" JB>#include JB>#define NEWLINE "\n" JB>DWORD GetFileLineCount(LPCTSTR lpszFile) JB> < JB>DWORD dwLines = 0; JB> HANDLE hFile = ::CreateFile(lpszFile, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); JB> if(hFile != INVALID_HANDLE_VALUE) JB> < JB>DWORD dwSize = ::GetFileSize(hFile, NULL); JB> if(dwSize > 0) JB> < JB>DWORD dwReaded; // dummy JB> char *pszBuf = new char[dwSize + 1]; JB> pszBuf[dwSize] = '\0'; // zero termination for strtok() JB> if(::ReadFile(hFile, pszBuf, dwSize, &dwReaded, NULL)) JB> < JB>char *pch = strtok(pszBuf, NEWLINE); JB> while(pch != NULL) JB> < JB>dwLines++; JB> pch = strtok(NULL, NEWLINE); JB> > JB> > JB> delete [] pszBuf; JB> > JB> ::CloseHandle(hFile); JB> > JB> return dwLines; JB>> JB>
JB>Может есть варианты получше и не пользующие CRT. Я не против посмотреть
JB>Кстати тема для RSDN Q&A (базовые сервисы->файлы. ) Там можно было и расписать лучшие варианты.
Может проще так:
int i = 0; while (!f.eof())
Re[2]: Как узнать количество строк в текстовом файле?
| От: | Kaa | http://blog.meta.ua/users/kaa/ |
| Дата: | 22.03.02 16:32 | |
| Оценка: |
Здравствуйте Алекс, Вы писали:
А>Может проще так:
А>
А> int i = 0; А> while (!f.eof()) А> < А>f.getline(pbuf,1000); А> ++i; А> > А>
— теряем информацию о строках длиннее 1000 символов.
Проще — так
#include . int i = 0; std::string s; while ( !f.eof() )
Алексей Кирдин
Re: Как узнать количество строк в текстовом файле?
| От: | The Lex |
| Дата: | 23.03.02 13:55 |
| Оценка: |
Здравствуйте Janis Baumanis, Вы писали:
JB>Короче сабж. Ничего стандартное по этому я не нашёл не в MFC C(Stdio)File, не в STL.
ИМХО: посчитать в потоке количество символов перевода стоки. «Тормознутее», чем ежели бы читать большой кусок в память, а потом искать там? А разве ОС сама файл не буферизирует? А так получится очень даже «по-STL-ски» и очень даже «кроссплатформенно».
В общем я задачи «чтения и понимания» текстовых файлов решал и так и эдак — особых различий в скорости работы программ не замечал. В скорости разработки — это заметнее — бывает так проще, а бывает эдак.
Подсчет символов, строк и слов
Программа считает количество введенных пользователем символов, строк и слов. Чтобы программа корректно закончила работу и правильно посчитала, после набора строк надо перейти на новую строку, после чего нажать Ctrl + D (по крайней мере в терминале Linux).
#include int main() < char ch, flag=-1; unsigned c=0; // символы unsigned w=0; // слова unsigned n=0; // строки while ((ch = getchar()) != EOF) < if (ch == '\n') n++; else c++; if (ch == ' ' || ch == '\n') flag = -1; else if (flag == -1) < flag = 1; w++; >> printf("Символы: %u\n", c); printf(" Слова: %u\n", w); printf(" Строки: %u\n", n); >
one two three four Символы: 16 Слова: 4 Строки: 3
X Скрыть Наверх
Решение задач на языке C
Определить количество строк в файле
В текстовом файле определить количество всех строк и количество символов в каждой строке.
В текстовом файле определить количество всех строк и количество символов в каждой строке.
Определить количество строк в текстовом файле
Есть текстовый файл в котором что то написано, нужно посчитать количество строк используя язык VBS.
Определить количество строк в открытом файле
Здравствуйте, Форумчане. Напишите пожалуйста исходник. Мне нужно чтобы, 1. "программа открывала.
Определить количество символов, слов и строк в файле
Здравствуйте ребята, на практических столкнулась с проблемой, необходима ваша помощь) Есть некий.
Узнать количество строк в файле Linux
Довольно частенько нужно подсчитать количество файлов при выводе в консоли BASH. Хорошо если файлов 10 единиц. Как быть если их сотни и у каждого файла сложное имя. Тут идеально подойдёт команда wc. Её наилучше использовать вместе с фильтром. Например с командой grep команда wc хорошо сочетается. Возможно подсчитать количество слов в документе.
С помощью команды wc вы можете подсчитать количество строк, слов и символов в указанном файле. Если указано более одного файла в инструктивной строке, то программа wc осуществляет подсчет строк, слов и символов в каждом файле и потом выдает общее число. Вы можете с помощью ключей указать либо подсчет лишь строк, или только слов, или символов. Синтаксис команды:
Подсчет строк, слов и знаков с помощью wc
Система отвечает строкой в следующем формате: l w c файл
Читайте также: Шпаргалка по Linux для сисадмина
где l — число строчек в файле;
w — число слов в файле;
c — число символов в файле.
Чтобы подсчитать количество строк, слов и символов в нескольких файлах, используйте следующий формат:
Система говорит следующим образом:
l w c файл1
l w c файл2
l w c total
Число строк, слов и символов для файл1 и файл2 отражается на отдельных строках. На последней строке отображается общее число строк, слов и знаков в двух файлах.
Подсчет данных в документе
wc text.txt
вывод: 40 149 947 text.txt
В первоначальной колонке содержится количество строк, во второй кол-во слов, в третьей кол-во знаков
wc -l file.txt #вывести количество строк (ряд знаков, написанных или напечатанных в одну линию)
wc -c file.txt #вывести количество байт
wc -m file.txt #вывести число символов
wc -L file.txt #вывести длину самой длинной строки
wc -w file.txt #вывести число слов
Подсчёт данных в выводе командной строки Linux
ls -al | grep ‘.txt’ | wc -l
Читайте также: Релиз Red Hat Enterprise Linux 6
ls -al | grep ‘.txt’ | wc -w
Подсчет количества .txt-файлов в текущем каталоге с помощью wc:
При выводе в инструктивной строке очень часто попадают файлы с точками вместо имён .. или . .Тут необходимо отфильтровать вывод и только потом применять команду wc. Как подсчитать количество файлов в папки. Тут добавлена сортировка и удаление дублей. uniq — убирает дубли, перед unic обязана идти сортировка sort
Поиск количества файлов в директории Linux
ls | grep «name» | sort | uniq | wc -l
Подсчет уникальных строк и дубликатов в текстовом файле Linux
Буквально сегодня на работе столкнулся с довольно простой задачей, состоящей из двух подзадач: 1) нужно было подсчитать в текстовом файле количество уникальных строк 2) подсчитать в уже другом файле количество строчек, которые дублируются.
С этими задачами я справился и после этого подумал — по какой причине бы не написать небольшой пост, вдруг кому-нибудь пригодится. Подсчитаем в нём количество уникальных строчек с помощью следующей команды:
Читайте также: Файловая система в ОС Linux
$ sort data.txt | uniq -u | wc -l
Всё достаточно просто. Утилита uniq с функцией -u выводит на экран уникальные строки (u—unique, видимо так) и с помощью | результат перенаправляется в утилиту wc , какая просто считает количество строк, т.к. исполняется с опцией -l. В самом начале нам необходимо просортировать входной поток данных (текстовый файл), иначе утилита uniq не сможет правильно подсчитать уникальные строки. Выполняется сортировка с помощью sort и результат, используя |, перенаправляется в uniq. После исполнения такой команды для файла data.txt на экран будет выведено число 5.
Для этого чтобы решить вторую подзадачу, сделаем всё тоже самое, только uniq станет выполнен с опцией -d (видимо d—duplicate):
$ sort data.txt | uniq -d | wc -l
В результате на экран выведено количество 2. Обе подзадачи решены достаточно простым способом. Записал небольшую демонстрацию кому забавно.
Подсчитать количество строк в файле Linux
Нет ничего проще, чем подсчитать количество строчек в файле.
cat filename.txt | wc -l
Подсчитать общее количество строк в файлах (именованная область данных на носителе информации) по шаблону. Если же вам необходимо подсчитать количество строк нескольких файлов, можете использовать шаблон, например:
