• ベストアンサー

65536行を超えるcsvファイルから検索したい

実際70万レコードほどはあるcsvファイルを開いたらもちろん65536行で切れました。 このファイルからある列で数字の1が入っているレコードを検索したいんですが、何か方法ありますでしょうか? どなたかご存知の方お教えください。

noname#43310
noname#43310

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.8

こんばんは。#3のWendy02です。 以下は、CSV検索プログラムです。なるべく、標準モジュールに登録してお使いください。 今回の検査は、郵便番号辞書(DD_0503.CSV)で試してみました。問題ないようには思われます。すでに、マクロの回答も出ているようですが、これは、Excelで確認しながら出力していくように作られています。スピード優先には出来ていませんが、確認しながらという所がミソです。 'ファイル名 を入れてください。 後は、ご質問どおりになっていますが、一応確認してください。 '検索語 '列 15行出力すると、画面から現れるようになっています。 Sub CSVFindNumberinColumn()  Dim i As Long  Dim j As Integer, Fnum As Integer  Dim myAr As Variant  Dim Buf As String 'ファイル名  Const MYFILE As String = "C:\ADD_0503.CSV" '検索語(念のために、" " で囲ってください。)  Const FINDSTR As String = "1" '列  Const FINDCOL As Integer = 4  Fnum = FreeFile()  i = 1  Open MYFILE For Input As #Fnum  Application.ScreenUpdating = False  Do Until EOF(Fnum)    DoEvents    Line Input #Fnum, Buf    myAr = Split(Buf, ",")    '列目    If WorksheetFunction.Substitute(myAr(FINDCOL - 1), """", "") = FINDSTR Then      Cells(i, 1).Resize(, UBound(myAr) - LBound(myAr) + 1).Value = myAr      i = i + 1      '15行ごとに画面を見えるようにさせる。      If i Mod 15 = 0 Then       Application.ScreenUpdating = True       Application.ScreenUpdating = False      End If      If i > 65535 Then Close #Fnum: MsgBox "65535行を超えましたので停止します。": Exit Sub     End If  Loop  Close #Fnum  Application.ScreenUpdating = True End Sub

その他の回答 (7)

  • k-roh
  • ベストアンサー率36% (14/38)
回答No.7

No.5です。 Vectorに登録されているDIV というツールを私は使っています。

参考URL:
http://www.vector.co.jp/soft/win95/util/se088352.html
  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.6

#4です。 >該当しないレコードは、全く使わないのでしょうね これにも答えてない。回答の死命を制することを判ってないようですね。 下記をエクセルのVBEの画面で標準モジュルーを挿入し、 Sub test01() Open "C:\Documents and Settings\XXXX\My Documents\test02.csv" For Input As #1 Open "C:\Documents and Settings\XXX\My Documents\test03.csv" For Output As #2 While Not EOF(1) Line Input #1, a x = Split(a, ",") If x(3) = 1 Then Print #2, a End If Wend Close #1 Close #2 End Sub をコピーして貼り付け、実行してみてください。 約100件とおっしゃるCSVファイルができますから、それをエクセルに読み込ませ、あとはエクセルでどうでもしてください。 ファイル指定のXXXXの部分は自分の場合に合わせること。 If x(3) = 1 Thenの()内の3が4列目を指定してます。 Wendy02プロの補足要求の >クォーテーションで囲んでいますか? txtで開けばカンマ区切りです。シングルクォーテーション付けて文字列にしてあるか?とかいう意味でしょうか?excelで開いてもただの数値です。 補足がピントはずれです。文字列はダブルコーテーションで囲んでないものとします。 70万レコード読むから、時間はかかるでしょう。少数例でテスト済み。

  • k-roh
  • ベストアンサー率36% (14/38)
回答No.5

フリーフェアなどで5万件単位に分割して それをExcelに読ませるという方法もあります。 メモリーは積めるだけ積んどいたほうがいいかもね。

noname#43310
質問者

補足

そのソフトって教えてもらえますか?

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

>数字の1が入っているレコード 該当見込みは1割(65000件)以上ですか。不明ですか。 >ある列で・・ 左から何番目の列ですか。決まった列1列でしょうね。 ○今回の!作業ではとりあえず、条件(=1)に該当しないレコードは、全く使わないのでしょうね。

noname#43310
質問者

補足

>該当見込みは1割(65000件)以上ですか。 70万あって恐らくそのレコードは100もないです。 ある列は下にも書いたように決まっております。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんばんは。 >65536行を超えるcsvファイルから検索したい Excelでということですね。 Excelで、CSV を直接開いてはダメです。簡単なマクロで出来ます。 >ある列で数字の1が入っているレコード どこの列なのか決まっていますか?そのほうが検索が速いですね。全部の列を調べるというのは、面倒です。 それと、クォーテーションで囲んでいますか?いませんか?それによっても違います。

noname#43310
質問者

お礼

過去の質問でもマクロならいけるみたいですね。。マクロさっぱりですが。。 >ある列で数字の1が入っているレコード 列は左から4列目で固定です。 >クォーテーションで囲んでいますか? txtで開けばカンマ区切りです。シングルクォーテーション付けて文字列にしてあるか?とかいう意味でしょうか?excelで開いてもただの数値です。 こんな感じですがなにか補足でもございましたらご指摘お願い致します。

回答No.2

秀丸エディタでcsvファイルを開いて、[検索]-[grepの実行]。 [grepの実行]ウィンドウで、以下の通り設定して、[OK]。 検索する文字列 : ^(.*?,){n}1, 検索するファイル : (現在の内容) 正規表現 : ON (*) 検索する文字列の「n」は、列番号-1を指定します。   3列目であれば「2」、5列目であれば「4」となります。

参考URL:
http://hide.maruo.co.jp/software/hidemaru.html
noname#43310
質問者

お礼

ご回答ありがとうございます。 お金がかかるのはちょっと・・見送らせてもらいます。ごめんなさい!

  • usami33
  • ベストアンサー率36% (808/2210)
回答No.1

もしかしてエクセルでの話ですか? パフォーマンスの設定ができるテキストエディッタを使用すれば、検索はできますよ ちなみに私のお勧めは秀丸エディッタ 動作環境の設定で1000万行まで表示可能です また、通常のテキストエディッタなら、表示しなくてもGrepの機能があるので、サイズが大きい場合はこの機能を使うと良いですよ シェアウェアなので、気に入った場合は正規購入をお勧めします ※そのままでも使用可能です

参考URL:
http://www.vector.co.jp/soft/win95/writing/se086280.html
noname#43310
質問者

お礼

ご回答ありがとうございます。 急いでいるのでさらっとだけみさせてもらいました。 まずcsvでは開けないので、txtでひらくとカンマ区切りな訳で、このなかからある一列の1を検索できないかな。と思いまして。 ある一列は決まった列ですので多少は簡単かな、と。 皆様にまとめてのお礼になって申し訳ないですが、 これをご覧になって補足などございましたら、書き込んでいただければ嬉しいです。

関連するQ&A

  • エクセルファイルの1レコード(1行)を1csvファイルへ変換マクロ

    エクセルファイルの1レコード(1行)を1csvファイルへ変換し、エクセルファイルにあるレコード数分だけあるフォルダに自動作成するマクロを教えて下さい。 因みに、csvファイル名は、エクセルデータの『a列.csv』となるようにしたいです。 【例】 本日2007/11/13 ○○.xls A列 B列 C列 111 1 356 13 1 2 ・ ・ ・ ・ ・ ・ 111.CSV "2007/11/13(火)","1","356,"","","" 13.CSV "2007/11/13(火)","1","2,"","","" 変換後のcsvの中身は 1列目に、本日の日付 2列目に、1 3列目に、変換元のエクセルファイルの3列目 4、5、6列目に空白 という形式です。 どなたかお分かりになるかた、ご教授願います。

  • csvファイル検索

    フォームから検索文字を入力してもらい 4列、2000行ほどのcsvファイル内を検索し、ヒットしたらその行を出力するというものを作りたいと考えています。 csv  ------------------------- 1|自転車 バイク 2056,タイヤ,ペダル,ハンドル  |  ------------------------- 2|バイク 2001,タイヤ,ペダル,ハンドル      |  ------------------------- 3|自転車 バイク 2001,タイヤ,ペダル,ハンドル  |  ------------------------- 4|自転車 バイク 5601,タイヤ,ペダル,ハンドル  |  ------------------------- といった行があったとして、フォームに "自転車 56"と入力した際、 1行目3行目4行目の文字列を表示したいのですが、その際 1行目と4行目は2つヒットしているので3行目より上に表示させたいのです。 yahooなどの検索サイトのor検索のようなものです。(スペース区切り) 正規表現でやればいいのか?と思い手をつけてみたのですがどうも違うようですし、もしかしたらPHPで作ろうというのが間違っているのかもしれませんが、何か方法及び参考になるurlがありましたら教えてください。 よろしくお願いします。 windows2000 php4-4.3.8-18です。

    • 締切済み
    • PHP
  • CSVの3行目だけを…

    はじめまして!Nakanoと申します。 えっと、以下質問になります。おねがいします。。 CGI/Perlを始めて1週間程度の素人なのですが、 CSVファイルをHTMLのテーブル表示させる 様にしたいなと思っています。 そこで用意したCSVファイルが5行と8列で カンマ区切りのみで構成されています。 このCSVファイルから3行目だけを抽出する方法 ってありますでしょうか? 1行目のみ表示や1行目以外の2行目以下全てを表示 させたりは出来たのですが、3行目だけを表示するの がどうしても分かりませんでした・・・・・ 何方様か。よろしければその辺の所を詳しくご指導 いただけないでしょうか? よろしくおねがいします。

    • ベストアンサー
    • Perl
  • CSVファイルの行が突然消える

    あるデータを抽出し、それをCSVファイルで取り込み、1つ取り込む ごとにCSVファイルが1行ずつ増えていきます。 適当な時期に、何行かたまった行を一気にAccessを用いてさらに取り込み ます。(取り込むのみ) あるとき、CSVファイルを開くと突然CSVファイルの行が減って いるのです。 何が起きているのでしょうか? Accessに何かマクロとか組んであって突然消えるのでしょうか? Accessを開く前と開いた後(取り込んだ後)で、特にCSVファイル に変更はありません。 あるとき突然CSVファイルを開くと昨日まであった行が突然 消えてしまうのです。(いつ起こるのか予測できていません。) CSVファイルにはマクロが組んであるようには見えません。 何かわかればお願いします。

  • CSVファイルの行と列のセルってどうやって指定するのですか?

    たとえば、1行目の2列目のセルの値を消したい。 2行目の5列目のセルの値に数字の5をいれたい。 って場合、行だったら $FILE=data.csv; open(IN, $FILE); @data=<IN>; close(IN); このときの $data[2]は3行目ですよね? では3行目の3列目はどうやって指定するのでしょうか?たとえば3行目の3列目のセルの数字の5だったのをperlを実行したらセルの中を6に書き換えるのはどうしたらいいのでしょうか?

    • ベストアンサー
    • Perl
  • とても大きなCSVファイルをEXCELで見たい。

    今、手元にとても大きなサイズのCSVファイルがあります。 そのファイルは、行は1800行なのですが、列は256行以上あり何列あるかわかりません。 EXECL2000で開くと全ては開けなかったと表示されてしまいます。 なんとか、EXCELでこのファイルを見ることはできないでしょうか? または、CSVファイルの列を分割できるようなソフトを ご存知ないでしょうか? よろしくお願いします。

  • CSV検索

    CSV(カンマ区切り)でtest.csvに 1000K,山田太郎,経理課, 1010H,山田花子,秘書課 というファイルがあります。 一番左から社員番号、名前、所属・・・になってます。 検索で、社員番号を入力すると名前が表示されるCGIを探してます。 ちなみに社員番号は数字と英語の組み合わせです。 類似する機能のあるCGIをご存知の方宜しくお願いします。 OR Perlで、ある特定の文字列が含まれている行を返す構文かプログラムを挙げてください。 宜しくお願いします。

    • 締切済み
    • CGI
  • VBでCSVファイルのある行をインポート

    VBでCSVのインポートをしたいのです。 CSVファイルの中身で、最初の5行は読みません。そして、カンマ区切りの行の最初の文字が数字である場合だけを読みたいのです。で最後の3行も読みません。 ですので、CSVのデータを読む場合に最初の5行を飛ばすという方法か、カンマ区切りの行の最初の文字が数字の場合だけ読むという方法はありませんでしょうか。 Line Input #intFileNo, strTextLine strTextLine = Replace(strTextLine, """", "") str = Split(strTextLine, ",") こんな感じのコードで考えてます。 お分かりの方いましたらお願いします。

  • 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です、よろしくお願いします。

  • csv.ファイルをCで読み込みたいですが...

    csvファイルを読み込みたいんですが、レコードの1行目はカラム名なので読み飛ばしたいんですが、方法がわかりません。 だれか教えてもらえませんか?

専門家に質問してみよう