my @rows
は、次のデータがあります。Text :: CSVを使用してCSVに書き出すときに、改行で行を区切るにはどうすればよいですか?
sub generate_csv_file {
my $self = shift;
my $rows = shift;
open my $fh, ">:encoding(utf8)", "state_reports.csv" or logf("Can't open CSV file for writing");
$self->csv->print ($fh, $_) for @$rows;
close $fh or logf("Can't close CSV file");
}
それが生成するファイル:私はText::CSV
.をCSVにエクスポートしようとしている
[
[
'',
'2000',
'2001',
'2002',
'2003',
'2004',
'2005',
'2006',
'2007',
'2008',
'2009',
'2010',
'2011',
'2012',
'2013',
'2014',
'2015',
'2016',
'2017'
],
[
'PA',
1848,
1851,
1840,
1783,
1598,
1084,
1308,
1170,
1388,
1326,
1397,
1452,
1435,
1425,
1377,
1343,
420,
30
]
]
を私は基本的にドキュメントのページからリッピングされ、このコードを持っています1行のすべてのデータでこのように見えます:
,2000,2001,2002,2003,2004,2005,2006,2007,2008,2009,2010,2011,2012,2013,2014,2015,2016,2017PA,1848,1851,1840,1783,1598,1084,1308,1170,1388,1326,1397,1452,1435,1425,1377,1343,420,30TX,1165,1198,1202,1177,1132,772,928,866,1024,946,982,1067,1068,1050,1038,1011,310,0
私はドキュメントを見てきましたが、行を改行で区切る明白な方法を見てください。私は何かを欠いているに違いない。
"" \ r \ n "'は安全な選択ではありません。 Perlはデフォルトで ':crlf' PerlIO層をWindowsシステムのSTDINとSTDOUTに適用します。これは、すべての '\ n'を出力時に' \ r \ n 'に変換するので、 '\ r \ n'を送ると、ファイルのすべての行の終わりに' \ r \ r \ n'となります。あなたは 'STDOUT'をbinmodeしてから' eol'に '\ r \ n'を使うことができますが、なぜあなたはそれが見えません。 '$ /'はWindowsとLinuxの両方でデフォルトでは\ n "'です。どこでもデフォルトになるかもしれませんが、VMSやEBCDICシステムのようなプラットフォームについてはわかりません。 – Borodin
@Borodin良いキャッチ、私はなぜH.Merijnブランドがドキュメントにそれを追加したのか分かりません。私は[チケット](https://rt.cpan.org/Ticket/Display.html?id=120145)を提出しました(Text :: CSVドキュメントはText :: CSV_XSドキュメントの恥知らずのコピーですので、ソースから始まるm)。 – ThisSuitIsBlackNot
「Text :: CSV」がコアモジュールであるということは私には起こりませんでした。よくやった。 – Borodin