4

Powershell で EXPORT-CSV を使用して CSV を生成し、それを Perl スクリプトにフィードしています。しかし、Perl はファイルをインポートできません。

CSV ファイルを動作中のバージョン (powershell ではなく同じ Perl スクリプトからエクスポートされたもの) に対して検証しましたが、違いはありません。列はまったく同じで、どちらも区切り文字としてセミコロンがあります。ただし、Excel でファイルを開くと、すべてが各行の最初のセルに表示されます (つまり、テキストを列に変換する必要があります)。作業ファイルは、最初から別のセルで終了します..

混乱に加えて、メモ帳でファイルを開き、その内容を新しいファイルにコピー/貼り付けすると、インポートが機能します!

それで、私は何が欠けていますか?メモ帳で見つけられない「隠し」プロパティはありますか? エンコーディング タイプを変更する必要がありますか?

助けてください:)

4

5 に答える 5

6

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++ を使用することもできます ([編集] > [EOL 変換] > [Unix 形式])。

于 2012-01-22T00:34:36.990 に答える
2

使用している場合、エンコードの問題である可能性がありますexport-csv

デフォルトはASCIIで、通常はこれで問題ありませんが-Encoding UTF8、コマンドで設定してみてくださいExport-CSV

于 2012-01-21T23:53:22.367 に答える
1

CPAN Text::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;

自分で CSV を解析しようとしないでください。一見簡単に思えますが、陥る深い穴がたくさんあります。

于 2012-01-21T23:51:40.047 に答える
0

Excel は、.csv 形式で保存されたファイルが実際にカンマ区切りであると想定する傾向があります。ただし、セミコロンを使用しているようです。カンマに切り替えてみるか、それができない場合は、拡張子を .txt に変更してみてください。前者の場合、Excel は自動的にファイルを認識しますが、後者の場合、ファイルをロードするとインポート ウィザードが表示されます。

于 2012-01-21T23:34:36.350 に答える