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

Обсуждение вопросов автоматизации Total Commander с помощью сторонних программ и скриптовых технологий.

Модераторы: d-view, Моторокер, Avada, CaptainFlint, Nik

Ответить
BeardFury78
Сообщения: 213
Зарегистрирован: Чт авг 25, 2016 05:24

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

Сообщение BeardFury78 »

Приветствую всех. Ищу способ, как установить колонки в Total commander, которые бы отображали количество строк и среднее количество знаков в строках в текстовых файлов. Есть ли плагины, которые позволяют это сделать?
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

1. Не тот раздел.
2. Годный заголовок - "Вывод числа и средней длины строк".
3. Нет плагинов. Все кодировки не учесть.
4. Частично (для нек. кодировок) можно сделать на этом.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Аватара пользователя
Avada
Сообщения: 10541
Зарегистрирован: Пт авг 01, 2008 16:17
Откуда: Россия, Саратов

Сообщение Avada »

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

Сообщение BeardFury78 »

Спасибо за ответы. CDocProp - он вроде только для вордовских файлов, а хотелось бы с файлами с расширениями txt и с кодировкой UTF-8. А преобразовать txt файлы в вордовские - долгое занятие (вручну все переносить в Word и сохранять). Простая замена расширения не помогает. Насчет LineCount - судя по описанию чтобы получить информацию об числе строк, нужно совершить кучу телодвижений, а хотелось бы все же это увидеть через колонки в Тотале.
Пробую сейчас vbs-скрипт. Пока что выдает ошибку недопустимого знака в первом строке и первом символе, но весь код был скопирован правильно и параметры тоже. А поддерживает ли этот скрипт txt файлы?
4. Частично (для нек. кодировок) можно сделать на этом.
И как это сделать? К сожалению, я совершенно не разбираюсь в скриптописании.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

BeardFury78 писал(а):И как это сделать?
Скрипт писать. У меня, в принципе, есть ANSI-заготовка. UTF-8 то же число строк покажет. А вот число символов будет уже другим. Тут нужно вычислять кодировку. Кроме UTF-8 точно ничего не надо? Ни ANSI, ни UTF-16?
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
BeardFury78
Сообщения: 213
Зарегистрирован: Чт авг 25, 2016 05:24

Сообщение BeardFury78 »

Flasher
Только UTF-8
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение 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) проблем быть не должно.
Последний раз редактировалось Flasher Ср дек 14, 2016 02:51, всего редактировалось 7 раз.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
BeardFury78
Сообщения: 213
Зарегистрирован: Чт авг 25, 2016 05:24

Сообщение BeardFury78 »

Flasher
Скрипт успешно работает. Большое вам спасибо, очень выручили этим скриптом!
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

BeardFury78
Пож-та. Кое-что подправил в скрипте.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
BeardFury78
Сообщения: 213
Зарегистрирован: Чт авг 25, 2016 05:24

Сообщение BeardFury78 »

Flasher
Спасибо, заменил на отредактированный скрипт.
Ответить