CSV
日本語 | カンマ区切りデータ |
英語 | Comma Separated Value |
ふりがな | しーえすぶい |
フリガナ | シーエスブイ |
各値がカンマ(,)で区切られた文字列。
ファイル形式のひとつ。テキストファイル形式で複数のデータを格納する場合、各値をそのまま書き込むと「値がくっついてしまう」ため、各値を分け隔てるための文字が必要となる。その文字がカンマなのがCSVである。
たとえば「100,200,300」のような形式の行が複数行並ぶ。多くの場合は各行の項目数は同じとなる。
CSVはテキストファイルを用いた出力形式として非常にメジャーなものと言える。
テキストファイルのため簡単に見られること、データ形式が分かりやすいこと、MS-Excelに取り込み編集することができること、といったメリットがあるためである。
だが、CSVは実は扱いが非常に難しいファイル形式である。
まず、CSVを解析するクラスがJ2SEになく、解析を行うためには他ベンダーのライブラリを使用するか自分で作成するしかない。
自分で作成する場合、「,」が項目中に含まれていた場合の処理方法や、それをエスケープするための方法等を決めなければならない。CSVには正式なフォーマットがなく、「\,では分割しない」「""で囲まれていたら分割しない」「項目数は固定だからそれで判断」といったルールを決めなければならない。
システム開発の場合、こういったCSVファイルのフォーマットは他のシステムとの兼ね合いで決まっている事も多く、その場合はそのルールに合わせなければならない。また、そういったルールが新システムでは矛盾となることも少なくない。
さらに、CSVは「見た目」や「Excelへのインポート」も重視されるため、「1行目はヘッダとして項目名を書く」「そのままExcelにインポートできるようにする」といった制約が設けられることも多い。
つまり、CSVは使用者側からみれば「汎用的で使いやすい」が、プログラマーから見れば「決定事項が少ないため使いにくい」というファイル形式なのである。
CSVの代替案としてXMLがある。
XMLであれば解析用ライブラリが抱負で見た目としても悪くない。
が、多くのユーザーはXMLに対して好感触を持たないため、当分の間CSVはなくならないだろう。
ちなみに似た単語だが「CVS」は別物。
間違えると突っ込まれるため注意。
ファイル形式のひとつ。テキストファイル形式で複数のデータを格納する場合、各値をそのまま書き込むと「値がくっついてしまう」ため、各値を分け隔てるための文字が必要となる。その文字がカンマなのがCSVである。
たとえば「100,200,300」のような形式の行が複数行並ぶ。多くの場合は各行の項目数は同じとなる。
CSVはテキストファイルを用いた出力形式として非常にメジャーなものと言える。
テキストファイルのため簡単に見られること、データ形式が分かりやすいこと、MS-Excelに取り込み編集することができること、といったメリットがあるためである。
だが、CSVは実は扱いが非常に難しいファイル形式である。
まず、CSVを解析するクラスがJ2SEになく、解析を行うためには他ベンダーのライブラリを使用するか自分で作成するしかない。
自分で作成する場合、「,」が項目中に含まれていた場合の処理方法や、それをエスケープするための方法等を決めなければならない。CSVには正式なフォーマットがなく、「\,では分割しない」「""で囲まれていたら分割しない」「項目数は固定だからそれで判断」といったルールを決めなければならない。
システム開発の場合、こういったCSVファイルのフォーマットは他のシステムとの兼ね合いで決まっている事も多く、その場合はそのルールに合わせなければならない。また、そういったルールが新システムでは矛盾となることも少なくない。
さらに、CSVは「見た目」や「Excelへのインポート」も重視されるため、「1行目はヘッダとして項目名を書く」「そのままExcelにインポートできるようにする」といった制約が設けられることも多い。
つまり、CSVは使用者側からみれば「汎用的で使いやすい」が、プログラマーから見れば「決定事項が少ないため使いにくい」というファイル形式なのである。
CSVの代替案としてXMLがある。
XMLであれば解析用ライブラリが抱負で見た目としても悪くない。
が、多くのユーザーはXMLに対して好感触を持たないため、当分の間CSVはなくならないだろう。
ちなみに似た単語だが「CVS」は別物。
間違えると突っ込まれるため注意。
参考サイト
// Sample.java
public class Sample
{
public static void main( String[] args )
{
String[] strings = new String[2];
// 次のようなデータがCSV。
strings[0] = "100,200,300";
strings[1] = "400,500,600";
System.out.println( strings[0] );
System.out.println( strings[1] );
// 100,200,300
// 400,500,600
// 普通はこれをファイルに出力します。
// 逆に、ファイルから取得した場合は
// Stringクラスのsplit()メソッドで分割します。
String[] items = strings[0].split( "," );
System.out.println( items[0] );
System.out.println( items[1] );
System.out.println( items[2] );
// 100
// 200
// 300
// ただし、これは一番簡単な方法。
// 「データ中に,が含まれている場合」とかは
// 考えていません。
}
}
public class Sample
{
public static void main( String[] args )
{
String[] strings = new String[2];
// 次のようなデータがCSV。
strings[0] = "100,200,300";
strings[1] = "400,500,600";
System.out.println( strings[0] );
System.out.println( strings[1] );
// 100,200,300
// 400,500,600
// 普通はこれをファイルに出力します。
// 逆に、ファイルから取得した場合は
// Stringクラスのsplit()メソッドで分割します。
String[] items = strings[0].split( "," );
System.out.println( items[0] );
System.out.println( items[1] );
System.out.println( items[2] );
// 100
// 200
// 300
// ただし、これは一番簡単な方法。
// 「データ中に,が含まれている場合」とかは
// 考えていません。
}
}
// Sample.java public class Sample { public static void main( String[] args ) { String[] strings = new String[2]; // 次のようなデータがCSV。 strings[0] = "100,200,300"; strings[1] = "400,500,600"; System.out.println( strings[0] ); System.out.println( strings[1] ); // 100,200,300 // 400,500,600 // 普通はこれをファイルに出力します。 // 逆に、ファイルから取得した場合は // Stringクラスのsplit()メソッドで分割します。 String[] items = strings[0].split( "," ); System.out.println( items[0] ); System.out.println( items[1] ); System.out.println( items[2] ); // 100 // 200 // 300 // ただし、これは一番簡単な方法。 // 「データ中に,が含まれている場合」とかは // 考えていません。 } }