:: Не фоксом единым
По VBScript
LED
Автор

Сообщений: 204
Дата регистрации: 22.07.2006
Всем привет!

Если кто хорошо знает VBScript Помогите решить

1 Как подсчитать количество строк в текстовом файле в VBScript.
В общем, как подсчитать количество строк не пробегаясь по всему файлу.
Файл очень большой и перебор строк занимает много времени.

2 Какой командой можно выводить сообщение сколько строк пройдено при считывании в текстовом файле. Как бы прототип выражения
wait window nowait
Пример:
wait ‘Строк ‘+alltrim(str(kolstr))+’ Считано - ‘+alltrim(str(i)) +’ строк’ window nowait

Как это возможно применить в VBScript при считывании строк в текстовом файле.
С помощью какого оператора, команды.

Заранее спасибо.



Исправлено 1 раз(а). Последнее : LED, 27.08.18 07:19
Ratings: 0 negative/0 positive
Re: По VBScript
Crispy

Сообщений: 18571
Дата регистрации: 16.05.2005
"Не пробегаясь" - загружая файл целиком. Хотя в памяти потом все равно "пробегаться" придется.
Т.е. что-то типа такого: www.cyberforum.ru

А почему именно VBScript?
В фоксе в принципе можно проделать все тоже довольно быстро.
И не только через FILETOSTR(), а и через старый добрый хитрый APPEND.
Т.е. скажем как-то так:
CREATE CURSOR tmp (f1 c(254))
APPEND FROM file.txt SDF
COUNT TO cntStrok
? cntStrok

Кстати, если хочется "видеть процесс", то при большом количестве строк это же как раз и будет вызывать основные тормоза. Или для чего такое надо?
Что же касается прямого аналога WAIT - простой аналогичной команды в VBS, сколько помнится нет, видимо только прописывать самому вывод переменной в создаваемое окошко.


------------------
В действительности все иначе, чем на самом деле.
                                      (Антуан де Сент-Экзюпери)
Ratings: 0 negative/0 positive
Re: По VBScript
LED
Автор

Сообщений: 204
Дата регистрации: 22.07.2006
Crispy спасибо.
Мне надо на VBScript
Файл большой. На перебор строк уходит много времени.
Есть ли в VBScript команды типа
COUNT TO

Я в ИНЕТе также делал поиск, но не нашел пока решения для этой задачи.
Можно ли решить этот вопрос с помощью API функций?
API функции можно вставлять в VBSсript.

Самое интересное что с помощью блокнота за несколько секунд можно встать на конец файла и если включена строка состояния легко узнать количество строк. Значит можно как бы написать такой фрагмент.



Исправлено 1 раз(а). Последнее : LED, 27.08.18 10:37
Ratings: 0 negative/0 positive
Re: По VBScript
Crispy

Сообщений: 18571
Дата регистрации: 16.05.2005
LED
Самое интересное что с помощью блокнота за несколько секунд можно встать на конец файла и если включена строка состояния легко узнать количество строк. Значит можно как бы написать такой фрагмент.

Это только снаружи просто.
Фактически же, при этом открывается файл. И далее, либо блоками, либо целиком (чаще всего) считывается в память.
Затем пробегаясь по нему в цикле и используя наращиваемую переменную, сохраняем ее, как число строк. В коде по ссылке для такого нужно использовать первый способ, сканируя считанный в память файл и проверяя наличие перевода строки в цикле с наращиванием переменной числа строк.
Обычно кстати в блокнотах она выводится в строке статуса. Т.е. не нужно даже делать что-то типа Ctrl+End - просто в настройках включить статус.
Иначе никак не "добыть" ее, кроме как сканируя так или иначе по строкам, поскольку сам формат текстового файла не предполагает хранения числа своих строк в самом себе.
Такое есть только в специфических форматах наподобие dbf.
Хотя возможно конечно и есть какие-то уже готовые API, упрощающие работу по подсчету строк. Попробуй пргуглить, может и найдется что.

Кстати по поводу кода фокса выше - там можно даже не использовать команду подсчета, а просто воспользоваться
системной переменной _TALLY - которая сразу же и даст число обработанных APPEND строк.


------------------
В действительности все иначе, чем на самом деле.
                                      (Антуан де Сент-Экзюпери)




Исправлено 3 раз(а). Последнее : Crispy, 27.08.18 11:13
Ratings: 0 negative/0 positive
Re: По VBScript
ВладимирС

Сообщений: 1693
Дата регистрации: 03.11.2005
LED
Самое интересное что с помощью блокнота за несколько секунд можно встать на конец файла и если включена строка состояния легко узнать количество строк. Значит можно как бы написать такой фрагмент.
Блокнот тоже загружает файл..
Если ты Блокнотом встал в конец файла, значит файл небольшой.
У меня файлы даже notepad-ом не загружаются. Говорит, что слишком большой.
Ratings: 0 negative/0 positive
Re: По VBScript
Crispy

Сообщений: 18571
Дата регистрации: 16.05.2005
ВладимирС
У меня файлы даже notepad-ом не загружаются. Говорит, что слишком большой.

Попробуй вместо него установить вот этот: akelpad.sourceforge.net Там есть разные виды установки - замена стандартного блокнота с ассоциациями или просто независимая установка, как приложение. Т.е. можно скажем на пробу вначале поставить независимым. Хотя я например им уже лет 15 пользуюсь без проблем вместо блокнота, на порядки удобнее. Вдобавок постоянно совершенствуется, есть куча плагинов в комплекте, которыми можно нарастить функционал, хотя и без того это уже и так серьезный текстовый процессор. Но при желании можно скажем добавить даже и проверку орфографии, подсветку синтаксиса, можно также писать на скриптовом языке (очень похож на VBS) и какие-то свои плагины.
Грузит же любые файлы почти мгновенно.
Просто у него другой способ подгрузки - не целиком, а поблочно. Аналогично сделан например и редактор в FAR. Что позволяет открывать огромные файлы. Поскольку фактически грузится не весь объем, а только нужный для просмотра-редактирования.
Нечто подобное было реализовано также например и в BROWSE в FPD, что позволяло визуально работать с большими таблицами в миллионы записей еще на древних машинах.


------------------
В действительности все иначе, чем на самом деле.
                                      (Антуан де Сент-Экзюпери)
Ratings: 0 negative/0 positive
Re: По VBScript
ВладимирС

Сообщений: 1693
Дата регистрации: 03.11.2005
Crispy
Попробуй вместо него установить вот этот: akelpad.sourceforge.net
Большое спасибо.
Но пока меня устраивает FAR и notepad.
notepad - тоже стал большие файлы грузить.
Но за ссылку СПАСИБО.
Как не будет загружаться - воспользуюсь.
Ratings: 0 negative/0 positive
Re: По VBScript
Crispy

Сообщений: 18571
Дата регистрации: 16.05.2005
ВладимирС
Как не будет загружаться - воспользуюсь.

Можно и раньше. Просто, в Акельпаде можно легким движением руки делать грандиозные работы с текстом.
С теми же html тоже полезен бывает.
Скажем, помечаешь в нем подгрузку плагина сортировки, и нажав Ctrl+Shift+A - выделенные строки мгновенно сортируются по возрастанию! Ну или с D - по убыванию (более строгая сортировка Ctrl+Shift+Alt+A/D). Для меня бывает очень полезным, чем грузить все в офис куда-то для такого.
Или встроенная функция замены регистра букв на большие/маленькие/первые буквы большие. Или вставить дату-время в настроенном формате по Ctrl+D.
Также поиск-замена по Ctrl+H позволяет вставлять в поиск-замену еще и символы esc-последовательности! Что дает возможность без всякого офиса искать и заменять куски скажем с символом перевода строки или табуляции. Вещь необычно полезная при работе с текстовыми файлами.
В общем это надо просто самому один раз увидеть.
Про автоопределение кодировки уж само собой. Можно также вручную в статус-строке переоткрывать или сохранять с большим числом кодировок.
Кстати если работаешь иногда в том числе с китайскими или подобными символами - просто ставишь шрифтом Arial Unicode.
Шрифт удобно масштабируется Ctrl+ +/-.
Окно запоминается. Запоминается также позиция курсора в тексте.
При установке в настройках может запоминаться даже раскладка! Что удобно, если скажем пишешь только по русски или наоборот по английски, открыл файл - а он стоит уже на русской раскладке, если русский текст, или английской если английской. При больших текстах ускоряется работа.
Закрывается по умолчанию - нажатием Esc. Что тоже привычнее обычно. Блокнот невозможностью этого всегда раздражает. Хочешь быстро открыть-закрыть несколько файлов подряд и елозишь мышкой, лишние телодвижения.
Короче - однозначно удобнее с ним работать с текстом, чем при стандартном блокноте.
А уж если пощупать плагины - это и вовсе может шокировать своими возможностями.
Чтобы ставилось сразу с ними - лучше скачать многоязыковой установщик.
Если же скачать только русский - там плагинов нет, надо отдельно качать пакет с ними и добавлять в папку.
Поэтому советую не откладывать в долгий ящик знакомство с Акельпадом, тем более сам установщик - всего-то 1.2 МБ!
Поистине гениальная программа. Вот это настоящее программирование! не то что у создателей современных многогигабайтных монстров, еле ворочающихся на самых крутых машинах.

Он кстати еще легко портируемый.
Достаточно поставить в настройках сохранять настройки в ini-файл, а не в реестр - и можно носить его хоть на флешке с теми же настройками.


------------------
В действительности все иначе, чем на самом деле.
                                      (Антуан де Сент-Экзюпери)




Исправлено 4 раз(а). Последнее : Crispy, 27.08.18 13:52
Ratings: 0 negative/0 positive
Re: По VBScript
LED
Автор

Сообщений: 204
Дата регистрации: 22.07.2006
Нет не нашел ничего подходящего.
Наверно только перебор строк.

Всем спасибо
Ratings: 0 negative/0 positive
Re: По VBScript
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
Интересно, а как ты себе представляешь процесс определения количества строк в файле без их "перебора"? Ну как минимум без поиска символов перевода строки в полностью считанном файле (не суть важно - за раз считанном, или "постепенно" по порциям читаемом)
А тормоза - ну так естественно если на каждую найденную строку чего-то в UI "вещать" будет жутко тормозить


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: По VBScript
avatrox

Сообщений: 1221
Дата регистрации: 30.12.2014
поэтому xml жопа
Ratings: 0 negative/0 positive
Re: По VBScript
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
При чём тут xml? Там вообще-то переводы строки равно как и отступы необязательны (ну исключая те что "значимые" внутри элементов данных, да и те заменяются иногда "сущностями"), как и в json...


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: По VBScript
avatrox

Сообщений: 1221
Дата регистрации: 30.12.2014
Разбор иксэмэля трудный. Затратно
Ratings: 0 negative/0 positive
Re: По VBScript
ВладимирС

Сообщений: 1693
Дата регистрации: 03.11.2005
avatrox
Разбор иксэмэля трудный. Затратно
Хм...
Кинь сюда твой файлик XML. Сархивируй предварительно. Возможно даже частями.
Ratings: 0 negative/0 positive
Re: По VBScript
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
avatrox
Разбор иксэмэля трудный. Затратно
В SAX режиме - не так уж трудно и совсем не затратно. Последовательное чтение и всё. "Произвольный доступ" конечно будет затратен - но xml и не задумывался для такого - типа открыть и найти 1 тег из 100500 в гигабайтном файле. Всё же XML в подавляющем числе случаев обрабатывается целиком.


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: По VBScript
piva

Сообщений: 18655
Откуда: Курган
Дата регистрации: 24.03.2004
В XMLDom ваще проще паренной репы


------------------
Часто бывает так, что есть над чем задуматься, а нечем.
Ratings: 0 negative/0 positive
Re: По VBScript
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
В DOM режиме большие XML-и не помещаются в память, а если и помещаются, то всё равно очень затратно. Для SAX размер файла не имеет вообще никакого значения. Правда там будет иметь значение то, куда направляется результат разбора Если опять же в структуры памяти, то будет беда. А если таким же потоком наружу, не "запоминая" практически ничего - в другой XML/HTML или в БД - то эффективность не сильно уступает специализированным бинарным файлам - при всех тех плюсах что имеет XML по сравнению с ними (прежде всего гибкость структуры).


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: По VBScript
of63

Сообщений: 25253
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
Вы такие помощники...
>В SAX режиме
> В XMLDom вообще проще паренной репы
Ratings: 0 negative/0 positive
Re: По VBScript
cool1

Сообщений: 316
Дата регистрации: 06.03.2016
aaa
Sub aaa()
Set fso = CreateObject("Scripting.FileSystemObject")
Set tmp = fso.OpenTextFile("c:\temp\t.txt")
tmp.ReadAll
msgbox(tmp.Line)
End Sub
Ratings: 0 negative/0 positive
Re: По VBScript
ВладимирС

Сообщений: 1693
Дата регистрации: 03.11.2005
cool1
aaa
Sub aaa()
Set fso = CreateObject("Scripting.FileSystemObject")
Set tmp = fso.OpenTextFile("c:\temp\t.txt")
tmp.ReadAll
msgbox(tmp.Line)
End Sub
Просто интересно, если t.txt - файл размером в 10Gb.
То сбоя не будет ?
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 8 (Гостей: 8)

© 2000-2024 Fox Club 
Яндекс.Метрика