Компьютерный форум 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=266016)

root221 12-08-2013 15:09 2200326

Помогите удалить из txt ненужные строки
 
Здравствуйте,

Помогите удалить всё до первого проблела


Код:

qwerty - tgbvfrw
asdfg - hjkl
zxcvbnm - aaaa
asdfghjjj - ssssssss
rtyuiopp - zcdsc
ghjklhgg - saffdsfsd
qaswefg - htyytjytj

В общем надо что бы после запуска вашего скрипта, в текстовом файле оставалось только.

Код:

qwerty
asdfg
zxcvbnm
asdfghjjj
rtyuiopp
ghjklhgg
qaswefg


Спасибо за ранее!!

Iska 12-08-2013 15:48 2200355

Цитата:

Цитата root221
удалить всё до первого проблела »

Может быть, после первого пробела, включительно?

читать дальше »
Код:

@echo off
setlocal enableextensions enabledelayedexpansion

set sFile=%~1

if defined sFile (
        if exist "%sFile%" (
                call :GetTemporaryName
               
                >"!TemporaryName!" (
                        for /f "usebackq delims= " %%i in ("%sFile%") do (
                                echo.%%i
                        )
                )
               
                >nul copy /y "%sFile%" "%~dpn1.bak"
                >nul copy /y "!TemporaryName!" "%sFile%"
                del /f /q "!TemporaryName!"
        ) else (
                echo Can't find source file [%sFile%].
        )
) else (
        echo Usage: %~nx0 ^<Source file^>
)

endlocal
exit /b 0
rem ==========================================================================

rem ==========================================================================
rem Функция GetTemporaryName()
rem
rem Серый форум / CMD/BAT: генерация пути для временного файла или папки
rem (http://forum.script-coding.com/viewtopic.php?id=6259)
rem ==========================================================================
:GetTemporaryName
        setlocal enableextensions enabledelayedexpansion

:NextName
        set sTempName=%temp%\temp%random%.tmp

        if exist "%sTempName%" goto :NextName

        set sProcName=%~0

        endlocal & set %sProcName:~4%=%sTempName%
        exit /b 0
rem ==========================================================================


root221 12-08-2013 20:38 2200481

Цитата:

Цитата Iska
Может быть, после первого пробела, включительно? »

да) вы правы я просто торопился.

Iska, Спасибо конечно за скриптик, не ожидал что будет такой большой. Может вы мой подправите что бы он работал так же как он работает, вот только что-бы скриптик поумнее получился и писал не в лог log.txt а в xxx.txt надо что бы удалял не нужное и всё

а если быть точнее то просто читаем xxx.txt у убираем в нем не нужное.

А в моём примере я просто из xxx.txt в лог нужные мне строки переношу.

Код:

@echo off
echo 0>log.txt
for /f "tokens=1,2 usebackq" %%a in ("xxx.txt") do (
echo %%a
)>>log.txt

фигню наверно я сделал но оно работает =)

Iska 13-08-2013 04:53 2200613

Цитата:

Цитата root221
не ожидал что будет такой большой »

Вы ведь написали:
Цитата:

Цитата root221
в текстовом файле оставалось только »

т.е. — в том же файле.

Если усечённые строки сохранять в новый файл — надобность в промежуточном временном файде отпадает (не проверялось):
читать дальше »
Код:

@echo off
setlocal enableextensions enabledelayedexpansion

set sSourceFile=%~1
set sDestFile=log.txt

if defined sSourceFile (
        if exist "%sSourceFile%" (
                >"%sDestFile%" (
                        for /f "usebackq delims= " %%i in ("%sSourceFile%") do (
                                echo.%%i
                        )
                )
        ) else (
                echo Can't find source file [%sSourceFile%].
        )
) else (
        echo Usage: %~nx0 ^<Source file^>
)

endlocal
exit /b 0



Цитата:

Цитата root221
Код:

echo 0>log.txt
»

Не делайте так. Лучше проверьте, существует ли файл, и если существует — удалите.
Цитата:

Цитата root221
Код:

for /f "tokens=1,2
»

Зачем Вам второй токен? Вы его не пользуете.

root221 13-08-2013 17:47 2200889

Смотрите как работает мой скрипт,

1, чистит файл log.txt

2, ищет в файле xxx.txt всё что начинается с первой строки

3, и выводит всё что нашел в консоль

4, потом просто заполняет опять log.txt который ранее был очищен.


А вот что надо мне.

1, ищет в файле file1.txt всё до первого пробела

2, и выводит всё что нашел в консоль

3, потом чистит этот файл file1.txt

4, и в него же записывает то что вывел в консоль

Код:

@echo off
for /f "usebackq delims= " %%a in ("file1.txt") do (
echo %%a>file1.txt
)

Просто если так сделать то он записывает только последнюю строчку из наиденного

root221 13-08-2013 18:27 2200914

в общем добился я того что мне надо, пока-что вот так

Код:

@echo off
echo 0>file2.txt
for /f "usebackq delims= " %%a in ("file1.txt") do (
echo.%%a)>>file2.txt

а хотелось бы что-бы работало вот так

Код:

for /f "usebackq delims= " %%a in ("file1.txt") do (
echo.%%a)>file1.txt


megaloman 13-08-2013 19:16 2200933

Не получится как хочется, разве что как-то исхитриться исх файл в массив записать. Работаем через промежуточный файл
Код:

@Echo Off

Set "FileName=txt.txt"

del "~%FileName%.tmp" 2>Nul
FOR /F "tokens=1  usebackq delims= " %%i in ("%FileName%") do @echo %%i>>"~%FileName%.tmp"
Move /Y "~%FileName%.tmp" "%FileName%"


Iska 13-08-2013 19:20 2200937

Цитата:

Цитата root221
а хотелось бы что-бы работало вот так »

Не выйдет. Ибо исходный файл будет очищен раньше, чем прочтён. Только через промежуточный временный файл.

root221 13-08-2013 22:19 2201035

megaloman, Спасибо вы решили мою проблему.

megaloman 13-08-2013 23:59 2201089

Исключительно из упрямства предлагаю корявое решение без промежуточного файла с имитацией массива
Код:

@Echo Off

Set "FileName=txt.txt"

SetLocal EnableExtensions EnableDelayedExpansion

Set /A N=0
FOR /F "tokens=1 usebackq delims= " %%i in ("%FileName%") do (
        Set /A N=!N!+1
        Set "String.!N!=%%i"
)
Del "%FileName%"
FOR /L %%j IN (1,1,%N%) DO Echo !String.%%j!>>"%FileName%"

Корявое, потому что:
1. Работает медленно
2. Не знаю, насколько длинным может быть выходной файл, то есть не знаю границ применимости по числу и длине строк
3. И намного длиннее чем решение Diskretor, приведённое ниже :closed-to:

Респект amel27 за идею

Dragokas 14-08-2013 00:13 2201095

Код:

@echo off
SetLocal EnableExtensions
Set "FN=txt.txt"
For /F "delims= " %%? in ('type "%FN%"^& del "%FN%"') do echo %%?>>"%FN%"

:)


Время: 12:11.

Время: 12:11.
© OSzone.net 2001-