none
Как сделать перенос строки при сохранении текста в файл.

    Question

  • Скрипт PowerShell'а читает из текстового файла текст и отправляет его в php скрипт (извиняюсь за тофтологию). Тот выполняет действия и выводит ответ через echo. Далее PowerShell принимает его, записывает в файл и выводит в окно.

    Код PowerShell скрипта:

    $c=New-Object System.Collections.Specialized.NameValueCollection
    $n1 = Get-Content C:\proga\out_text.txt
    $c.Add('par1',$n1)
    $wc = new-object system.net.webclient
    $d = $wc.uploadvalues("http://адрес_сайта/script.php",$c)
    $c= [text.encoding]::GetEncoding("windows-1251").getString($d)
    $c | out-file C:\proga\in_text.txt
    type C:\proga\in_text.txt

    Код php скрипта:

    <? 
    $par=$_POST['par1'];
    if ($par=='привет')
    {
    echo iconv("UTF-8", "windows-1251", 'много много много текста
    много много много текста
    много много много текста
    много много много текста
    много много много текста');
    }
    ?>

    Соответственно в out_text.txt лежит слово привет.

    При выводе в окно PS текст отображается черезстрочно:

    много много много текста
    много много много текста
    много много много текста
    много много много текста

    Но когда открываешь сам файл через редактор, то там все в одну строку о_О... Повторно открыв его через PS он опять отобразится черезстрочно в окне PS.

    Как сделать, чтобы и в самом файле была черезстрочная запись?


    • Edited by Lavio Thursday, February 23, 2012 1:59 PM
    Thursday, February 23, 2012 1:57 PM

Answers

  • Скорее всего это не проблема отсутствуещего знака переноса, а проблема с отображением в блокноте юниксовых переводов строк, попробуйте открыть этот же самый документ в notepad++.
    • Marked as answer by Lavio Friday, February 24, 2012 4:04 PM
    Friday, February 24, 2012 7:29 AM

All replies

  • Попробовать:

    $с.split("`n") | out-file C:\proga\in_text.txt



    Thursday, February 23, 2012 2:26 PM
    Answerer
  • При замене

    $c | out-file C:\proga\in_text.txt

    на

    Out-String($c | out-string | out-file C:\proga\in_text.txt)

    Он выдает ошибку и пишет:

    Out-String : Не удается найти позиционный параметр, принимающий аргумент "".
    строка:1 знак:11
    + Out-String <<<< ($c | out-string | out-file C:\proga\in_text.txt)
        + CategoryInfo          : InvalidArgument: (:) [Out-String], ParameterBindingException
        + FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.PowerShell.Commands.OutStringCommand

    Если заменить на

    $с.split("`n") | out-file C:\proga\in_text.txt 


    Он выдает ошибку и пишет:

    Нельзя вызвать метод для выражения со значением NULL.
    строка:1 знак:9
    + $с.split <<<< ("`n") | out-file C:\proga\in_text.txt
        + CategoryInfo          : InvalidOperation: (split:String) [], RuntimeException
        + FullyQualifiedErrorId : InvokeMethodOnNull


    Содержимое in_text.txt:

    много много много текстамного много много текстамного много много текстамного много много текстамного много много текста

    Во всяком случае именно так оно там и отображается если открывать блокнотом. Когда скопировал сюда то оно встало черезстрочно. Почему так?

    • Edited by Lavio Thursday, February 23, 2012 3:42 PM Дополнение
    Thursday, February 23, 2012 2:40 PM
  • $c= [text.encoding]::GetEncoding("windows-1251").getString($d)
    $c.split("`n") | out-file C:\proga\in_text.txt
    

    Нельзя вызвать метод для выражения со значением NULL. - Означает что переменная $c пуста.

    Как пример(если убрать split,то в Notepad будет одной строкой):

    $c=[text.encoding]::GetEncoding("windows-1251").getString([int[]][char[]]"hello`ntext")
    
    PS >  $c
    hello
    text
    
    PS >  $c.split("`n") | out-file result.txt
    
    

    Thursday, February 23, 2012 4:42 PM
    Answerer
  • Скорее всего это не проблема отсутствуещего знака переноса, а проблема с отображением в блокноте юниксовых переводов строк, попробуйте открыть этот же самый документ в notepad++.
    • Marked as answer by Lavio Friday, February 24, 2012 4:04 PM
    Friday, February 24, 2012 7:29 AM
  • notepad, wordpad открывают нормально также как если содержимое блокнота скопировать и вставить в другой редактор оно всегда отобразится черезстрочно...

    Всем спасибо=)

    • Proposed as answer by MoxFulder Wednesday, May 15, 2013 7:47 AM
    • Unproposed as answer by MoxFulder Wednesday, May 15, 2013 7:47 AM
    Friday, February 24, 2012 4:03 PM
  • Проблема в различии знаков перевода в windows и в unix системах. http://ru.wikipedia.org/wiki/%D0%9F%D0%B5%D1%80%D0%B5%D0%B2%D0%BE%D0%B4_%D1%81%D1%82%D1%80%D0%BE%D0%BA%D0%B8

    В win используется сразу два знака для перехода на новую строку 0x0D и 0x0A

    В выводе в текстовый файл для правильного отображения строк в блокноте используйте сразу `r`n вместо только одного `n

    $d+="Some text`r`n"

    $d | Out-File some.txt

    • Proposed as answer by MoxFulder Wednesday, May 15, 2013 7:54 AM
    Wednesday, May 15, 2013 7:54 AM