CSV(TSV)の読み込み

概要

  • CSV(TSV)を読み込んで、ヘッダ行をキーにしたハッシュの配列を作成する。
  • ファイルの文字コードは UTF-8。
  • { binary => 1 } がデフォルトで指定されるように変更。(2012/02/28)
  • 戻り値が配列のリファレンスであることを確認してからデリファレンスするようにした。(2012/02/28)

ソース

readCSV.pl

すべてを展開すべてを収束
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
-
|
|
|
|
|
|
|
|
|
|
|
|
|
!
 
 
#!/usr/bin/perl
# CSV(TSV)を読み込んで、ヘッダ行をキーにしたハッシュの配列を作成する。
 
use strict;
use warnings;
use utf8;
use Encode;
use Text::xSV::Slurp qw( xsv_slurp );
use YAML::Syck;
 
$YAML::Syck::ImplicitUnicode = 1;
 
my $charsetConsole    = 'CP932';
#my $charsetConsole	= 'UTF-8';
my $charsetFile        = 'UTF-8';
 
binmode( STDIN,  ":encoding($charsetConsole)" );
binmode( STDOUT, ":encoding($charsetConsole)" );
binmode( STDERR, ":encoding($charsetConsole)" );
 
my $filename = 'データ.txt';
my $csvoption = { sep_char => "\t" };
 
my @csv = readXSV( $filename, $csvoption );
print Dump( \@csv ) . "\n" ;
 
sub readXSV
{
    my( $fname, $opt ) = @_;
    $opt = { binary => 1, %{$opt} };
    open( my $fhin, "<:encoding($charsetFile)", encode( $charsetConsole, $fname ) )
        or die( "$fname: $!" );
    my @body = <$fhin>;
    close( $fhin );
    my $ret = xsv_slurp( 
        string => join( "", @body ), 
        text_csv => $opt, 
    );
    return ( ref( $ret ) eq 'ARRAY' ) 
        ? @{ $ret } 
        : $ret ;
}
 
# EOF

入力

IDNameGenderDOBComment
1芳佳21930/08/18九字兼定
2美緒21925/08/26ドーベルマン
3ミーナ21926/03/11灰色狼

出力

--- 
- 
  Comment: 九字兼定
  DOB: 1930/08/18
  Gender: 2
  ID: 1
  Name: 芳佳
- 
  Comment: ドーベルマン
  DOB: 1925/08/26
  Gender: 2
  ID: 2
  Name: 美緒
- 
  Comment: 灰色狼
  DOB: 1926/03/11
  Gender: 2
  ID: 3
  Name: ミーナ

添付ファイル: filereadCSV.zip 353件 [詳細]

リロード   新規 下位ページ作成 編集 凍結 差分 添付 コピー 名前変更   ホーム 一覧 検索 最終更新 バックアップ リンク元   ヘルプ   最終更新のRSS
Last-modified: Tue, 28 Feb 2012 13:27:47 JST (2333d)