Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / VBScript преобразование текстового файла, помогите / 9 сообщений из 9, страница 1 из 1
07.03.2007, 13:36
    #34377382
stepochka
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBScript преобразование текстового файла, помогите
Здрасте. Возникла задачка с помощью VBScript преобразовать файл вида:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
&Секция1
~поле1:значение
~поле2:значение
~поле3:значение
&Секция2
~поле1:значение
~поле2:значение
~поле3:значение
В файл вида:
Код: plaintext
1.
#Секция1:Поле1:значение#Секция1:Поле2:значение#Секция1:Поле3:значение#
#Секция2:Поле1:значение#Секция2:Поле2:значение#Секция2:Поле3:значение#
Полей ограниченное количество, секций может быть мильён
Из файла содежащего одну секцию, искомую строку я придумал как сделать, читаю построчно файл, при совпадении "ПолеN" присваиваю значение переменной. (Может и тут есть более простой способ)
А вот если Секций больше одной у меня не получается...

Подскажите кто чем может.
...
Рейтинг: 0 / 0
07.03.2007, 14:42
    #34377605
stepochka
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBScript преобразование текстового файла, помогите
Сейчас сделано вот так (одна секция - один фал):
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
Set objTextStream=objFSO.OpenTextFile("file.txt", ForReading, True, 0 )
bitFlag= 0 
Do While bitFlag= 0 
'1 стока
strLine=objTextStream.ReadLine
If Left(strLine, 1 )="&" Then
'начинаем формировать строчку
End If
' 2 строка
strLine=objTextStream.ReadLine
If Left(strLine,N)="Поле1: " Then
'присваиваем переменной значение поле1
End If
' 3 строка
strLine=objTextStream.ReadLine
If Left(strLine,N)="Поле2: " Then
'присваиваем переменной значение поле2
End If

....
' и тд
bitFlag= 1 
Loop 
' Собираю переменные в строку нужного вида, пишу её в выходной файл 
...
Рейтинг: 0 / 0
07.03.2007, 19:17
    #34378434
orunbek
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBScript преобразование текстового файла, помогите
stepochka
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
&Секция1
~поле1:значение
~поле2:значение
~поле3:значение
&Секция2
~поле1:значение
~поле2:значение
~поле3:значение

Данные в файле идут строго в указанном формате? т.е. например, обязательно поле идет строкой ~field?
скажем так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
&Section1
~Field1:Value
~Field2:Value
....
~FieldN:Value
&Section2
~Field1:Value
~Field2:Value
....
~FieldN:Value
...
&SectionN
~Field1:Value
~Field2:Value
....
~FieldN:Value
?
...
Рейтинг: 0 / 0
09.03.2007, 08:36
    #34379576
stepochka
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBScript преобразование текстового файла, помогите
Да, именно так ~ идентификатор поля & идентификатор секции
...
Рейтинг: 0 / 0
09.03.2007, 10:43
    #34379829
orunbek
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBScript преобразование текстового файла, помогите
Код написан "экспромтом", отлаживайте сами:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
Const ForReading =  1 
Const ForWriting =  2 

Const strSourceFile="C:\Temp\source.txt",strDestFile="C:\Temp\dest.txt"
Const strSectionStartString="&Section"
Const strSectionFieldString="~Field"

Dim objFSO,objSourceFile,objDestFile
Dim strLine,strCurrentSection,strFieldName,strFieldValue,blnNewSection,intPos

blnNewSection=False
strCurrentSection=""
Set objFSO=CreateObject("Scripting.FileSystemObject")
If objFSO.FileExists(strSourceFile)
	Set objSourceFile=objFSO.OpenTextFile(strSourceFile,ForReading)
	Set objOutputFile=objFSO.OpenTextFile(strDestFile,ForWriting,True)
	Do While Not objSourceFile.AtEndOfStream
		strLine=objSourceFile.ReadLine
		If strLine<>strCurrentSection Then blnNewSection=True
		If Left(strLine,Len(strSectionStartString))=strSectionStartString Then
			strCurrentSection=strLine
		ElseIf Left(strLine,Len(strSectionFieldString))=strSectionFieldString Then
			If blnNewSection Then
				blnNewSection=False
				intPos=InStr( 1 ,strLine,":")
				strFieldName=Mid(strLine, 2 ,intPos- 1 )
				strFieldValue=Mid(strLine,intPos+ 1 )
				objOutputFile.Write("#" & Right(strCurrentSection,Len(strCurrentSection)- 1 ) & ":" & strFieldName & ":" & strFieldValue)
			Else
				objOutputFile.WriteLine("#" & Right(strCurrentSection,Len(strCurrentSection)- 1 ) & ":" & strFieldName & ":" & strFieldValue)
			End If
		End If
	Loop
	objSourceFile.Close
	objDestFile.Close
	Set objSourceFile=Nothing
	Set objDestFile=Nothing
End If
Set objFSO=Nothing

P.S. Вы же сами говорили подскажите ;)
...
Рейтинг: 0 / 0
09.03.2007, 13:25
    #34380351
stepochka
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBScript преобразование текстового файла, помогите
Огромное спасибо за подсказку, пока у меня всё получается
...
Рейтинг: 0 / 0
09.03.2007, 13:34
    #34380385
orunbek
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBScript преобразование текстового файла, помогите
Без исправлений заработало?
...
Рейтинг: 0 / 0
09.03.2007, 14:18
    #34380550
stepochka
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBScript преобразование текстового файла, помогите
Нет, без исправлений не работало.
Но тут главное что до меня дошло как можно делать =)
...
Рейтинг: 0 / 0
09.03.2007, 14:23
    #34380568
orunbek
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBScript преобразование текстового файла, помогите
stepochkaНет, без исправлений не работало.
Но тут главное что до меня дошло как можно делать =)
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / VBScript преобразование текстового файла, помогите / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]