• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Cコンソールで助言お願いします。)

Cコンソールでの文字列処理に関する助言をお願いします。

このQ&Aのポイント
  • Cコンソールでの文字列処理に関して助言をお願いします。テキストファイルには不要な情報が多く含まれており、表示したいのは「..ABCDE:」で始まり「..」で終わる文字列のみです。区切りとして「..」を使用し、切り分けた後に「ABCDE」の分だけ8文字分アドレスを進めて表示することを考えています。また、指定した日付のファイルを読み込み、必要なデータのみを表示させたいと思っていますが、ループさせるとわかりづらくなってしまいます。助言をお願いします。
  • Cコンソールでの文字列処理に関する助言をお願いします。テキストファイルには不要な情報が多く含まれており、表示したいのは「..ABCDE:」で始まり「..」で終わる文字列のみです。区切りとして「..」を使用し、切り分けた後に「ABCDE」の分だけ8文字分アドレスを進めて表示することを考えています。また、指定した日付のファイルを読み込み、必要なデータのみを表示させたいと思っていますが、ループさせるとわかりづらくなってしまいます。助言をお願いします。
  • Cコンソールでの文字列処理に関して助言をお願いします。テキストファイルには不要な情報が多く含まれており、表示したいのは「..ABCDE:」で始まり「..」で終わる文字列のみです。区切りとして「..」を使用し、切り分けた後に「ABCDE」の分だけ8文字分アドレスを進めて表示することを考えています。また、指定した日付のファイルを読み込み、必要なデータのみを表示させたいと思っていますが、ループさせるとわかりづらくなってしまいます。助言をお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.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]);  } }

t_turbo
質問者

お礼

ありがとうございました。 ようやく解決しました。

関連するQ&A