CMD/BAT - Разделение текстового файла по условию
-
4eburashko
CMD/BAT - Разделение текстового файла по условию
Здравствуйте!
Нужна помощь в решении.
Есть текстовый файл с каким-то количеством строк следующего вида:
01048120100172842124zyRCc5WLVjw9
0134556645534534543xAauUCEBEcvw9
0134556645534534543x1uLev5ZLbY29
01345566455345345437MoFpfffEtKi9
01048120100172842124LdiqxZuhFhT9
0104812010017284212p88fSYydydnZ9
9634554654765756767PgegCvfAy59S9
Нужно разделить его на части, критерием будет совпадение первых 19 символов строки. То есть нужно сравнивать первые 19 символов каждой строки и при совпадении сохранять в отдельный файл всю строку. Конкретно в данном случае должно быть 4 файла. Название файлам можно присваивать по порядку (1,2,3 и т.д.), но лучше чтоб название состояло как раз из этих 19 символов строки.
Нужна помощь в решении.
Есть текстовый файл с каким-то количеством строк следующего вида:
01048120100172842124zyRCc5WLVjw9
0134556645534534543xAauUCEBEcvw9
0134556645534534543x1uLev5ZLbY29
01345566455345345437MoFpfffEtKi9
01048120100172842124LdiqxZuhFhT9
0104812010017284212p88fSYydydnZ9
9634554654765756767PgegCvfAy59S9
Нужно разделить его на части, критерием будет совпадение первых 19 символов строки. То есть нужно сравнивать первые 19 символов каждой строки и при совпадении сохранять в отдельный файл всю строку. Конкретно в данном случае должно быть 4 файла. Название файлам можно присваивать по порядку (1,2,3 и т.д.), но лучше чтоб название состояло как раз из этих 19 символов строки.
-
DJ Mogarych
Re: CMD/BAT - Разделение текстового файла по условию
Цитата 4eburashko:
Конкретно в данном случае должно быть 4 файла
Не 4, а 3.
Код:
Powershell
Код:
Конкретно в данном случае должно быть 4 файла
CMD/BAT - Разделение текстового файла по условию
Не 4, а 3.
Код:
Код: Выделить всё
Count Name Group
----- ---- -----
3 0104812010017284212 {01048120100172842124zyRCc5WLVjw9, 01048120100172842124LdiqxZ...
3 0134556645534534543 {0134556645534534543xAauUCEBEcvw9, 0134556645534534543x1uLev5...
1 9634554654765756767 {9634554654765756767PgegCvfAy59S9}Powershell
Код:
Код: Выделить всё
gc "C:\temp\in\file.txt" |group {$_.substring(0,19)} |% {
$_.group > "C:\temp\out\$($_.name).txt"
}-
4eburashko
Re: CMD/BAT - Разделение текстового файла по условию
Цитата DJ Mogarych:
Цитата 4eburashko:
Конкретно в данном случае должно быть 4 файла
Не 4, а 3.
Код:
Powershell
Код:
Я не совсем правильно объяснил, если совпадений нет (как у первой строки), то она одна сохраняется в файл, поэтому файлов не 3, а 4. То есть основной файл разделяется на группы
Цитата 4eburashko:
Конкретно в данном случае должно быть 4 файла
CMD/BAT - Разделение текстового файла по условию
Не 4, а 3.
Код:
Код: Выделить всё
Count Name Group
----- ---- -----
3 0104812010017284212 {01048120100172842124zyRCc5WLVjw9, 01048120100172842124LdiqxZ...
3 0134556645534534543 {0134556645534534543xAauUCEBEcvw9, 0134556645534534543x1uLev5...
1 9634554654765756767 {9634554654765756767PgegCvfAy59S9}Powershell
Код:
Код: Выделить всё
gc "C:\temp\in\file.txt" |group {$_.substring(0,19)} |% {
$_.group > "C:\temp\out\$($_.name).txt"
}Я не совсем правильно объяснил, если совпадений нет (как у первой строки), то она одна сохраняется в файл, поэтому файлов не 3, а 4. То есть основной файл разделяется на группы
-
DJ Mogarych
Re: CMD/BAT - Разделение текстового файла по условию
У первой строки есть совпадения с пятой и шестой, и я вам выше показал, как это выглядит с точки зрения компьютера.
Решение вашей задачи тоже приведено.
Решение вашей задачи тоже приведено.
-
megaloman
Re: CMD/BAT - Разделение текстового файла по условию
Код:
Код: Выделить всё
@Echo Off &Cls &>nul Chcp 1251
Set "FileIn=Z:\Box_In\allstring.txt"
Set "BoxOut=Z:\Box_Out"
For /F "usebackq delims=" %%s In (`2^>nul More "%FileIn%"`) Do (
Call :Out "%%s"
)
Pause
Exit /B
:Out
Set "Name=%~1"
(>>"%BoxOut%\%Name:~0,19%" Echo %~1)
Exit /B-
4eburashko
Re: CMD/BAT - Разделение текстового файла по условию
Цитата DJ Mogarych:
У первой строки есть совпадения с пятой и шестой, и я вам выше показал, как это выглядит с точки зрения компьютера.
Решение вашей задачи тоже приведено.
Да, это я был невнимателен. Спасибо, все работает!
Цитата megaloman:
Код:
Ваш код тоже отлично работает, только не задаёт файлам расширение txt, у себя подправил, спасибо!
У первой строки есть совпадения с пятой и шестой, и я вам выше показал, как это выглядит с точки зрения компьютера.
Решение вашей задачи тоже приведено.
Да, это я был невнимателен. Спасибо, все работает!
Цитата megaloman:
Код:
Код: Выделить всё
@Echo Off &Cls &>nul Chcp 1251
Set "FileIn=Z:\Box_In\allstring.txt"
Set "BoxOut=Z:\Box_Out"
For /F "usebackq delims=" %%s In (`2^>nul More "%FileIn%"`) Do (
Call :Out "%%s"
)
Pause
Exit /B
:Out
Set "Name=%~1"
(>>"%BoxOut%\%Name:~0,19%" Echo %~1)
Exit /BВаш код тоже отлично работает, только не задаёт файлам расширение txt, у себя подправил, спасибо!
-
4eburashko
Re: CMD/BAT - Разделение текстового файла по условию
Цитата megaloman:
Код:
Почему то при большом исходном файле (около 2500 строк) картина немного другая. Пробовал несколько раз, создаётся 11-15 файлов, каждый раз по разному (если разделить вручную, то выходит около 40). При этом в консоль выводит информацию Процесс не может получить доступ к файлу. Количество проверяемых символов я изменил до 16, но проблема была и до изменения.
Код:
Код: Выделить всё
@Echo Off &Cls &>nul Chcp 1251
Set "FileIn=Z:\Box_In\allstring.txt"
Set "BoxOut=Z:\Box_Out"
For /F "usebackq delims=" %%s In (`2^>nul More "%FileIn%"`) Do (
Call :Out "%%s"
)
Pause
Exit /B
:Out
Set "Name=%~1"
(>>"%BoxOut%\%Name:~0,19%" Echo %~1)
Exit /BПочему то при большом исходном файле (около 2500 строк) картина немного другая. Пробовал несколько раз, создаётся 11-15 файлов, каждый раз по разному (если разделить вручную, то выходит около 40). При этом в консоль выводит информацию Процесс не может получить доступ к файлу. Количество проверяемых символов я изменил до 16, но проблема была и до изменения.
- Вложения
-
megaloman
Re: CMD/BAT - Разделение текстового файла по условию
4eburashko, заархивируйте исходный файл, приложите к сообщению. У меня на >3000 строк отрабатывает нормально, каждый раз одинаково, сумма строк в разделенных файлах и исходном совпадают
-
4eburashko
Re: CMD/BAT - Разделение текстового файла по условию
Цитата megaloman:
4eburashko, заархивируйте исходный файл, приложите к сообщению. У меня на >3000 строк отрабатывает нормально, каждый раз одинаково, сумма строк в разделенных файлах и исходном совпадают
В коде добавил только расширение файла txt
4eburashko, заархивируйте исходный файл, приложите к сообщению. У меня на >3000 строк отрабатывает нормально, каждый раз одинаково, сумма строк в разделенных файлах и исходном совпадают
В коде добавил только расширение файла txt
- Вложения
-
megaloman
Re: CMD/BAT - Разделение текстового файла по условию
4eburashko, На выходе 11 файлов, сколько не запускай. Хоть 16 символов хоть 19. txt не при чем. Может как-то антивирус пытается файлы анализировать и при этом их занимает и поэтому доступ блокируется? Единственное, в исходном файле конец строки 0A а на выходе 0D 0A
- Вложения