• ベストアンサー

多数の文字が書かれたテキストから特定の言語検索

こんにちは、お世話になります。 メールのヘッダ情報等が大量に書かれたテキストファイルがあるのですが、 こちらのテキストの中から日本語で書かれたところ(本文など)を見つけるor抽出する方法を探しております。 日本語の内容はばらばらで、普通の検索では間に合いません・・・。 このように特定の文字コード(Shift-Jis)だけを検索して抽出できるようなツール や方法などがありましたら教えて頂けませんでしょうか?

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

  • ベストアンサー
  • DOUGLAS_
  • ベストアンサー率74% (397/534)
回答No.1

 私は Thunderbird を使っているのですが、メールヘッダ を見てみると、本文は「Shift-Jis」ではなくて、「ISO-2022-JP」でした。 >このように特定の文字コード(Shift-Jis)だけを >検索して抽出できるようなツールや方法  方法として、下記の2つを考えてみました。  いずれの方も、「.Charset」のところは、「"Shift_JIS"」・「"ISO-2022-JP"」の内、実際に エンコード してみて、読める方を最初に、文字化けする方を後に書いてください。 =====================================  1つめは、どこでもお好きなトコロに「メール本文抜き出し.VBS」を置き、その アイコン に複数の「メールのヘッダ情報等が大量に書かれたテキストファイル」を ドラッグ & ドロップ すると、「日本語で書かれたところ(本文など)を抽出」したものが、元々の「テキストファイル」の名前の最後に「●」を付けた名前で、同じ フォルダ に保存されます。 1)新規に メモ帳 を起動します。 2)下記 スクリプト を メモ帳 に コピペ します。 3)「全角スペース」を「半角スペース2ヶまたは4ヶ」に置換します。 4)その メモ帳 を「メール本文抜き出し.VBS」という名前で、お好きなトコロ(例えば デスクトップ)に保存します。  「メール本文抜き出し」のトコロは、ご自由にお付けください。 '-- VBS 用 スクリプト は ここから -- Set objArgs = WScript.Arguments For i = 0 To objArgs.Count - 1  MyPath = objArgs(i)  Set objStr = CreateObject("ADODB.Stream")  With objStr   'メール本文が読める方のエンコード   .Charset = "ISO-2022-JP"   .Open   .LoadFromFile (MyPath)   strRet = .ReadText   .Close   'メール本文が文字化けするエンコード   .Charset = "Shift_JIS"   .Open   .LoadFromFile (MyPath)   strRet2 = .ReadText   .Close  End With  strRet = Split(strRet, vbCr)  strRet2 = Split(strRet2, vbCr)  Set objFSO = CreateObject("Scripting.FileSystemObject")  With objFSO.CreateTextFile(Replace(objArgs(i), ".txt", "●.txt"))   For l = 1 To UBound(strRet)    If strRet(l) <> strRet2(l) Then     .WriteLine strRet(l)    End If   Next   .Close  End With Next '-- VBS 用 スクリプト は ここまで -- =====================================  2つめの方法は、Excel VBA です。  上記の「VBS」は検証ができないので、ちょっと怖いと思われるようでしたら、こちらでお試しください。  ただし、指定した1つの「テキストファイル」しか処理しませんので、一度に複数の ファイル を処理されたいときは、コード を改変なさってください。 Sub メール本文抜き出し()  Dim MyPath As String  Dim objStr As Object  Dim strRet As Variant  Dim strRet_res As Variant  Dim objFSO As Object  Dim i As Long    MyPath = "D:\hoge\hoge.txt"  Set objStr = CreateObject("ADODB.Stream")  With objStr   'メール本文が読める方のエンコード   .Charset = "ISO-2022-JP"   .Open    .LoadFromFile (MyPath)   strRet = .ReadText   .Close     'メール本文が文字化けするエンコード   .Charset = "Shift_JIS"   .Open   .LoadFromFile (MyPath)   strRet_res = .ReadText   .Close  End With    strRet = Split(strRet, vbCr)  strRet_res = Split(strRet_res, vbCr)    Set objFSO = CreateObject("Scripting.FileSystemObject")  With objFSO.CreateTextFile(Replace(MyPath, ".txt", "●.txt"))   For i = 1 To UBound(strRet)    If strRet(i) <> strRet_res(i) Then     .WriteLine strRet(i)    End If   Next   .Close  End With End Sub

Non201010
質問者

お礼

お返事ありがとうございました。 早速試させて頂きたいと思います。

関連するQ&A