Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Замена строки в файлах (http://forum.oszone.net/showthread.php?t=326766)

al-1k 14-05-2017 23:36 2736724

Замена строки в файлах
 
Имеется куча файлов *.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 2736748

Цитата:

Цитата al-1k
Имеется куча файлов *.tab в папке »

Несколько образцов из этой кучи упакуйте в архив и приложите к сообщению, либо выложите на RGhost или Яндекс.Диск.

Busla 15-05-2017 12:17 2736849

Цитата:

Цитата Iska
Несколько образцов из этой кучи »

Он раз в пол-года задаёт этот вопрос на разных форумах, а потом исчезает. Не стоит ждать ответа.

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

Iska 15-05-2017 12:44 2736860

Цитата:

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

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

Цитата:

Цитата Busla
Он раз в пол-года задаёт этот вопрос на разных форумах, а потом исчезает. »

Вот токмо там фигурирует двенадцатая строка :).

al-1k 15-05-2017 19:29 2736998

Цитата:

Цитата Busla
Он раз в пол-года задаёт этот вопрос на разных форумах, а потом исчезает. Не стоит ждать ответа. »

Ну а чего там делать если ответа не дождался

Цитата:

Цитата Iska
упакуйте в архив »

https://drive.google.com/open?id=0B1...nFNLXRrc2h1aTg

Kazun 15-05-2017 19:47 2737004

Код:

#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 2737007

Благодарность!!

Iska 15-05-2017 22:41 2737062

Цитата:

Цитата Kazun
if($f[11].Contains($o)) { »

Почему не сразу на равенство?

Kazun 15-05-2017 23:21 2737072

Подумалось о доп. символах с начала и в конце строки, но равенство будет более точно.

Iska 16-05-2017 07:51 2737117

Цитата:

Цитата Kazun
Подумалось о доп. символах с начала и в конце строки »

Спасибо, ясно. Я, в принципе, так и предполагал.

Busla 16-05-2017 13:25 2737222

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 2737230

Busla, какое отношение процитированное умолчание имеет к изложенному мною?


Время: 19:39.

Время: 19:39.
© OSzone.net 2001-