CSV格式不正确?
我使用Powershell中的EXPORT-CSV生成CSV,然后将其提供给Perl脚本。 但Perl无法导入文件。
我已经validation了CSV文件与工作版本(已从相同的Perl脚本,而不是PowerShell导出),没有任何区别。 彩色标签是非常相同的,它们都以分号作为分隔符。 如果我在Excel中打开文件,则每行中的第一个单元格中的所有内容都将结束(这意味着我必须执行文本到颜色)。 工作文件从一开始就在不同的单元格中结束。
添加到混乱:当我在记事本中打开文件,并复制/粘贴到新文件的内容导入工程!
那么,我错过了什么? 是否有“隐藏”的属性,我不能用记事本发现? 我必须更改编码types吗?
请帮忙:)
为了更好地查看您的CSV文件,请尝试使用Notepad ++ 。 这会告诉你在状态栏中的文件编码。 同时打开隐藏的字符(查看>显示符号>显示所有字符)。 这将显示是否只有换行,或回车+换行,制表符与空格等…您也可以从编码菜单中更改文件编码。 这可能会帮助您识别差异。 记事本不显示任何这些信息。
更新 – 以下是如何在Windows中将文本文件转换为Unix格式的代码:
$allText = [IO.File]::ReadAllText("C:\test.csv") -replace "`r`n?", "`n" $encoding = New-Object System.Text.ASCIIEncoding [IO.File]::WriteAllText("C:\test2.csv", $allText, $encoding)
或者你可以使用Notepad ++(Edit> EOL Conversion> Unix Format)。
当你使用export-csv
时,这可能是一个编码问题
默认是ASCII
,通常情况下应该可以,但是请尝试在Export-CSV
命令中设置-Encoding UTF8
。
从CPAN文本:: CSV :
use Text::CSV; my @rows; my $csv = Text::CSV->new ( { binary => 1 } ) # should set binary attribute. or die "Cannot use CSV: ".Text::CSV->error_diag(); open my $fh, "<:encoding(utf8)", "test.csv" or die "test.csv: $!"; while ( my $row = $csv->getline( $fh ) ) { $row->[2] =~ m/pattern/ or next; # 3rd field should match push @rows, $row; } $csv->eof or $csv->error_diag(); close $fh;
不要试图自己parsingCSV,乍一看似乎很容易,但有很多深入的陷阱。
Excel倾向于认为以.csv格式保存的文件确实是用逗号分隔的。 但是,似乎你正在使用分号。 您可以尝试切换到逗号,或者如果这不是一个选项,请尝试将扩展名更改为.txt。 如果你使用前者,Excel应该自动识别它,而后者则会在加载文件时通过导入向导。
鉴于通过其他职位发现了什么,我认为你最好的select是:
- 转换为CSVstring(使用unix-y回车而不是Windows)
- 将它发送到一个文件,确保编码不是ASCII。
$str = $object | convertto-csv -notypeinformation | foreach-object { $_ -replace "`"","" } #
foreach-object
是删除convertto-csv
添加的额外引号的破解。 如果您的数据可能有双引号,则需要查看备选scheme。
$str | out-file -filepath "path\to\newcsv" -encoding UTF8