Csv 在不加载整个文件的情况下,检测PowerShell v3首次遇到新行字符
为了将大约10MB~80k行的CSV文件正确加载到MySQL,我需要在Csv 在不加载整个文件的情况下,检测PowerShell v3首次遇到新行字符,csv,powershell,Csv,Powershell,为了将大约10MB~80k行的CSV文件正确加载到MySQL,我需要在load DATA infle查询中提供一个合适的行终止符。不幸的是,源CSV文件有两种风格:换行符为LF(Linux上的mysqldump)或CRLF(我们的DBA团队制作这些) 我一直在寻找一种读取文件的方法,直到遇到换行符,然后通过检查回车符是否在其前面来确定使用了哪一行结尾 有很多基于Get Content的示例可以读取整个文件,也可以读取文件的最后两个字节。第一个文件速度太慢,效率太低,第二个文件不够可靠,因为某些文
load DATA infle
查询中提供一个合适的行终止符。不幸的是,源CSV文件有两种风格:换行符为LF
(Linux上的mysqldump)或CRLF
(我们的DBA团队制作这些)
我一直在寻找一种读取文件的方法,直到遇到换行符,然后通过检查回车符是否在其前面来确定使用了哪一行结尾
有很多基于Get Content
的示例可以读取整个文件,也可以读取文件的最后两个字节。第一个文件速度太慢,效率太低,第二个文件不够可靠,因为某些文件的末尾由于某种原因没有CRLF
考虑到以上内容,在点击LF
之前阅读文件似乎更合理,但我无法让Get Content
流式处理文件,我不知道第一行的结尾有多远
非常感谢您的想法。不能做您想做的事情,因为它要么将整个文件作为单个sring(-Raw
)读取,要么将其作为一个行数组读取,同时从行端剥离CR和LF
A可以满足您的要求:
$file = 'C:\path\to\your.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
}
这正是我想要的,非常感谢。