在不加载整个文件的情况下,检测具有PowerShell V3的新线性字符的首次遇到



为了正确地加载一些〜10MB〜80K线CSV文件,我需要在LOAD DATA INFILE查询中提供适当的线路终止器。不幸的是,源CSV文件有两种口味:新线作为LF(Linux上的mysqldump)或CRLF(我们的DBA团队都可以制作这些)。

我一直在寻找一种读取文件的方法,直到遇到线供稿字符,然后通过检查托架返回之前弄清楚使用哪个线路结束。

有很多基于Get-Content的示例可以读取整个文件,或者我可以读取最后两个字节的文件。第一个原因太慢且效率低,第二个不够可靠,因为某些文件的目的是某些原因没有CRLF

考虑到上面,读取文件直到我击中LF似乎更合理,但是我不能让Get-Content"流"该文件,而我不知道第一行结束是多远。

会感谢您的想法。

Get-Content无法做您想做的事,因为它要么将整个文件读取为单个SRING(-Raw),要么将CR和LF从行末端剥离Cr和LF时。

StreamReader可以做您要的事情:

$file = 'C:pathtoyour.file'
$reader = [IO.File]::OpenText($file)
$prev = $null
$char = $null
while ($reader.Peek() -ge 0 -and $char -ne 10) {
  $prev = $char
  $char = $reader.Read()
}
$reader.Close()
$reader.Dispose()
if ($prev -eq 13) {
  # file has CR-LF line breaks
}

相关内容

最新更新