mapの使い方教えてください
環境 Visual C++ 2008 Microsoft .NET Framework Version 3.5
まだC++をはじめたばかりでよくわかっていない初心者です。
<vector>を使ったソースは出来たのですが、<map>を使って書き直したいと思ってます。
ですがよく理解出来ずに悩んでます。
やりたいことは、
1:ファイルを読み込む
2:ファイルから必要なデータを取り出す
3:データを集計する
4:データを下のように出力する
6620f4ff SB006 1件
読みにくいかもしれませんが、自分の書いたソースを載せておきます。
読み込むデータファイルの中身も下に載せておきます。
アドバイスをお願いします。
#include <vector>
#include <fstream>
#include <iostream>
using namespace std;
struct Record{
char mesh[10]; char err[6];
int num;
};
#define MESHKEYWORD "メッシュ"
#define ERRKEYWORD "ERROR"
int main()
{
ifstream fin(Data001.txt);
if(!fin){
return 1;
}
char str[1024];
Record rec;
vector<Record> ary;
ary.clear() ;
do {
fin.getline(str,sizeof(str));
if(strncmp(&str[0], MESHKEYWORD,strlen(MESHKEYWORD)) == 0) {
strncpy(rec.mesh,&str[10],8);
rec.mesh[8] = '\0';
}
if(strncmp(&str[0], ERRKEYWORD,strlen(ERRKEYWORD)) == 0) {
strncpy(rec.err,&str[6],5);
rec.err[5] = '\0';
bool searchresult = false;
for(int i=0; i < ary.size(); i++){
if(strcmp(ary[i].mesh,rec.mesh) == 0){
if(strcmp(ary[i].err,rec.err) == 0){
ary[i].num++;
searchresult = true;
}
}
}
if(searchresult == false){
rec.num = 1;
ary.push_back(rec) ;
}
}
}while(!fin.eof());
for(int i=0; i < ary.size(); i++){
cout << ary[i].mesh << '\t';
cout << ary[i].err << '\t';
cout << ary[i].num << "件\n";
}
fin.close() ;
ary.clear() ;
return 0;
}
ちなみにデータファイルの中身はこんな感じです。
Data001.txt
メッシュ[ 6620f4ff ]を読み込みます レベル:4 緯度方向:6144 経度方向:2560
ERROR:SB006 背景種別単位ヘッダのオフセットが不正です
ERROR:KT005 データヘッダ1WのRESERVEDに設定されています
ERROR:MNR08 道路図郭ノードから隣接図郭ノードへのリンク方向が異なります
メッシュ[ 6622f4ff ]を読み込みます レベル:4 緯度方向:6144 経度方向:2816
メッシュ[ 5816f5ff ]を読み込みます レベル:5 緯度方向:5120 経度方向:2048
ERROR:KT005 データヘッダ1WのRESERVEDに設定されています
ERROR:KT009 隣接ノード対応情報.自レベル情報.RESERVEDに設定されている
ERROR:KT010 隣接ノード対応情報.下位レベル情報.下位レベルノード番ERROR:KT010 隣接ノード対応情報.下位レベル情報.下位レベルノード番
お礼
ご回答ありがとうございました。 マップは元々地区の事業として作成しておりまして、 今年は私にその担当が回ってきております。 マップとラベルは別業者と聞いておりましたので、マップの作成会社には確認しておりませんでした。 そちらにも聞いてみるようにいたします。