CMD/BAT - [решено] Добавление числа после точки с условием

Аватара пользователя
foma24

CMD/BAT - [решено] Добавление числа после точки с условием

Сообщение foma24 »

Добрый день. Помогите решить такую задачу. Есть файл 111.txt который лежит в C:\ в нем много строк текста. Нужно найти строки вида:



Сумм:30

Сумм:10.1

Сумм:50.03



С этих строках, там, где после точки идет одно число в конце нужно дописать 0, т.е. строка Сумм:10.1 должна стать Сумм:10.10, а там где нет точки добавить точку и два нуля, т.е. вместо Сумм:30 должно стать Сумм:30.00, строку с двумя цифрами после точки оставить без изменений.



Файл с изменениями сохранить в 222.txt



P.S. в принципе можно и не в CMD, а в WHS или PowerShell
Аватара пользователя
Georgio

Re: CMD/BAT - [решено] Добавление числа после точки с условием

Сообщение Georgio »

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 - [решено] Добавление числа после точки с условием

Сообщение Iska »

Georgio, почему не просто:



Код:

Код: Выделить всё

findstr.exe /r /e /c:"Сумм:[0-9][0-9]" /c:"Сумм:[0-9][0-9]\.[0-9]" "%%~i"

?
Аватара пользователя
Georgio

Re: CMD/BAT - [решено] Добавление числа после точки с условием

Сообщение Georgio »

Цитата foma24:



Есть файл 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 - [решено] Добавление числа после точки с условием

Сообщение foma24 »

Цитата foma24:



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 - [решено] Добавление числа после точки с условием

Сообщение foma24 »

Код:

Код: Выделить всё

@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 - [решено] Добавление числа после точки с условием

Сообщение Iska »

Огромное спасибо все прекрасно работает.



Если можно еще одна задачка, файлы внутри такие же, но их много, хранятся в одной папке, нужно в этой папке отобрать все файлы где есть строки вида

Сумм:30

Сумм:10.1

т.е. либо без точки, либо с одной цифрой после точки и скопировать в отдельный каталог
Аватара пользователя
Georgio

Re: CMD/BAT - [решено] Добавление числа после точки с условием

Сообщение Georgio »

Код:

Код: Выделить всё

@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 - [решено] Добавление числа после точки с условием

Сообщение foma24 »

Огромное спасибо все прекрасно работает.



Если можно еще одна задачка, файлы внутри такие же, но их много, хранятся в одной папке, нужно в этой папке отобрать все файлы где есть строки вида

Сумм:30

Сумм:10.1

т.е. либо без точки, либо с одной цифрой после точки и скопировать в отдельный каталог
Ответить

Вернуться в «Скриптовые языки администрирования Windows»