mapping하는 다음 c++소스를 봐주세요.
---------------
src.txt keystring | value string 1 | value string 2
와 같은 형식으로 10만건정도 들어가있고요.
map.txt에서 keystring | value string |
형식으로 200건 정도 mapping 기준데이터가 들어있습니다.
src.txt를 한줄씩읽어 첫번째 필드(keystring)를 키필드로
map.txt의 첫필드(keystring)과 매핑시켜 mapping된 map.txt의
value string을 가져오는 것인데요. find관련부분에서 에러가 나는것같에요.
에러좀 잡아주십시오. ( '|' 필드구분자)
#include <iostream>
#include <fstream>
#include <string>
#include <algorithm>
#include <map>
typedef stringconst_iterator iter;
map< string , string > m;
iter myfind( const string& str , iter b );
void loadmemory( );
int main()
{
loadmemory();
ifstream infile( "src.txt" ); //source file
ofstream outfile( "src.cpp.new" ); //mapped file
string line;
while ( getline( infile , line ) )
{
iter i , b = line.begin() , f;
string key;
i = myfind( line , b );
if ( f = m.find( key = string( b , i ) ) == m.end() )
{
cout << key << " mapping failed" << endl;
continue;
}
outfile << *f << string( i , line.end() ) << endl;
}
return 0;
}
iter myfind( const string& str , iter b )
{
iter i;
for ( i = b ; i < str.end() ; i++ )
if ( *i == '|' ) return i;
return i;
}
void loadmemory( )
{
string line , key , value;
ifstream infile( "map.txt" ); // mapping file( key string , value string)
while ( getline( infile , line ) )
{
iter i , b = line.begin();
i = find( b , line.end() , '|' );
key = string( b , i );
b = i + 1;
i = find( b , line.end() , '|' );
value = string( b , i );
m[key] = value;
}
}
Re: mapping하는 다음 c++소스를 봐주세요.
음..
= 보다 == 이 연산자가 높습니다. 의미하신 것이 m.end()를 만나지 않은
뭔가를 찾는 결과를 f 에 담으시려면 앞에 ( ) 를 묶어 줘야합니다.
그리고 m의 find 는 map<string,string>::iterator 를 돌려줄 것 같은데, string::const_iterator에 그 결과를 담는 다는 것이 이상하군요.
---
http://coolengineer.com
댓글 달기