オープンソース・ソフトウェアの開発とダウンロード

CVS リポジトリの参照

Contents of /perldocjp/docs/modules/Text-CVS_XS-0.23/Text-CSV_XS-0.23.pod

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph


Revision 1.1 - (show annotations) (download)
Sun Dec 6 16:58:46 2009 UTC (14 years, 5 months ago) by iwai
Branch: MAIN
rename Text-CVS_XS to Text-CSV_XS: original author: anahori

1 =head1 名前
2
3 Text::CSV_XS - CSV形式の操作ルーチン
4
5 =head1 概要
6
7 use Text::CSV_XS;
8
9 $csv = Text::CSV_XS->new(); # 新しいオブジェクトを作る
10 $csv = Text::CSV_XS->new(\%attr); # 新しいオブジェクトを作る
11
12 $status = $csv->combine(@columns); # 縦列を連結して一つの文字列にする
13 $line = $csv->string(); # 連結したその文字列を得る
14
15 $status = $csv->parse($line); # CSV文字列をパースしてフィールド群に切り分ける
16 @columns = $csv->fields(); # パースされたそのフィールド群を得る
17
18 $status = $csv->status(); # 直前のステータスを得る
19 $bad_argument = $csv->error_input(); # 直前の不正引数を得る
20
21 $status = $csv->print($io, $columns); # $io ファイルへ、
22 # すぐさまフィールド群を書き込む
23
24 $columns = $csv->getline($io); # $io ファイルから1行を読み込み、パース
25 # した後にフィールド群の配列リファレンスを返す
26
27 $csv->types(\@t_array); # 縦列の形式を設定する
28
29 =head1 説明
30
31 コンマ区切り文字列 CVS を組み立てたり切り分けたりするのに、Text::CVS_XS は便利な機能を提供します。Text::CVS_XS クラスのインスタンスでは、フィールド群を連結して CSV 文字列にしたり、その反対にCSV文字列をパースしてフィールド群にすることができます。
32
33
34 =head1 関数群
35
36 =over 4
37
38 =item version()
39
40 (クラスメソッド) 使用しているモジュールのバージョンを返す。
41
42 =item new(\%attr)
43
44 (クラスメソッド) 新しい Text::CSV_XS インスタンスを返す。オブジェクトの属性値は、ハッシュリファレンス C<\%attr> で(随意に)指定する。次の属性値を指定できる:
45
46 =over 8
47
48 =item quote_char
49
50 空白文字を含むフィールドをクオートするための文字で、デフォルトは二重引用符 (C<">)。undef を指定すると、文字列がクオートされない(空白文字を使わないような簡素な場合のみ使用すること)。
51
52 =item eol
53
54 横行に加える行の終わりを示す文字で、一般的には C<undef> (無、デフォルト)、 C<"\012"> (ラインフィード) もしくは C<"\015\012"> (キャリッジリターン+ラインフィード) である。
55
56 =item escape_char
57
58 クオートしたフィールドの中でエスケープを施す文字で、デフォルトではクオート文字 (C<">) と同じ。
59
60 =item sep_char
61
62 フィールドを区切る文字で、デフォルトはコンマ (C<,>)。
63
64 =item binary
65
66 この属性値が真 (TRUE) ならば、クオートしたフィールドの中でバイナリ文字を使用することができる。このバイナリ文字にはラインフィード、キャリッジリターン、そして NUL バイトが含まれている( NUL バイトは C<"0> としてエスケープしなくてはならない)。デフォルトで、この機能はオフ。
67
68 =item types
69
70 カラムの形式;この属性値はすぐさま後述の I<types> メソッドに渡される。I<types> メソッドを使用する場合を除き、この属性値を設定してはならない。詳しくは、後述の I<types> メソッドの説明を参照。
71
72 =item always_quote
73
74 フィールド内のテキストが区切り文字を含むような場合など、その必要がある際にのみデフォルトではフィールドはクオートで区切られる。この属性値を真 TRUE に設定すると、全てのフィールドがクオートされる。この機能は外部アプリケーションを用いる場合に便利である。( Text::CVS_XS を使わない可哀想なプログラマのために :-)
75
76 =back
77
78 これらをまとめると、
79
80 $csv = Text::CSV_XS->new();
81
82 は、以下と同じである;
83
84 $csv = Text::CSV_XS->new({
85 'quote_char' => '"',
86 'escape_char' => '"',
87 'sep_char' => ',',
88 'binary' => 0
89 });
90
91 =item combine
92
93 $status = $csv->combine(@columns);
94
95 このオブジェクト関数は、引数から CVS 文字列を組み立て、成功か失敗のステータスを返す。失敗するのは、おそらく引数が足らないか不正な文字列を引数が含むからであろう。成功した場合、 C<string()> によって組み立てた CSV 文字列を得ることができる。失敗した場合、C<string()> は 未定義を返し C<error_input()> によって無効だった引数を得ることができる。
96
97 =item print
98
99 $status = $csv->print($io, $columns);
100
101 combine と似ているが、このメソッドは配列リファレンス(配列ではない)が入力されることを期待する;組み立てた CSV 文字列をまったく作らない;I<$io> オブジェクトへ直ちに書き込む。ここで、I<print> メソッドに与えるのは通常、I<$io> オブジェクトか 類似した他のオブジェクトである。注意すべき事として、この呼び出しで次の方法は間違いである;
102
103
104 open(FILE, ">whatever");
105 $status = $csv->print(\*FILE, $columns);
106
107 C<\*FILE> グロブはオブジェクトではないので、print メソッドを実行することができない。解決方法は IO:File オブジェクトを使用するか IO::Wrap オブジェクトの中へグロブを隠蔽してしまうことである。詳細は、L<IO::File(3)> と L<IO::Wrap(3)> を参照。
108
109 パフォーマンス上の理由から、この print メソッドは組み立てた CSV 文字列を外部へ提供しない。とりわけ I<$csv-E<gt>string()>, I<$csv-E<gt>status()>, I<$csv->fields()>, そして I<$csv-E<gt>error_input()> は、このメソッドの後で意味をなさない。
110
111 =item string
112
113 $line = $csv->string();
114
115 このオブジェクト関数は、 C<parse()> への入力したものか C<combine()> で組み立てられた CSV 文字列か、それが何であれ直前のものを返す。
116
117 =item parse
118
119 $status = $csv->parse($line);
120
121 このオブジェクト関数は CSV 文字列をフィールドに切り分けて、しかる後に成功か失敗のステータスを返す。失敗するのは、引数の不足か与えられた CSV 文字列が不適切なフォーマットだからであろう。成功した場合には、C<fields()> メソッドによって切り分けられたフィールドが得られる。失敗の場合には、 C<fields()> は未定義値を返し C<error_input()> によって不正な引数を得ることができる。
122
123 カラムの形式を設定するために、I<types()> メソッドを使うべきである。後述の説明を参照。
124
125
126 =item getline
127
128 $columns = $csv->getline($io);
129
130 これは print と対をなすもので、parse が combine の対となるようなものだ: IO オブジェクト $IOにおいて $IO->getline() を用いて1行を読み出し、この1行をパースして配列リファレンスに納める。この配列リファレンスが返されるか、失敗した場合には undef が返される。
131
132 繰り返しになるが、 I<$csv-E<gt>string()>, I<$csv-E<gt>fields()>, そして I<$csv-E<gt>status()> メソッドはこのメソッドの後では意味をなさない。
133
134 =item types
135
136 $csv->types(\@tref);
137
138 このメソッドは、縦行を指定された形式へ強制的に変換するのに用いる。たとえば、整数値で表現された1カラム、倍精度数形式の2カラム、文字列の1カラムがあった場合は、次を実行することになるだろう
139
140 $csv->types([Text::CSV_XS::IV(),
141 Text::CSV_XS::NV(),
142 Text::CSV_XS::NV(),
143 Text::CSV_XS::PV()]);
144
145 カラム形式をデコードするときのみ、言い換えると I<parse()> と I<getline()> メソッドを使うときにのみ、このカラム形式が用いられる。
146
147
148 カラムタイプを解除するのは次のようにする
149
150 $csv->types(undef);
151
152 あるいはまた、現在の形式を得るには次の方法を採る
153
154 $types = $csv->types();
155
156 =item fields
157
158 @columns = $csv->fields();
159
160 このオブジェクト関数は、 C<combine()> への入力値か C<parse()> から得られる切り分けられたフィールド群か、それが何であれ直前のものを返す。
161
162 =item status
163
164 $status = $csv->status();
165
166 This object function returns success (or failure) of C<combine()> or
167 C<parse()>, whichever was called more recently.
168 このオブジェクト関数は、 C<combine()> か C<parse()> かそれが何であれ直前のメソッドが成功(もしくは失敗)したかどうかを返す。
169
170 =item error_input
171
172 $bad_argument = $csv->error_input();
173
174 このオブジェクト関数は、C<combine()> か C<parse()> か、それが何であれ直前のメソッドがエラーとなった引数(もしあれば)を返す。
175
176 =back
177
178 =head1 例
179
180 require Text::CSV_XS;
181
182 my $csv = Text::CSV_XS->new;
183
184 my $column = '';
185 my $sample_input_string = '"I said, ""Hi!""",Yes,"",2.34,,"1.09"';
186 if ($csv->parse($sample_input_string)) {
187 my @field = $csv->fields;
188 my $count = 0;
189 for $column (@field) {
190 print ++$count, " => ", $column, "\n";
191 }
192 print "\n";
193 } else {
194 my $err = $csv->error_input;
195 print "parse() failed on argument: ", $err, "\n";
196 }
197
198 my @sample_input_fields = ('You said, "Hello!"',
199 5.67,
200 'Surely',
201 '',
202 '3.14159');
203 if ($csv->combine(@sample_input_fields)) {
204 my $string = $csv->string;
205 print $string, "\n";
206 } else {
207 my $err = $csv->error_input;
208 print "combine() failed on argument: ", $err, "\n";
209 }
210
211 =head1 注意
212
213 このモジュールは策定中の CVS フォーマットを元にしているが、そのフォーマットが最も一般的なものとは言い難いかもしれない。
214
215 =over 4
216
217 =item 1
218
219 CVS フィールドの中に納めることができる文字には、 0x09 (tab) と of 0x20 (space) から 0x7E (tilde)の包括的な範囲とを含む。バイナリモードではクオートされたフィールドの中において全ての文字を受け付ける。
220
221 =item 2
222
223 CSV のフィールドは、二重引用符(quote char)で挟まれるべきである。
224
225 =item 3
226
227 CVS のフィールドの中にコンマ(separator char)がある場合は、二重引用符で挟まれなければならない。
228
229 =item 4
230
231 CVS フィールドの中に二重引用符を埋め込む場合は、一対となった二重引用符の間に挟まれなければならない。バイナリモードでは特に、 NUL バイトを示す C<"0> を用いるべきである。
232
233 =item 5
234
235 CSV 文字列は、 0x0A (ラインフィード) もしくは 0x0D + 0x0A(キャリッジリターン + ラインフィード)で終わるべきである。
236
237 =head1 AUTHOR
238
239 Alan Citterman F<E<lt>alan@mfgrtl.comE<gt>> が、この Perl モジュールを最初に書いた。Alan へ Text::CSV_XS に関するメールをどうか送らないで欲しい。なぜなら、今ではこのモジュールの主要部分を占める C コード部分について、彼は関与していないからである。
240
241 Jochen Wiedmann F<E<lt>joe@ispsoft.deE<gt>> が、エンコードとデコードのルーチンを有限状態マシンを実装する C コードで書き直し、クオート、エスケープ、そしてセパレーター文字変数、バイナリモード、そして print と getline メソッドを加えた。
242
243 =head1 SEE ALSO
244
245 L<perl(1)>, L<IO::File(3)>, L<IO::Wrap(3)>
246
247 =head1 Translator into Japanese (翻訳者)
248
249 anahori (at users.sourceforge.jp)
250
251 Japanized Perl Resources Project (L<http://sourceforge.jp/projects/perldocjp/>)
252
253 =cut

Back to OSDN">Back to OSDN
ViewVC Help
Powered by ViewVC 1.1.26