Как посчитать количество строк в файле windows
Обновлено: 05.07.2024
Вы можете использовать цикл FOR/F, чтобы назначить вывод переменной.
Я использую cmd-variable , поэтому не обязательно скрывать трубку или другие символы в cmd-строке, так как замедленное расширение передает строку "неизмененной" в FOR-Loop.
Ответ 2
Существует гораздо более простой способ, чем все эти другие методы.
Если ваше устройство Android подключено к вашему ПК, и на вашем пути есть Android SDK, это напечатает количество приложений, установленных на вашем устройстве.
Ответ 3
Попробуйте. Он работает на моей консоли.
Редакция:
$уменьшает число на 1, потому что он принимает первую строку как имя поля и затем подсчитывает количество строк.
Ответ 4
Он устраняет дополнительный FindStr и не нуждается в расширении.
- отредактирован для использования предложения ChrisJJ redirect. Удаление команды TYPE делает ее в три раза быстрее.
Ответ 5
@Tony: вы даже можете избавиться от команды type %file% .
Для длинных файлов это должно быть еще быстрее.
Ответ 6
Я обычно использую нечто большее for /f %%a in (%_file%) do (set /a Lines+=1)
Ответ 7
в пакетном файле, используйте %% A вместо% A
Ответ 8
Вам не нужно использовать find.
Это выполняет итерацию всех строк в файле и увеличивает переменную счетчика на 1 для каждой строки.
Ответ 9
Я нашел, что это решение лучше всего подходит для создания файла журнала, который поддерживает себя:
Включены переменные среды:% clientname% имя_компьютера удаленного клиента% Дата% - текущая дата и% Время% текущего времени.: NEXT вызывается после получения количества строк в файле. Если количество строк в файле больше, чем% maxlines%, оно переходит в: EXITLOOP, где он перезаписывает файл, создавая новый с первой строкой информации. если он меньше переменной% maxlines%, он просто добавляет строку к текущему файлу.
Ответ 10
Ответ 11
Ответ 12
В приведенном ниже коде имя переменной SalaryCount и TaxCount
Теперь, если вам нужно вывести эти значения в файл csv, вы можете использовать приведенный ниже код.
> перезапишет существующее содержимое файла, а >> добавит новые данные в существующие данные. CSV будет сгенерирован в D:\CSVOutputPath
Ответ 13
Вы можете передать вывод type в find внутри предложения in(…) цикла for/f :
Но труба запускает подоболочку, что замедляет работу.
Но этот подход даст вам ответ на 1 меньше фактического количества строк, если файл заканчивается одной или несколькими пустыми строками, как подделка поздним foxidrive при подсчете строк в файле.
И снова вы всегда можете попробовать:
Проблема в том, что вывод команды выше выглядит следующим образом:
Вы можете разбить строку на двоеточие, чтобы получить счет, но может быть больше одного двоеточия, если у файла есть полный путь.
Вот почему я беру на себя эту проблему:
Это всегда будет хранить счетчик в переменной.
Только одна последняя маленькая проблема. find обрабатывает нулевые символы как символы новой строки. Поэтому, если в ваш текстовый файл закрадываются нулевые значения, или если вы хотите подсчитать строки в файле Unicode, этот ответ не для вас.
Ответ 14
Подпрограмма :countLines ниже принимает два параметра: имя переменной; и имя файла. Количество строк в файле подсчитывается, результат сохраняется в переменной, и результат возвращается к основной программе.
Код имеет следующие функции:
- Читает файлы с окончанием строки Windows или Unix.
- Обрабатывает Unicode, а также текстовые файлы ANSI/ASCII.
- Копы с чрезвычайно длинными линиями.
- Не испуган нулевым символом.
- Вызывает ошибку при чтении пустого файла.
- Считается за пределы максимального предела пакета (31^2)-1 .
Я знаю, что это выглядит отвратительно, но он охватывает большинство краевых дел и на удивление быстро.
Ответ 15
Один приятный сюрприз для того, у кого git bash на его окнах: просто старый Linux wc -l <filename> будет работать для вас там
Ответ 16
Вы также можете пометить подстановочным знаком *, чтобы облегчить подсчет групповых файлов.
Здесь хотелось бы заметить, что проблема с кодировками будет при написании скрипта, на любом из родных для системы языков - cmd, vbscript, jscript.
Можно только сожалеть об отсутствии и решить эту проблему одним из следующих способов:
1. установить один из пакетов, содержащих достаточный набор команд, чтобы быть также уверенным как в командной строке unix, например, UnixUtils, Cygwin, GnuWin32
Иногда это не возможен из-за политик компаний, запрещающих самостоятельно устанавливать дополнительное ПО.
2. использовать PowerShell
Хотя все идет к тому, что PowerShell будет предустановлен на всех Windows, однако еще много систем на которых его нет. А установить нельзя.
3. написать собственный скрипт
Это уже выход, если 1 и 2 противопоказаны. Хотя есть свои недостатки (например упомянутая проблема - кодировки).
Я решил попробовать (частично или полностью) эмулировать работу некоторых важных команд обработки текстовых файлов средствами самой командной строки. Just for fun!
.
1. Количество строк в файле
Оказывается почти точно определить количество строк в файле очень просто:
И вот пример. Данная команда выводит немного дополнительной информации
Сказав "почти точно", я имел в виду, то что иногда результаты отличаются от видимого. Но этим грешат многие команды. Например, wc -l отбрасывает последнюю строку, если она не заканчивается переводом строки. В случае с find /c /v "" наблюдается расхождение с действительностью, если в конце файла несколько (более 2) пустых строк. По-видимому разные программы работают по разному - одни считают количество строк, другие количество переводов строк. И вследствие этого они могут различаться. Поэтому я рекомендую использовать следующее решение.
Команда выведет только размер файла в строках. И это самый точный способ узнать количество строк в файле.
Коли я упомянул в самом начале PowerShell, приведу примеры реализации с его помощью (я не знаток его синтаксиса и тонкостей, поэтому привожу некоторые, известные мне реализации, возможно не самые удачные, но полностью рабочие). Прелесть этих решений еще в том, что это однострочные команды (вики на англ):
.
2. Прочитать n последних строк в файле. Эмуляция команды tail
Оказывается, это очень простая задача:
1. узнать N - количество строк в файле;
2. вывести n строк, пропустив N-n:
.
Код на PowerShell:
.
3. Вывод нескольких начальных строк файла. Эмуляция команды head
Этот эмулятор я написал первым, хотя он не самый простой в реализации. Возможно, существуют варианты лучше, но, к сожалению, я их не нашел и, поэтому, я использовал "хак" с временным файлом. Суть его в том, что вначале создается временный файл, который содержит n-ое количество следующих строк:
то есть все номера требуемых строк.
Затем читается искомый файл, при этом каждая строка нумеруется, а команда поиска ищет только те строки номера которых соответствуют номерам из заданного временного файла.
.
И на последок, традиционно, код на PowerShell:
.
Послесловие
Здесь я привел только заготовки, но уже рабочие заготовки, которые частично решают проблему отсутствия полезных команд. Для полноценной эмуляции можно предусмотреть работу не только с заданным файлом или группой файлов, но и с консолью, и реализовать конвейерную обработку. Также можно было бы добавить проверку установки PowerShell в системе и, если он есть, выполнять его команды.
хеад и тайл в одном флаконе
smaharbA, как во флаконе дело обстоит с пустыми строками в файле?
- Rumata
- Разработчик
- Неактивен
smaharbA
alexii
Коллеги. Во флаконе только head. Там нет tail.
есть там тайл - смотрите внимательно
alexii - не знаю, должно быть вроде как нормально, поправьте
smaharbA, я имел в виду, что разбор «for /f» пропускает пустые строки.
- Rumata
- Разработчик
- Неактивен
Согласен. Но это не совсем то. В отличие от tail, more +N пропускает N строк из потока. И результат совершенно не предсказуем для потока в конвейере.
- Rumata
- Разработчик
- Неактивен
разбор «for /f» пропускает пустые строки
Но вот посмотрите на этот пример:
- greg zakharov
- Разработчик
- Неактивен
Код на PowerShell:
echo (get-content -path %windir%.
Слишком сложно, не находите?
А если нужно передать команду PoSh, то будет примерно так:
- blackfox.blacktail
- Участник
- Неактивен
- Рейтинг : [ 0 | 0 ]
Добрый день.
Использовал пример для подсчета количества строк в файле:
13 Ответ от smaharbA 2013-09-01 10:37:46
чем не устраивает ?
14 Ответ от blackfox.blacktail 2013-09-03 10:22:45
- blackfox.blacktail
- Участник
- Неактивен
- Рейтинг : [ 0 | 0 ]
2smaharbA
Если есть пустая строка, с символом SUB, её тоже считает.
Проще избавиться от этого символа, что я и сделал.
(При использовании copy, нужно поставить ключ /B)
15 Ответ от greg zakharov 2013-09-03 15:52:47
- greg zakharov
- Разработчик
- Неактивен
EQU
Если есть пустая строка, с символом SUB, её тоже считает.
На оном спотыкается и Ruby (версия старая, до установки последней дело никак не доходит).
16 Ответ от smaharbA 2013-09-03 17:27:15
17 Ответ от greg zakharov 2013-10-13 10:27:59 (изменено: greg zakharov, 2013-10-13 10:28:42)
- greg zakharov
- Разработчик
- Неактивен
Возможно, существуют варианты лучше, но, к сожалению, я их не нашел и, поэтому, я использовал "хак" с временным файлом.
head без временных файлов.
Может быть, но сколько бы не пробовал на выходе одинаковый результат. Может у меня на Win2k3 find специфический?
18 Ответ от Мальчик-гей 2013-10-17 09:04:37
- Мальчик-гей
- Участник
- Неактивен
Может быть, но сколько бы не пробовал на выходе одинаковый результат.
Коллега smaharbA прав:
19 Ответ от greg zakharov 2013-10-17 11:51:48
- greg zakharov
- Разработчик
- Неактивен
Смысл то один и тот же - количество строк в файле. А отбрасывать из вывода имя файла - дело вкуса. Так что это скорее "не равноценно", нежели "не эквивалентно". Или Вы русский язык как-то на свой лад интерпретируете?
20 Ответ от Rumata 2013-10-17 13:17:45
- Rumata
- Разработчик
- Неактивен
greg zakharov
В данном случае smaharbA прав. Результат обеих команд одинаковый, но вывод - разный. Это как в JavaScript
21 Ответ от Мальчик-гей 2013-10-21 13:38:14
- Мальчик-гей
- Участник
- Неактивен
Так что это скорее "не равноценно", нежели "не эквивалентно". Или Вы русский язык как-то на свой лад интерпретируете?
Дорогой коллега! Я понимаю эквивалентность вполне академически, как отношение, обладающее свойствами рефлексивности, симметричности и транзитивности. И в этом смысле на одном и том же классе объектов могут быть заданы различные отношения эквивалентности, так что объекты эквивалентные в одном отношении не будут эквивалентны в другом. Вспомните хотя бы конгруэнтность и подобие геометрических фигур. В рамках же этой темы требовалась более сильная эквивалентность, с совпадением формата вывода результатов, так как всё началось с
Команда выведет только размер файла в строках.
чему smaharbA и предложил эквивалентную именно в этом отношении замену.
По поводу "равноценно" и "эквивалентно" советую заглянуть в словарь, а ещё лучше, попробовать самому догадаться как же слово "эквивалентно" переводится на русский.
22 Ответ от greg zakharov 2013-10-21 15:07:13 (изменено: greg zakharov, 2013-10-21 16:40:40)
- greg zakharov
- Разработчик
- Неактивен
. советую заглянуть в словарь, а ещё лучше, попробовать самому догадаться как же слово "эквивалентно" переводится на русский.
Простите, у Вас филологическое образование? Или Вы страдаете дислексией, что не вполне можете разуметь написанное? Тем паче, что
Я понимаю эквивалентность вполне академически, как отношение, обладающее свойствами рефлексивности, симметричности и транзитивности.
Вы сами дали понять, что всякую иную интерпретацию слова "эквивалентность" Вы просто-напросто игнорируете, что сужает Ваш кругозор до ортодаксального математического видения проблемы, вкупе с дезинтеграцией русского языка как такового, из чего следует заключить, что спор с Вами представляется трюизмом, а точнее софистикой, - ни одного аргумента с Вашей стороны не последовало.
undefined == null // true
undefined === null // false
Не приплетайте сюда, пожалуйста, javascript. null и undefined - это два тривиальных типа данных, каждый из которых определяет только одно значение. Однако, заявлять об их эквивалентности, как-то однако. Считается, что у значение null - объектный тип. При всем этом значение null уникально и отличается от любых других. Если переменная равна null, значит в ней не содержится допустимого объекта (массива, числа, строки и т.д.) undefined же возвращается же либо при обращении к переменной, которй никогда не присваивалось значение, либо к свойству объекта которого не существует. При этом null и undefined не эквивалентны друг другу, несмотря на то, что оператор эквивалентности считает их равными, - это написано в любой книге по javascript. Это можно также утверждать и потому, что в отличии от null значение undefined не является зарезервированным словом. Если будет время, почитайте на досуге, например, Дэвида Флэнегана, если точно помню и не делайте скоропалительных выводов.
Резюмирую, несмотря на общую схожесть многих языков, абсолютизировать понятие эквивалентности не стоит, - если не каждый, то некоторые из языков вкладывают собственное понятие в "эквивалентность", причем будь то естественный язык или язык программирования. То, что выдает в командном языке одинаковый результат, но лишь с некоторым "мусором", знаете ли еще не повод утверждать что заяц - это волк и вообще не млекопитающее, а аргументы г-на Мальчик-гей не убедительны, ибо таким образом можно доказать все что угодно, в том числе что и Ленин был грибом.
В текстовом файле посчитать количество строк, а также для каждой отдельной строки определить количество в ней символов и слов.
Подсчет строк:
Ввести счетчик, присвоить ему 0.
Пока не будет достигнут конец файла, считывать очередную строку файла и увеличивать счетчик на 1.
Подсчет символов в строке:
Измерять длину очередной строки с помощью встроенный в язык программирования функции.
Подсчет слов в строке:
- Ввести счетчик слов и присвоить ему 0.
- Ввести флаговую переменную и присвоить ей 0 (сигнал нахождения вне слова).
- Пока не будет достигнут конец строки:
- Если очередной символ не пробел и флаг указывает на нахождение вне слова, то увеличить счетчик слов и присвоить флаговой переменной 1 (сигнал нахождения внутри слова).
- Если же очередной символ пробел, то присвоить флагу 0.
Pascal
Файл выполнен в среде GNU/Linux, компилятор FreePascal. Русские символы считаются за 2 символа. Например, в данном примере во второй строке 9 кириллических символа, пробел и восклицательный знак: 18 + 2 = 20 символов.Язык Си
посчитать количество строк в файле си
Тот же "эффект", что и в Паскале: кириллический символ считается за 2.Функция fgets() считывает строку вместе с символом перехода на новую строку. Аргумент N не позволяет считать больше указанного количества символов, но длина строки определяется по количеству считанных (т.е. фактической длиной строки).
Python
python количество строк в файле
Символ перехода на новую строку учитывается.КуМир
Здесь считается общее количество слов и символов.
Basic-256
Переход на новую строку учитывается как символ.var
f: text;
s: string;
line, chr, wrd: word;
i: byte;
flag: boolean;
begin
assign(f,'text.txt');
reset(f);
line := 0;
while not EOF(f) do begin
readln(f,s);
write(s, ' - ');chr := length(s);
write(chr, ' симв., ');wrd := 0;
flag := false;
for i:=1 to chr do
if (s[i] ' ') and (flag = false) then begin
wrd := wrd + 1;
flag := true;
end
else
if s[i] = ' ' then flag := false;
writeln(wrd, ' сл.');
end;
close(f);
writeln(line,' стр.');
end.Hello world! - 12 симв., 2 сл.
Привет мир! - 20 симв., 2 сл.
One, two, three - 15 симв., 3 сл.
Один, два, три - 24 симв., 3 сл.
4 стр.
Файл выполнен в среде GNU/Linux, компилятор FreePascal. Русские символы считаются за 2 символа. Например, в данном примере во второй строке 9 кириллических символа, пробел и восклицательный знак: 18 + 2 = 20 символов.посчитать количество строк в файле си
word = 0;
flag = 0;
for (i=0; ipython количество строк в файле
f = open('text.txt')
line = 0
for i in f:
line += 1flag = 0
word = 0
for j in i:
if j != ' ' and flag == 0:
word += 1
flag = 1
elif j == ' ':
flag = 0Hello world!
13 симв. 2 сл.
Привет мир!
12 симв. 2 сл.
One, two, three
16 симв. 3 сл.
Один, два, три
15 симв. 3 сл.
4 стр.Символ перехода на новую строку учитывается.
использовать Файлы П
алг
нач
цел f, line, word, char, in, i
лит s
line := 0
word := 0
char := 0
f := открыть на чтение ("текст.txt")
нц пока не конец файла (f)
Фввод f, s
line := line + 1
вывод s, нс
char := char + длин(s)
in := 0
нц для i от 1 до длин(s)
если s[i] " " и in = 0 то
word := word + 1
in := 1
иначе
если s[i] = " " то in := 0 все
все
кц
кц
закрыть(f)
вывод нс, "строк - ", line, нс
вывод "слов - ", word, нс
вывод "символов - ", char
конВы можете использовать цикл FOR/F, чтобы назначить вывод переменной.
Я использую cmd-variable , поэтому нет необходимости экранировать канал или другие символы в cmd-строке, так как отложенное расширение передает строку «без изменений» в цикл FOR.
Существует гораздо более простой способ, чем все эти другие методы.
Если ваше Android-устройство подключено к вашему ПК, и у вас есть Android SDK на вашем пути, это напечатает количество приложений, установленных на вашем устройстве.
Попытайся. Это работает в моей консоли.
Редакция:
$ уменьшает число на 1, поскольку принимает первую строку в качестве имени поля, а затем считает количество строк.
Это устраняет дополнительный FindStr и не нуждается в расширении.
- отредактировано для использования предложения перенаправления ChrisJJ. Удаление команды TYPE ускоряет ее в три раза.
Я обычно использую что-то более подобное for /f %%a in (%_file%) do (set /a Lines+=1)
@ Тони: Вы даже можете избавиться от команды type %file% .
Для длинных файлов это должно быть еще быстрее.
Вам не нужно использовать поиск.
Это повторяет все строки в файле и увеличивает переменную счетчика на 1 для каждой строки.
в пакетном файле используйте %% A вместо% A
Я нашел, что это решение лучше всего работает для создания файла журнала, который поддерживает себя:
Включены переменные среды:% clientname%, имя компьютера удаленного клиента% Date% - текущая дата, а% Time% - текущее время. : NEXT вызывается после получения количества строк в файле. Если число строк файла больше, чем переменная% maxlines%, он переходит к: EXITLOOP, где он перезаписывает файл, создавая новую строку с первой строкой информации. если она меньше переменной% maxlines%, она просто добавляет строку в текущий файл.
Но труба запускает подоболочку, которая замедляет ход событий.
Но этот подход даст вам ответ, на 1 меньше, чем фактическое количество строк, если файл заканчивается одной или несколькими пустыми строками, как это было выявлено в конце foxidrive in счетными строками в файле .
И опять же, вы всегда можете попробовать:
Проблема в том, что вывод приведенной выше команды выглядит так:
Вы можете разделить строку на двоеточие, чтобы получить счетчик, но может быть несколько двоеточий, если в имени файла указан полный путь.
Вот мой взгляд на эту проблему:
Это всегда будет хранить количество в переменной.
Еще одна маленькая проблема . find обрабатывает нулевые символы как символы новой строки. Так что, если в ваш текстовый файл проникли скрытые нули или вы хотите посчитать строки в файле Unicode, этот ответ не для вас.
В приведенном ниже коде имя переменной: SalaryCount и TaxCount
Теперь, если вам нужно вывести эти значения в CSV-файл, вы можете использовать приведенный ниже код.
> перезапишет существующее содержимое файла, а >> добавит новые данные к существующим данным. CSV будет сгенерирован в D:\CSVOutputPath
Подпрограмма :countLines ниже принимает два параметра: имя переменной; и имя файла. Подсчитывается количество строк в файле, результат сохраняется в переменной, а результат передается обратно в основную программу.
Код имеет следующие особенности:
- Читает файлы с окончаниями строк Windows или Unix.
- Обрабатывает Unicode, а также текстовые файлы ANSI/ASCII.
- Справляется с чрезвычайно длинными строками.
- Не беспокоит нулевой персонаж.
- Вызывает ошибку при чтении пустого файла.
- Считает, что предел Batch max int равен (31^2)-1 .
Я знаю, что это выглядит отвратительно, но оно охватывает большинство случаев Edge и удивительно быстро.
Читайте также: