秀丸の質問です。

ある行から例えば、「求人情報」ではじまって、改行されながら、その会社の求人情報が,で終わっているとします。

そのほかに大量の(私の処理上)余計な文字があるのですが、

"「求人情報」から「,」"までを一括して取り出すにはどのようなことをしたら良いでしょうか。
行をまたいで処理する方法が分かりません。

よろしくお願いいたします。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2008/01/31 17:52:32
  • 終了:2008/02/01 16:49:38

ベストアンサー

id:bonlife No.2

回答回数421ベストアンサー獲得回数752008/02/01 15:45:06

ポイント49pt

秀丸の正規表現は改行の扱いがあやしいので、ちょっと難しそうです。

マクロでやれば簡単ですので、試してみてください。

[参考URL]

以下のようなマクロを作っておき、対象となるファイルを開いた状態で実行してみてください。

$new_filename = filename + "_kyujin_info.txt"; // 出力ファイル名
gofiletop;                                     // ファイルの先頭に移動
searchdown "求人情報";                         // "求人情報"という文字を検索
beginsel;                                      // 選択開始
searchdown ",";                                // ","を検索
right;                                         // 一文字右に移動
copy;                                          // コピー ("求人情報"から",")
newfile;                                       // 新規ファイル作成
paste;                                         // 貼り付け
saveas $new_filename;                          // ファイル保存
exit;                                          // 出力ファイルを閉じる

必要に応じてマクロを修正してみてください。

(マクロの文法などは、マクロヘルプに載っています。)

あるいはPerlなどのスクリプト言語でやる、という手もあります。

  • kyujin_info_extract.pl
#!/usr/bin/perl

use strict;
use warnings;

my @filelist;
my $filename;
my $out_filename;
my $buf;

# 引数を、ワイルドカード展開
# ファイルならば @filelist に追加

foreach (@ARGV) {
    foreach (glob($_)) {
        if ( -f && -r $_ ) {
            push(@filelist,$_);
        }
    };
}

foreach $filename (@filelist) {
    printf("TARGET : %-40s", $filename);
    # ファイルを開く (ファイルハンドルはIN)
    open(IN,$filename) or die "Can't open specified file : $!";
    # 変数 $buf にファイルサイズ分だけ読み込む
    # つまりファイルの内容を全て $buf に読み込む
    read(IN,$buf,(-s $filename));
    # 求人情報で始まる部分から、最初の , までを
    # 正規表現で抜き出す
    if ( $buf =~ /.*?(求人情報.*?,)/ms ) {
        # 元ファイル名_kyuijin_info.txt に内容を出力
        $out_filename = "${filename}_kyujin_info.txt";
        open(OUT,">$out_filename") or die "Can't open '$out_filename' : $!";
        print OUT $1;
        close(OUT);
        printf("<OUT> %-40s\n", $out_filename);
    } else {
        print "<INF> not found.\n";
    }
    close(IN);
}

実行例は以下の通りです。

Perlがインストールされた状態で、コマンドプロンプトで下記のようにすれば、元ファイル名_kyujin_info.txt という別ファイルが作成されます。

(複数のファイルをまとめて処理します。)

perl kyujin_info_extract.pl *
id:clinejp

うわー。マクロやスクリプトまで提示していただきまして、感激です。

ありがとうございます。

perlですと、fgetなどでファイルを取ってきて、そのままWEBに抜粋版が作れますね。

(著作権の問題がありますので、そこは留意しないといけないでしょうが。)

重ねてありがとうございました。

2008/02/01 16:41:07

その他の回答(1件)

id:rafile No.1

rafile回答回数662ベストアンサー獲得回数242008/01/31 21:50:27

ポイント21pt

とりあえず、置換で、\nを""に全置換してはどうでしょうか

http://q.hatena.ne.jp/answer

id:clinejp

改行を全部なくした状態にして、改行をまたがない処理にしてしまうということですね。

それですと確かになんとかなりそうですね。

ありがとうございます。

2008/02/01 16:46:36
id:bonlife No.2

回答回数421ベストアンサー獲得回数752008/02/01 15:45:06ここでベストアンサー

ポイント49pt

秀丸の正規表現は改行の扱いがあやしいので、ちょっと難しそうです。

マクロでやれば簡単ですので、試してみてください。

[参考URL]

以下のようなマクロを作っておき、対象となるファイルを開いた状態で実行してみてください。

$new_filename = filename + "_kyujin_info.txt"; // 出力ファイル名
gofiletop;                                     // ファイルの先頭に移動
searchdown "求人情報";                         // "求人情報"という文字を検索
beginsel;                                      // 選択開始
searchdown ",";                                // ","を検索
right;                                         // 一文字右に移動
copy;                                          // コピー ("求人情報"から",")
newfile;                                       // 新規ファイル作成
paste;                                         // 貼り付け
saveas $new_filename;                          // ファイル保存
exit;                                          // 出力ファイルを閉じる

必要に応じてマクロを修正してみてください。

(マクロの文法などは、マクロヘルプに載っています。)

あるいはPerlなどのスクリプト言語でやる、という手もあります。

  • kyujin_info_extract.pl
#!/usr/bin/perl

use strict;
use warnings;

my @filelist;
my $filename;
my $out_filename;
my $buf;

# 引数を、ワイルドカード展開
# ファイルならば @filelist に追加

foreach (@ARGV) {
    foreach (glob($_)) {
        if ( -f && -r $_ ) {
            push(@filelist,$_);
        }
    };
}

foreach $filename (@filelist) {
    printf("TARGET : %-40s", $filename);
    # ファイルを開く (ファイルハンドルはIN)
    open(IN,$filename) or die "Can't open specified file : $!";
    # 変数 $buf にファイルサイズ分だけ読み込む
    # つまりファイルの内容を全て $buf に読み込む
    read(IN,$buf,(-s $filename));
    # 求人情報で始まる部分から、最初の , までを
    # 正規表現で抜き出す
    if ( $buf =~ /.*?(求人情報.*?,)/ms ) {
        # 元ファイル名_kyuijin_info.txt に内容を出力
        $out_filename = "${filename}_kyujin_info.txt";
        open(OUT,">$out_filename") or die "Can't open '$out_filename' : $!";
        print OUT $1;
        close(OUT);
        printf("<OUT> %-40s\n", $out_filename);
    } else {
        print "<INF> not found.\n";
    }
    close(IN);
}

実行例は以下の通りです。

Perlがインストールされた状態で、コマンドプロンプトで下記のようにすれば、元ファイル名_kyujin_info.txt という別ファイルが作成されます。

(複数のファイルをまとめて処理します。)

perl kyujin_info_extract.pl *
id:clinejp

うわー。マクロやスクリプトまで提示していただきまして、感激です。

ありがとうございます。

perlですと、fgetなどでファイルを取ってきて、そのままWEBに抜粋版が作れますね。

(著作権の問題がありますので、そこは留意しないといけないでしょうが。)

重ねてありがとうございました。

2008/02/01 16:41:07

コメントはまだありません

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

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

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

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません