2015-01-21 2 views
0

Я на самом деле пытается сделать .txt файл вида:Заменить CRLF в файле

text1 
text 2 


text3 
text4 

в чем-то вроде этого:

text1,text2 
text3,text4 

Я пытался много вещей, таких как:

foreach($line in $file){ 
    $line=$line -replace'`r`n', ',' 
} 

Или напрямую, заменив в файле, а не строка:

$file=Get-Content('testo.txt') 
$file=$file -replace '`r`n','' 

Но ничего не работало. Я никогда не мог заменить CRLF. Если у кого-то есть идея или что-то еще!

ответ

0

Что-то еще более простое, я думаю. Это будет зависеть от размера текстового файла, поскольку он должен быть прочитан в памяти. Однако это будет работать с переменными строками «тестовых» данных и пробелов. Я собираюсь принять, что ваши данные не содержат запятых.

$file = (Get-Content "c:\temp\data.txt") -join "," -replace ",{2,}","`r`n" 
Set-Content -Path "C:\temp\Newfile.txt" -Value $file 

Возьмите файл и преобразуйте его в строку с разделителями-запятыми. Что произойдет, так это то, что вы увидите серию групповых запятых. Используя тестовые данные

text1,text 2,,,text3,text4 

З использовать регулярное выражение для замены и последовательная запятая группа 2 или более с новой строкой. Получение желаемого результата.

text1,text 2 
text3,text4 
+0

Более кратким, чем у меня, и он работает (может быть, лучше; p) – naiimco

+0

Если с этим что-то не так, было бы неплохо узнать, почему оно было опущено. благодаря – Matt

0

На самом деле я сделал что-то вроде этого:

$Writer = New-Object IO.StreamWriter "$($PWD.Path)\$OutputFile" 
$Writer.Write([String]::Join(".", $data)) 
$Writer.Close() 
$data=get-content temp.txt 
$data=$data -replace '[@]{2,}',"`r`n" 
$data=$data -replace '[@]',"," 
$data=$data -replace '( ){1,},',"no data" 
$data>>temp1.txt 

Он работает и делать то, что я хочу. Это не совсем эффективно, но я хотел, чтобы он работал быстро.
Я попробую все ответы, когда у меня будет время и скажу, работает ли оно или нет.
И, возможно, я изменю эту часть моего скрипта, если найду что-то более эффективное.
Спасибо всем!

+0

Я думаю, что это решение будет иметь проблемы с последовательными символами в вас фактических данных, так как вы соответствие _любой_ персонаж с '.' – Matt

+0

Да у меня была ошибка несколько часов назад, и изменил точку помечена знаком" @ ", который никогда не был в документе, с которым мне нужно работать. На самом деле мне нужно было сделать CSV из html-отчета с тегами о резервном копировании сервера. – naiimco

+0

Хорошо ... теперь этот ответ запутан, так как он не соответствует образцам данных вашего вопроса. Вы посмотрели на другие ответы? Интересно, если они не будут работать, так как ваши фактические данные могут не выглядеть так. – Matt

Смежные вопросы