- 締切済み
csvファイルを開かずに文字を検索し行を抽出したい
フォルダの中に複数のCSVファイルが有ります。 これらのファイルを開かずに文字列を検索し、検索対象の文字と完全一致する 文字がある行をまとめてひとつのファイルに抽出する方法を探しています。 例:Aフォルダ内にファイル1、ファイル2、ファイル3、、、と複数のファイルがある。 ファイルのフォーマットはすべてCSV。ファイルにはシートは一つのみ。日付なのですべて異なります。 A B C D E F G H I J K L 加工年月日時分 品種 コード A列 B列 C列 D列 E列 F列 G列 本数 作業者 ・ ・ ・ A~Lまであり、Cのコードが指定した検索文字と完全一致するものを抽出したいです。 急ぎの内容の為、VBAやコマンドプロンプトなど、自分なりに色々なサイトにある プログラムを組み換えようとしましたが初心者の為すぐに理解して応用はとても 無理でした。知恵を貸して頂きたいです。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- imogasi
- ベストアンサー率27% (4737/17069)
>ファイルを開かずに文字列 CSVファイルに、>シートは一つのみなんて書いているところを見ると、全くCSVやファイル処理のプログラムのことが判ってない。やりたいことを書き連ねて、作ってくださいと丸投げでいっているだけ。 エクセルとCSVは直接の概念的関係はないのだ。CSVはエクセルが出来るもっと昔からあるもんなんだ。 ーー そういう専用のソフトを探すしかない。テキストエディターでも出来るものがあるかもしれない。 ーーー ファイルは普通はソフトを「通して開かないと、普通の人には読めない。直接読むには、ダイレクトにディスクを読み書きできるようなことが必要だが。出来る人は少なく普通はしないようになっている。 (1)ある1つの決ったフォルダの中にあるCSVファイルの名前を順次掴むプログランむなど、毎週ぐらい質問に出るし、WEBでも調べたら直ぐ判る。「VBA フォルダ ファイル 掴む(列挙)」など 一例 Sub test02() Target = "C:\Documents and Settings\XXXX\My Documents\" Set FS = CreateObject("Scripting.FileSystemObject") Set Fol = FS.GetFolder(Target) Set Fil = Fol.Files For Each fx In Fil 'ファイル名 sfile = fx.Name If Right(sfile, 4) = ".csv" Then 'ファイル名の書き出し MsgBox fx.shortname ' MsgBox fx End If Next End Sub (2)そのCSVファイルを開いて、ReadAllなんてのをすると全文が変数に入る。 「テキストファイル ReadAll」 Sub test01() Set objFileSys = CreateObject("Scripting.FileSystemObject") '(9)読み込むファイルのフルパスを編集 strFilePath = "C:\Documents and Settings\XXXX\My Documents\test02.csv" '(10)ファイルのオープン Set objInFile = objFileSys.OpenTextFile(strFilePath) '(11)ファイルのオープンが成功(ファイル有り)のときはErr.Numberが0 If Err.Number = 0 Then '(12)ファイルの全ての内容をガバっと取り出し strdata = objInFile.ReadAll MsgBox strdata End If End Sub 但しカンマやダブルコーテーションが入っている場合がある。検索に邪魔をする恐れは在る。 VBAならSplit関数で配列に入れることは出来る。 (3)検索 上記のFSOでは正規表現というのも使える。しかし質問者には直ちには無理だろう。 Instr関数を勉強して、捜していくほか無いだろう。 ーー 以上のことから、FSOというのが、この課題には適しているように思う。{FSO」で照会。 ==== 全般に 質問振りから、この課題をやるには早すぎて、色んな経験を積む必要有りと見る。 (1)急ぐから (2)知らないから 安易に質問するのは、勝手で、おかしい。日頃から備えておかないと。 それなりに付帯智識も要り、自分にツーニングする智識もいるのであって、すべてコピペして動くものと思わないこと。
- nora1962
- ベストアンサー率60% (431/717)
自分だったら「grep」 http://www.k-tanaka.net/unix/grep.html >for %f in (*.txt) do grep パターン < %f http://www.vector.co.jp/soft/winnt/util/se365621.html ここからダウンロードできます。
- neko1963
- ベストアンサー率49% (127/258)
検索したい文字がC以外(A~B、D~L)に存在する場合がありますでしょうか? C以外(A~B、D~L)には存在することが無いのであれば、複数のCSVファイルをまとめて検索して1つのファイルに抽出するソフトはあると思います。 下記の様なソフトでは複数のCSVファイルをまとめて検索して1つのファイルに抽出できます。 ■JGREP正規表現による文字列検索ソフト http://www.vector.co.jp/soft/dl/win95/util/se174779.html ■Windows版Grep(コマンドライン用) http://www.vector.co.jp/soft/winnt/util/se365621.html 注意:Microsoft.NET Framework1.1がインストールされている必要があります。 ※grep -n -p ABCDEFG *.csv > output.csv -n ・・・ その行の行番号を出力しない場合 -p ・・・ ファイルのパスを表示しない場合