Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > VB6 > Обработка текстового файла


Автор: baltaero 30.8.2005, 17:55
Здравствуйте. Посоветуйте с чего начать. Есть файл .txt такого вида:

c n0 N1 x650.539185 y908.076599 X1042.858765 Y885.426575
# Control Point No 36: 1.00000
c n0 N1 x640.701050 y997.983887 X1032.683716 Y973.944641
# Control Point No 38: 1.00000
c n0 N2 x25.550047 y769.933655 X824.773315 Y741.491150
# Control Point No 40: 1.00000
c n0 N2 x68.985519 y909.538574 X873.693054 Y877.454102
# Control Point No 78: 1.00000
c n1 N2 x25.682077 y677.033936 X431.188599 Y678.179810
# Control Point No 80: 1.00000
c n1 N2 x53.007000 y256.720093 X447.000824 Y257.937439
# Control Point No 82: 1.00000
c n1 N2 x49.318905 y319.883514 X447.050781 Y320.188721
# Control Point No 84: 1.00000

Мне нужно вытащить отсюда 1-ую, 5-ую, 9-ую строчки (строчки, где меняется n или N)и произвести матем. операции с цифрами и сохранить все это в новом текстовом файле. В языках программирования не силен, но хочется сделать самому. Насколько это сложно и с чего стоит начинать?

Автор: Akina 30.8.2005, 18:27
Цитата(baltaero @ 30.8.2005, 18:55)
Насколько это сложно

не очень

Цитата(baltaero @ 30.8.2005, 18:55)
с чего стоит начинать?

с чтения справки

Конкретно: алгоритм такой
  1. считываем очередную строку
  2. если комментарий - на шаг 1
  3. выделяем значение N
  4. сравниваем с предыдущим
  5. если равно - на шаг 1
  6. выделить данные и записать в массив
  7. запомнить новое N
  8. если не конец файла - на шаг 1
  9. выполнить мат. операции
  10. записАть в файл
  11. завершить работу

Автор: baltaero 31.8.2005, 10:25
Спасибо, попробую.

Автор: Alles 1.9.2005, 06:09
Да ... мне когдато тоже с этим помогли.
Сначала объявляем переменные:

Код

Dim File_Name As String' Имя файла который нужно обработать
Dim sFile, SText As String' переменные для обработки в цикле ( когда будем обрабатывать данные)
Dim sLines() As String' Сюда загоняем данные
Dim oFSO As New FileSystemObject

Да ...при этой обработке тебе необходимо подключить Microsoft Scripting Runtime (Это в References)
Код

File_Name="Полный путь и имя файла"
SText = oFSO.OpenTextFile(File_Name).ReadAll' Читаем данные из файла
sLines = Split(SText, Chr(10))' Тут в переменной разбиваем все по строкам ( как в файле) 
'Дальше идет цикл на обработку строк в переменной
For NN = 0 To 10000
SText = sLines(NN)' Загнали в переменную строку
MyPos = Len(SText)' Если нужно то посчитали количество символов в строке
If SText = " Тут обрабатываем данные , то что тебе нужно" Then
' Если условие выполненно тогда открываем другой файл на добавление данных и записываем туда все твои вычисления и возвращаемся в цикл
If SText = "" Then Exit For' Если переменная пустая выходим из обрабортки
Next NN


Это процедура будет добавлять все твои вычисления в твой файл
Код

Private Sub AddData()
Open ("Полный путь и имя файла для добавления твоих данных") For Append As #1
Print #1, "Переменная которая хранит обработанные данные" & Chr(13)' Плюс перевод строки 
Close #1

End Sub


Что будет непонятно , спрашивай .
Удачи !

Автор: Akina 1.9.2005, 08:06
Цитата(Alles @ 1.9.2005, 07:09)
при этой обработке тебе необходимо подключить Microsoft Scripting Runtime

Нафига?
Код

Open "MyFile.TXT" For Input As #1
While NOT EOF(1)
   Line Input #1, strTemp
   ' Выполнить действия
Wend
Close #1
К тому же если файл на многие меги - FSO надо-о-олго задумается вмместе со сплитом.


Добавлено @ 08:08
Цитата(Alles @ 1.9.2005, 07:09)
' Если условие выполненно тогда открываем другой файл на добавление данных и записываем туда все твои вычисления и возвращаемся в цикл

И на каждом витке цикла переоткрывать файл? Бред... открыть ДО и закрыть ПОСЛЕ.

Автор: baltaero 1.9.2005, 09:04
Спасибо за внимание, начну, пожалуй, с изучения литературы. Что будет непонятно, спрошу.

Автор: Alles 2.9.2005, 07:23
Ну, хорошо , шорошо ....загоним данные после обработки в массив , а потом запишем в файл.
а насчет FSO и Slit, ты напрасно так погорячился дорогой !!!
У меня как раз была ситуация когда при OPEN - Line Input . в переменную залетали куски непонятной длинны, а нужно было обрабатывать именно по строкам!
Посоветовали , тут же к стати, использовать FSO, РАБОТАЕТ !!! да и логи у мня не маленькие, порядка 2-2,5 мега.
И я бы не сказал , что программа сильно призадумывается при данной обратотке!

Автор: Akina 2.9.2005, 08:16
Цитата(Alles @ 2.9.2005, 08:23)
ыла ситуация когда при OPEN - Line Input . в переменную залетали куски непонятной длинны, а нужно было обрабатывать именно по строкам!

Либо у тебя была строка постоянной длины, либо в ней были служебные байты. Чудес не бывает...

Цитата(Alles @ 2.9.2005, 08:23)
логи у мня не маленькие, порядка 2-2,5 мега.

гы... малёк ты еще... smile у меня логи по 5-20 гигабайт...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)