私のプログラムでは、次のコードを使用して、コマンド ライン引数から 2 つのファイル名を取得します。
ifstream routesFile (arv[1]);
ifstream citiesFile (arv[2]);
次に、ファイルを読み込んでデータを取得します。どちらのファイルも CSV です。
while(citiesFile.good()){
string city;
string country;
string xString;
string yString;
getline(citiesFile, country, ',');
getline(citiesFile, city, ',');
getline(citiesFile, xString, ',');
getline(citiesFile, yString);
...
}
ハードコーディングされたファイル名を使用して Visual Studio でこれを行うと、正常に動作します。g++ を使用した後、Linux でコマンド ライン引数を使用すると、ファイルを正しく開くことができますが、その後、多くのエラーが発生します。ファイルの読み取りをテストするために、読み取り値の一部を出力しました。
terminate called after throwing an instance of 'std::out_of_range'
what(): map::at
hereELF
Òœc½Å¹jn!ýô (EÕL˜C
の外観はhere
、実際にプログラムで印刷されているためです。エラーが原因ではありません。コードをテストするために手動で印刷しました。
データを正しく読み取れないようです。citysFile のファイルには、1 行につき常に 4 つの値があり、それぞれが 1 つのコマンドで区切られています。スペースは使用せず、改行文字でファイル内の行を区切ります。上で述べたように、Visual Studio では問題なく動作するので、実際のデータを読み取るだけでは問題ないと思います。