• ベストアンサー

CSV作成方法

データをある桁数ごとに区切ってCSV形式のデータを作成する関数を作成しようと思っております。 現在考えているのは、データ・開始位置・桁数・区分(数値型なのか文字列なのか)を わたすと、区切られたデータが返ってくるようにしたいと思っています。 C初心者のなで、やり方がわかりません。 参考になるやり方もしくはアドレスがあれば教えてください。 宜しくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

No.1 です。 まず、C/C++ では、条件によって関数の返値を変えることは出来ませんので、もしもこの仕様であれば、関数が2種類必要になりますね。 それと、この仕様自体(何かの練習用でなければ)非常に不自然です。 というのも、与えられたデータが可変長でなおかつ、開始点と長さと種類が事前にわかっているのであれば、データにその情報を付加しておけば(それこそ、カンマで区切るとか)それだけで処理できる気はします。 まあ、おおざっぱに書くと、 #include <stdlib.h> void getString(char *data, int kaishi, int keta, char *result) { int i; for(int i = 0; i < keta; i++) result[i] = data[kaishi + i]; result[i] = '\0'; } void getInt(char *data, int kaishi, int keta, int *result) { char buff[32]; getString(buff, kaishi, keta, buff); *result = strtol(data, 0, 10); } という感じでしょうか? char buff[256]; int n; getString(buff, 0, 10, buff); getInt(buff, 0, 10, &n); こんな感じになるでしょうか。

atafutaatafuta
質問者

お礼

回答有難うございます。 まだまだ勉強中で、どのようにやればいいかすらわからない状況でした。 またわからないことがありましたら宜しくお願いします。

その他の回答 (1)

回答No.1

お書きになっている関数の具体的な仕様が全くわからないので(例えば、引数はどうなのかとか、返り値はどうなんとかとか)具体的な回答は出来ないのですが。 そもそも、 ・データというのは、固定長のレコードのことですか? ・それだと、「開始位置」 etc. は複数組ありますね ・その、複数組はどうやって渡すのですか? などなど。 普通は、データがバラバラの段階で、sprintf() で文字列にまとめるか、fprintf() で直接ファイルに書き込むかというのが良いと思いますが。 char buff[256]; sprintf(buff, "%d, %d, %s", a1, a2, name); という感じ。

atafutaatafuta
質問者

補足

回答有難うございます。 説明不足ですみません。 データは可変長です。 たとえば下記のようになっているとします。 123abc456def aaa111 bbbbbb123zzzz 引数として データ:123abc456def 開始位置:0 桁数:3 区分:0 を渡すと123が返ってくる。 データ:123abc456def 開始位置:3 桁数:3 区分:1 を渡すと"abc"が返ってくる。 これを何回も繰り返して行いたいと思っております。

関連するQ&A

専門家に質問してみよう