Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Csv 在不加载整个文件的情况下,检测PowerShell v3首次遇到新行字符_Csv_Powershell - Fatal编程技术网

Csv 在不加载整个文件的情况下,检测PowerShell v3首次遇到新行字符

Csv 在不加载整个文件的情况下,检测PowerShell v3首次遇到新行字符,csv,powershell,Csv,Powershell,为了将大约10MB~80k行的CSV文件正确加载到MySQL,我需要在load DATA infle查询中提供一个合适的行终止符。不幸的是,源CSV文件有两种风格:换行符为LF(Linux上的mysqldump)或CRLF(我们的DBA团队制作这些) 我一直在寻找一种读取文件的方法,直到遇到换行符,然后通过检查回车符是否在其前面来确定使用了哪一行结尾 有很多基于Get Content的示例可以读取整个文件,也可以读取文件的最后两个字节。第一个文件速度太慢,效率太低,第二个文件不够可靠,因为某些文

为了将大约10MB~80k行的CSV文件正确加载到MySQL,我需要在
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
}

这正是我想要的,非常感谢。