CMD/BAT - [решено] Добавление числа после точки с условием
-
foma24
CMD/BAT - [решено] Добавление числа после точки с условием
Добрый день. Помогите решить такую задачу. Есть файл 111.txt который лежит в C:\ в нем много строк текста. Нужно найти строки вида:
Сумм:30
Сумм:10.1
Сумм:50.03
С этих строках, там, где после точки идет одно число в конце нужно дописать 0, т.е. строка Сумм:10.1 должна стать Сумм:10.10, а там где нет точки добавить точку и два нуля, т.е. вместо Сумм:30 должно стать Сумм:30.00, строку с двумя цифрами после точки оставить без изменений.
Файл с изменениями сохранить в 222.txt
P.S. в принципе можно и не в CMD, а в WHS или PowerShell
Сумм:30
Сумм:10.1
Сумм:50.03
С этих строках, там, где после точки идет одно число в конце нужно дописать 0, т.е. строка Сумм:10.1 должна стать Сумм:10.10, а там где нет точки добавить точку и два нуля, т.е. вместо Сумм:30 должно стать Сумм:30.00, строку с двумя цифрами после точки оставить без изменений.
Файл с изменениями сохранить в 222.txt
P.S. в принципе можно и не в CMD, а в WHS или PowerShell
-
Georgio
Re: CMD/BAT - [решено] Добавление числа после точки с условием
foma24, проверьте:
Код:
Код:
Код: Выделить всё
@ECHO OFF>222.txt
SETLOCAL ENABLEDELAYEDEXPANSION
FOR /F "tokens=1,2 delims=." %%I IN (111.txt) DO (
SET VAR1=%%J
IF DEFINED VAR1 (
SET VAR2=!VAR1:~1!
IF DEFINED VAR2 (
ECHO %%I.%%J>>222.txt
) ELSE (
ECHO %%I.%%J0>>222.txt
)) ELSE (
ECHO %%I.00>>222.txt
))-
Iska
Re: CMD/BAT - [решено] Добавление числа после точки с условием
Georgio, почему не просто:
Код:
?
Код:
Код: Выделить всё
findstr.exe /r /e /c:"Сумм:[0-9][0-9]" /c:"Сумм:[0-9][0-9]\.[0-9]" "%%~i"?
-
Georgio
Re: CMD/BAT - [решено] Добавление числа после точки с условием
Цитата foma24:
Есть файл 111.txt
Кодировку файла укажите.
У меня какой-то тихий ужас получился:
Код:
Есть файл 111.txt
CMD/BAT - [решено] Добавление числа после точки с условием
Кодировку файла укажите.
У меня какой-то тихий ужас получился:
читать дальше »
Код:
Код: Выделить всё
$sPath = "E:\Песочница\0269\111.txt"
$aContent = (
Get-Content -Path $sPath |`
ForEach-Object -Process {
switch -regex ($_) {
"^Сумм:\d+[^\d.]*$" {
$_ -replace "^(Сумм:\d+)([^\d.]*)$", '${1}.00${2}'
break
}
"^Сумм:\d+\.\d[^\d.]*$" {
$_ -replace "^(Сумм:\d+\.\d)([^\d.]*)", '${1}0${2}'
break
}
default {
$_
}
}
}
)
Set-Content -Path $sPath -Value $aContent-
foma24
Re: CMD/BAT - [решено] Добавление числа после точки с условием
Цитата Iska:
Кодировку файла укажите.
OEM866
Кодировку файла укажите.
CMD/BAT - [решено] Добавление числа после точки с условием
OEM866
-
foma24
Re: CMD/BAT - [решено] Добавление числа после точки с условием
Цитата foma24:
OEM866
Попробуйте так:
Код:
OEM866
CMD/BAT - [решено] Добавление числа после точки с условием
Попробуйте так:
читать дальше »
Код:
Код: Выделить всё
function StrConvert($sSourceCharset, $sDestCharset) {
begin {
Set-Variable -Name adTypeText -Option Constant -Value 2
Set-Variable -Name adModeReadWrite -Option Constant -Value 3
$oStream = New-Object -ComObject "ADODB.Stream"
}
process {
$oStream.Type = $adTypeText
$oStream.Mode = $adModeReadWrite
$oStream.Open()
$oStream.Charset = $sSourceCharset
$oStream.WriteText($_)
$oStream.Position = 0
$oStream.Charset = $sDestCharset
$oStream.ReadText()
$oStream.Close()
}
}
$sPath = "E:\Песочница\0269\111.txt"
$aContent = (
Get-Content -Path $sPath |`
StrConvert "windows-1251" "cp866" |`
ForEach-Object -Process {
$sConvertedString = ($_ )
switch -regex ($sConvertedString) {
"^Сумм:\d+[^\d.]*$" {
$sConvertedString -replace "^(Сумм:\d+)([^\d.]*)$", '${1}.00${2}'
break
}
"^Сумм:\d+\.\d[^\d.]*$" {
$sConvertedString -replace "^(Сумм:\d+\.\d)([^\d.]*)", '${1}0${2}'
break
}
default {
$sConvertedString
}
}
} |`
StrConvert "cp866" "windows-1251"
)
Set-Content -Path $sPath -Value $aContent-
foma24
Re: CMD/BAT - [решено] Добавление числа после точки с условием
Код:
Код: Выделить всё
@ECHO OFF>222.txt
SETLOCAL ENABLEDELAYEDEXPANSION
FOR /F "tokens=*" %%I IN (111.txt) DO (
FOR /F "tokens=1,3 delims=:." %%J IN ("%%I") DO (
IF %%J==Сумм (
SET VAR1=%%K
IF DEFINED VAR1 (
SET VAR2=!VAR1:~1!
IF DEFINED VAR2 (
ECHO %%I>>222.txt
) ELSE (
ECHO %%I0>>222.txt
)) ELSE (
ECHO %%I.00>>222.txt
)) ELSE (
ECHO %%I>>222.txt
)))-
Iska
Re: CMD/BAT - [решено] Добавление числа после точки с условием
Огромное спасибо все прекрасно работает.
Если можно еще одна задачка, файлы внутри такие же, но их много, хранятся в одной папке, нужно в этой папке отобрать все файлы где есть строки вида
Сумм:30
Сумм:10.1
т.е. либо без точки, либо с одной цифрой после точки и скопировать в отдельный каталог
Если можно еще одна задачка, файлы внутри такие же, но их много, хранятся в одной папке, нужно в этой папке отобрать все файлы где есть строки вида
Сумм:30
Сумм:10.1
т.е. либо без точки, либо с одной цифрой после точки и скопировать в отдельный каталог
-
Georgio
Re: CMD/BAT - [решено] Добавление числа после точки с условием
Код:
Код: Выделить всё
@ECHO OFF>222.txt
SETLOCAL ENABLEDELAYEDEXPANSION
FOR /F "tokens=*" %%I IN (111.txt) DO (
FOR /F "tokens=1,3 delims=:." %%J IN ("%%I") DO (
IF %%J==Сумм (
SET VAR1=%%K
IF DEFINED VAR1 (
SET VAR2=!VAR1:~1!
IF DEFINED VAR2 (
ECHO %%I>>222.txt
) ELSE (
ECHO %%I0>>222.txt
)) ELSE (
ECHO %%I.00>>222.txt
)) ELSE (
ECHO %%I>>222.txt
)))-
foma24
Re: CMD/BAT - [решено] Добавление числа после точки с условием
Огромное спасибо все прекрасно работает.
Если можно еще одна задачка, файлы внутри такие же, но их много, хранятся в одной папке, нужно в этой папке отобрать все файлы где есть строки вида
Сумм:30
Сумм:10.1
т.е. либо без точки, либо с одной цифрой после точки и скопировать в отдельный каталог
Если можно еще одна задачка, файлы внутри такие же, но их много, хранятся в одной папке, нужно в этой папке отобрать все файлы где есть строки вида
Сумм:30
Сумм:10.1
т.е. либо без точки, либо с одной цифрой после точки и скопировать в отдельный каталог