• ベストアンサー

VB.NETでファイルを後ろから読み取りってできますか?

なにがしたいかというと、 データファイルがあり、1行1データとなっているファイルがあります。 データはCSVで書かれており、あるデータの数値が"5"(訂正の意味)のときに、そのデータより一つ前の同一メンバーIDの行と訂正の行を一組として削除したいんです。 一度配列に落としてからということも考えたのですが、なにせデータベースなので何行になるかわかりません。 よろしくおねがいしますー

  • Haule
  • お礼率52% (125/240)

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

  • ベストアンサー
  • xcrOSgS2wY
  • ベストアンサー率50% (1006/1985)
回答No.3

これまでHauleさんが何度か質問されているSQL Server使用システムと同じ案件なのであれば、わざわざVB.NETに苦手な処理を行わせるより、CSVデータをSQL Serverに読み込ませてSQL Server上で処理するほうがずっと効率的かと思います。 どうしてもVB.NETを使用しないといけない、でも配列を全部メモリ上に読み込むのは避けたい、ということであれば、3パスで処理すれば配列を全部メモリ上に読み込まなくても処理できます。 パス1: 訂正の意味の行を抽出する パス2: パス1の情報をもとに、訂正の対象となる行を抽出する パス3: パス1、パス2の情報をもとに、最終的なデータを出力する

Haule
質問者

お礼

皆様レスありがとうございました^^ 参考になりました。

その他の回答 (3)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.4

一行読み込みの一行バッファで処理できるのでは?

  • popesyu
  • ベストアンサー率36% (1782/4883)
回答No.2

VBでの配列の限界数は確かメモリの上限までだったと思いますので、そのまま配列につっこんでいっても良いかと。.NetならArraylistを使ってどんどん追加していくのが楽だと思います。

  • JeanneNet
  • ベストアンサー率48% (100/208)
回答No.1

こんにちは、じゃんぬねっと です。 原則として、一気に全部読み込んで配列に格納し、 後ろから読み取っていくしかないでしょう。

関連するQ&A

  • vb.netでCSVファイルを変換して新しいCSVファイルを作りたいの

    vb.netでCSVファイルを変換して新しいCSVファイルを作りたいのですが、どのようにすれば良いかヒントを教えていただけないでしょうか? A組,10代,10 A組,20代,20 A組,30代,30 B組,10代,40 B組,20代,50 B組,30代,60 C組,10代,70 C組,30代,80 この様なCSVファイルを変換して ,A組,B組,C組 10代,10,40,70 20代,20,50, 30代,30,60,80 という表のようなCSVファイルを作りたいのです。 データベースなどに入れずに、ファイルtoファイルでの変換がしたいです。 最初のファイルの1列目と2列目の項目をそれぞれ配列に入れて重複をなくす位までは思いつくのですが、そこから先がどの様にすれば良いかよく分かりません。 ヒントだけでも良いのでよろしくお願いいたします。

  • csvファイルを読み込み→上書きするスクリプト【添削願】

    csvファイルを読み込み→上書きするスクリプトを作ってみましたがうまく行かないときがあり原因を考えています。 100行程度のcsvから任意の行($idで指定したもの)を書き換えたいのですが、(テスト書き込みを)書き込んでくれるときと指定したその行だけ削除されてしまうときとまちまちです。 なぜ2パターンの結果がでるのでしょうか? お力をお借りできると幸いです。 <?php //データの取り出し $id = $_GET['id']; $data = file("data/file.csv"); //idで指定した行に書き込み $data[$id] ="テスト書き込み"; //csvファイルにデータの書き込み $file = fopen("data/file.csv","w+"); flock($file, LOCK_EX); for($i=0; $i<count($data); $i++) { fwrite($file,$data[$i]); } fclose($file); ?>

    • ベストアンサー
    • PHP
  • VB2010でCSVファイルを読み、配列に入れる

    ExcelVBAで、フォルダを選択しCSVファイルを表示⇒クリックで対象ファイルを選び配列に入れる次のプログラムを作りました。その後でデータを加工しグラフィック化してるのですが、VBAのグラフィック機能が遅いのでVB2010に変えようと思いいろいろやってみたのですが、どうもうまくいきません。 どなたか、VB2010ではどのようなプログラムになるのか、教えていただけないでしょうか。 'Excel VBA---------------------------------------- Sub CSVデータ() Dim xd(1000),yd(1000) 'フォルダを選ぶ ChDir ThisWorkbook.Path 'CSVファイルの一覧 pname = _ Application.GetOpenFilename(FileFilter:="CSVファイル(*.csv),*.csv" _ , FilterIndex:=1,Title:="開く",MultiSelect:=False) '対象ファイルをクリックで選ぶ If pname <> False Then Workbooks.Open Filename:=pname End If fname = ActiveWorkbook.Name 'CsVファイルのセルから配列へ移す nstart = 6 nend = nstart +500 k = 0 For i = nstart To nend '6行目から500行の2列、3列を読み配列に入れる k = k + 1 xd(k) = Cells(i, 2) yd(k) = Cells(i, 3) Next i End Sub

  • csvファイルについて

    javaで、csvファイルを読み取り、データベースにいれるツールを作成しています。 csvファイルを読み込む部分でつまづいてしまったので、どなたかご教授ください! 指定されたcsvファイルを一行ずつ取り込むのですが、一つの情報が2行以上になってしまうデータがいくつかあり、ファイルチェックとして、1つ目のカラムは何文字のものだとかしているけれども、その前の行の続きに当たる行が、その条件から外れてしまい、エラーになってしまいます。(当たり前ですが、、、) なぜ、csvファイルが一行に収まらないのかが、わかずですし、それを一行として読み込むことができるのかが不明で困っております。   原因や対処法が分かれば、教えていただければと思います。 よろしくお願いします。

  • VB2010でCSVファイルの読み込み

    VBを用いて,CSVファイルから必要な数値のみを読み込みたいのですが,うまくいきません. 一行目を飛ばし,二行目以降から読み込んでいきたいのですが,可能でしょうか? よろしくお願いします.

  • CSVファイルの処理方法

    PerlでCSVファイルの処理をしようとしています。 CSVファイル(ここではdata1.csvとします)の中身は、A列とB列に数値が1000行程表記されています。 -5,1 -4,2 -3,3  ・  ・  ・ 作成したPerlのファイル(ここではtest1.plとします)下のようにし、 while ($_=<stdin>){ print"$_\n"; } Cygwinコマンド上で、 $ perl test1.pl <data1.csv と入力すると、CSVファイル(data1.csv)の数値がCygwinコマンド上に全て表記されます。 前置きが長かったのですが、CSVファイル(data1.csv)の3行目までの数値だけをCygwinコマンド上に表記したい場合、どのようにプログラムすればよいのですか。 お願いします。

    • ベストアンサー
    • Perl
  • 【設計】vb.netでファイルを読み込みDB登録を行う

    すみません、vb.netで開発を行うにあたり設計に詳しい方が いらっしゃいましたらご教授願います。 開発する機能はタイトルの通り、txtファイルからデータを読み取り 内容をデータベースに登録するというものですが 現在、開発するにあたり二つのロジックを思いついており どちらが適切か迷っております。 (1) あらかじめtxtファイルの内容を全てリードし配列等の一時変数に退避   ファイルリード終了後、配列に格納されたデータを1件ずつ登録 (2) txtファイルの内容を1件リードするごとにデータベースに登録 開発環境は、vb.net、Oracle です。 txtファイルに格納されているデータ量はファイルにより様々ですが 多くても2万件が予想されます。 迷っている理由としては、 (1)は2万件のデータ量を配列に格納したとしてメモリが耐えれるかどうか? (2)は、1件ずつ読込みデータベースに登録するとなると  その分ファイル及びデータベースへのアクセス時間が長くなり  負荷がかかるのでは? という、懸念事項が考えられ迷っております。 上記、二つの開発手法の内どちらがベストか または、上記以外にベストなロジックがあればご教授お願い致します。

  • CSVファイルインポート時の制限について

    AccessVBAでcsvファイルをインポートするマクロを作っています。 現在、インポート定義を利用して、データ型を指定したインポートができているのですが、1点だけ問題があり、質問します。 インポートするcsvファイルのA列にIDが入力されています。 そのA列の末尾に、ID(数値型)ではない「<b>32</b><br />」という値が入っています。 Accessのテーブルでは、このIDのフィールドは数値型で管理している為、この1レコードだけ エラーとなり、エラーテーブルが作られ、また、インポート先のテーブルには空のレコードができてしまいます。 この末尾の行については、IDではない「<b>32</b><br />」以外は何もデータが入っていない為、 インポートする必要がありません。 もし可能であれば、csvファイルのA列(Accessテーブルでは数値型のIDというフィールド)が数値ではない場合、 その行のインポートをスキップするような処理がVBAで作成できるとよいのですが、可能でしたら教えてください。

  • csvのデーターファイルから任意の行をエクセルファイルへ入力するエクセ

    csvのデーターファイルから任意の行をエクセルファイルへ入力するエクセルVBA が上手くできません。 6列2000行のcsvデーターのテキストファイルの作成は、色々な参考書があり成功しました。次に このcsvのデーターファイルから任意の複数行をシート4などの任意のワークシートの任意の場所に60行程度をインポートして、この60行の数値データーを加工しようとしていますが、入力が上手くできません。数値データーの加工のプログラムは一応できているため、その様式にあわせて、所定の場所にデーターを入れる必要が有ります。 1列目には日付(シリアルの数値にしています)、その他はすべて数値(LONG型)です。エクセルは2003を使用しています。 VBAの初心者です。宜しくお願いいたします。

  • excel vbaで複数のcsvファイルの読み込み

    100シート分のcsvファイルのデーターを一つずつ読み込んでexcelにコピーして使用してますが莫大な時間がかかって困ってます。 vbaを使用して作業を簡素化出来る事は出来ないでしょうか? ------------------------------------------ ※ csvの概要 excelで1枚のcsvファイルを開くとA列の11行目から65536行まで数値データがあります。 ※ vbaできたらよいなと思う仕様 そこで、複数のcsvファイルを選択して読み込むとCSV_データと言うSeetのA列の10行目から1枚目のcsvファイル、B列の10行目から2枚目のcsvファイルと言う風に選択した分のcsvを列に続けて数値データを貼り付けしてくれるvbaをご教授していただけると大変助かります。 不躾で申し訳ございませんが宜しくお願い致します。 excel2003 ------------------------------------------

専門家に質問してみよう