Страница 1 из 1

Вывод числа и средней длины строк в текстовых файлах

Добавлено: Сб дек 03, 2016 10:46
BeardFury78
Приветствую всех. Ищу способ, как установить колонки в Total commander, которые бы отображали количество строк и среднее количество знаков в строках в текстовых файлов. Есть ли плагины, которые позволяют это сделать?

Добавлено: Сб дек 03, 2016 13:24
Flasher
1. Не тот раздел.
2. Годный заголовок - "Вывод числа и средней длины строк".
3. Нет плагинов. Все кодировки не учесть.
4. Частично (для нек. кодировок) можно сделать на этом.

Добавлено: Сб дек 03, 2016 13:39
Avada
BeardFury78
К вышесказанному добавляю:
Заголовок действительно неважный. Исправлено.
В общем виде задача практически не решается. Частные случаи с подсчётом числа строк (но не средней длины) для конкретных видов документов на форуме рассматривались: CDocProp (см. также здесь), LineCount (к тому же плагин архиваторный, это не колонки). В "Автоматизации" — здесь.
Пока что переношу в подфорум по автоматизации отдельной темой.

Добавлено: Сб дек 03, 2016 14:09
BeardFury78
Спасибо за ответы. CDocProp - он вроде только для вордовских файлов, а хотелось бы с файлами с расширениями txt и с кодировкой UTF-8. А преобразовать txt файлы в вордовские - долгое занятие (вручну все переносить в Word и сохранять). Простая замена расширения не помогает. Насчет LineCount - судя по описанию чтобы получить информацию об числе строк, нужно совершить кучу телодвижений, а хотелось бы все же это увидеть через колонки в Тотале.
Пробую сейчас vbs-скрипт. Пока что выдает ошибку недопустимого знака в первом строке и первом символе, но весь код был скопирован правильно и параметры тоже. А поддерживает ли этот скрипт txt файлы?
4. Частично (для нек. кодировок) можно сделать на этом.
И как это сделать? К сожалению, я совершенно не разбираюсь в скриптописании.

Добавлено: Сб дек 03, 2016 14:36
Flasher
BeardFury78 писал(а):И как это сделать?
Скрипт писать. У меня, в принципе, есть ANSI-заготовка. UTF-8 то же число строк покажет. А вот число символов будет уже другим. Тут нужно вычислять кодировку. Кроме UTF-8 точно ничего не надо? Ни ANSI, ни UTF-16?

Добавлено: Сб дек 03, 2016 14:38
BeardFury78
Flasher
Только UTF-8

Добавлено: Сб дек 03, 2016 15:12
Flasher
|MeanCount дописать в конец ключа ActiveScripts файла options.ini и добавить секцию
[MeanCount]
Script=MeanCount.vbs
content=Число строк
content1=Средняя длина строк
FoldersPaths=0
extensions=txt
|text|lst|ini|etc
Список красным составляем самостоятельно.

В папку Scripts кинуть:
[cut="MeanCount.vbs"]

Код: Выделить всё

Content = 0 : Content1 = 0
Set FSO = CreateObject("Scripting.FileSystemObject")
Size = FSO.GetFile(FileName).Size
If Size > 0 Then
  Content1 = 1
  With FSO.OpenTextFile(FileName)
    .Skip Size : Content = .Line : .Close
  End With
  With CreateObject("ADODB.Stream")
    .Type = 2 : .Open : .CharSet = "UTF-8"
    .LoadFromFile FileName : All = .ReadText : .Close
  End With : Set Reg = New Regexp
  If Content > 1 Then
    Reg.Global = True : Reg.Pattern = "(\r?\n){2,}"
    All = Reg.Replace(Reg.Replace(All, vbNewLine), "")
    Reg.Pattern = "^\r?\n|\r?\n$"
    All = Reg.Replace(All, "") : Reg.Pattern = "\r?\n"
    Content1 = Round(Len(Reg.Replace(All, ""))/(Reg.Execute(All).Count + 1), 0)
  Else Content1 = Len(All)
  End If
End If : Set FSO = Nothing
[/cut]Перезапустить ТС, выбрать поля для колонок.
Число строк всегда верное. Средняя длина неверной будет для UTF-16, со всеми остальными (OEM, ANSI, ASCII, UTF-8, KOI8-R(U), MAC) проблем быть не должно.

Добавлено: Сб дек 03, 2016 15:23
BeardFury78
Flasher
Скрипт успешно работает. Большое вам спасибо, очень выручили этим скриптом!

Добавлено: Сб дек 03, 2016 16:20
Flasher
BeardFury78
Пож-та. Кое-что подправил в скрипте.

Добавлено: Сб дек 03, 2016 19:07
BeardFury78
Flasher
Спасибо, заменил на отредактированный скрипт.