CSV形式のデータを展開する方法

[戻る]
kozee [E-Mail] 2001/03/05(月) 23:07:43
"値1-1","値2-1","内容3-1","コード4-1"
"値1-2","値2-2","内容3-2","コード4-2"
"値1-3",・・・・・
と続くCSV形式のデータを

for (ループ数はデータ数により変動) {
    変数1 = 値1-○;
    変数2 = 値2-○;
    変数3 = 内容3-○;
    変数4 = コード4-○;
}

というようなFor文で回して代入していきたいのですが、
「C」か「C++」を使って展開代入していくには、どうのような
処理をすればよいのでしょうか????
どなたでも良いので教えてください。

C言語を始めて3日そこらの私では到底わかりません。 
また、CSV形式というものすらよくわかってない状態です。
馬鹿ですみません。

2001/03/05(月) 23:55:16
> また、CSV形式というものすらよくわかってない状態です。
主に「カンマ区切りのテキスト」形式のことです。

> 「C」か「C++」を使って展開代入していくには、どうのような
> 処理をすればよいのでしょうか????
まず、変数の型によって変わります。


あと、開発環境はなんでしょうか?
MFC? SDK? DOS かな?
書き込みからでは、判断できません。

kozee 2001/03/06(火) 00:08:43
CSVの内容は全て文字列で来ると言っていました。
ですから変数の型は全て文字列型になると思われます。

開発環境は、
Microsoft Visual C++ 6.0
を使っています。

2001/03/06(火) 08:53:03
> 開発環境は、
> Microsoft Visual C++ 6.0
と言うことは、CStringで良いのかな?

CStringだとした場合、

szCSV←CString、データが入ってると思って下さい。

> for (ループ数はデータ数により変動) {
データ数により変動と言うことなので、最大がszCSV.GetLength()以下にすればOK。
for(Loop = 0; Loop < szCSV.GetLength(); Loop++) {
こんな感じでしょうか

1.データを順に見ていって、カンマを見つける
2.カンマを見つけたら、1つ前のカンマ〜現在のカンマの間が項目。
3.1つ前のカンマ位置を現在のカンマ位置に更新。

これをデータ最後まで繰り返すことでデータを取り出すことが出来ますよ。

・・・へたくそな文章ですけど、解ってもらえました?

kozee 2001/03/06(火) 09:36:35
わかんないなりに教えていただいた事に
チャレンジしてみます。

2001/03/06(火) 10:35:42
> わかんないなりに教えていただいた事に
> チャレンジしてみます。

がんばってみて下さい。
以下に小汚いソースですが、サンプルを記載しておきます。
多少は参考になるかと思います。どうでしょう?

CString szCSV, szItem[5];
int     Loop, OldComma = 0, ItemNo = 0;
CString szTest;

szCSV = "ABC,DEF,GHI";

for(Loop = 0; Loop < szCSV.GetLength(); Loop++) {
    if(szCSV.GetAt(Loop) == ',') {
        szItem[ItemNo] = szCSV.Mid(OldComma, (Loop -OldComma));
        MessageBox(szItem[ItemNo]);
        OldComma = Loop +1;
        ItemNo++;
    }
}
if(szCSV.GetAt(szCSV.GetLength() -1) != ',') {
    szItem[ItemNo] = szCSV.Mid(OldComma, szCSV.GetLength());
    MessageBox(szItem[ItemNo]);
}

kozee 2001/03/06(火) 11:05:48
[[解決]]
ありがとうございました。
だいぶ参考になりました。

後は予定の位置に書き込んでいくだけです。

古いスレッドには追加発言できません。