電子書籍の厳選無料作品が豊富!

初歩的な質問ですみません。
perlスクリプトで、テキストファイルを読み込み、スペースで区切られた文字のn項目目を検索し、対象項目の手前に″テスト ″と挿入することは可能でしょうか?

質問者からの補足コメント

  • 回答ありがとうございます。

    下記の様に記述したのですが、中身を上書きし、1 テストとだけしか残らないのですが、文字列の検索や挿入の手順に抜けがあるでしょうか。
    while (<*.log>) {
    open (FILE,$_);
    while ($rec = <FILE>) {
    @counts = split (/¥s+/,$_,5);
    $rec2 = @counts.″テスト ″;
    }
    close(FILE);
    open(OUT,″> $_″);
    print OUT $rec2;
    }

    No.1の回答に寄せられた補足コメントです。 補足日時:2019/05/31 11:51
  • 目的を具体的に説明しますと、
    以下の様なテキストデータがあり

    あ い う え お か き く け こ

    各項目は半角スペースで区切られており、n項目目の手前に″テスト ″という単語を挿入したいです。

    最初に提示した文末の改行を削除して、
    ″テスト ″と記載するスクリプトですとファイルは読めてるんですが、配列と連結しようとすると読めなくなってしまうので今はその原因探っているところです。

    現在は以下の記述です
    while (<*.log>) {
    open (FILE,$_) {
    @counts = split (/¥s+/.$_,5);
    @counts[$5] .= ″テスト ″;
    }
    close(FILE);
    open(OUT,″> $_″);
    print OUT $rec2;
    close(OUT);
    }

    No.3の回答に寄せられた補足コメントです。 補足日時:2019/06/03 15:49
  • 現状、global symbolエラーと、executionエラーが発生するだけで、テキストデータに対しては何も影響が無い状況です。

    No.4の回答に寄せられた補足コメントです。 補足日時:2019/06/04 09:14

A 回答 (5件)

「global symbolエラーと、executionエラーが発生する」って書いてるけど, 本当にそんなメッセージが出てるわけじゃないよね? メッセージは正確に書かないとどうしようもない.



でどういう理由でそんなふうに書き換えたの? どうしてそうすれば期待した通りに動作すると思った?
    • good
    • 0

*そのスクリプト*がなにをしているのか説明してください.



もちろん「なにをさせたいのか」ではなく「なにをしているのか」だよ.
この回答への補足あり
    • good
    • 0

どのようなファイルをどのようにしたいんだろ. 特に「スペースで区切られた文字のn項目目を検索し」の意味がわからん.



この場合は readdir よりも glob の方が簡単だと思うよ>#2. 普通の人は while じゃなくて for を使うだろうけど.

ひょっとすると -i オプションを使った方が早かったりして.
この回答への補足あり
    • good
    • 0

No.1 の回答の補足について



> while (<*.log>)

ファイルの一覧を取る場合は readdir を使います
http://perldoc.jp/func/readdir

> $rec2 = @counts.″テスト ″;

配列ではなく、配列のn項目と結合しましょう
$行の配列[$n] .= " テスト";

読み込んで編集した行は、すべて保存しましょう
$ファイル内容 .= join(' ', @行の配列);
    • good
    • 0

テキストファイルを読み込み


http://perldoc.jp/docs/perl/5.16.1/perlopentut.pod

スペースで区切られた文字のn項目目を検索し
https://perldoc.jp/func/split

対象項目の手前に″テスト ″と挿入する
https://perldoc.jp/func/sprintf
この回答への補足あり
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!