次のようなテキストデータを抽出するにはどうすればいいでしょうか?実際にやりたいことはもっと複雑で長いデータです。


抽出したいデーターはcccの行です。

a1
bbb 20
ccc 30
a2
bbb 20
ccc 31
a3
bbb 20
ccc 29

回答の条件
  • 1人1回まで
  • 登録:
  • 終了:2014/11/28 16:50:05
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答1件)

id:you1rou No.1

回答回数3ベストアンサー獲得回数0

ポイント100pt

質問者さんの実行環境が分からないので複数のパターンを回答しておきます。

抽出だけでよいのならば秀丸などの正規表現が使えるテキストエディタで検索(秀丸では「検索→grep実行」)で「正規表現」を有効にして検索語に
^ccc.*
と入ればヒットします(自動的に一行づつ出力してくれるが、ファイル名(行数)という余計なものが付いてくる)

出力まで考えると
・コマンドプロンプトの場合→既出のfindコマンドの回答を参照
・phpでテキストファイルを処理したい場合


// ファイル読み込み
$file = file_get_contents('data.txt');

// 改行ごとに文字列を配列に格納
$text = explode("\n",$file);

$pattern ="^ccc.*";
$output = array();
for($i = 0; $i <= count($text) - 1; $i++){
if(ereg($pattern,$text[$i])){
$output[] = $text[$i];
}
}

//画面に出力
print_r($output);

//ファイルに出力
$fp=fopen("output.txt","w");
foreach ($output as $a){
fputs($fp,$a."\n");
}
fclose($fp);

で、いけるでしょう(テストはしてません)

  • id:TAK_TAK
    linuxコマンドの grepを使えば良いと思います。

    grep ccc ファイル名

    これで、cccを含む行だけを出力します。

    しかし、質問の情報が足りないので
    これではダメなのかもしれませんが、
    いかがでしょうか
  • id:a-kuma3
    三の倍数の行を抜き出すのなら awk で。

    awk 'NR % 3 == 0 {print}' ファイル名
  • id:Yoshiya
    MS-DOSのfindコマンドが使えます。

    http://www.atmarkit.co.jp/ait/articles/0103/01/news001.html
    Windows 2000 活用講座 Windows 2000 コマンドライン徹底活用:
    第6回 findコマンド (1/2)

    例えば質問文の文字列をa.txtに保存したとして
    >>

    C:\>find "ccc" a.txt

    ---------- A.TXT
    ccc 30
    ccc 31
    ccc 29

    C:\>

    <<

    ファイルに落としたい場合は標準出力へリダイレクトしてください。
    >>

    C:\>find "ccc" a.txt > b.txt

    C:\>type b.txt

    ---------- A.TXT
    ccc 30
    ccc 31
    ccc 29

    C:\>

    <<

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません