powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / VBScript преобразование текстового файла, помогите
9 сообщений из 9, страница 1 из 1
VBScript преобразование текстового файла, помогите
    #34377382
stepochka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здрасте. Возникла задачка с помощью 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
VBScript преобразование текстового файла, помогите
    #34377605
stepochka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сейчас сделано вот так (одна секция - один фал):
Код: 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
VBScript преобразование текстового файла, помогите
    #34378434
Фотография orunbek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
VBScript преобразование текстового файла, помогите
    #34379576
stepochka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, именно так ~ идентификатор поля & идентификатор секции
...
Рейтинг: 0 / 0
VBScript преобразование текстового файла, помогите
    #34379829
Фотография orunbek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код написан "экспромтом", отлаживайте сами:
Код: 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
VBScript преобразование текстового файла, помогите
    #34380351
stepochka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Огромное спасибо за подсказку, пока у меня всё получается
...
Рейтинг: 0 / 0
VBScript преобразование текстового файла, помогите
    #34380385
Фотография orunbek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Без исправлений заработало?
...
Рейтинг: 0 / 0
VBScript преобразование текстового файла, помогите
    #34380550
stepochka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нет, без исправлений не работало.
Но тут главное что до меня дошло как можно делать =)
...
Рейтинг: 0 / 0
VBScript преобразование текстового файла, помогите
    #34380568
Фотография orunbek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stepochkaНет, без исправлений не работало.
Но тут главное что до меня дошло как можно делать =)
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / VBScript преобразование текстового файла, помогите
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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