• ベストアンサー

テキストから文字列の抽出法

テキストから文字列を抽出して、比較したいのですが、良いアプリケーションをご存じないでしょうか? 具体的には2つの異なるフォーマットのファイルがあり、それぞれに(同一の文字列かどうか)比較したい文字列は1行ずつソートされた形で含まれています。しかしその同じ行に時刻などの付加情報が含まれているため、行単位で比較することができないのです(行単位で比較できるアプリは知っています)。 文字列とはファイル名ですので、*.* の形で指定して、抽出できればと思うのですが... もしご存知の方がいらっしゃいましたら、教えてください。

  • jyuka
  • お礼率13% (4/30)

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

  • ベストアンサー
回答No.2

エクセルのマクロで可能です。 下にあるものをエクセルにセットします。 1.エクセルを開きます。 2.ツール-マクロ-新しいマクロの記録 を選びます。 3.メーセージをOK 4.表示された四角いボタンをクリック 5.消えたら、ツール-マクロ-マクロ を選びます。 6.Macro1を選んで、編集をクリック 7.下のものが表示されたら、全て消去 Sub Macro1() この上から、この下まで End Sub 8.ここへ下のものを貼付ける 9.エクセルに戻ってツール-マクロ-マクロ を選びます。 10.中にある「テキスト検索比較」 を選んで、実行 以上で準備完了です。 中身についてですが 1.検索する文字を指定します。 2.2つのファイルのうち1つ目を指定 3.2つ目を指定 4.検索結果を表示して終了 というものです。 結果は、ある時はその場所、無ければ0です。 text.txtを探したい時はそのまま入力 *.txtのようにワイルドカードは使えません。 .txtと指定してください。 2ファイルまでです。 開いた2ファイルを閉じても良ければ 処理を追加します。今は閉じません。 続けて処理する場合は2ファイルを 閉じてからにしてください。 (一番上の手順9からです。) (もっと簡単にもなります。) 機能追加でディレクトリにある 全てのファイルを一括検査することは可能です。 その他要望があれば。 使ってみておかしいところなどあればそちらも。 この下をコピーしてください。 Sub テキスト検索比較() Dim ファイル名1 As String, filenum As Integer, _ 現在行 As Integer, 現在列 As Integer, _ 最終行 As Integer, I As Integer, _ 現在行退避 As Integer, 比較結果2 As Variant, _ 比較結果3 As Variant 比較文字 = InputBox("比較する文字を入力してください。", "比較する文字", "") ファイル名1 = Application.GetOpenFilename(filefilter:="テキスト,*.txt") ファイル名2 = Application.GetOpenFilename(filefilter:="テキスト,*.txt") Workbooks.OpenText FileName:=ファイル名1, StartRow:=1, DataType:= _ xlDelimited, TextQualifier:=xlDoubleQuote, _ ConsecutiveDelimiter:=False, _ Tab:=True, Semicolon:=False, Comma:=False, _ Space:=False, Other:=False _ , FieldInfo:=Array(1, 1) Workbooks.OpenText FileName:=ファイル名2, StartRow:=1, DataType:= _ xlDelimited, TextQualifier:=xlDoubleQuote, _ ConsecutiveDelimiter:=False, _ Tab:=True, Semicolon:=False, Comma:=False, _ Space:=False, Other:=False _ , FieldInfo:=Array(1, 1) Windows(1).Activate Range("A1").Select 現在行 = ActiveCell.Row 現在列 = ActiveCell.Column 最終行 = ActiveCell.SpecialCells(xlLastCell).Row 最終列 = ActiveCell.SpecialCells(xlLastCell).Column For I = 現在行 To 最終行 For I2 = 現在列 To 最終列 比較結果1 = InStrB(Cells(I, I2), 比較文字) If 比較結果1 > 0 Then 比較結果1 = I2 & "列" & I & "行目" I2 = 最終列 I = 最終行 End If Next 現在列 = 1 Next Windows(2).Activate Range("A1").Select 現在行 = ActiveCell.Row 現在列 = ActiveCell.Column 最終行 = ActiveCell.SpecialCells(xlLastCell).Row 最終列 = ActiveCell.SpecialCells(xlLastCell).Column For I = 現在行 To 最終行 For I2 = 現在列 To 最終列 比較結果2 = InStrB(Cells(I, I2), 比較文字) If 比較結果2 > 0 Then 比較結果2 = I2 & "列" & I & "行目" I2 = 最終列 I = 最終行 End If Next 現在列 = 1 Next MsgBox "ファイル1は: " & 比較結果2 & " ファイル2は: " & 比較結果1 End Sub

その他の回答 (1)

回答No.1

2つのファイルの形式は何ですか。 .xls .doc .txt .csv .html は比較可能です。 MS-Excelです。 他、エクセルで読み取り可能なもの。 OSやバージョンなども 教えていただければ何か分かることもあるかもしれません。 同じ文字(ファイル名)が、比較する互いのファイルに 含まれているか?が分かればいいのでしょうか。 (回答は、「含む」「含まない」) 処理内容も教えてもらえますか。

jyuka
質問者

補足

はい、ファイル形式は 2 つとも txt です。 おっしゃられるように、同じ文字(ファイル名)が、 比較する互いのファイルに含まれているか?を知 りたいのです。 2 つのファイルが A, B とすると、 ・ A にしか含まれない ・ B にしか含まれない ・ A, B 共に含む を得たいのです。 私は Excel の知識は全くないのですが、簡単に実 現できるのでしょうか? よろしくお願いします。

関連するQ&A

  • ある文字列を含む行の抽出

    お世話になります。 いくつかのテキストファイルがあり、それらのファイルのなかの、特定の文字列を含む行をすべて抽出して、別ファイルに集めて保存するようなことを、自動的に行うことはできますでしょうか?? officeソフトでできればよいのですが、ほかの方法でもかまいません。 お願いいたします。

  • 正規表現にマッチした文字列の抽出

    閲覧頂きありがとうございます。 Linuxのsedコマンドに該当するwindowsコマンドは存在しますでしょうか? 存在しない場合、batやマクロでの長い記述となってしまっても構いません。 検索で調べたところ、特定のdllを入れればsedを使用できるとあったのですが、その方法は取りたくありません。 100万行以上あるテキストファイル(一行=一レコード)の中から、正規表現とマッチする文字列の抽出作業です。 1行に1つ、不特定な場所にその文字列が存在するという形です。 その抽出した文字列を、別のテキストファイルへ吐き出す…といった処理を想定しています。 どうかご教示いただけると幸いです。 環境 windows7、EmEditor使用

  • テキストファイルから文字列の表示 2

    以前に質問した「テキストファイルから文字列の表示」の続きです。長ったらしい説明になるので、「テキストファイルから文字列の表示」を見た上で答えていただきたいです。コードは、「テキストファイルから文字列の表示」のNO.3~NO.5を主に参考にさせていただきました。OPEN_"*.*"の抽出が、*.*の形だけではなく、OPEN_"*"(つまり、OPENのあとに" "があると" "をすべて拾ってくる状態)で認識されています。*.*の形だけで抽出は出来ないものでしょうか。あと、" "の中に、":"(例.OPEN "C:temp",OPEN "ASD:")があると、":"がある所は無視されてしまいます。これもどうにかならないでしょうか 参考URL:http://oshiete1.goo.ne.jp/kotaeru.php3?qid=340321

  • 文字列の抽出がうまくできません

    こんにちは。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
  • 文字列の抽出について

    A列に 500行位の文字列があり、 その行の中から以下を抽出したいです。 ただ、抽出したい文字列は、0123456で始まり、abcdという文字列まで。 しかも改行されています。 ※抽出したい文字列 【A列 0123456 ~ B列 abcd】という文字列 【F列 0123456 ~ B列 abcd】という文字列 A列 0123456 B列 xxxx abcd C列 1111 D列 2222 E列 3333 F列 0123456 G列 xxxx abcd H列 4444 I列 5555 J列 6666 宜しくお願い致します。

  • perlを使用しての特定行抽出について

    何万行も書いてあるテキストファイルがあります。抽出したい文字列の一覧がテキストファイルにまとめられています(文字列は約1000個)。抽出したい文字列は一行にひとつづつ書かれています。何万行も書いてあるテキストファイルから抽出したい文字列と二つ合致したらその行を抽出したいです。ここで、注意していただきたいのが、抽出したい文字列一覧から二つの文字列にヒットした行を抽出したいです。宜しくお願い致します。 何万行も書いてあるテキストファイル aaaaa abc edi bb aert kkkkkkkkkk lllllll ddddd aaaaa anhi kkk    ・・・・・・・・ ・・・・・・・・ 抽出したい文字列一覧のテキストファイル aaaaa bbbbb ddddd iiiiiiiii eeeee ・・・・・ ・・・・・

    • ベストアンサー
    • Perl
  • テキストファイル 文字列置き換え

    複数のテキストファイルを一括で別の連番のついた文字列に 置きかえることのできるソフトを探しています。 以下の3つの条件を満たすソフトはありますでしょうか? ・複数のテキストファイルを一括で置き換え可能 ・「何行目の文字列を置き換える」という指定が可能 ・置き換えた文字列に連番をつけることが可能 ご存知でしたら、ご教示ください。 よろしくお願いします

  • @のみを含む文字列を抽出

    メールをエクスポートしたテキストファイルがあり、そこからメールアドレスだけを抽出したいと思っています。 Windowsで仕事をしており、とりあえずQGREPというフリーウェアを使っているんですが、「@」という文字列で検索をかけると、「@」を含む「行全体」を出力してしまいます。 出力イメージとしてはこんな感じです。 ========================================== From Postmaster@xxxx.xxxx.co.jp Mon Sep 06 05:10:13 2004 Message-ID: <20040905201013.15166.qmail@xxxxx.com> 発行人: XX XX xxxxxxx@xxxx.com ========================================== こういうファイルからメールアドレスだけを抽出する方法が分からないので、今は手作業でやっているんですが、@を含む文字列(文字の塊)だけをうまく抽出する方法はないでしょうか? 宜しくお願いします。

  • ある文字列が含まれた行だけをテキストから抽出→結果を別のテキストに出力

    ある文字列が含まれた行だけをテキストから抽出→結果を別のテキストに出力したいです。 そのために何かいいソフトウェア、または方法は無いでしょうか? これまでは下記サイトを参考に秀丸エディタの検索&glep機能を使ってやってみたのですが、 抽出したい文字列の数が多く手動でやるのに限界を感じたので質問させていただきました。 http://hechimahige.blog71.fc2.com/blog-entry-4.html 秀丸エディタのマクロでも構いません。 よろしくお願いします。

  • テキストから特定の文字列をすべて抽出する方法

    例えば、「今年のホワイトデーにはお菓子の詰合せを贈ろうと思う。」というテキストファイルがあり、このテキストの『ホワイトデー』と『お菓子』という文字列を抽出し、その文字列に対して外部リンクを設定してページに表示させる場合の処理について、教えていただきたいです。 まず目的の文字列の前後には<w1>~<w2>という文字を付けておき、 文字列中から<w1>~<w2>を検索してその値を返そうとしています。 $str="今年のホワイトデーにはお菓子の詰合せを贈ろうと思う。"; preg_match('/<w1>(.*?)<w2>/is', $str, $keyword); この処理でいけば、マッチした文字列が$keywordに代入されます。 しかし、テキストに2つ以上の<w1>~<w2>がある場合、 そのすべてを抽出することができません。 プログラミング(php)は始めてまだ半年ぐらいなので、まだまだ初歩のレベルです。 どなたかこの抽出処理の部分についてご教授いただけますでしょうか? よろしくお願い致します。

    • ベストアンサー
    • PHP

専門家に質問してみよう