Total Commander Forum Index Total Commander
Форум поддержки пользователей Total Commander
Сайты: Все о Total Commander | Totalcmd.net | Ghisler.com | RU.TCKB
 
 RulesRules   SearchSearch   FAQFAQ   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Посчет числа строк в исходниках

 
Post new topic   Reply to topic    Total Commander Forum Index -> Автоматизация Total Commander printer-friendly view
View previous topic :: View next topic  
Author Message
prog_san



Joined: 29 Sep 2007
Posts: 282
Location: Пенза

Post (Separately) Posted: Tue Mar 03, 2009 21:20    Post subject: Посчет числа строк в исходниках Reply with quote

Доброго времени суток!
Поставлена задача - подсчитать число строк во всех исходниках огромного проекта. Подскажите способрешения задачи.
На выходе должен получить либо файл с "деревом" каталогов сорцов и количеством строк для каждой папки, либо еще какой-нибудь вариант.
Вообще кто-нибудь сталктвался с подсчетом строк в большом количестве исходных файлов? На форуме посмотрел -подходящего wdx плагина не нашел. Наверное придется писать wcx плагин для решения задачи.
Хочется узнать, может быть существуют уже готовые решения этой проблемы..
Back to top
View user's profile Send private message
Tol!k



Joined: 01 Apr 2008
Posts: 1727
Location: Арзамас

Post (Separately) Posted: Tue Mar 03, 2009 22:01    Post subject: Reply with quote

http://www.anycount.com/
Quote:
Free 30-day Trial
Back to top
View user's profile Send private message
prog_san



Joined: 29 Sep 2007
Posts: 282
Location: Пенза

Post (Separately) Posted: Tue Mar 03, 2009 23:12    Post subject: Reply with quote

ok. Как вижу решений для TotalCommander готовом виде не имеется. Sad
Back to top
View user's profile Send private message
prog_san



Joined: 29 Sep 2007
Posts: 282
Location: Пенза

Post (Separately) Posted: Wed Mar 04, 2009 02:32    Post subject: Reply with quote

Нашел отличное дополнение к VS. Line Counter By Jon Rista http://www.codeproject.com/KB/macros/LineCounterAddin.aspx
Космическая вещь.
А к TotalCommander напишу wdx плагин для просмотра статистики по конкретному файлу Smile
Back to top
View user's profile Send private message
Batya



Joined: 15 Dec 2004
Posts: 2218
Location: Москва, Россия

Post (Separately) Posted: Wed Mar 04, 2009 17:26    Post subject: Reply with quote

prog_san
Используем Script Content Plugin:
Code:
Dim FSO
Set FSO = CreateObject("Scripting.FileSystemObject")
Const ForReading = 1
content = Result
Set FSO = Nothing

Function Result
  If FSO.FileExists(filename) Then
    Result = LinesInFile(filename)
  ElseIf FSO.FolderExists(filename) Then
    Result = LinesInFolder(filename)
  End If
End Function

Function LinesInFile(byVal pFile)
  Dim OTF
  On Error Resume Next
  Set OTF = FSO.OpenTextFile(pFile, ForReading, False)
  If Err.Number = 0 Then
    OTF.ReadAll
    LinesInFile = OTF.Line - 1
    OTF.Close
  Else
    LinesInFile = 0
  End If
  On Error GoTo 0
  Set OTF = Nothing
End Function

Function LinesInFolder(byVal pFolder)
  Dim l, lf, lff
  l = 0
  On Error Resume Next
  Set lff = FSO.GetFolder(pFolder)
  If Err.Number = 0 Then
    For Each lf In lff.Files
      l = l + LinesInFile(lf)
    Next
    For Each lf In lff.SubFolders
      l = l + LinesInFolder(lf)
    Next
    LinesInFolder = l
  Else
    LinesInFolder = 0
  End If
  Set lff = Nothing
End Function

Скорость не самая высокая, но работает Smile
_________________
Нет, я не сплю. Я просто медленно моргаю.


Last edited by Batya on Thu Mar 05, 2009 14:58; edited 2 times in total
Back to top
View user's profile Send private message
Volniy



Joined: 15 Dec 2004
Posts: 585
Location: Местный

Post (Separately) Posted: Wed Mar 04, 2009 19:41    Post subject: Reply with quote

Batya wrote:
Скорость не самая высокая

Попробуй вот так:
Code:
Function LinesInFile(pFile)
  Dim OTF
  On Error Resume Next
  Set OTF = FSO.OpenTextFile(pFile, ForReading, False)
  If Err.Number = 0 Then
    OTF.ReadAll
    LinesInFile = OTF.Line
    OTF.Close
  Else
    LinesInFile = 0
  End If
End Function
Должно по идее заработать повеселей.
Back to top
View user's profile Send private message
Batya



Joined: 15 Dec 2004
Posts: 2218
Location: Москва, Россия

Post (Separately) Posted: Wed Mar 04, 2009 21:12    Post subject: Reply with quote

Volniy wrote:
OTF.ReadAll

Я как раз боялся, что это сильно нагрузит память при больших файлах.
Ты считаешь, что это действительно лучше?
_________________
Нет, я не сплю. Я просто медленно моргаю.
Back to top
View user's profile Send private message
Volniy



Joined: 15 Dec 2004
Posts: 585
Location: Местный

Post (Separately) Posted: Thu Mar 05, 2009 02:27    Post subject: Reply with quote

Обычно - да. Времена компьютеров с памятью в 4 МБ ушли в прошлое. Кроме того в каждый конкретный момент времени считанным в память является только один файл (кстати я не сохраняю содержимое файла в переменную). А если говорить об исходниках, то врядли кто-то станет работать с гигантскими файлами листингов, проект обычно разбивается на некоторое количество более мелких файлов.

А вообще нужно просто взять и попробовать, от теоретизирования тут мало толку.
Back to top
View user's profile Send private message
prog_san



Joined: 29 Sep 2007
Posts: 282
Location: Пенза

Post (Separately) Posted: Thu Mar 05, 2009 04:01    Post subject: Reply with quote

Написал wcx плагин.
http://mhtunpack.narod.ru/wcx_LineCount-0.2.zip

Работает шустро, правда пока только для C и С++ проектов (анализируются файлы .c, .cpp, .h)
Плагин работает только с папками - выбираешь папку проекта, создаешь архив типа "line"(плагин вешается на этот тип) и архивируешь. Если необходима подробная статистика по подпапкам проекта - выбираешь галочку "recursively pack subdirectories". На выходе текстовый файл со статистикой проекта:
Code:
Files   Total Lines   Code Lines   Comments   Empty Lines   Ration %   Name
    5        928           495        299        177        53        LineCount
Back to top
View user's profile Send private message
Batya



Joined: 15 Dec 2004
Posts: 2218
Location: Москва, Россия

Post (Separately) Posted: Thu Mar 05, 2009 14:57    Post subject: Reply with quote

Volniy
Volniy wrote:
А вообще нужно просто взять и попробовать

Хмм... И правда, значительно шустрее работает.
Скрипт выше поправил.
_________________
Нет, я не сплю. Я просто медленно моргаю.
Back to top
View user's profile Send private message
prog_san



Joined: 29 Sep 2007
Posts: 282
Location: Пенза

Post (Separately) Posted: Thu Mar 05, 2009 23:04    Post subject: Reply with quote

Batya
Спасибо, пробывал скрипт - понравилось.
Но плагин побыстрее считает.
Back to top
View user's profile Send private message
Volniy



Joined: 15 Dec 2004
Posts: 585
Location: Местный

Post (Separately) Posted: Fri Mar 06, 2009 10:17    Post subject: Reply with quote

Batya wrote:
Скрипт выше поправил.

А почему у тебя написано LinesInFile = OTF.Line - 1 . Почему ты решил одну строку в файле не брать в расчет?
Back to top
View user's profile Send private message
Batya



Joined: 15 Dec 2004
Posts: 2218
Location: Москва, Россия

Post (Separately) Posted: Fri Mar 06, 2009 14:05    Post subject: Reply with quote

Volniy wrote:
А почему у тебя написано LinesInFile = OTF.Line - 1 .

А после чтения всего потока свойство Line возвращает номер на один больше, чем последняя строка. По крайней мере у меня. Проверь.
_________________
Нет, я не сплю. Я просто медленно моргаю.
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    Total Commander Forum Index -> Автоматизация Total Commander All times are GMT + 4 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group