- 締切済み
VBAでテキストファイル中の文字列を抽出したい
cj_moverの回答
- cj_mover
- ベストアンサー率76% (292/381)
こんにちは。 比較的ベーシックなやり方で、、、。 (◆の行は運用に合わせて正しく指定。さもないとエラー。) (△の行は必要に合わせる為のオプション。) Sub Re8464141() Const sFolPath As String = "D:\日別訪問動物\" ' ◆ フォルダパス&\ 正しく指定 Dim rtn ' 戻り値 Dim arrS() As String ' テキストを行ごとに区切って配列として格納 Dim sKey As String ' 検索キーワード Dim sCurDir As String ' 現在のフォルダパスを確保 Dim sFile As String ' 各テキストファイルのファイル名 Dim sBuf As String ' 各テキストファイルのテキスト全文 Dim i As Long ' ループ用 Dim nFree As Integer ' テキスト読み込み用空きナンバー ' sKey = "サル" ' sKey = "カエル" sKey = "ネコ" ' sKey = "クマ" ' sKey = "カバ" sCurDir = CurDir() ChDir sFolPath nFree = FreeFile For i = Date To Date - 365 Step -1 sFile = Format(i, "yyyymmdd"".txt""") If Dir(sFile) <> "" Then Open sFile For Input As #nFree sBuf = StrConv(InputB(LOF(nFree), #nFree), vbUnicode) Close #nFree arrS() = Split(sBuf, vbCrLf) ' ◆ 改行文字、正しく指定 arrS() = Filter(arrS(), sKey, True) ' arrS() = Filter(arrS(), sKey, True, vbTextCompare) ' ←△ op.全角カナの徹底が怪しい場合 If UBound(arrS()) <> -1 Then rtn = Split(Trim$(arrS(0)), "・")(0) ' rtn = Val(Trim$(arrS(0))) & "匹" ' ←△ op.区切り文字"・"の徹底が怪しい場合 Exit For End If End If Next i If IsEmpty(rtn) Then MsgBox "notfound" Else With Sheets("Sheet1") ' ◆ シート名、正しく指定 .Cells(1, 1) = rtn ' A1 に "何匹?" ' .Cells(1, 2) = sKey ' △ B1 に "どの動物?" ' .Cells(1, 3) = sFile ' △ C1 に "いつ?" End With End If ChDir sCurDir End Sub
関連するQ&A
- 複数のテキストから同じ行数の文字列を抽出し,別のテキストに出力する方法
環境:linux,Windows XP よろしくお願いします.以下のようなデータが数千個あります. 2020-01-01_00.txt 2020-01-01,00,109.18970,18.36816,30.618,0.000,91.276,292.712 2020-01-01,00,109.54297,18.39178,30.676,0.000,90.044,292.653 2020-01-01,00,109.89642,18.41394,30.581,0.000,89.560,293.056 ・ ・ ・ ・ 2020-01-01_01.txt 2020-01-01,01,109.18970,18.36816,27.998,350.080,85.071,294.773 2020-01-01,01,109.54297,18.39178,28.187,355.642,86.229,294.425 2020-01-01,01,109.89642,18.41394,28.136,359.157,87.494,294.675 ・ ・ ・ ・ 2020-01-01_02.txt 2020-01-01,02,109.18970,18.36816,30.200,551.398,75.640,296.445 2020-01-01,02,109.54297,18.39178,30.356,556.004,79.117,295.921 2020-01-01,02,109.89642,18.41394,29.953,558.076,82.460,295.942 ・ ・ ・ ・ ここで,私がやりたいのは,同じディレクトリ内にある数千個のテキストから同じ行数の文字列を抽出し,別のテキストファイルに出力することです.つまり,結果の出力は以下のようにしたいのです. 109.18970,18.36816.txt 2020-01-01,00,109.18970,18.36816,30.618,0.000,91.276,292.712 2020-01-01,01,109.18970,18.36816,27.998,350.080,85.071,294.773 2020-01-01,02,109.18970,18.36816,30.200,551.398,75.640,296.445 ・ ・ ・ ・ 109.54297,18.39178.txt 2020-01-01,00,109.54297,18.39178,30.676,0.000,90.044,292.653 2020-01-01,01,109.54297,18.39178,28.187,355.642,86.229,294.425 2020-01-01,02,109.54297,18.39178,30.356,556.004,79.117,295.921 ・ ・ ・ ・ 109.89642,18.41394.txt 2020-01-01,00,109.89642,18.41394,30.581,0.000,89.560,293.056 2020-01-01,01,109.89642,18.41394,28.136,359.157,87.494,294.675 2020-01-01,02,109.89642,18.41394,29.953,558.076,82.460,295.942 ・ ・ ・ ・ 私なりに以下のshを作成しましたが,処理が通りません.間違えているところをご指摘いただけないでしょうか.よろしくお願いします. #!/bin/sh BUFIFS=$IFS IFS= exec 3< lonlat.txt while read FL 0<&3 for i in 2020-??-??_??.txt $data = cat $i | grep "$FL" $i print $data >> ./out/$FL done exec 3<&- IFS=$BUFIFS #lonlat.txtの内容は以下の通り 109.18970,18.36816 109.54297,18.39178 109.89642,18.41394 ・ ・ ・ #処理したものを/outに出力
- ベストアンサー
- その他(プログラミング・開発)
- 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 の部分は固定です) よろしくお願いします。
- ベストアンサー
- その他([技術者向] コンピューター)
- テキストファイルの指定文字列表示2
以前質問し、解決したかに見えたのですが、元ファイルに意外なケースがあることに気づき、再度質問させていただきます。 あるブラウザにて、あるテキストファイルの部分を抽出して表示させるスクリプトを考えております。 テキストファイル自体は同階層にあり(./aaa.txt)、不定期に更新されます。内容は下記<./aaa.txt>のような構成になっております。そして下段のphpスクリプト<vvv.php>ですと希望どおりに表示されるのですが、./aaa.txtファイルの中身は状況によっては空行が最初の1回しかないケースがあります。 その場合も、 222222222222 3333333333333 4444444444 のように"111111111111"を除いた、1回目の空行までは表示させたいのですが、何か良い方法はございますでしょうか? ※このようなファイルの場合<vvv.php>で実行すると、何も出力されません。 どうかご教授お願いいたします。 <./aaa.txt> ========= 111111111111 222222222222 3333333333333 4444444444 (空行) 55555555 6666666 66666666 8888888 (空行) 9999999999999999999999 ・ ・ ========= <vvv.php> ========= <?PHP function mytrim(&$item){//(1) $item=str_replace(Array("\r","\n"),Array("",""),$item); } $lines=file("./aaa.txt");//(2) array_walk($lines, 'mytrim');//(3) $blankline=array_keys($lines,"");//(4) $lastline=$blankline[1]-1;//(5) for($i=0;$i<=$lastline;$i++){ if($lines[$i]!="111111111111"){//(6) print $lines[$i]."<br>"; } } ?> =========
- ベストアンサー
- PHP
- テキストファイル中の文字列を書き換えるスクリプトを書きたい
テキストファイルの文字列を書き換えるスクリプトを考えています。 今、次のところまで出来るようになりました。本当は「こんにちは」の文字列を全て「HELLO」に置換したいのです。現在は一行の中で最初の「こんにちは」は置換されますが、2番目以降が置換されません。同じ行中の2番目以降も置換するには、どうしたら良いでしょうか? <置換前ファイル:sample.txtの中身> こんにちはこんにちはこんにちはこんにちは こんにちは こんにちは <置換前ファイル:sample.txtの中身> HELLOこんにちはこんにちはこんにちは HELLO HELLO <置換スクリプト> Set fso = CreateObject("Scripting.FileSystemObject") Set regEx = New RegExp Set inFile = fso.OpenTextFile("C:\static\sample.txt") Set outFile = fso.CreateTextFile("C:\static\sample1.txt") regEx.Pattern = "こんにちは" repStr = "HELLO" Do Until inFile.AtEndOfStream tempLine = inFile.ReadLine repLine = regEx.Replace(tempLine, repStr) outFile.WriteLine repLine Loop inFile.Close outFile.Close
- ベストアンサー
- その他(プログラミング・開発)
- VBAでWordやExcelのテキスト全文抜き出し
表題のとおりです! フォルダ内に複数あるWordやExcelファイルを一度に処理したいと考えています。 以下の仕様を満たせられば文句なしです!! ・テキストボックスや図中テキストについても、出現順に抽出したい ・余計な制御記号は抽出不要 ・抽出したテキストはtxt形式で同名保存したい VBA初心者でもわかりやくご教授お願いします。
- 締切済み
- Visual Basic
- 食物繊維の順番に並べてください
以下の動物を、食物繊維における「食べられる→食べる」の順番に並べてください。 (例:シマウマ→ライオン) 語群 イヌ ネコ ウサギ ヒツジ キツネ オオカミ ライオン コヨーテ
- 締切済み
- 生物学
- 食物連鎖の順番に並べてください
以下の動物を、食物連鎖における「食べられる→食べる」の順番に並べてください。 (例:シマウマ→ライオン) 語群 イヌ ネコ ウサギ ヒツジ キツネ オオカミ ライオン コヨーテ
- 締切済み
- 生物学
- Excelで複数の他のファイルから、データを抽出
フォルダに30個~40個のxlsファイルがあり、中身はmmddというシート名で日別に分かれています。 抽出を実行した日(たとえば今日なら0122)と、同じ名前のシートのA1~D4までの文字列データを、 抽出を実行したシートのA1~D4に貼り付け、2個目のxlsファイルから抽出したデータはA6~D9に、3個目はA11~D14に貼り付ける…という風な抽出をしてくれるようにしたいと考えております。 関数かVBAにて処理する方法はありますでしょうか? ご教授願います。
- ベストアンサー
- その他MS Office製品
- phpでテキストファイルの特定のワードを抽出
タイトルの通りです。 phpを使い、テキストファイルの中に書かれている文字列をhtmlに表示することはできました。 <?php //ファイルを開く //モード[r]の読み込み専用 if (! ($fp = fopen ( "list.txt", "r" ))) { echo "ファイルが開けません。"; } while (! feof ($fp)) { $load = fgets ($fp, 4096); echo $load; } ?> このような感じです。 ですが、テキストファイルの中の特定の文字(例:美しい)を抽出したいのですが、どのようにプログラムを書いて良いかわかりません。 どなたかアドバイスをお願いします。
- 締切済み
- PHP