Проблема с преобразованием строки массива в Vbscript

Языки ASM, Pascal, C/C++, Perl, Delphi, PHP, Java...
Программируем сами, помогаем друг другу...

Модераторы:Al_lexx, Sharp, ionika, Happy_MAN, 0xFF, Atom, Serega S.U.

Ответить
TillLinderman
Сообщения:919
Зарегистрирован:08 июн 2006, 20:11
Проблема с преобразованием строки массива в Vbscript

Сообщение TillLinderman » 22 авг 2008, 08:52

Всем привет! Прошу прощения за длинное сообщение но по другому не напишешь.
Имею большой текстовик несколько тысяч строк содержащий цифры в левой части каждой строки и текст в правой части каждой строки.
Проблема в том что в каждой строке нужно убрать пробелы в левой части у цифр не трогая ту часть строки где текст.
Решил реализовать это на VBScript так:
1.Код читает текстовик и собирает все строчки поэлементно в массив. Затем можно просмотреть каждую строку массива (т.е. моего текстовика)
Это у меня получилось (Код 1)
==============(Код 1)=================================
option Explicit
on Error Resume Next
dim arrTxtArray()
dim myfile
dim searchstring
dim objtextfile
dim strnextline
dim intsize
dim objfso
dim i
intSize = 0
myfile = "местонахождение моего файла"
searchstring = "буква или цифра для поиска"
const forreading = 1
set objfso = Createobject("scripting.filesystemobject")
set objtextfile = objfso.opentextfile(myfile, forreading)
do until objtextfile.atendofstream
strnextline = objtextfile.readline
if instr(strnextline, searchstring) then
redim preserve arrtxtarray(intsize)
arrtxtarray(intsize) = strnextline
intsize = intsize + 1
end if
loop
objtextfile.close
for i=lbound(arrtxtarray) to ubound(arrtxtarray)
wscript.echo arrtxtarray(i)
next
====================================================
2. Небольшая функция с использованием регулярных выражений находит в введенной в нее строке "str1" цифровую часть и убирает ненужные пробелы не трогая тектовую часть.
Это у меня тоже получилось (Код 2).
================(Код 2)================================
Function ReplaceTest(patrn, replStr)
Dim regEx, str1 ' Create variables.
str1 = именно сюда надо как то впихнуть элемент массива
Set regEx = New RegExp
regEx.Pattern = "\s\w"
regEx.IgnoreCase = True
regEx.Global = True
ReplaceTest = regEx.Replace(str1, replStr)
End Function
MsgBox(ReplaceTest(" ", ""))
====================================================
Только пункт второй у меня получается выполнить лишь для конкретной строки введеной в переменную "str1".
Вопрос 1:
Я не знаю как мне заставить мою функцию (Код 2) делать тоже самое не для конкретной строки, а для каждого элемента массива полученного с помощью (Код 1)?
Вопрос 2:
Если решится вопрос 1, то как тогда сохранить полученный результат целиком в другом текстовике?
Помогите запутался.
Может есть более простой способ реализации этого безобразия?

Аватара пользователя
0xFF
entity
Сообщения:5310
Зарегистрирован:22 июн 2006, 09:15
Контактная информация:

Сообщение 0xFF » 22 авг 2008, 09:51

Рекомендации:
1. Не пользовать VB или VB Script, если данные работы будут регулярно. Бейсик отвратно работает с большими строковыми массивами (есть почти экспоненциальная зависимость от длины строки)
2. Считывать проще целиком все содержимое файла. В scripting.filesystemobject есть методы.
3. Использовать функцию split для создания массива строк, указав ей в качестве параметра символ переноса строки (vbcrlf или vblfcr не помню ;))
4. Для удаления пробелов слева - использовать функцию ltrim. Результат присваивать той же строке.

Удачи.

зы я б на сях написал бы - быстрее...
Три пути ведут к знанию: путь размышления - это путь самый благородный, путь подражания - это путь самый легкий и путь опыта - это путь самый горький. - Конфуций

Ответить