Войти

Показать полную графическую версию : [решено] Out-File -избежать создания пустого файла


solonenko
04-03-2020, 15:20
Добрый день.
Имеется текстовый файл, каждая строка начинается с "1;№телефона;*". Задача проверить на соответствие маске "79*********" и записать в лог-файл, если есть некорректные телефоны

$bird=$null
$stringnew=$null
$stringnew = (Get-Content "C:\fb\EXT.txt").Trim() #читаем файл - отрезаем возможные пробелы
foreach ($bird in $stringnew) { #проверяем в цикле каждую строку на корректность номера
if ($bird -notmatch '^?;79\d{9};') #шаблон
{
"Ошибка шаблона;"+$bird | Out-File -FilePath c:\fb\EXT_ERROR_PHONE.txt -Append #если не соответствует маске - в эррор-файл
}
else
{
$bird | Out-File -FilePath C:\fb\EXT_OUT.txt -Append #если соответствует маске - в работу
}
}


Если строка содержит некорректный №тел - создается файл -все ок.
Если строка НЕ содержит некорректный №тел - создается пустой файл EXT_ERROR_PHONE.txt
Как этого избежать

p\s

(Get-Content "C:\fb\EXT_.txt").Trim() | Where-Object {$_ -notmatch '^?;79\d{9};'} | Out-File c:\fb\EXT_ERROR_PHONE.txt


Та же история, пустой файл есть (а он мне не нужен). Подозреваю - причина одна...

*Set-Content также себя ведет

DJ Mogarych
04-03-2020, 15:39
Пример файла дайте

solonenko
04-03-2020, 15:50
Пример файла дайте »
160607

DJ Mogarych
04-03-2020, 16:54
Наверное, так:

$right,$wrong = (gc D:\temp\ext.txt).trim().where({$_ -match "^?;79\d{9};"}, 'Split')
$right |Out-File C:\fb\EXT_OUT.txt -Append
if ($wrong) {$wrong |% {"Ошибка шаблона;"+$_} |Out-File C:\fb\EXT_ERROR_PHONE.txt -Append}

YuS_2
04-03-2020, 17:42
'^?;79\d{9};' »
Любопытный шаблон...
Совпадает, если начало строки ноль или один, за которым следует точка с запятой, за ней сразу же следует символ семь, затем девять, за ней девять любых цифр и точка с запятой - он точно у Вас работает? Ибо на тексте, который был показан, совпадения никогда не будет найдено и все строки будут в логе ошибок.
Как этого избежать »
if ($a = (sls ext.txt -patt '^[^;]*;\s*79\d{9}' -not -enc default)){$a.line.trim()|out-file error.txt -enc default}

solonenko
04-03-2020, 18:12
Любопытный шаблон... »
Да, для моей задачи этого достаточно.
За комментарий спасибо, изучу.

DJ Mogarych,
Спасибо

YuS_2
04-03-2020, 18:28
Да, для моей задачи этого достаточно. »
А, ну да, работать-то он будет... но составлен неверно, в этой части:
^?
- так шаблоны не составляют, в этом нет смысла. Либо учитывать начало строки (тогда пишут "^"), либо не учитывать (тогда символ "^" не пишут). А квантификатор "?" обычно используют с реальными символами или классами символов...




© OSzone.net 2001-2012