CSVファイルの読み書き

csv.png

まとめ表

手法 関数名 区切るとき 文字から数値に変換するとき 長所 短所
c++ getline() boost::tokenizer boost::lexical_cast ファイル読み込みはこっちの方がスッキリ boostは面倒
c fgetc() strtok() atof(),atoi() シンプル
java InpusStream.read() String.split(",") byteでしか読めない
python(数値) numpy.genfromtxt() delimiter="," そのままでok 便利 ない
python(文字列) csv.reader() delimiter="," - バグがわかりにくい

数値として扱いたい場合

import numpy;
csvdata= numpy.genfromtxt('test.csv', delimiter=",",dtype='B')
for data in csvdata:
    print data;

文字列として扱いたい場合
import csv;
csvdata=csv.reader(open('test.csv', 'rb'), delimiter=',')
for data in csvdata:
   print data;

より詳細はpythonでcsvのページへ

書き

#include <stdio.h>
#include <fstream>
using namespace std;
void CSVOut(const char* _str){
    ofstream ofs;
    ofs.open(_filename);
 
        for(int y=0;y<TEXY;y++){
            for(int x=0;x<TEXX;x++){
            ofs<<(int)texturedatapointer[(y*TEXX+x)*4+1]<<",";
        }
        //行末尾の","を削除するにはこうします 
//が、行末に,あってもエクセルで読めるし行末に,ある方が読み込みコードが書きやすいので
//こんなことしなくてもいいと思います
    ofs.seekp(-1,ios::cur);
        ofs<<endl;
    }
    ofs.close();
}

エラー

ExcelでCSVファイルを開いた時に起こるエラー

SYLK ファイルであることを確認しましたが、読み込むことができません

1行目の最初のデータが「ID」の CSV ファイルを開くと、このエラーが発生するらしい。[1]
これは、その場合に SYLK形式のファイルと誤認識してしまい、実際には形式がまったく違うので正しく読み込めないために発生するエラーです。
テキストエディタでファイルを開いて最初のデータをダブル コーテーションで囲んで「"ID"」にしたり、先頭にスペースを入れてから読み込むことで、エラーを回避できます。

サポートサイト Wikidot.com