Войти

Показать полную графическую версию : [решено] Замена строки в файлах


al-1k
14-05-2017, 23:36
Имеется куча файлов *.tab в папке, нужно в каждом файле заменить 11-ю строку
CoordSys NonEarth Units "m"
на
CoordSys Earth Projection 8, 1001, "m", 61.0333333333002, 0, 1, 2300000, -5509414.7

Iska
15-05-2017, 07:02
Имеется куча файлов *.tab в папке »
Несколько образцов из этой кучи упакуйте в архив и приложите к сообщению, либо выложите на RGhost или Яндекс.Диск.

Busla
15-05-2017, 12:17
Несколько образцов из этой кучи »
Он раз в пол-года задаёт этот вопрос на разных форумах (http://www.cyberforum.ru/powershell/thread1852197.html), а потом исчезает. Не стоит ждать ответа.

Да и без образцов вроде бы всё понятно - что вы хотите там увидеть?

Iska
15-05-2017, 12:44
Да и без образцов вроде бы всё понятно - что вы хотите там увидеть? »
Я лично хочу увидеть:

используемую кодировку;
наличие BOM;
тип конца строк;
что приведённая строка именно одиннадцатая и именно с таким содержимым содержится во всех примерах.
Наконец, это избавит отвечающего от необходимости самолично изготавливать примеры файлов для проверки работоспособности кода.

Он раз в пол-года задаёт этот вопрос на разных форумах, а потом исчезает. »
Вот токмо там фигурирует двенадцатая строка :).

al-1k
15-05-2017, 19:29
Он раз в пол-года задаёт этот вопрос на разных форумах, а потом исчезает. Не стоит ждать ответа. »
Ну а чего там делать если ответа не дождался

упакуйте в архив »
https://drive.google.com/open?id=0B1qO9ypZT10bSnFNLXRrc2h1aTg

Kazun
15-05-2017, 19:47
#File.WriteAllText - This method uses UTF-8 encoding without a Byte-Order Mark (BOM), so using the GetPreamble method will return an empty byte array.
$o = 'CoordSys NonEarth Units "m"'
$n = 'CoordSys Earth Projection 8, 1001, "m", 61.0333333333002, 0, 1, 2300000, -5509414.7'
dir C:\*.tab | Foreach {
$f = Get-Content $_.FullName
if($f[11].Contains($o)) {
$f[11] = $n
[IO.File]::WriteAllLines($_.FullName, $f)
}
}

al-1k
15-05-2017, 19:57
Благодарность!!

Iska
15-05-2017, 22:41
if($f[11].Contains($o)) { »
Почему не сразу на равенство?

Kazun
15-05-2017, 23:21
Подумалось о доп. символах с начала и в конце строки, но равенство будет более точно.

Iska
16-05-2017, 07:51
Подумалось о доп. символах с начала и в конце строки »
Спасибо, ясно. Я, в принципе, так и предполагал.

Busla
16-05-2017, 13:25
Iska, видите как всё прекрасно: можно не строить предположения о требованиях к кодировке, а просто задокументировать формат:#File.WriteAllText - This method uses UTF-8 encoding without a Byte-Order Mark (BOM), so using the GetPreamble method will return an empty byte array.

Iska
16-05-2017, 13:42
Busla, какое отношение процитированное умолчание имеет к изложенному мною?




© OSzone.net 2001-2012