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

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Необходимо помощъ в написании батника для удаления столбцов из текстового файла. (http://forum.oszone.net/showthread.php?t=171949)

francke 01-04-2010 23:30 1382854

Необходимо помощъ в написании батника для удаления столбцов из текстового файла.
 
У меня проблема в том что есть текстовый файл, который имеет 7 столбцов через один пробел, бывает и более. Мне необходимо из семи, удалить предпоследние 3. Например:

1 2 3 4 5 6 7
7 6 5 4 3 2 2
1 2 3 4 5 6 1

в итоге должен получиться файл

1 2 3 7
7 6 5 2
1 2 3 1


Просто мог бы и руками сделать. но у меня 100 файлов. не хотелось день терять.

NiOl 02-04-2010 00:47 1382930

Код:

@echo off
SetLocal EnableExtensions
rem SetLocal EnableDelayedExpansion

rem В переменную FileList помещаете имя полное файла (без кавычек), содержащего список из Ваших 100 файлов
rem Сделать это можно командой "dir /b /s *.*>File.txt" и удалив лишнее. (читайте dir /?)
rem  * Возможны глюки, если имена файлов содержат символы "пробел" &()[]{}^=;!'+,`~
set FileList=File.txt

set WRK=%~n0.tmp

for /f "usebackq tokens=* delims=" %%F in ("%FileList%") do call :File "%%F"
exit

:File
set CFile=%1
ren %1 *.old
for /f "usebackq tokens=1-7* delims= " %%L in (%~dpn1.old) do echo %%L %%M %%N %%R >>%CFile%
exit /b


zonderz 02-04-2010 01:07 1382948

francke

пользуйтесь на здоровье
http://forum.oszone.net/attachment.p...1&d=1270210664

francke 02-04-2010 09:30 1383082

была структура вот какая
3236 5028 17638839 0 1260 400 351
3428 4998 17638849 1 1260 400 382
3541 5056 17638859 1 1260 400 394
3665 5135 17638869 1 1310 400 397
3945 5229 17638879 1 1370 390 405
4243 5429 17638889 1 1420 380 392


После выполненения project1.rar стала

3236 5028 17638839 0 1260 1
3428 4998 17638849 1 1260 2
3541 5056 17638859 1 1260 4
3665 5135 17638869 1 1310 7

А нужна

3236 5028 17638839 351
3428 4998 17638849 382
3541 5056 17638859 394
3665 5135 17638869 397
3945 5229 17638879 405
4243 5429 17638889 392

Busla 02-04-2010 09:33 1383084

NiOl, а зачем вы используете usebackq во всех for (не только в данном топике)?

francke 02-04-2010 10:18 1383113

NioL Все получилось огромное спасибо.

zonderz, тебе тоже большое спасибо. Но ты не мог бы как нить подделать свой exe файл. Просто реализаия понравилась. Хочу ей в дальнейшем пользоваться.

NiOl 02-04-2010 10:37 1383128

Busla,
Не всегда, т.к. не люблю писать это сокращение (я очень ленив, как и положено админу ;) ), но приходится на случай если используемое имя файла может содержать какие-нить неудобоваримые символы типа пробела (полный список приведен в этом топике и его всегда можно получить здесь: cmd /? )
Если Ваш вопрос в контексте, зачем вообще нужно "Use Back Quoted string", то подробнее можно прочесть здесь: for /?

zonderz 02-04-2010 15:32 1383448

francke

столбцов через один пробел, бывает и более

здесь пробелов между цифрами нет - поэтому программа некорректно отработала

3236 5028 17638839 0 1260 400 351

Но ты не мог бы как нить подделать свой exe файл. Просто реализаия понравилась. Хочу ей в дальнейшем пользоваться.

скачайте файл еще раз - я его перезалил


Время: 14:03.

Время: 14:03.
© OSzone.net 2001-