Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Вставка строк в конкретные строки (txt) (http://forum.oszone.net/showthread.php?t=208324)

alexey_vf 05-06-2011 23:27 1688993

Вставка строк в конкретные строки (txt)
 
Возможно кто-то сталивался, как оперативно добавлять строки в текстовый файл без полного перебора (парсинга) текстового файла.

Есть вот такой файл:
со строками: год месяц день час мин сек (пример: 11 5 19 10 58 44.0000000) и куча другой информации в файле (неважной для задачи данной).

читать дальше »

11 5 19 10 58 43.0000000 0 14G 3G 5G 7G 8G10G13G26G28R 2R 3R12R13
R21R22
23937611.227 128228888.227
21649722.758 116205952.527
20534695.633 110346446.625
20521656.344 110277934.398
21527845.234 115565479.777
23666730.875 126645453.188
23339340.133 124586989.199
11 5 19 10 58 44.0000000 0 14G 3G 5G 7G 8G10G13G26G28R 2R 3R12R13
R21R22
23937660.945 128229149.523
21649544.078 116205013.566
23323712.570 125002844.848
23666859.422 126646141.047
23338919.938 124584746.086
11 5 19 10 58 45.0000000 0 14G 3G 5G 7G 8G10G13G26G28R 2R 3R12R13
R21R22


Каким образом можно вставить 3-4 строки перед каждой строкой с датой-временем, чтобы результат выглядел к примеру так:

читать дальше »

2 MARKER NAME
MARKER NUMBER
-Unknown- -Unknown- ANT # / TYPE
0.0000 0.0000 0.0000 APPROX POSITION XYZ
2.0000 0.0000 0.0000 ANTENNA: DELTA H/E/N
SE TPS 00000000 COMMENT
*** THIS IS THE START OF A NEW SITE *** COMMENT
11 5 19 10 58 43.0000000 0 14G 3G 5G 7G 8G10G13G26G28R 2R 3R12R13
R21R22
23937611.227 128228888.227
21649722.758 116205952.527
23339340.133 124586989.199
2 MARKER NAME
MARKER NUMBER
-Unknown- -Unknown- ANT # / TYPE
0.0000 0.0000 0.0000 APPROX POSITION XYZ
2.0000 0.0000 0.0000 ANTENNA: DELTA H/E/N
SE TPS 00000000 COMMENT
*** THIS IS THE START OF A NEW SITE *** COMMENT
11 5 19 10 58 44.0000000 0 14G 3G 5G 7G 8G10G13G26G28R 2R 3R12R13
R21R22
23937660.945 128229149.523
23666859.422 126646141.047
23338919.938 124584746.086
3 MARKER NAME
MARKER NUMBER
-Unknown- -Unknown- ANT # / TYPE
0.0000 0.0000 0.0000 APPROX POSITION XYZ
2.0000 0.0000 0.0000 ANTENNA: DELTA H/E/N
SE TPS 00000000 COMMENT
*** THIS IS THE START OF A NEW SITE *** COMMENT
11 5 19 10 58 45.0000000 0 14G 3G 5G 7G 8G10G13G26G28R 2R 3R12R13
R21R22


Источник данных (ручные GPS-маркеры) для вставки выглядит так, проблем для его разбора нет (формат csv):

читать дальше »
INDEX,TAG,DATE,TIME,LATITUDE N/S,LONGITUDE E/W,HEIGHT,SPEED,HEADING,FIX MODE,VALID,PDOP,HDOP,VDOP,VOX
1,T,110519,095141,46.418703N,030.459649E,70,20,0,3D,SPS ,1.1,0.8,0.7,
2,T,110519,095142,46.418629N,030.459584E,74,12,0,3D,SPS ,1.4,1.2,0.8,

Для поиска нужен второй и третий столбик (токен). 2-й столбик: ГГММДД, 3-й стобик: ЧЧММСС.
ГГ -год, ММ-месяц, ДД-дата, ЧЧ - час (0-24), ММ-мин, СС -сек.

Интересно решение с помощью cmd(bat) или SED или SFK которое бы легко модифицировалось.

Заранее большое спасибо за подсказку.

amel27 06-06-2011 10:30 1689162

Цитата:

Цитата alexey_vf
Интересно решение с помощью cmd(bat) »

без перебора строк в любом случае не выйдет:
Код:

@echo off
set FILE=file.txt

setlocal EnableDelayedExpansion
(for /f "usebackq delims=" %%a in ("%FILE%") do (set "$a=%%a"
  for /f "Tokens=6" %%b in ("!$a!") do (set "$b=%%b"
    if "!$b:~-8!"==".0000000" (
      echo:2 MARKER NAME
      echo:MARKER NUMBER
      echo:-Unknown- -Unknown- ANT # / TYPE
      echo:0.0000 0.0000 0.0000 APPROX POSITION XYZ
      echo:2.0000 0.0000 0.0000 ANTENNA: DELTA H/E/N
      echo:SE TPS 00000000 COMMENT
      echo:*** THIS IS THE START OF A NEW SITE *** COMMENT
    ))
  echo:!$a!
))>"%~n0.tmp"
copy "%~n0.tmp" "%FILE%">nul&& del "%~n0.tmp"

P.S. в исходном тексте не должно быть символов "!"

alexey_vf 06-06-2011 14:58 1689315

Все проверил. Идея отличная, работает на ура.
Огромное спасибо!
С остальными переменными и подстановками разберусь сам.

Но к сожалению результат оказался проблемным поскольку конечный файл содержит не разделители а какие-то
фиксированные позиции (60,80) для вывода значений. А отвлекать народ сильно сложной задачей не хочется.

Возможно кто-то подскажет как понимать расшифровку формата (Описание формата )
Раздел: 11. RINEX VERSION 2.10 FORMAT DEFINITIONS AND EXAMPLES
Третий столбик: Format: F9.2,11X, A1,19X, - Что это означает, позиции табуляций (пробелов)? Это нужно чтобы распарсить (там не обыные token-ы) данный файл в примере.
читать дальше »
11 5 19 10 58 43.0000000 0 14G 3G 5G 7G 8G10G13G26G28R 2R 3R12R13
R21R22
23937611.227 128228888.227
21649722.758 116205952.527
20534695.633 110346446.625
20521656.344 110277934.398
21527845.234 115565479.777
23666730.875 126645453.188
23339340.133 124586989.199
11 5 19 10 58 44.0000000 0 14G 3G 5G 7G 8G10G13G26G28R 2R 3R12R13
R21R22
23937660.945 128229149.523
21649544.078 116205013.566
23323712.570 125002844.848
23666859.422 126646141.047
23338919.938 124584746.086
11 5 19 10 58 45.0000000 0 14G 3G 5G 7G 8G10G13G26G28R 2R 3R12R13
R21R22


Время: 00:57.

Время: 00:57.
© OSzone.net 2001-