Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] как разбить один txt на несколько

Ответить
Настройки темы
CMD/BAT - [решено] как разбить один txt на несколько

Старожил


Сообщения: 267
Благодарности: 8

Профиль | Отправить PM | Цитировать


имеется файл txt такого типа

вфывафыа
фывфыв
фывфыв



фывфывфыв
аываываыва
ываываыва


и так штук 300 кусков.

как разбить это все на 300 файлов txt, чтобы каждый из них начинался со своего куска

(как вариант можно к каждому куску добавить любой символ. например !!! чтобы батник или vbs находил следующий кусок по маске "!!!" - это как вариант)

Отправлено: 22:53, 20-05-2010

 

Googler


Сообщения: 3665
Благодарности: 1563

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
@Echo Off
SetLocal EnableExtensions EnableDelayedExpansion

Set $F=file.txt

For /F "Tokens=1* Delims=[]" %%i In ('^<"%$F%" Find /V /N ""') Do (
If Not "%%j"=="" If Not Defined $F Set /A $N+=1& Set $F=F
If Not "%%j"=="" Echo.%%j>>out_!$N!.txt
If Defined $F If "%%j"=="" Set $F=)
Это сообщение посчитали полезным следующие участники:

Отправлено: 09:31, 21-05-2010 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Старожил


Сообщения: 267
Благодарности: 8

Профиль | Отправить PM | Цитировать


amel27, работает!!

Вы гений!! хорошо, когда в каждой среде есть специалисты (см. PM)

Отправлено: 09:41, 21-05-2010 | #3


Ветеран


Contributor


Сообщения: 2708
Благодарности: 1684

Профиль | Отправить PM | Цитировать


Ответы amel27, конечно, учебник по bat- файлам! Моё решение в VBS сделано прямолинейно, но выбрасывать жалко, вставляю свои 5 коп.
Код: Выделить весь код
WHere = "H:\Delete\"                       ' Папка где файлы
FileAll = WHere + "all.txt"

Set FSO = CreateObject("Scripting.FileSystemObject")

Set F = FSO.OpenTextFile(FileAll, 1)
MassAll = Split(Replace(F.ReadAll, Chr(10), ""), Chr(13))
F.Close

lf = True
nf = 0
For i = 0 To UBound(MassAll)
    If Len(Trim(MassAll(i))) <> 0 Then
       If lf Then
          lf = False
          nf = nf + 1
          Set F = FSO.OpenTextFile(WHere + Right("0000" + CStr(nf), 4) + ".txt", 2, True)
          F.Write MassAll(i)
       Else
          F.Write vbCrLf + MassAll(i)
       End If
    Else
       If Not lf Then F.Close
       lf = True
    End If
Next

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.

Это сообщение посчитали полезным следующие участники:

Отправлено: 20:59, 21-05-2010 | #4


Старожил


Сообщения: 267
Благодарности: 8

Профиль | Отправить PM | Цитировать


Цитата megaloman:
но выбрасывать жалко »
интересно было бы создать большую библиотеку с 300-400 задач и конкретными решениями. вот например на основе этого форума. получится хорошая книжка/ FAQ

так самое главное, что мне нравится - ничего качать не нужно. создал BAT и программа готова

Отправлено: 23:03, 21-05-2010 | #5


Новый участник


Сообщения: 41
Благодарности: 0

Профиль | Отправить PM | Цитировать


А если файл такого типа:

вапвпывпывпв
ывпывапывпыв
вапывпывпывп
--- ---
ывпывпывпывпыв
впывпывпывпыв
вапывпывпывп
ывапывпывпвып
--- ---
ывпаывапывпывп
ывапывпывпывпыв
вапывпывпывапывп
--- ---

Т.е. блоки разделены не пустой строкой, а строкой типа
"--- ---"

Отправлено: 22:47, 04-10-2010 | #6


Googler


Сообщения: 3665
Благодарности: 1563

Профиль | Отправить PM | Цитировать


Seryoga204, если пустые строки не важны, можно так:
Код: Выделить весь код
@echo off
SETLOCAL EnableDelayedExpansion

set SRC=file.txt
set DST=out_#.txt
set DLM=--- ---

for /f "usebackq delims=" %%i In ("%SRC%") do (
if not defined $F (
  set /a $N+=1& set $F=F
  set "$O=%DST:#=!$N!%"
  type nul >"!$O!")  
if not "%%i"=="%DLM%" echo %%i>>"!$O!"
if "%%i"=="%DLM%" set $F=)
P.S. два разделителя подряд дают пустой файл
Это сообщение посчитали полезным следующие участники:

Отправлено: 04:06, 05-10-2010 | #7


Новый участник


Сообщения: 41
Благодарности: 0

Профиль | Отправить PM | Цитировать


amel27,
Спасибо! То что надо.

Отправлено: 07:10, 05-10-2010 | #8



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] как разбить один txt на несколько

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
[решено] Как записать несколько образов на один cd. systeman Хочу все знать 1 29-10-2009 21:55
CMD/BAT - [решено] Как скопировать содержимое txt файлов всех подкаталогов в один файл dezertic Скриптовые языки администрирования Windows 3 20-10-2009 12:47
Один ящик + несколько клиентов. Как? Pliomera Хочу все знать 9 09-10-2008 16:09
Как разбить большой кусок текста на несколько частей chem1 Вебмастеру 11 25-05-2008 16:32
Как свести несколько телефонов на один блютус? Echo Хочу все знать 3 09-09-2007 01:21




 
Переход