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

(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-то хоть понятно, зачем осваивать.

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