- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Cコンソールで助言お願いします。)
Cコンソールでの文字列処理に関する助言をお願いします。
このQ&Aのポイント
- Cコンソールでの文字列処理に関して助言をお願いします。テキストファイルには不要な情報が多く含まれており、表示したいのは「..ABCDE:」で始まり「..」で終わる文字列のみです。区切りとして「..」を使用し、切り分けた後に「ABCDE」の分だけ8文字分アドレスを進めて表示することを考えています。また、指定した日付のファイルを読み込み、必要なデータのみを表示させたいと思っていますが、ループさせるとわかりづらくなってしまいます。助言をお願いします。
- Cコンソールでの文字列処理に関する助言をお願いします。テキストファイルには不要な情報が多く含まれており、表示したいのは「..ABCDE:」で始まり「..」で終わる文字列のみです。区切りとして「..」を使用し、切り分けた後に「ABCDE」の分だけ8文字分アドレスを進めて表示することを考えています。また、指定した日付のファイルを読み込み、必要なデータのみを表示させたいと思っていますが、ループさせるとわかりづらくなってしまいます。助言をお願いします。
- Cコンソールでの文字列処理に関して助言をお願いします。テキストファイルには不要な情報が多く含まれており、表示したいのは「..ABCDE:」で始まり「..」で終わる文字列のみです。区切りとして「..」を使用し、切り分けた後に「ABCDE」の分だけ8文字分アドレスを進めて表示することを考えています。また、指定した日付のファイルを読み込み、必要なデータのみを表示させたいと思っていますが、ループさせるとわかりづらくなってしまいます。助言をお願いします。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
「..ABCDE:」で始まり「..」で終わる文字列ならば fgets() で1行読んだ後で strncmp() で先頭の方を比較して、'\n' を削除後に 2文字分手前の文字を strcmp() で比較すればいいと思いますよ。 例 while (fgets(str, sizeof(str), fp)) { size_t len = strlen(str); /* 改行を含めて11バイト未満は決して一致しないので読み飛ばす。 */ if (len < 11) continue; str[len - 1] = '\0'; /* 改行を削除する。 */ len--; /* lenを現在の長さと同じにする。 */ if (strncmp(str, "..ABCDE:", 8) == 0 && strcmp(&str[len - 2], "..") == 0) { /* 一致したので出力する。 */ /* 最後の ".." は不要なので削除する。 */ str[len - 2] = '\0'; /* 先頭8文字よりも後を出力する。 */ puts(&str[8]); } }
お礼
ありがとうございました。 ようやく解決しました。