line count

Jan. 7th, 2004 05:40 pm
109: (Default)
[personal profile] 109

конечно, на любом нормальном языке я написал бы это минут за 15. но это как бы неспортивно, Шойхер бы не одобрил. поэтому за час мучений я таки сваял cmd-шник. вот, кому интересно:

@echo off
echo Calculating...
echo 0 > tmpfile
for %%i in (%1) do wc -l %%i >> tmpfile
set /a a = 0
for /f "Tokens=1" %%i in (tmpfile) do set /a a = a + %%i
del tmpfile
echo %a%

в %1, понятное дело, кладётся маска.
wc - из UnxUtils.

(no subject)

Date: 2004-01-07 03:24 pm (UTC)
From: [identity profile] msh.livejournal.com
А что он делает?

(no subject)

Date: 2004-01-07 03:32 pm (UTC)
From: [identity profile] evolver.livejournal.com
Полагаю, что комсомольский вариант "wc -l $1"

(no subject)

Date: 2004-01-07 03:39 pm (UTC)
From: [identity profile] msh.livejournal.com
В смысле, суммарное число строк?

Типа

wc -l $1 | awk '/([0-9]*) total/ { print $1; }'

(no subject)

Date: 2004-01-07 04:39 pm (UTC)
From: [identity profile] alexf.livejournal.com
Во первых, для вижуал студии есть удобный макрос на codeproject'е. Во вторых, если уж извращаться, то строки можно посчитать простым find'ом.

(no subject)

Date: 2004-01-07 05:15 pm (UTC)
From: [identity profile] evolver.livejournal.com
Эй, такими темпами ты сейчас перепишешь скрипт Мастера на шелле!

Предполагаю, что результат исходного скрипта был все равно для человека предназначен...

(no subject)

Date: 2004-01-07 08:12 pm (UTC)
From: [identity profile] 109.livejournal.com
скрипт с find-ом в студию.

(no subject)

Date: 2004-01-07 08:16 pm (UTC)
From: [identity profile] 109.livejournal.com
собственно, я же постинг озаглавил "line count".

он считает суммарное число строк в файлах, задаваемых маской. там ещё ключик /r должен быть, чтобы рекурсивно.

(no subject)

Date: 2004-01-07 08:17 pm (UTC)
From: [identity profile] 109.livejournal.com
авка в комплекте UnxUtils нету, так что - неспортивно :-)

(no subject)

Date: 2004-01-07 08:22 pm (UTC)
From: [identity profile] 109.livejournal.com
это ты сообразил, потому что заметил в моём скрипте выражение "wc -l %%i"? круто. снимаю шляпу.

(no subject)

Date: 2004-01-07 09:53 pm (UTC)
From: [identity profile] alexf.livejournal.com
Примерно так:

@echo Counting lines...
@echo @find /c /v "гуид для надёжности, лень генерить" %%1 > aaa.bat
@echo.>count.txt
@for %%x in (*.c*,*.h*) do @call aaa.bat %%x >> count.txt
@set /a a = 0
@for /f "tokens=3* delims= " %%i in (count.txt) do @set /a a = a + %%i
@del /q count.txt
@del /q aaa.bat
@echo %a%

Может есть ошибка какая, один раз только попробовал, лень проверять.

(no subject)

Date: 2004-01-08 12:25 am (UTC)
From: [identity profile] caseq.livejournal.com
Тебе просто клинически неповезло с wc. Все, которые я обнаружил в пределах досягаемости, сами показыват total, если видят на входе больше одного файла. А скрипты на cmd выглядят все-таки умопомрачительно блевотно, хотя, как я могу заметить, его изрядно успели раскормить..
Кстати, если уж бороться за идейную чистоту, то есть за неиспользование чужеродных тулзов, то, наверное, можно было посчитать кол-во строк одним только for -- так бы дело и без временных файлов обошлось :) Впрочем, без временных файлов и так можно было, в винюках, оказывается, тоже обратные кавычки уже изобрели. Да, чего только не узнаешь, help почитав..

(no subject)

Date: 2004-01-08 12:27 am (UTC)
From: [identity profile] caseq.livejournal.com
То же самое можно сделать командами grep или даже tail, Миша просто разучился уже ;)

(no subject)

Date: 2004-01-08 05:54 am (UTC)
From: [identity profile] 109.livejournal.com
блевотно, конечно. я и говорю - быстрее бы на нормальном языке написал.

а подсчёт количества строк одним только for - есть прямо в майкрософтовских примерах по поводу этого for. только это будет сэм-восэм лишних строк вместо одной.

а что за обратные кавычки?

(no subject)

Date: 2004-01-08 06:45 am (UTC)
From: [identity profile] caseq.livejournal.com
Только нормальный язык для данной конкретной задачи -- не C++, Java или MASM, а shell, awk или perl. А по поводу backquotes, имеется в виду юниксовая семантика, когда вместо команды в обратных кавычках подставляется результат ее исполнения. Ты мог бы обойтись без tmp-файлов так:

for /f "usebackq tokens=1" %j in (`"for %i in (%1) do wc -l %i"`) do set /a a=a+%j

(your number of percents may vary ;))

Вообще феерические уебки. Вместо того, чтобы встроить нормальные backquotes и arithmetic expansions в сам командный процессор, они устраиваяют коммунизм на уровне отдельно взятой команды. Да еще с совершенно невменяемым синтаксисом. А решение без wc у меня получилось только если не считать пустые строчки. Но тоже в одну строчку:


for /f "usebackq tokens=*" %j in (`"for %i in (*.h) do type %i"`) do @set /a a=a+1


(тормозит правда нещадно, видать, реализация кривая)

А вообще, хватит занимяться фигней. Ты точно проверил, твой wc не пишет total если ему сказать wc -l *, или, к примеру find . -type f | xargs wc -l? И еще, давно уже пора поставить себе cygwin и убить день на подробное изучение юниксовых тулзов. Поверь, тебе это потом очень много времени сэкономит.

(no subject)

Date: 2004-01-08 07:54 am (UTC)
From: [identity profile] 109.livejournal.com
во фразе "нормальный язык" неявно предполагалось ещё одно условие: что я его худо-бедно знаю. то есть - Delphi, C#, C++ или Java.

но даже если нет - Perl не подходит, его надо инсталлировать. shell - это что такое? у меня шелл - cmd, разве нет? a awk - это да, пошёл изучать. у тебя под рукой нету линка на грамотный туториал по авку?

но: это я только от нечего делать. ибо я хоть и разделяю точку зрения, что лучше день потерять, а потом за час долететь, но задачи, требующие скриптования, возникают у меня крайне редко (когда был предыдущий раз? полгода назад?). вот стану начальником, тогда другое дело :-)

(no subject)

Date: 2004-01-08 08:25 am (UTC)
From: [identity profile] alexf.livejournal.com
Если есть cmd, то наверное есть и vbs, а это впролне себе нормальный язык, который на уровне написания считалки строк можно освоить за очень малое время. :)

(no subject)

Date: 2004-01-08 08:29 am (UTC)
From: [identity profile] 109.livejournal.com
нафига, если я уже освоил... см. выше что. awk-то хоть понятно, зачем осваивать.

Navajo girls

Date: 2004-01-08 10:56 am (UTC)
From: [identity profile] ivan-gandhi.livejournal.com
Перл инсталлируется один раз, а помогает тысячу раз.

Re: Navajo girls

Date: 2004-01-08 11:12 am (UTC)
From: [identity profile] alexf.livejournal.com
С тех пор, как я обнаружил regexp в виндах - мне ни разу не помог. :)

Profile

109: (Default)
109

March 2019

S M T W T F S
     12
3456789
101112131415 16
17181920212223
24252627282930
31      

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags