2015-09-18 3 views
0

У меня есть набор текстовых файлов, поступающих через FTP. Когда они находятся, я хочу заменить значение позиции на основе значения в другой позиции. Могу ли я сделать это с помощью сценария командной строки Windows?Заменить текст на основе значения в определенной позиции

Например, текстовый файл содержит следующее:

-0000000062,790BCEUR

-0000000000.000

-0000000119,800BCEUR

-0000001352,560BCEUR

На основе этого значения, если она выше, чем 999,999 значение BCEUR следует заменить на C____, если не выше 999,999 BCEUR следует заменить SCEUR. Если значение равно 0, там не должно быть ничего, что уже имеет место. «Простой» способ, я думаю, будет проверять, является ли значение в позиции 7 0 или нет-0, а затем заменить BCEUR на применимое значение.

У кого-нибудь есть хорошие идеи? Я не программист, поэтому я борюсь с этим.

+0

Обратите внимание, что SO не является бесплатной услугой кодирования; поэтому предоставьте код, который вы пробовали до сих пор, и описываете, где вы застряли ... – aschipfl

+0

Хотя я полностью понимаю это, я просто не знаю, с чего начать. У меня есть только знание SQL и SQL-сервера. Если бы кто-нибудь мог дать какую-то общую идею о том, с чего начать, я мог бы сам оттуда расширить. – RobNemoo

+0

SO предназначен для использования для конкретных вопросов программирования, поэтому вы публикуете некую тему здесь ... в любом случае вы можете начать с 'for/F' (введите' for /? 'В командной строке для справки); для замены строки, введите 'set /?'; для условий, введите 'if /?' ... – aschipfl

ответ

0

Вы не можете просто проверить цифру в 7-м положении, потому что вы могли бы иметь значение, как 0020000119,800, что, безусловно, больше, чем 0000000999,999

Это решение использует JREPL.BAT - чисто сценарий на основе (гибрид JScript/пакетный) текстовый процессор регулярных выражений, который запускается изначально на любом компьютере с Windows XP.

jrepl "^(-(?:(0000000)|\d{7})\d{3},\d{3})BCEUR" "$1+($2?'SCEUR':'C____')" /j /f test.txt /o output.txt 

Он ищет строку, которая соответствует шаблону, как - ##########, ### BCEUR. Первая захваченная группа представляет собой целое число. Вторая захваченная группа имеет только первые 7 цифр, если и только если это только нули, в противном случае она пуста.

/J варианта обрабатывает замены строки как выражение JScript, который начинается со всем числом, за которым следует либо SCEUR или C____, в зависимости от того, определена второй захвачена группы или нет.

Используйте команду CALL JREPL, если вы поместите эту команду в пакетный скрипт.

Используйте /O -, если вы хотите, чтобы результат был перезаписан исходный файл.

+0

Спасибо за вход dbenham, посмотрим, работает ли он. – RobNemoo

0

Это похоже на работу - пустые строки удаляются.

@echo off 
setlocal enabledelayedexpansion 
(
for /f "usebackq delims=" %%a in ("c:\folder\file.txt") do (
    set "var=%%a" 
    if "!var:~0,15!"=="-0000000000,000" (
     echo -0000000000,000 
    ) else (
     if "!var:~0,8!"=="-0000000" (echo !var:~0,15!SCEUR) else (echo !var:~0,15!C____) 
) 
) 
)>"outputfile.txt" 
pause 
+0

Спасибо за входной сигнал, посмотрев, работает ли это. – RobNemoo

Смежные вопросы