0
ファイルを開いて、行内のキーワードを検索しています。 そのキーワードが見つかった場合、私はファイルから同じ行のキーワードを見つけだすまで、ファイルから行を読みとっています。ほとんどの場合、うまくいきます。しかし、正しく動作していません。この行getlineはファイルを開くことで動作しません
::MessageBox(NULL, TEXT("here -2"), TEXT(""), MB_OK);
は、私がチェックしたときに決して実行されません。私はfind関数で関数が成功することはないと考えています。私はgetline()関数を疑っています。私が探しているテキストはファイル内にあり、空白の文字列です[AB CD EFのように]。これは行の最初のパターンとして存在し、このテキストの前に空白がありません。 C++の新機能です。ここに私のコードです。
std::ifstream in(curr_file_path);
std::string search("SEARCH");
std::string line;
char *pDestText = new char[8000*256+1];
int f_match = -1;
int l_match = -1;
int r_val=0;
int textLen = 0;
int flag = 0;
while (std::getline(in, line))
{
r_val = line.find(search);
if (r_val!=(std::string::npos))
{
::MessageBox(NULL, TEXT("here -2"), TEXT(""), MB_OK);
f_match = r_val;
while (std::getline(in, line))
{
::MessageBox(NULL, TEXT("here -3"), TEXT(""), MB_OK);
r_val = line.find(search);
if (r_val != std::string::npos)
{
l_match = r_val;
break;
}
else
{
::MessageBox(NULL, TEXT("here -4"), TEXT(""), MB_OK);
for (int i = 0; i < line.size(); i++)
{
pDestText[textLen++] = line[i];
}
}
}
::MessageBox(NULL, TEXT("here -5"), TEXT(""), MB_OK);
for (int i = 0; i < r_val; i++)
{
//if(line[i]!='=')
::MessageBox(NULL, TEXT("here -6"), TEXT(""), MB_OK);
pDestText[textLen++] = line[i];
}
//pDestText[textLen] = '\0';
::MessageBox(NULL, TEXT("here -7"), TEXT(""), MB_OK);
break;
}
}
in.close();
デバッガを使用してコードを読み込んでファイルを解析するときに、一度に1行ずつコードをステップ実行して、ここに示したすべての変数は、各段階で、問題のコードが検索文字列を含む行を読み込んだときにどのような観測をしましたか?座って誰かがstackoverflow.comであなたのためにそれを把握するのを待つ理由はありません。あなたが5分で自分を理解できたときです。あなたは本当にデバッガの使い方を学ぶべきです。デバッガの使い方を知ることは、すべてのC++開発者にとって必須のスキルです。これがそのためのものです。 –
サムが100%正しい!デバッガを持っていない/使用していない場合は、少なくともデバッグプリントを使用してください。例えば、 'getline'が動作しないと言うと、' std :: cout << line << std :: endl 'それが何を読むのか見て後... –