Форум программистов, компьютерный форум, киберфорум
Наши страницы
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
antony89
0 / 0 / 0
Регистрация: 25.04.2014
Сообщений: 18
1

Построчное чтение файла и разбор каждой 6-ой строки для получения и использования определённых данных

05.02.2016, 19:09. Просмотров 2088. Ответов 6
Метки нет (Все метки)

Добрый вечер! Необходимо прочитать текстовый файл в котором каждая 6-я строка начинается с TR01, в этой строке данные разделены точкой с запятой, необходимо выделить в этой(6-ой строке) определенные данные в переменные(или токены). Т.е. например, есть 6-я строка(нужные значения выделены красным цветом):
ID01;21;3290;409804;20001024;БЕЛОВСКИМ РОВД КЕМЕРОВСКОЙ ОБЛ.;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
NA01;ГУЛКИНА;СЕРГЕЕВНА;СВЕТЛАНА;;19790618;ГОР.БЕЛОВО КЕМЕРОВСКОЙ ОБЛ.;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
AD01;1;652660;RU;;;;П.Г.Т. ГРАМОТЕИНО;;ЛЕНИНА;8;;;;;;;;;;;;;;;;;;;;;;;;;;
AD02;2;652660;RU;;;;П.Г.Т. ГРАМОТЕИНО;;ЛЕНИНА;8;;;;;;;;;;;;;;;;;;;;;;;;;;
PN01;80909090090909;4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
TR01;179898989898;42.04/098;16;1;20160202;19000102;0;20160202;20160202;4000;0;0;0;7;0;RUB;;20160216;20160202;20160216;7;;;0;N;;;;N;;;;;;;730
Необходимо:
(чтобы было понятнее, буду называть каждое разделение с помощью точки с запятой - столбцом)

1. создать папку с названием взятым из 3 столбца(т.е. после первых двух точек с запятой, значение выделено красным). Название можно обрезать до первых пяти символов т.к. в названии папки нельзя использовать "/"
2. В этой папке создать файл с названием взятым из 8-ого столбца и тут провести сравнение, если значение в 11 столбце равняется 4000, то записать все предыдущие 5 строк и эту 6 строку в этот созданный файл.

Т.е. должна создаться папка 42.04 в ней файл 0.csv в котором будет записаны все 6 строк.

Пару лет назад мне уже помогли с похожей задачей таким образом:
Windows Batch file
1
@for /f "usebackq delims=" %%i in ("InputTemplate.csv") do @for /f "tokens=16,19 delims=;" %%j in ("%%i") do @if "%%j" equ "5000" echo %%i>>"%%k.csv"
но теперь изменился исходный файл.

Хотя бы подскажите как записать предыдущие 5 строчек и текущую 6-ю в файл?

Заранее благодарен за помощь

П.С. Конец файла заканчивается текстом "TRLR"
0
Вложения
Тип файла: zip Пример исходных данных.zip (575 байт, 14 просмотров)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.02.2016, 19:09
Ответы с готовыми решениями:

Построчное чтение из файла. Разделение каждой строки на ФИО, ID и статус
public void getDATA(int PIN)//получить даннные из базы { ...

Построчное чтение данных из файла
здравствуйте нужна помощь! поручили написать программу на питоне, которая будет считывать...

Построчное чтение данных из файла
Есть фаил: selulhmb 83 86 77 82 glrdos 54 48 3 35 canryx 15 59 5 26 cdqqri 45 0 66 37 bxdsj 49...

Построчное чтение из файла до нужной строки
Доброго времени суток. И снова война с текстовым файлом. Суть куска программы: построчное чтение...

Построчное чтение и обработка данных из файла.
Здравствуйте, я новичок в программировании и мне нужно решить следующую задачу, для решения которой...

6
ComSpec
3409 / 1953 / 628
Регистрация: 26.02.2014
Сообщений: 1,457
06.02.2016, 10:57 2
Лучший ответ Сообщение было отмечено ComSpec как решение

Решение

Код пакетного файла:

Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
@echo off
setlocal enabledelayedexpansion
 
set "file=Пример исходных данных.csv"
 
for /f %%i in ('copy/z "%~f0" nul') do set CRLF=%%i^
%
& for /f %%j in ('^<"%file%" find/c /v ""') do <"%file%" (
   for /l %%k in (1 1 %%j) do set x=& set/p x=& set y=!y!!CRLF!!x!& 2>nul set/a "i+=1,?/(i%%6)"|| (
    for /f "tokens=3,8,11 delims=;" %%l in ("!x!") do (
     for /f "delims=/" %%o in ("%%l") do 2>nul md "%%o"& >"%%o\%%m" (if "%%n" equ "4000" echo.!y:~2!)
     set "i="& set "y="
    )
   )
  )
 
endlocal
exit/b
.

Пакетный файл сохраните в кодировке OEM-866.
1
greg zakharov
06.02.2016, 17:04
  #3

Не по теме:

А если есть Cygwin или gawk, то вытащить из каждой шестой строки нужные данные можно примерно так:

Bash
1
gawk -F';' 'NR%6==0 {print $3 ";" $8 ";" $11}' myfile

0
antony89
0 / 0 / 0
Регистрация: 25.04.2014
Сообщений: 18
09.02.2016, 19:35  [ТС] 4
А если разделителем в исходном файле будет табуляция, а не точка с запятой, то нужно просто убрать delims=; или еще что-то нужно изменить?
0
alpap
09.02.2016, 20:28
  #5

Не по теме:

Цитата Сообщение от antony89 Посмотреть сообщение
будет табуляция
- хуже не придумаешь.

0
antony89
0 / 0 / 0
Регистрация: 25.04.2014
Сообщений: 18
10.02.2016, 12:03  [ТС] 6
Попробовал убрать, до 16 строки нормально отрабатывает, потом каждая 16 строка(вернее часть этой строки) переносится на новую.
0
ComSpec
3409 / 1953 / 628
Регистрация: 26.02.2014
Сообщений: 1,457
10.02.2016, 12:52 7
Лучший ответ Сообщение было отмечено ComSpec как решение

Решение

Цитата Сообщение от antony89 Посмотреть сообщение
... или еще что-то нужно изменить?


Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
@echo off
setlocal enabledelayedexpansion
 
set "file=Пример исходных данных.csv"
 
for /f "delims=" %%h in ('forfiles /p "%~dp0." /m "%~nx0" /c "cmd /c echo.0x09"') do set "TAB=%%h"
for /f %%i in ('copy/z "%~f0" nul') do set CRLF=%%i^
%
& for /f %%j in ('^<"%file%" find/c /v ""') do <"%file%" (
   for /l %%k in (1 1 %%j) do set x=& set/p x=& set y=!y!!CRLF!!x!& 2>nul set/a "i+=1,?/(i%%6)"|| (
    for /f "tokens=3,8,11 delims=%TAB%" %%l in ("!x!") do (
     for /f "delims=/" %%o in ("%%l") do 2>nul md "%%o"& >"%%o\%%m.csv" (if "%%n" equ "4000" echo.!y:~2!)
     set "i="& set "y="
    )
   )
  )
 
endlocal
exit/b
2
10.02.2016, 12:52
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.02.2016, 12:52

Построчное чтение файла со случайным выбором строки
Добрый день! Коллеги подскажите как реализовать средствами bat/cmd следующую задачу: есть некий...

Построчное чтение из файла до первой пустой строки
Нужно прочитать файл построчно. В файле встречается одна строка пустая строка. Если она...

Построчное чтение файла и использование данных в цикле
Здравствуйте, форумчане. Капаюсь (изучаю) в powershell-e и хочу сделать скрипт, который будет...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru