我在这里想要实现的是将文本文件的第一行唯一读取到字符串并捕获回车换行符(或任何其他不可打印的字符),但是如果没有读取完整内容的话文件也不是第二行(如果存在),此时我不确定如何使用PowerShell实现此目的。请注意,脚本将处理大小不超过30GB的文件,因此将所有文件内容读入内存显然不适合我(时间也是如此)。
使用下面的内容我只能在第一行读取,但CR/LF
字符会在行尾修剪:
$File = New-Object System.IO.StreamReader -Arg $PathFull
$Header = $File.ReadLine()
$File.Close()
我也可以使用第一行:
$Header = (Get-Content -Path $PathFull -Head 1)
但是,正如预期的那样Get-Content
将每一行作为字符串读入对象集合中,CR/LF
字符也会在第一行丢失。
我能够在CR/LF
字符中读取的唯一方法是使用带有-Raw
命令行开关的Get-Content
密钥,但这并没有解决我原来的问题不允许首先使用-Raw
和-Head
键同时使用文件的全部内容。
请注意,在阅读该行之后,请手动将这些字符添加回字符串:
$Header = $Header + "$([Char]13)$([Char]10)"
对我来说不是一个选项,我的目标仅仅是确定我读取的行是否仅使用CR/LF
,CR
或仅LF
字符组合正确分隔。在阅读实际行之前我对此一无所知。
非常感谢您对此主题的任何帮助。
答案 0 :(得分:3)
使用$reader = New-Object System.IO.StreamReader D:\file.txt
do{
$c = $reader.Read()
$result = if($c -eq 13){
if(-not $reader.EndOfStream -and 10 -eq $reader.Read()){
'CRLF'
}else{
'CR'
}
}elseif($c -eq 10){
'LF'
}
}until($result)
$reader.Dispose()
return $result
方法一次读取一个字符,直到遇到回车或换行:
$(document).ready(function() {
console.log('something');
})
答案 1 :(得分:0)
来自MSDN / StreamReader.ReadLine Method ():
一行被定义为字符序列,后跟换行符(“\ n”),回车符(“\ r”)或回车符后紧跟换行符号(“\ r \ nn “)。返回的字符串不包含终止回车符或换行符。
ReadLine()方法隐式地解决了您的目标/问题。它读取数据直到达到CR,LF或CR / LF。您可能想要处理的唯一特殊情况是文件只有一行(没有EOL字符,只有EOF)。