文字列の抽出がうまくできません
- Perl初心者が文字列の抽出について質問しています。特定の行から文字列を抽出する方法や、抽出した文字列のスペースに関する問題を解決したいとのことです。
- 質問者はファイルから特定した行を抽出し、その行に含まれる文字列を抽出する方法について困っています。また、抽出した結果にスペースが入ってしまう問題もあります。
- また、質問者は特定の行を指定して出力する方法や、特定の条件(例:行が「To」で始まる、行が2桁の数字で始まる)での抽出方法についても質問しています。
- ベストアンサー
文字列の抽出がうまくできません
こんにちは。Perl初心者です。みなさんのお力をお借りしたく、初めて投稿させていただきました。よろしくお願いします。 現在、ファイルから特定した行を抽出し、その行に含まれる文字列を抽出しようとしているのですが、その文字列の抽出がうまくできません。 <文字列を含むファイル:xxx.txt> -------------------------- To 鈴木 太郎さん 1行目 : 01,りんご, 3 個, ナシ, 1個 14行目 02,キャベツ, 3 個, なす, 10本 15行目 : -------------------------- <スクリプトファイル:yyy.pl> -------------------------- open(DAT, "./xxx.txt") || die("can't open file : ($!)"); @file = <DAT>; close DAT; if ( $file[0] =~ /(\W+\s)(\W+)/ ) { print "$1\n"; } print "$file[13]\n"; print "$file[14]\n"; -------------------------- <結果> -------------------------- 鈴木 -------------------------- 抽出したい結果は「鈴木 太郎」なんですが、上記のような結果(「1byteのスペース」鈴木「2byteのスペース」)になってしまいます。xxx.txtの「To」と「鈴木」の間と、「鈴木」と「太郎」の間にはそれぞれ1byteのスペースがあります。どうやったら「鈴木 太郎」と抽出できるか教えてください。 スクリプトは「Copal2(ver2.77)」というツールを使って作りました。そのツールではエンコードは「自動判別」となっており実際何が使われているのか分かりません。 また他にも質問があります。 今抽出したい行を指定して出力させてますが、 「To」から始まる行 「01」といった2桁の数字から始まる行 というような抽出の仕方をしたいのですが可能でしょうか? 本当に初心で大変恐縮ではありますが、教えてください。 よろしくお願いいたします。
- Perl
- 回答数1
- ありがとう数1
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
>どうやったら「鈴木 太郎」と抽出できるか 第一義的には、さんの前までなので、 $file[0]='To 鈴木 太郎さん'; if ( $file[0] =~ /To (.+?)さん/ ) { print "$1\n"; } で、いいかと思います、ただ、マルチバイト文字を使っている場合は、文字コードに何を使っているかは、いずれにせよ意識する必要があると思います。 >「To」から始まる行 /^To/ でマッチテストする >「01」といった2桁の数字から始まる行 /^\d\d/ でマッチテストする と良いかも知れません。
関連するQ&A
- 文字列の抽出
指定したファイルの中から'<'と'>'とで囲まれた部分文字列を抽出したいのですが方法がわかりません。どのようにしたらできるでしょうか? *ファイルは制御コードが混じっているのでバイナリとして扱わないといけないかもしれません。 よろしくお願い致します。 ------------------------------------------------- open(IN, "test.dat"); open(OUT, "> out.txt"); binmode(IN); while (<IN>) { /^<(\w+)>$/; print OUT "$1\n"; } close(IN); close(OUT);
- ベストアンサー
- Perl
- 複数ファイルから特定の行だけ取り出し、1つのファイルにまとめるには
以前文字列抽出で質問させていただいたPerl初心者のものです。よろしくお願いします。 あるディレクトリ内にある全てのファイル(.txt)から 「”To”から始まる行」と「”01”といった2桁の数字から始まる行」のみ取り出し、1つのファイルにまとめたいと思ってるのですが、うまくできません。 <文字列を含むファイル:aaa.txt> -------------------------- To 鈴木 太郎さん 1行目 : 01,りんご, 3 個, ナシ, 1個 14行目 02,キャベツ, 3 個, なす, 10本 15行目 : -------------------------- このような内容のファイルが複数あり 結果として -------------------------- 鈴木 太郎,01,りんご, 3 個, ナシ, 1個 鈴木 太郎,02,キャベツ, 3 個, なす, 10本 山田 洋子,01,ぶどう, 3 個, もも, 1個 山田 洋子,02,たまねぎ, 5 個, なす, 10本 山田 洋子,03,牛肉, 1kg 山本 次郎,01,リンゴ, 5 個, バナナ, 5本 : : -------------------------- と一つのファイルにしたいのです。 どうやったらこの結果を出せるのか、ご教授よろしくお願いします。
- 締切済み
- Perl
- awkで複数ファイルのある列を抽出し出力したい
awkプログラミングの初心者です。 今、複数ファイル(1000ファイル)から、それぞれある列(すべて同じ列番号)のデータを抜き出して、1つのファイルに出力したいと考えています。 具体的には、1列目に共通項、2列目以降に1000ファイル分の抽出された列を、合計1001列となるような1つのファイルとして出力したいと考えております。 awkを使って出力するには、どのようなスクリプトを作ればよいか教えていただけませんでしょうか。 <イメージ> 元となるファイル(例えば下記のように3ファイル、実際には1000ファイル)があります。 file1.txt: 1 10 2 15 3 17 : : 1000 25 file2.txt: 1 5 2 40 3 22 : : 1000 17 file3.txt: 1 9 2 20 3 16 : : 1000 32 出力後のファイルイメージ: 1 10 5 9 2 15 40 20 3 17 22 16 : : : : 1000 25 17 32 ちなみに、自分で作成したawkスクリプト(下記)では、上記出力後のイメージとは異なり、 縦にデータが結合されてしまいました。 awk `{print $2}` ./file*.txt > Output.txt 出力後のファイル: 10 15 17 : 25 5 40 :
- 締切済み
- Linux系OS
- 特定の文字列が一致する行から、文字列を抽出する方法
ファイルから、特定の文字列を検索し、その文字列に対応する文字列を取得したいのですが、どなたか方法を教えていただけないでしょうか? 処理: test.txt中に以下の文字列が記載されています。 ----- TEST011:FILE00 TEST01:FILE01 TEST02:FILE02 XTEST01:FILE01 XTEST02:FILE02 ----- test.txtから、TEST01に対応する文字列FILE01を取得したいです。 当初、strchrを利用すれば良いかと考えていたのですが、 TEST011の行が先に抽出されてしまい、うまくいきません。 どなたか解決方法を教えていただけないでしょうか。
- ベストアンサー
- C・C++・C#
- データからある文字列の次の行を出力するには
perlの初心者です。はじめまして。 質問タイトルそのままなのですが、データからある文字列の次の行を出力するにはどのような記述をすればよろしいでしょうか?よろしくお願いします。 ・データは1ファイルで2000あります。1つのデータは[X,Y]で始まり、次の[X,Y]の前までになります。 ・出力はCSVファイル。 ・DAT errがあった場合はその次の行を出力。なかったら、DAT列は空白にする。 #!/bin/perl open(FILE,"<$ARGV[0]"); open(OUT,">$ARGV[0].csv"); ########################## err count ########################### print OUT "X,Y,NUMBER,DAT,\n"; while(<LOG>){ if($_ =~ /X=(.+)\,Y=(.+)/){ chomp($_); print OUT "\n$1,$2,"; } if($_ =~ /NUMBER (.+)/){ print OUT "$1,"; } if($_ =~ /DAT err/){ print OUT "PASS,0,"; } } close(OUT);
- ベストアンサー
- Perl
- Excel VBA テキストファイルからの抽出
Excel VBAにて、テキストファイルから文字列を選別して、それをエクセルファイルのテキストボックスに張り付けるコードの記述をご教授いただけますでしょうか。 環境はWindows7 Pro Excel2010 下記テキストファイルです。 test.txt IDENTIFICATION DIVISION. PROGRAM-ID. sample AUTHOR. XXX * ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT A ASSIGN TO B SELECT C ASSIGN TO D DATA DIVISION. FILE SERECTION. この FILE-CONTROL.と DATA DIVISIONの間に挟まれている SELECT A ASSIGN TO B SELECT C ASSIGN TO D この2行を取り出して、エクセルファイル上にあるテキストボックス張り付ける処理です。 よって、FILE-CONTROL.と DATA DIVISION.の間にある不特定多数の行を抽出するロジックです。 テキストボックスに張り付ける前の行を抽出するだけでも、ご教授頂けたら幸いです。 よろしくお願いします。
- ベストアンサー
- Visual Basic
- SED等で文字列を抽出したい
MacOS X 10.6のターミナルを使って文字列を加工して抽出する方法の質問です。 次のような複数行からなるテキスト(ファイル名を 1.txt とします)があります。 <a href="./hoge/82111.310.12345000.htm" target="_blank"> <a href="./hoge/42403.310.33345025.htm" target="_blank"> <a href="./hoge/22154.310.50873323.htm" target="_blank"> ... このテキスト(1.txt)から、sed(?もっと適切なものがあれば別のものでも)コマンド を用いて 82111.12345000.htm 82401.33345025.htm 82111.50873323.htm ... といった具合に、 hoge/ のあとから始まり htmで終わる文字列から .310を取り除いた文字列を抜き出して ファイル一覧のテキスト(2.txt) に書き出す方法を教えてください。 なお、1.txtの行数は不定で変動し、その行数に応じて2.txtも行数が増えていきます。 また htmのファイル名のところは 5桁のランダムな数字.310.8桁のランダムな数字.htm という規則になっています。(.310 と.htm の部分は固定です) よろしくお願いします。
- ベストアンサー
- その他([技術者向] コンピューター)
- DOSの文字抽出
findstrで特定の行を抽出できました。 test.txtというファイルに入っています。 85文字のうちの43行目から8文字抽出したいのですが、どうすればいいでしょうか?
- 締切済み
- その他(プログラミング・開発)
- 条件を抽出し、フラグを立てる関数
下記条件の場合、D列に「○」フラグを立てたいです。 D列に入力する関数を教えてください。 どうぞよろしくお願い致します。 ・ B列が同じ名前の行を抽出。 ・ 抽出した行のC列に「鉛筆」「消しゴム」「ペン」が入力されている場合、 D列に「○」をつけたい。 ・ ただし、B列が同じでも、C列に「鉛筆」「消しゴム」「ペン」以外が入っていた 場合、D列には何も入れない。 ※B列には飛び飛びに同じ名前が入力されている場合もあります。 ※行は1000行ほどあります。 【前】 B列 C列 山田太郎 鉛筆 山田太郎 ペン 伊藤二郎 缶 伊藤二郎 鉛筆 鈴木五郎 ペン 鈴木五郎 消しゴム 木村三郎 消しゴム 木村三郎 鉛筆 山田太郎 消しゴム 鈴木五郎 パソコン 【後】 B列 C列 D列 山田太郎 鉛筆 ○ 山田太郎 ペン ○ 伊藤二郎 缶 伊藤二郎 鉛筆 鈴木五郎 ペン 鈴木五郎 消しゴム 木村三郎 消しゴム ○ 木村三郎 鉛筆 ○ 山田太郎 消しゴム ○ 鈴木五郎 パソコン わかりにくくて申し訳ありませんが、よろしくお願いいたします。
- 締切済み
- その他MS Office製品
- テキストから文字列の抽出法
テキストから文字列を抽出して、比較したいのですが、良いアプリケーションをご存じないでしょうか? 具体的には2つの異なるフォーマットのファイルがあり、それぞれに(同一の文字列かどうか)比較したい文字列は1行ずつソートされた形で含まれています。しかしその同じ行に時刻などの付加情報が含まれているため、行単位で比較することができないのです(行単位で比較できるアプリは知っています)。 文字列とはファイル名ですので、*.* の形で指定して、抽出できればと思うのですが... もしご存知の方がいらっしゃいましたら、教えてください。
- ベストアンサー
- その他(ソフトウェア)
お礼
早々にご回答いただきながらお礼が送れて申し訳ありません!名前の抽出ができました!ありがとうございました。