2017-01-04 17 views
-1

この問題の重要な点は、私がXcodeでプログラミングしていることです。与えられた量のテキストファイルをセンサーベクトルに読み込む関数を書いた。テキストファイルを取得するために、Pathsは私にファイル名を含むパスを与えてリストに格納する関数を書いた。テキストファイルには、タブで区切られ、後でExcelに保存されるデータが含まれています。問題は、名前にスペースが含まれていて、Macにファイル名のスペースに問題があることです。私はスペースを "\"で置き換えようとしました。これは、スペースがあるファイルをエコーし​​たときに、端末がスペースで行うことです。私はそれらから読むためにファイルを開くことができません。私はあなたの助けに感謝します。C++:名前にスペースを含む複数のファイルからの読み取り

パス機能:

void get_filelist(list<string>& list_in) 
{ 
string full_path; 
DIR *dir; 
struct dirent *ent; 

if((dir = opendir (dir_target.c_str()))!=NULL) 
{ 
while((ent = readdir (dir)) != NULL) 
{ 
    if(strstr(ent->d_name, ".txt") && !strstr(ent->d_name, "Summary")) 
    { 
     full_path = dir_target; 
     full_path = full_path + ent->d_name; 
     list_in.push_back(full_path); 
    } 
} 
closedir(dir); 
} 
else{ 
printf("could not open directory"); 
perror(""); 
} 
} 

が今ここに背中を使用しないでください、私の3次元ベクトル

void fill_vector(list<string> list_in, data_vec& sensors)  
{ 
ifstream myfile; 
size_t found; 
for(list<string>::iterator it = list_in.begin(); it!= list_in.end(); it++) 
{ 
string tab = ""; 
vector<vector<string> > temp_matrix; 
cout << *it << endl; 
myfile.open(*it); 
if(myfile.is_open()) 
{ 
    vector<string> temp_row; 
    while(myfile.is_open()) 
    { 
     getline(myfile, tab, '\t'); 
     found = tab.find('\n'); 
     if(found == string::npos) temp_row.push_back(tab); 
     else{ 
      temp_row.push_back(tab.substr(0, found)); 
      temp_matrix.push_back(temp_row); 
      temp_row.clear(); 
      temp_row.push_back(tab.substr(found+1)); 
     } 
    } 
    myfile.close(); 
} 
else cout << "unable to open file" ; 
sensors.push_back(temp_matrix); 
} 
} 
+0

パスに読み込まれているファイルの内容を表示できますか? –

+0

Unix(OS Xの場合)上のスペースを含むファイルを処理する一般的な問題は、ファイル名を引用することです。私はこの例では何を意味するのか正確には分かりませんが、端末からファイルを出力するには、通常は 'cat"にいくつかのファイル名 "'を実行することをお勧めします。 –

答えて

0

に書き込む機能であり、灰は、ファイル名にスペースを表すためにまたはあなたが取得しますが、さらに悪い混乱に。バックスラッシュはMS DOSのディレクトリ区切り文字です。

両方の仕事

fopen("path/my file.txt", "w"); 

fopen("path/my filetxt", "r"); 

もし予想通り(名前にスペースを持つファイルを作成し、それを開く)あなたが本当に問題はありません。残りのシステムには問題がありますが、名前にスペースを含むファイルが必要な場合は、読み書きできます。

もちろん、できるだけ早くハイフン、アンダースコア、または単純連結に変換すると、ファイル名のスペースは無限の問題になります。

機能

std::string spacesToUnderscores(std:string const &nasty) 

を書くのは十分に簡単です。

関連する問題