• 締切済み

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やコマンドプロンプトなど、自分なりに色々なサイトにある プログラムを組み換えようとしましたが初心者の為すぐに理解して応用はとても 無理でした。知恵を貸して頂きたいです。

みんなの回答

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.3

>ファイルを開かずに文字列 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)
回答No.2

自分だったら「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)
回答No.1

検索したい文字が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 ・・・ ファイルのパスを表示しない場合

関連するQ&A

  • 複数CSVファイルからデータ抽出

    CSVファイルのA列(行は問いません)の文字が転記シートのA列(行は問いません)と一致していたら、転記シートのA列が一致した行の空白に、左から順にCSVファイルのA列が一致した行のF列の値を書き込む。CSVファイルの1行A列を転記シートのF列の値を書き込んだ列の1行目に書き込む。 できれば、書き込んだ値はCSVファイルから消したいです。 コピペでやっていたのですが、ずれていてどうしようもなくなりました。 CSVファイル一つ当たり、4000行ほどあり、ファイルは200弱あります。 プログラムを組んでくださると、ありがたいのですが。 質問というよりお願いになってしまいますが、よろしくお願いします。

  • 巨大なCSVの加工(指定列のみの抽出)について

    巨大なCSVの加工(指定列のみの抽出)について 下記のような構成のCSVファイルがあります。 "ID","a","b","c","d","e","f","g","h","i","j","k","l","m" "0001","a","b","c","d","e","f","g","h","i","j","k","l","m" "0003","a","b","c","d","e","f","g","h","i","j","k","l","m" "0004","a","b","c","d","e","f","g","h","i","j","k","l","m" ・ ・ ・ 例えば、 ここから"ID"列と"c"列と"f"列のみ抽出して新たなCSVファイルで保存。 という処理を行いたいのですが、行数が5000万行近くあり、ファイルサイズが80GB程あるので エクセルはおろかアクセスでも開くことができません。 テキストエディタの秀丸64bit版なら開くことができますが、指定列の抽出方法が分かりません。 秀丸のマクロでもVBSでも良く、また膨大な待ち時間がかかっても構わないので実現する方法について お知恵をお貸しください。

  • 「,」区切りのcsvファイルを検索して文字列抽出したい

    環境:windows2000 csvファイル形式: pat,\path1\path2,\path\path3 pat_a,\path4\path5,\path7\path8 pat_a,\path7\path6,\path8\path9 バッチファイルに引数%A%を渡してcsvファイルを検索します。 検索文字列は引数%A%です。一行目に検索しようとする文字列があると それを%%Jにset してあげます。最後に渡された引数とセットされた文字列が同じであればOKです。 自分で考えたのですがなかなかうまくいきません。 みなさまのご教授おねがいします。 FOR /F "tokens=1 delims=," %%l in ('findstr /R "%1" rrr.csv') do set palam=%%l echo "渡された引数 [%1] " echo "セットされた文字列 [%palam%] " if "%palam%" NEQ "%1" ( goto :erro_end ) 引数は「pat」を渡したのですがセットされた文字列が「pat_a」 になってしまうんです。

  • Powershellでcsvから列を抽出しcsv

    Windows10のPowershellについて教えてください。 コマンドライン上の1行で、CSVを入力して指定する複数の列を抽出し、CSVを作成したいです。行頭に列名はありません。 出力の際に、コンマ(,)は必要です。 例: 5列あるCSVから、2列目と4列目を抽出する 入力    ー>  出力 A,B,C,D,E     B,D F,G,H,J,K     G,J L,M,N,P,Q     M,P よろしくお願いします。

  • エクセルでファイルを開かずに文字を検索し、行を抽出したい

    ひとつのフォルダの中にファイルが複数あります。これらのファイルを開かずに文字列を検索し、検索対象の文字がある行をまどめてひとつのファイルに抽出したいです。 例:Aフォルダ内にファイル1、ファイル2、ファイル3、、、と複数のファイルがある。ファイルのフォーマットはすべて同じでデータのみが異なる。ファイルにはシートは一つのみ。 ファイルのイメージは      A    B    C     D  1行目 名称   価格   味    評価 ←全ファイル共通 2行目 いちご  100円  おいしい   A 3行目 りんご  200円  まずい    C ・ ・ ・ これらのファイルから、例えば「いちご」という文字が含まれているセルがある行を抽出して一覧を作りたいです。 もし可能であれば、検索条件として、 一行に 「いちご」かつ「A」を含む や「いちご」または「おいしい」を含む など の絞込みができる機能があれば助かります。 マクロは初心者のため、自分でこのようなものを作ることができません。どうぞお知恵をおかしください。よろしくお願いいたします。

  • CSVファイルによる検索の高速化

    CSVファイル内を検索し、一致した行を抽出して出力する際、みなさんはどのような方法を選びますか?私の手元にあるCSVファイルは3000行以上のファイルで、500KBあります。出来る限り、高速化したいのです。文字コードはUTF-8で日本語が主に書かれています。

    • ベストアンサー
    • PHP
  • csv内にサブフォルダー内のファイル名を抽出する方

    csvのA列にアイテム番号が記載されております。 また、とあるフォルダーにアイテム番号になった名前のサブフォルダーが複数ございます。 しかし、フォルダ内の画像ファイル名が不規則となっているので、アイテム番号とサブフォルダ名が一致したらb列以降に抽出したいのですが、どのようにしたらよろしいでしょうか?

  • csvファイルからデータを抽出したい

    はじめまして。VBA初心者です。 【元となるデータの入ったCSVファイル(改竄禁止)】     A    B    C    D    E 1  ○位  名称  県名 住所 電話番号 2  ×位  ・・・ 3  △位  ・・・ 【抽出したデータを書き出したいxlsmファイル】     B    C 2  順位  3  県名 この二つのファイルがあるのですが、 (1)xlsmファイルのC2に順位を入力し、その順位の建物のデータを  csvファイルから抜き出し、xlsmファイル同シートのB5:F5に表示 (2)同じく県名もC3に入力し、抜き出した結果をB7を左上隅として表示 したいと思っています。 検索や本を見ましたが、似たようなケースがあってもそこから自分で 作るということができませんでした; 今後の参考にもしたいので、もしよろしければコードの解説もよろしく お願いします。

  • エクセル マクロ 文字列の検索と抽出

    エクセル2010を使っています。 画像の様に、【Sheet3】のA列~CQ列に 空白・エラー・数値・文字 の入った表があります。 そのL列には、画像の様な形で様々な地域の名前が入っています。 やりたいのは、L列に 検索対象文字が複数、例えば 福岡 か 大阪 が入っていたら、その表ごと抽出し、【Sheet1】の上から順に枠線ごと貼り付けて行きたいと思います。 この時、両方一致ではなく、検索対象の文字列が一つでも含まれていたら抜き出したいと思います。 その時に 【Sheet3】から抽出した部分は削除し、上に詰めて行きたいと思います。 ちなみに検索対象が、福岡・大阪・名古屋等、増える場合もありますので、増えたとき対応が出来る形が理想です。 ちなみにL列の文字と文字の間は ・ だったり / だったりします。 詳しい方、よろしくお願い致します。

  • CSVの項目検索について

    現在C++を使いはじめて1週間になり、そこで任されたプログラムの一部がわからずに困っています。 概要: ・CSVファイルがありそこの、ある項目列と検索する文字列が一致すれば、一致したレコードを取得するといった部分で煮詰まっています・・・ CSVファイルのサンプル testA,1,200412 testB,2,200410 testC,3,200409 といった感じで、「testA」といった文字列で検索をかけ「testA,1,200412」といったようにその対象となるレコードを取得したいのです。 今はWinAPIを使って作成すると言ったことから CreateFileなどの関数でCSVを読み込むところまで出来ましたが、要領がわからず調べても要領がわからずに1日無駄にすごしてしまいました、そこで どなたかアドバイスをもらえればと思い質問いたしました。 環境はVC++6.0です、よろしくお願いします。

専門家に質問してみよう