• ベストアンサー
  • 困ってます

c#でcsvファイルをリソースとして読み込むには?

c#でcsvファイルをリソースとして読み込むには? 222.csvというファイルがあります、 これを「リソースの追加」からResourcesフォルダに入れ、ソリューションエクスプローラーから ファイルの存在を確認するところまではできたのですが、 このcsvファイルの内容を変数に代入できずに困っております。 222.csvがResourcesフォルダに入ると_222.csvというファイル名に変わるので、 以下の記述によって変数に代入できるかと思ったのですが、うまくいきません。 string path = Project1.Properties.Resources._222; 他に正しい記述の仕方があるのでしょうか? アドバイスお願いします。

共感・応援の気持ちを伝えよう!

  • 回答数3
  • 閲覧数2777
  • ありがとう数9

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

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

> これで設定したボタンを押してみましたが、何も起こりませんでした… Windowsフォームの環境でしたらテキストボックスか何かにでも出力してみてください。 例に書いたのはコンソールアプリ用のものですから。 textBox1とかいうテキストボックスがあったら private void button3_Click_1(object sender, EventArgs e) { string txt = Properties.Resources._222; textBox1.Text = txt; } とかいうように。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

お返事遅くなりまして申し訳ありませんでした。 おかげさまで問題解決しました。 お忙しい中何度もご回答ありがとうございます 本当に助かりました。

関連するQ&A

  • c#で(",")区切りのcsvファイルから読み込みを行うには?

    駆け出しの初心者です。 以前c言語を少々勉強していてcsvファイルの読み込み、書き出しを練習していたのですが、最近c#を使うようになり、その便利さに圧倒されております。 今回c#で読み込みたいcsvファイルは以下のようになっております "abc","123","あいうえお" ただのカンマ区切りであれば読み込みは簡単ですが、 上記のようにダブルクオーテーションでそれぞれの文字列が囲まれている場合に文字列だけを読み込み、配列に代入していくのに何かスムーズな方法はありませんでしょうか? ちなみに現在単純にカンマ区切りのcsvファイルを読み込むコードを 書いた所ですので、載せておきます これをいじってスムーズにいければうれしいのですが、いかがでしょうか? private void LoadData() { string path = "Data.csv"; string delimStr = ",";//区切り文字 char[] delimiter = delimStr.ToCharArray(); string[] strData;//分解後の文字用変数 string strLine;//1行分のデータ Boolean fileExists = System.IO.File.Exists(path); if (fileExists) { System.IO.StreamReader sr = new System.IO.StreamReader( path, System.Text.Encoding.Default); while (sr.Peek() >= 0) { strLine = sr.ReadLine(); strData = strLine.Split(delimiter); DataSet.DataTable.AddDataTableRow( DateTime.Parse(strData[0]), strData[1],    strData[2], int.Parse(strData[3]), strData[4]); } sr.Close(); } } いつも丁寧な回答で協力してくれる皆様には心から感謝しております。 どうぞよろしくお願いします。

  • リソースファイルとは・・・

    リソースについて、2つ疑問が沸きました。 もしよろしかったら、アドバイスよろしくお願い致します。 (1)最近まで、Visual C# .NETを使用しておりました。 さきほど、Visual C++ .NETをいろいろいじっていたのですが、C++にはリソースというフォルダがあって、C#にはないのか疑問になりました。 どうしてC++では、リソースとして明確に分けているのかどうしてもわかりません。(そういえば、C#では、多言語に対応できないのかな・・・!?) (2)C#では、たとえば、メニューのキャプションを変更したりといったことは、コードと同じように編集できるのに、どうしてC++では、わざわざリソースエディタのメニューデザイナで編集させているのでしょうか? あと、リソースエディタの中にダイアログと言う項目があるのも不思議でなりません。ダイアログもフォームなのにリソースなんでしょうか?(リソースファイルとして保存して何か意味あるのでしょうか?)

  • c#でcsvから指定の1行だけを読み込む方法

    以前c言語で同じような質問をして、とても有益な回答を頂きましたが、 今回c#でのコードの書き方をご教示いただければと思い、再度質問致します。 例えば以下のようなcsvファイルがあったとします。 ab1,ef2,ab3,af4,ab5 bb1,bf2,bb3,bf4 cb1,cf2,cb3,cf4,cb5 zb1,zf2,zb3,zf4,zb5 プログラムに"cb3"という文字列を探させて、その文字列を含む一行 "cb1,cf2,cb3,cf4,cb5"のみを読み込む方法を探しております。 現時点では以下のコードにてcsvファイルを丸々読み込んでおります。 private void LoadData()//csvファイルを読み込む { string path = "abc.csv"; string delimStr = ",";//区切り文字 char[] delimiter = delimStr.ToCharArray();//区切り文字をまとめる string[] strData;//分解後の変数 string strLine; //1行分のデータ Boolean fileExists = System.IO.File.Exists(path); if (fileExists) { System.IO.StreamReader sr = new System.IO.StreamReader( path, System.Text.Encoding.Default ); while (sr.Peek() >= 0) { strLine = sr.ReadLine(); strData = CsvToArrayList1(strLine)[0]; abc.abctable.AddabctableRow ( strData[0], int.Parse(strData[1]) ); } sr.Close(); } c言語の時はstrstrで特定の文字を含む1行のみを取得できたのですが、 c#ではもっと良い方法があるのではと考えております、 お時間がありましたら是非教えてください。 皆様の丁寧な回答にいつも感謝しております。

その他の回答 (2)

  • 回答No.2

とりあえず、ソリューションエクスプローラーに表示されているファイル名は忘れてください。 「プロジェクト」メニューの一番下の「○○○のプロパティ」(○○○はプロジェクトの名前)を開くとプロジェクトに登録されているリソースの一覧が出ますので、そこに表示されている名前を使ってください。 仮にこのリソース名を hogehoge とすると、 string txt = Properties.Resources.hogehoge; で、txtにhogehogeの中身が読み込まれます。 (今の場合、txtの中身は csvファイルの内容そのもの) リソースの読み込みはこれだけでOKです。 読み込んだcsvの中身を行毎やセル毎に取り出すというのは、また別の作業です。 試しに Console.Write(txt); とすれば、csvの中身がコンソールに表示されるはずです。

共感・感謝の気持ちを伝えよう!

質問者からの補足

度々もうしわけありません。 仰る通りに実行したのですがまだうまくいきません。 プロパティの内容を読み込むだけのボタンを作って実行してみました。 private void button3_Click_1(object sender, EventArgs e) { string txt = Properties.Resources._222; Console.Write(txt); } プロパティ内でファイル名は_222になります、これはResources.まで打ち込むと自動で出てくる名を タブキーで選択しているので間違いないと思います。 これで設定したボタンを押してみましたが、何も起こりませんでした… 他に注意する点などありませんでしょうか? お忙しい中何度も申し訳ありませんがよろしくお願いします。

  • 回答No.1

 リソースはビルド時にオブジェクトとしてプログラムの中に組み込まれるので、Resourceフォルダのパスを指定しても意味ありません。第一、実行環境にResourceフォルダなんてものは用意されません。  リソースに追加したときにリソースIDなりリソース名なりを付加しているはずなので、それを使ってアクセスします。 リソースの使い方ぐらいググればいくらでも出て来ますが、 http://dobon.net/vb/dotnet/programing/bitmapresource.html (これは古い方法) とか http://dobon.net/vb/dotnet/programing/vsresource.html あたりが参考になるでしょう。

共感・感謝の気持ちを伝えよう!

質問者からの補足

お返事ありがとうございます。 質問前に方法をグーグル検索で探し、該当のページも拝見しましたが 初心者ですので、はっきりと理解ができませんでした。 今回の場合、以下のコードを記述すればリソースフォルダに入れたcsvファイルが 読み込めるということでしょうか? //現在のコードを実行しているAssemblyを取得 System.Reflection.Assembly myAssembly = System.Reflection.Assembly.GetExecutingAssembly(); //指定されたマニフェストリソースを読み込む System.IO.StreamReader sr = new System.IO.StreamReader( myAssembly.GetManifestResourceStream("Project1.222.csv"),//ここでファイル名を指定。 System.Text.Encoding.GetEncoding("shift-jis")); //内容を読み込む string s = sr.ReadToEnd(); //後始末 sr.Close(); よろしくお願いします。

関連するQ&A

  • C# pictureBox(a)

    Visual C# 2008にて int a = 3; pictureBox(a).Image = Properties.Resources.Icon1_2; みたいな代入の方法がどうしても解りません Properties.Resources.Icon1_2は リソースのIcon1_2.bmpです 過去のQ&A QNo6332332を読んでも解りません。 pictureBoxを貼り付けてダブルクリック Tagを1.などに設定 private void pictureBox1_Click(object sender, EventArgs e) { PictureBox pict = sender as PictureBox; MessageBox.Show(pict.Name); MessageBox.Show(pict.Tag.ToString()); int picb = int.Parse(pict.Tag.ToString()); pictureBox(picb).Image = Properties.Resources.Icon1_2; } 上のようにしたい アドバイスをお願いできませんでしょうか

  • csvファイルからの読み込みがスムーズにできません

    fscanfでCSVファイルから文字列を取り込み、カンマ区切りで4つの変数に文字列を代入しようと考えているのですが、出力されたcsvファイルが変わった区切りかたをしているのでうまく変数に代入できずに困っております。 例えば、出力されたcsvファイルは以下のようになっております "ABC CO.,I","4540",""STAR"","2010/03/31" 希望としては aにABC CO.,I bに4540 cにSTAR dに2010/03/31 をそれぞれ代入したいのですが aに入る文字列にはCO.,Iというようにカンマが既にありますので カンマ区切りで読み込むとめちゃくちゃになってしまいます ですので基準をダブルクオーテーションに置き、"と"の間の文字列を代入というような形が取れれば良いのですが、このような方法での文字列取得は可能でしょうか? c言語の勉強を始めて間もない為、低レベルな質問、表現であることをお許し下さい。 よろしくお願いします。

  • ディレクトリ内のCSVファイル一括削除について

    ディレクトリ内のCSVファイルを一括削除したのですがうまくいきません。 下記のように記述しているのですが。 unlink($path/*.csv);

    • ベストアンサー
    • Perl
  • Access VBAでファイルのインポートについて

    あるディレクトリにAccessのmdbファイルを置き、「インポート」フォルダを隣に置きます。 このフォルダ内にCSVファイルを置き、それをVBAでテーブル「tbl_import」にインポートさせたいのです。 ちなみにインポート後はディレクトリ「インポート」下層のディレクトリ「インポート済」に移動させたいのです。 下記例文では「file.csv」と書いていますが、このファイル名はインポートの都度、常に変わります。 インポートさせるファイルは常に一つです。 「*」を用いれば出来ると思っていたのですが、うまくいきません。 良い方法を教示いただけませんか。 DoCmd.RunSQL "DELETE * FROM tbl_import" DoCmd.TransferText acImportDelim, "インポート定義", "tbl_import", CurrentProject.Path & "\インポート\file.csv", True FileCopy CurrentProject.Path & "\インポート\file.csv", CurrentProject.Path & "\インポート\インポート済\file.csv" Kill CurrentProject.Path & "\インポート\file.csv"

  • c#でボタンのアクションが終わった後に再度同じ動作をさせるには?

    アプリ上のボタンを押すと以下のLoadData()が実行され、 データセットにcsvファイルの情報が代入されるのですが、 一度実行されるとソフトを再起動しないと、ボタンを押しても再度同じ動作をしてくれません。 今回の場合、フォームに入力された数値が変数expに代入され、 代入された数値をcsv内で検索し、ヒットすればその行だけ読み込むというプログラムですので、一度実行されても再度別の数値で同じ動作を繰り返し行いたいのです。 初歩的な事かと思いますが、どうすれば再起動しなくても同じ動作を繰り返すようになるのか教えてください、よろしくお願いします。 public void LoadData() { string path = @"C:\Documents and Settings\PC USER\デスクトップ\222.csv"; string strLine;//1行分のデータ int p; string exp;//この文字を含む行のみを読み込む exp = textBox1.Text; Boolean fileExists = System.IO.File.Exists(path); if (fileExists) { System.IO.StreamReader sr = new System.IO.StreamReader(path, System.Text.Encoding.Default); while (sr.Peek() >= 0) { strLine = sr.ReadLine(); p = strLine.IndexOf(exp);//指定文字が変数内にあるかどうかチェック if (p > 0) { strData = CsvToArrayList1(strLine)[0]; Dbuse.Dbusetable.AddDbusetableRow ( strData[0], int.Parse(strData[1]), strData[2], strData[3], strData[4] ); } else { } } sr.Close(); }

  • デスクトップ上のCSVファイルの削除について

    いつもお世話になっております。 VBAでまた難問に詰まってしまいました。ご教授お願い致します。 別のフォルダに保存されているマクロを利用して、とあるデータを作成するのですが 途中でデスクトップ上に一回保存をしたCSVファイルを最後に削除する という動きをさせたいです。 下記のマクロだと、マクロとCSVファイルがデスクトップ上にあれば削除出来るのですが マクロは常にとあるフォルダに保管されており、使用する人間はバラバラです。 ※CSVファイルの他に3種類程データを作成するのですが  マクロを使った人が使っているPCのデスクトップ上に保管する事になっております。  上記の事から、Killステートメントでファイル指定が出来ない状態(不特定のデスクトップ)です。   Sub test() Dim myPath As String Dim i As String myPath = ThisWorkbook.Path & "\" i = "テストデータ.csv" If InStr(i, ".csv") = 0 Then i = i & ".csv" If Dir(myPath & i) <> "" Then Kill myPath & i Else End If End Sub 不特定のデスクトップ上にあるcsvファイルを削除する事は可能でしょうか? 以上、宜しくお願い致します。 環境 WindowsXP Excel2003

  • C#におけるstringとstring[]データの変換

    お世話になります。C#をはじめて使っています。 いま行おうとしているのがコモンダイアログからファイル名を取得して、CSVファイルを読み出そうとしています。 OpenFileDialogから出力されるファイル名はstring[]と配列になり(すいません、C#でも”配列”といっていいのですよね?) CSVを開くためのTextFieldParserの引数はstringになります。Cならポインタで変換できるのですが、C#はポインタがないため、いくつか試しましたが、うまく変換でききませんでした。 たとえば string a; string[] b: で  a=b; a=(string)b; a=convert.tostring b; 全部だめでした、どなたかご存知の方お見えになれば教えていただけると助かります。

  • 何のファイル?

    C#で、VisualStudioのソリューションエクスプローラーに、ある日突然「プロジェクト名_一時キー.pfx」なるファイルがプロジェクトの直下に出現し、これが VisualStudio を立ち上げ直した後も、ずっとそこにいます。 このファイルが何者なのか御存じの方、教えていただけますか。

  • 変数の代入について

    他のファイルを参照し変数に代入しましたが 参照式まで代入されてしまいますが、これを回避したいです。 ='C:\フォルダ名\[ファイル名.csv]シート名'!$A$1 理由としては、参照先を知られたくないためです。 Dim A(9) As Variant A(0) = Path & "!$A$1" 'ここの部分の書き方を教えてください。 .Range("B1").Value = A(0) 変数は入力ミスをした場合に元に戻すために使います。

  • 複数のCSVを1つのファイルにまとめる

    リモートからダウンロードしたCSVファイルをひとつにまとめる処理をしています。 ダウンロードするリストファイルとCSVファイルのダウンロードはできたのですが、最後にダウンロードしてきたCSVファイルをひとつにまとめるところがうまくいきません。 こちらの過去ログから下記記述してみたのですが、うまくいきません。 if(open(OUT,">$path/$year$mon$mday$csv")){      for my $fname (sort @dirs){        if(open(IN,"$path/$fname")){          my @lines = <IN>;          print OUT @lines;          close(IN);        }     }     close(OUT);   } for my $fname (sort @dirs){の記述で、Unrecognized characterといったエラーが出てうまくいきません。 項目の設定に誤りがあるのでしょうか?perl初心者でよくわかりません。 $fnameや@dirsはどのように設定すればいいのでしょうか?

    • ベストアンサー
    • Perl