これまでのところ、次のコードがあります
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main(){
ofstream outfile;
ifstream infile;
string line;
infile.open ("input.DAT");
outfile.open ("output.txt");
while (infile.good()){
getline (infile, line);
outfile << line << endl;
}
outfile.close();
infile.close();
return 0;
}
これは、input.DAT を取得して output.txt に出力するだけです。ただし、入力ファイルはクリーンではありません。次のような形式です。
(ASCII GARBAGE) 1:66 OS ワルシャワ、ポーランド(ASCII GARBAGE)
例の写真:
もう一つの例:
だから私がやりたいのは、改行で区切られたゴミの間のものを出力することです。しかし、文字ごとに反復/出力する方法と、有効な出力を指示する良い方法はわかりません(文字が特定の範囲内にあるかどうかを確認できることを意味しますが、これがどのようになっているのかわかりません) C++ で行われます)。
私は、(数字)(数字)(コロン)(数字)(スペース)または(数字)(コロン)(数字)(スペース)の形式で何かを検索することから始めて、それからすべてを取り上げることが役立つと思います文字/コンマ/ピリオド/などではないもの、および改行の追加。これはできますか?
これが理にかなっていることを願っています!さらに明確にする必要がある場合はお知らせください。
編集:最初の試み
#include <iostream>
#include <fstream>
#include <string>
#include <algorithm>
#include <cctype>
using namespace std;
int main(){
ofstream outfile;
ifstream infile;
string line, res;
infile.open ("input.DAT");
outfile.open ("output.txt");
while (infile.good()){
std::getline(infile, line);
res = "";
for(std::string::size_type i = 0; i < line.length()-4; i++){
if (isdigit(line[i+1]) && line[i+2]==":" && isdigit(line[i+3])){
res+=line[i];
i++;
while (isalnum(line[i]) || line[i] == "/" || line[i] == "\\" || line[i] == "=" || line[i] == "#" || line[i] == ":" || line[i] == " " || line[i] == "." || line[i] == "," || line[i] == "-" || line[i] == "'" || line[i] == '"'){
res+=line[i];
i++;
}
outfile << res << endl;
res = "";
}
}
}
outfile.close();
infile.close();
return 0;
}
ただし、「ISO C ++はポインターと整数の比較を禁止している」ため、コンパイルされません
編集:これを自分で修正し、引用符を一重引用符に変更しました。ここで自分の問題を理解したと思います。ただし、質問を削除することはできません。