2015-03-23 2 views
0

Я хотел бы изменить слово в textfile1.txt, если он находится в textfile2.txtредактировать текстовый файл с помощью партии

textfile1.txt содержит

264392 ja_JP 9000 -0.2620 0 2 0 どれ 
264393 ja_JP 9000 0.5577 0 2 0 最低 
264394 ja_JP 9000 0.4761 0 2 0 明け 
264395 ja_JP 9000 -0.1549 0 2 0 消費 
264396 ja_JP 9000 -0.2028 0 2 0 ばな 
264399 ja_JP 9000 -0.1141 0 2 0 覧下 

textfile2.txt содержит

Теперь
264394 ja_JP 9000 0.4761 0 2 0 明け 
264395 ja_JP 9000 -0.1549 0 2 0 消費 
264396 ja_JP 9000 -0.2028 0 2 0 ばな 

textfile1.txt должен быть

264392 ja_JP 9000 -0.2620 0 2 0 どれ 
264393 ja_JP 9000 0.5577 0 2 0 最低 
#264394 ja_JP 9000 0.4761 0 2 0 明け 
#264395 ja_JP 9000 -0.1549 0 2 0 消費 
#264396 ja_JP 9000 -0.2028 0 2 0 ばな 
264399 ja_JP 9000 -0.1141 0 2 0 覧下 

только число в начале строки важно

Я искал несколько кодов, но он помещает измененный номер на нижней части файла не отредактировать файл

заранее спасибо :)

+0

Невозможно «отредактировать» файл с периодичностью. Вам нужно будет читать оба входных файла по строкам и записывать выходной файл по строкам. – Stephan

ответ

0

Этот метод не требует, чтобы файлы имели порядок сортировки. Он должен работать до тех пор, пока команда FOR /F правильно обработает японские символы.

@echo off 
setlocal EnableDelayedExpansion 

rem Read textfile2 and create an array with the first column 
for /F %%a in (textfile2.txt) do set "file2[%%a]=1" 

rem Process textfile1 
(for /F "tokens=1*" %%a in (textfile1.txt) do (
    if defined file2[%%a] set /P "=#" < NUL 
    echo %%a %%b 
)) > textfile1.new 

move /Y textfile1.new textfile1.txt > NUL 
+0

спасибо, что это работает! но он читает textfile2.txt на второй строке, поэтому мне нужно сначала ввести его, но все же он работает спасибо :) –

0

Я предполагаю, что оба файла уже отсортированы, как показано в вашем примере, ни один файл не содержит символ !, и присутствует второй столбец.

Предполагая, что FOR/F обрабатывает японские символы правильно (я просто не знаю), то должно работать:

@echo off 
setlocal enableDelayedExpansion 
set "B=" 
<"textfile2.txt" (
    for /f "usebackq delims=" %%A in ("textfile1.txt") do (
    if not defined B (
     set /p "B=" 
     for /f %%B in ("!B! x") do set "B=%%B" 
    ) 
    for /f "tokens=1*" %%C in ("%%A") do if !B! equ %%C (
     echo #%%C %%D 
     set "B=" 
    ) else (
     echo %%A 
    ) 
) 
) >"textfile1.txt.new" 
move /y "textfile1.txt.new" "textfile1.txt" >nul 

выше является разновидностью методики, используемой для слияния двух отсортированных текстовых файлов ,