Microsoft Visual C#にてcsvファイルを作成しようとしているのですが、NameValueCollectionへの値の追加が上手くいきません
//開発環境:Microsoft Visual C# 2005
下記のようにデータが入った"kaiseki"という名前のNameValueCollectionがあります
(カテゴリは一つ一つの"kaiseki"の中では全て統一)
------------------------
単語A,カテゴリ,出現回数
単語B,カテゴリ,出現回数
------------------------
上記の形式のデータをcsvファイルにどんどん登録していき下記のような内容のcsvにしたいのです
-----------------------------------------------------
単語A,カテゴリX,Xでの出現回数,カテゴリY,Yでの出現回数
単語B,カテゴリX,Xでの出現回数,カテゴリZ,Zでの出現回
------------------------------------------------------
ですが、下記の二つに悩んでいます
・最も最後に追加されたもの以外のカテゴリが消えてしまう
(単語,出現回数のようになってしまいます)
・上のでカテゴリが消えてしまっているせいなのか、同じ単語,カテゴリの時に出現数が足されない
処理としては解析結果の"kaiseki"を、csvから読み込んで作成したNameValueCollectionの"kaiseki_Yomi"に追加していき
それをcsvに上書きする、という流れで作成しようとしています
「ここが変だ」、「こうした方がいい」等ありましたら、どうか御教授願います
最後まで読んでいただきありがとうございましたm(__)m
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~
//辞書に新規追加
foreach(string kotoba in kaiseki.Keys)
{
int countretu=0;
int atta=0;
int iti=0;
int kazoe=0;
int newvalue=0;
String countYomi2=("");
string[] cate_retu=new string[100000];
string[] cate_kai_retu=new string[100000];
string cate_kaiYomi0=("");
int q=0;
//解析結果の値を代入・・・[カテゴリ,出現回数]
cate_kai=kaiseki[kotoba];
//解析結果の値を','で分割して代入・・・[カテゴリ],[出現回数]
string[] cate_kai2=cate_kai.Split(',');
//読み込んだ辞書の値を代入・・・[カテゴリ,出現回数,カテゴリ,出現回数]
cate_kaiYomi0=kaisekiYomi[kotoba];
if(cate_kaiYomi0!=null)//すでにキーが登録されていた場合の処理
{
//読み込んだ辞書の値を','で分割・・・[カテゴリ],[出現回数],[カテゴリ],[出現回数]
cate_kai_retu=cate_kaiYomi0.Split(',');
//cate_retuにカテゴリ部分のみを追加・・・[カテゴリ],[カテゴリ]
foreach(string cate in cate_kai_retu)
{countretu++;
if(countretu%2==1){
cate_retu[q]=cate;
q++;
}
}
//辞書側のカテゴリ(cate_retu)と解析結果のカテゴリを比較
foreach(string cate in cate_retu)
{
kazoe++;
if(cate==cate_kai2[0]){
atta=1;
iti=2*kazoe-1;
}
}
//同じカテゴリが既に登録されている場合、出現回数を足して登録し直す
if(atta==1){
string value=cate_kai_retu[iti];
string value2=cate_kai2[1];
int value0i=int.Parse(value);
int value2i=int.Parse(value2);
newvalue=value0i+value2i;
int x=iti-1;
countYomi2=cate_kai_retu[x]+","+newvalue;
kaisekiYomi[kotoba]=countYomi2;
}
}
else//キーがまだ登録されていない場合の処理
{
kaisekiYomi.Add(kotoba,cate_kai);
}
}
//開く
System.IO.StreamWriter sr =new System.IO.StreamWriter(csvPath,false, enc);
foreach(string test in kaisekiYomi.Keys)
{
sr.WriteLine(test+","+kaisekiYomi[test]);
}
//結果をtextBox1に出力
StringBuilder stringBuilderYomi=new StringBuilder();
foreach(string test in kaisekiYomi.Keys)
{
stringBuilderYomi.AppendLine(test+"(カテゴリ,数="+kaisekiYomi[test]+")");
}
textBox1.Text=stringBuilderYomi.ToString();
//閉じる
sr.Close();
お礼
そうですか。サングラスをしてればシールドはいらないと思っていたので・・・。ありがとうございます