値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形式というものすらよくわかってない状態です。
馬鹿ですみません。
> また、CSV形式というものすらよくわかってない状態です。
主に「カンマ区切りのテキスト」形式のことです。
> 「C」か「C++」を使って展開代入していくには、どうのような
> 処理をすればよいのでしょうか????
まず、変数の型によって変わります。
あと、開発環境はなんでしょうか?
MFC? SDK? DOS かな?
書き込みからでは、判断できません。
CSVの内容は全て文字列で来ると言っていました。
ですから変数の型は全て文字列型になると思われます。
開発環境は、
Microsoft Visual C++ 6.0
を使っています。
> 開発環境は、
> 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つ前のカンマ位置を現在のカンマ位置に更新。
これをデータ最後まで繰り返すことでデータを取り出すことが出来ますよ。
・・・へたくそな文章ですけど、解ってもらえました?
わかんないなりに教えていただいた事に
チャレンジしてみます。
> わかんないなりに教えていただいた事に
> チャレンジしてみます。
がんばってみて下さい。
以下に小汚いソースですが、サンプルを記載しておきます。
多少は参考になるかと思います。どうでしょう?
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]);
}
ありがとうございました。
だいぶ参考になりました。
後は予定の位置に書き込んでいくだけです。