Страница: 1 |
Страница: 1 |
Вопрос: Обработка текстового файла
Добавлено: 31.08.05 15:34
Автор вопроса: baltaero
Здравствуйте. Помогите (посоветуйте), если несложно. Есть файл .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)и сохранить все это в новом текстовом файле или .xls в таком виде
0 1 650.539185 908.076599 1042.858765 885.426575
0 2 25.550047 769.933655 824.773315 741.491150
1 2 25.682077 677.033936 431.188599 678.179810
В языках программирования не силен. Пожалуйста, пришлите код или ссылку где можно посмотреть. Принимаются любые виды помощи. Спасибо за внимание.
Ответы
Всего ответов: 9
Номер ответа: 1
Автор ответа:
AndreyMp
ICQ: 237822510
Вопросов: 28
Ответов: 1182
Профиль | | #1
Добавлено: 31.08.05 15:52
Что то мало понял. Ты имеешь ввиду что когда n0 меняется на n1 и т.д. или N0 на N1 и т.д.?
А сохранять надо эти номера (как я понял какие то точки) и их координаты ?
Номер ответа: 2
Автор ответа:
Barsik
Разработчик Offline Client
ICQ: 343368641
Вопросов: 17
Ответов: 686
Web-сайт:
Профиль | | #2
Добавлено: 31.08.05 16:00
берешь и ищешь, то, что те надо... после тянешь отаток строки
Номер ответа: 3
Автор ответа:
baltaero
Вопросов: 2
Ответов: 3
Профиль | | #3
Добавлено: 31.08.05 16:22
Дело в том, что n и N-это номера соседних кадров, которые м\д собой перекрываются, т.е имеют общие точки, xy XY-координаты общей точки этих снимков (например, одно и тоже дерево на разных снимках). Здесь: кадры 0 и 1, 0 и 2 -имеют две общ. точки, кадры 1 и 2 три. Мне же нужно вытащить координаты одной общей точки для каждой пары снимков в указанном выше виде. Как только меняется n0 на n1 или NO на N1 то сразу записать эту строчку в массив, т. е. как бы прорядить файл и представить в другом виде. Блин, извиняюся за корявое объяснение.
Номер ответа: 4
Автор ответа:
User Unknown
Вечный Юзер!
ICQ: uu@jabber.cz
Вопросов: 120
Ответов: 3302
Профиль | | #4
Добавлено: 31.08.05 17:00
Чисто из спортивного интереса... не VB.
shadow ~ $ awk '{if (substr($2,1,2)==("n1" || substr($2,1,2)==("n0" || substr($3,1,2)==("N1" || substr($3,1,2)==("N2") {print $0}}' data.txt | sed 's/x//;s/y//;s/X//;s/Y//;s/c//'
n0 N1 650.539185 908.076599 1042.858765 885.426575
n0 N1 640.701050 997.983887 1032.683716 973.944641
n0 N2 25.550047 769.933655 824.773315 741.491150
n0 N2 68.985519 909.538574 873.693054 877.454102
n1 N2 25.682077 677.033936 431.188599 678.179810
n1 N2 53.007000 256.720093 447.000824 257.937439
n1 N2 49.318905 319.883514 447.050781 320.188721
теперь осталось отсортировать в зависимости от даблов..
Номер ответа: 5
Автор ответа:
User Unknown
Вечный Юзер!
ICQ: uu@jabber.cz
Вопросов: 120
Ответов: 3302
Профиль | | #5
Добавлено: 31.08.05 18:35
Немного оптимизировал... теперь вроде правильно..
shadow ~ $ awk '{if (substr($1,1,1)=="c" {print $0}}' dd.txt | tr -d [:alpha:] | awk '! a[$1,$2]++'
0 1 650.539185 908.076599 1042.858765 885.426575
0 2 25.550047 769.933655 824.773315 741.491150
1 2 25.682077 677.033936 431.188599 678.179810
Номер ответа: 6
Автор ответа:
baltaero
Вопросов: 2
Ответов: 3
Профиль | | #6
Добавлено: 01.09.05 10:16
Интересно, а на VB это сложно написать? Потому что в этой абре-кадабре сложнее разобраться начинающим, чем в VB, наверное.
Номер ответа: 7
Автор ответа:
User Unknown
Вечный Юзер!
ICQ: uu@jabber.cz
Вопросов: 120
Ответов: 3302
Профиль | | #7
Добавлено: 01.09.05 11:21
Обязательно на VB?
вот здесь замена tr с помощью которй можно удалить все литеры из файла:
http://www.ss64.com/nt/change.zip
http://www.ss64.com/nt/munge.html
вот здесь winawk:
http://gnuwin32.sourceforge.net/packages/gawk.htm
Номер ответа: 8
Автор ответа:
baltaero
Вопросов: 2
Ответов: 3
Профиль | | #8
Добавлено: 01.09.05 18:30
Может кто подскажет, как из считываемой строки выделить значение n и N (4-ый и 7-ой символы) и сравнить со значениями в предыдущей строке?
Номер ответа: 9
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #9
Добавлено: 01.09.05 21:09
да это просто реализовывать, но долго отлаживать, вообщем недумаю что кому-то интерестно писать это, так что придётся самому. Почитай инфу по работе с фалами и работе со строками...
n = FreeFile
Open file$ for input as #n
Do while not eof (n) 'цикл для обработки каждой стр.
Line Input #n, s$ 'Взяли строку
CountLine = CountLine + 1 'Считаем строчки...
If CountLine = 5 Then
'тут парсиш строку
'почитай про:
'Replace, Mid, Left, Right, InStr
s$ = Replace (s$,"x",CountLine) '(от фонаря, для примера, x заменить на номер строки)
AllStr$ = AlStr$ & s$ & vbCrLf 'Дописали то что отпарсили к общей строке...
End if
Loop 'Перешли слейдую строке..
Close #n
Msgbox AllStr$
P.S. Всё написано отвинта, для понимания и для общей картины в какую сторону копать...