• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:C# でCSVファイルから検索したい文字取得ついて)

C#でCSVファイルから検索したい文字を取得する方法

このQ&Aのポイント
  • C#でCSVファイルから特定の文字を検索し、取得する方法について詳しく教えてください。
  • 具体的には、このCSVデータで指定した文字を検索し、該当する行の特定の列の文字を取得したいです。
  • また、CSVファイルからの読み出し方法についても教えていただければ幸いです。

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

  • ベストアンサー
回答No.2

第1パラメータにCSVのファイル名、 第2パラメータに探したいコード番号(ex.7500100) を指定すると「アイ」の列の項目を表示するコンソールプログラムの例。 using System; using System.IO; namespace CSVRead { struct piyopiyo { public string number; public string code; public string piyo1; public string piyo2; public string piyo3; public string piyo4; public string piyo5; } class Program { static void Main(string[] args) { piyopiyo readdata = new piyopiyo(); readdata.code = string.Empty; try { // 第1パラメータで指定されたシフトJISコードのファイルを開く StreamReader sr = new StreamReader(args[0], System.Text.Encoding.GetEncoding("shift_jis")); string line; // 1行ずつ読み込み while ((line = sr.ReadLine()) != null) { // 行を「,」で分割 string[] param = line.Split(','); // 「"」を除去して構造体に格納 readdata.number = (param[0].Split('"'))[1]; readdata.code = (param[1].Split('"'))[1]; readdata.piyo1 = (param[2].Split('"'))[1]; readdata.piyo2 = (param[3].Split('"'))[1]; readdata.piyo3 = (param[4].Split('"'))[1]; readdata.piyo4 = (param[5].Split('"'))[1]; readdata.piyo5 = (param[6].Split('"'))[1]; // 第2パラメータで指定されたコード番号を判定 if (readdata.code == args[1]) { break; } } if (readdata.code != args[1]) { Console.WriteLine("{0:s} は無いの", args[1]); } else { Console.WriteLine("{0:s} は {1:s} なの", args[1], readdata.piyo3); } } catch (Exception e) { Console.WriteLine("{0:s} なんて読めないの", args[0]); } } } }

ndckenji
質問者

お礼

ありがとうございます。 助かりました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

回答No.1

全部読み込んでから探す場合 (1)1行ずつ読み込み、「,」を区切りとして各データを配列または構造体に取り込む。 (2)(1)を繰り返し、行数分の配列に格納 (3)2番目の要素に「7500100」が入ってる行を探す。 (4)その行の5番目の要素を取り出す。 1行ずつ読み込みながら探す場合 (1)1行ずつ読み込み、「,」を区切りとして各データを配列または構造体に取り込む。 (2)2番目の要素に「7500100」が入ってなければ次の行を繰り返す。 (3)2番目の要素に「7500100」が入っていれば5番目の要素を取り出す。 C#で一行ずつテキストを読み込んで処理する場合はStreamReaderクラスを生成し、ReadLineメソッドで一行ずつ取り出すのが便利でしょう。取り出したString型の文字列はSplitメソッドで区切り文字を指定して分割できます。

ndckenji
質問者

補足

申し訳ありませんが、ソース教えて戴けませんか? お願いいたします。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

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

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

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

    • ベストアンサー
    • PHP
  • csvファイルでの出力について

    C言語初心者です。 プログラミングにおいて質問なのですが、csvファイルを読み込み、 そのデータを用いて計算し、csvファイルで出力するという問題なのですが、C言語においてcsvファイル形式で出力するにはどのような方法がありますか? 補足:ラベル行に全角文字を入力しないといけません。

  • 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ファイルのデータの行数を取得したい

    こちらではいつもお世話になっています。Perlに関して、初心者ですが教えてください。 CSVファイルについて、データの存在する行数を取得したいと考えています。自分なりに考えたところでは、下記の方法で取得できるのではと思ったのですが・・・・・ open(FH,"data.csv"); @array = <FH>; $count = $#array; close(FH); data.csvは、1行目から順にデータが入っています。 これで、$countに1を足せばCSVデータの行数になるのではないかと考えています。 しかし、実際に動かしてみると、$countには、data.csvにデータがあるのに「-1」(要素なし)が返ってきます。何か間違いがあるのでしょうか。 あるいは、別にCSVデータの行数を取得する方法が他にあれば、教えていただけないでしょうか。 よろしくお願いします。

    • ベストアンサー
    • Perl
  • Visual C++によるcsvファイルの読み込みについて

    Visual C++を使い始めたばかりの初心者です。 恐縮ながら、Visual C++でのcsvファイルの処理方法についておたずねさせていただければと存じます。 通常のスクリプト言語では、1行読んできて、"," で split をしてやることで、csvファイルを処理できるのですが、Visual C++ではどのようにするのが効率がいいのでしょうか? csvファイルを簡単に取り扱うことができるようなクラスライブラリが提供されているものなのでしょうか?それとも、1文字1文字、コンマを判定していくのが普通なのでしょうか? よろしくお願いいたします。

  • csvファイルをfscanfで読み込むと変な文字が出てきます

    csvファイルをfscanfで読み込もうとしているのですが どうしてもおかしな文字が混じってしまいます 例えばcsvファイルのデータが abc,efg となっているとします これを読み込みprintfで表示すると abc"" efg"" というように表示されてしまいます csvファイルを普通に開いてもこのような文字はありません 一体どこから沸いて出てくるのでしょうか? %[^]を使って不要な文字を読み込まないように %[^"]と記述しましたが エラー番号c2143とc2059が出てしまいます 何か解決方法はございませんでしょうか? よろしくお願いします。

  • 複数のCSVファイルからのデータ取得(VBA)

    エクセルVBAで、エクセルの指定シートに複数のCSVファイルからデータを取得する方法を ご教授お願います。 エクセルの指定シートの指定されたセルに、複数のCSVファイルから指定箇所のデータを 取得し転送する方法を考えていますが、どうもうまくいきません。 たとえば、 CSVファイル(1) A5(A)           A10(B) CSVファイル(2) A5(C)           A10(D)      CSVファイル(3) A5(E)           A10(F)         ・      ・      ・ と、指定されたセルからデータを取得し、 エクセルの指定シートの表に                    CSVファイル                                 (1)  (2)  (3) ・ ・ ・ ------------------------------------------- A5から取得したデータ    A   C   E ・ ・ ・ A10から取得したデータ    B   D   F ・ ・ ・ ------------------------------------------- と、いうように転送して貼り付けていきたいです。 いろいろ調べてみたのですが、このような方法が見つけられませんでした。 ぜひ、皆様のお知恵をお貸しください。 宜しくお願い致します。

  • csvファイルのデータ列数を取得したいのですがうまくいきません。

    csvファイルのデータ列数を取得したいのですがうまくいきません。 VB2010、StreamReaderでファイルを読み込み、 以下のコードで列数を取得してみたのですが、 数値変数の「列数」に7が入ります。 実際は3列しかありません。 SR.ReadLine()で読み込んだデータ右端部にいらないカンマがいくつか並んでいました。 列数 = UBound(Split(SR.ReadLine(), ",")) どう修正したらよいでしょうか。 また、csvファイルのデータ列数を簡単に取得する方法はないでしょうか? 教えてください。 お手数をおかけしますがよろしくお願いします。

  • VBAよりCSVファイルの任意の行を取得

    お世話になります。 Access2010 VBAよりCSVファイルの2行目の文字列を取得したいのですが、とりあえず下記で取得することができました。 path = CurrentProject.path cnt = 1 Open path & "\test.csv" For Input As #1 Do Until cnt > 2   Line Input #1, buf   If cnt = 2 Then     MsgBox buf   End If   cnt = cnt + 1 Loop Close #1 例えば、 1行目 xxxxx 2行目 フィールド1,フィールド2,フィールド3,・・・ 3行目 データ1,データ2,データ3・・・ という内容のCSVがあり、上記のVBAを実行すると、2行目の『フィールド1,フィールド2,フィールド3,・・・』を表示できます。 で、実際のCSVファイルは数十万行あるのですが、そのファイルを指定し上記VBAを実行すると、Line Input #1, bufの箇所で「実行時エラー14 文字列領域が不足しています。」と表示されてしまいます。 何かよい方法はございますでしょうか。 なお、当該Accessはユーザーへ配布するものであり、Runtime環境で実行します。 よって、CreateObjectは使えない状況です。 勉強不足で申し訳ございませんが、ご教授の程よろしくお願い致します。