Как посчитать количество строк в файле 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.

Подсчет символов в строке:
Измерять длину очередной строки с помощью встроенный в язык программирования функции.

Подсчет слов в строке:

  1. Ввести счетчик слов и присвоить ему 0.
  2. Ввести флаговую переменную и присвоить ей 0 (сигнал нахождения вне слова).
  3. Пока не будет достигнут конец строки:
    1. Если очередной символ не пробел и флаг указывает на нахождение вне слова, то увеличить счетчик слов и присвоить флаговой переменной 1 (сигнал нахождения внутри слова).
    2. Если же очередной символ пробел, то присвоить флагу 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; i

    python количество строк в файле

    f = open('text.txt')
    line = 0
    for i in f:
    line += 1

    flag = 0
    word = 0
    for j in i:
    if j != ' ' and flag == 0:
    word += 1
    flag = 1
    elif j == ' ':
    flag = 0

    Hello 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 и удивительно быстро.

    Читайте также: