C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

C# Visual Studio csvファイルの読み込み

[トピック内 8 記事 (1 - 8 表示)]  << 0 >>

■102409 / inTopicNo.1)  C# Visual Studio csvファイルの読み込み
  
□投稿者/ ka (1回)-(2023/09/24(Sun) 00:24:58)

分類:[.NET 全般] 

環境…Visual Studio C# Windows フォームアプリケーション(.NET Framework)

知りたいこと…
1.上記の環境でのCSVファイルの読み込み方法
2.読み込んだCSVファイルをstring型にする方法
{"A", "B", "C", "D"}←このような感じ

string[,] arr =
{"A", "B", "C", "D"}};
label1.Text = (arr[i, 0]);

現在こんな感じでlabelに反映しているのですが、これだと直接書き込まなければいけず、見にくくなるのと効率も良くないのでCSVファイルを使おうと思いました。
調べてもこの環境ではない方ばかりでしたので教えていただけると幸いです。
引用返信 編集キー/
■102410 / inTopicNo.2)  Re[1]: C# Visual Studio csvファイルの読み込み
□投稿者/ WebSurfer (2789回)-(2023/09/24(Sun) 07:24:21)
No102409 (ka さん) に返信

> 知りたいこと…
> 1.上記の環境でのCSVファイルの読み込み方法
> 2.読み込んだCSVファイルをstring型にする方法
> {"A", "B", "C", "D"}←このような感じ

.NET Framework のライブラリ TextFieldParser を使ってはいかがですか?

具体例は以下の記事のサンプルコードを見てください。

CSV ファイルを DataGridView に表示
http://surferonwww.info/BlogEngine/post/2020/09/11/show-date-in-csv-file-on-datagridview.aspx

「以下ヘルパメソッド」とコメントしてある下の CreateDataTable メソッドの中の ReadFields メソッドを見てください。
引用返信 編集キー/
■102411 / inTopicNo.3)  Re[1]: C# Visual Studio csvファイルの読み込み
□投稿者/ WebSurfer (2790回)-(2023/09/24(Sun) 07:32:01)
No102409 (ka さん) に返信

以下の記事の「CSV形式とは?」のセクションの 4, 5, 6, 7, 8 の対応が必要なければ、一行ずつ読んでカンマで Split した方が簡単かも

具体例はググれば山ほどヒットしますので、自分で調べてみてください。

CSV形式のファイルをDataTableや配列等として取得する
http://dobon.net/vb/dotnet/file/readcsvfile.html


引用返信 編集キー/
■102412 / inTopicNo.4)  Re[1]: C# Visual Studio csvファイルの読み込み
□投稿者/ KOZ (410回)-(2023/09/24(Sun) 12:35:36)
No102409 (ka さん) に返信
> 現在こんな感じでlabelに反映しているのですが、これだと直接書き込まなければいけず、見にくくなるのと効率も良くないのでCSVファイルを使おうと思いました。


XML とかにしたほうがいいんじゃないですか?

たとえば、こんな xmlファイル(forms.xml)を用意して

<?xml version="1.0" encoding="utf-8" ?>
<forms>
  <form name="Form1">
    <label name="label1" text="キャー" />
    <label name="label2" text="のび太さんの" />
    <label name="label3" text="〇〇〇" />
  </form>
  <form name="Form2">
    <label name="label1" text="悪いなのび太" />
    <label name="label2" text="この脱出ポッドは" />
    <label name="label3" text="3人用なんだ" />
  </form>
</forms>


こんな関数を作って

public static Dictionary<string, string> GetLabelValues(string formName) {
    var dic = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);
    XmlDocument xmlDoc = new XmlDocument();
    xmlDoc.LoadXml(System.IO.File.ReadAllText(@"forms.xml"));
    XmlElement formElement =
        (XmlElement)xmlDoc.SelectSingleNode($"/forms/form[@name='{formName}']");
    foreach (XmlElement labelElement in formElement.SelectNodes("label")) {
        string labelName = labelElement.GetAttribute("name");
        string labelText = labelElement.GetAttribute("text");
        dic.Add(labelName, labelText);
    }
    return dic;
}

こう読み込みます。

private void Form1_Load(object sender, EventArgs e) {
    var dic = Program.GetLabelValues(this.Name);
    foreach (var kp in dic) {
        var ctl = Controls.Find(kp.Key, true);
        if (ctl.Length > 0) {
            ctl[0].Text = kp.Value;
        }
    }
}


> 調べてもこの環境ではない方ばかりでしたので教えていただけると幸いです。

似た環境ってどこにでもありそうですけど・・・

引用返信 編集キー/
■102414 / inTopicNo.5)  Re[1]: C# Visual Studio csvファイルの読み込み
□投稿者/ furu (218回)-(2023/09/25(Mon) 09:29:58)
No102409 (ka さん) に返信
> 1.上記の環境でのCSVファイルの読み込み方法
> 2.読み込んだCSVファイルをstring型にする方法
データが英数字だけなら

var arr = System.IO.File.ReadAllLines(@"C:\xxxx\yyyy.csv")
            .Select(_ => _.Split(','))
            .ToArray();

ただ、arrがstring[,]でなくstring[][]です。
label1.Text = (arr[i][0]);

引用返信 編集キー/
■102415 / inTopicNo.6)  Re[2]: C# Visual Studio csvファイルの読み込み
□投稿者/ WebSurfer (2791回)-(2023/09/25(Mon) 10:23:31)
No102414 (furu さん) に返信

> データが英数字だけなら
>
> var arr = System.IO.File.ReadAllLines(@"C:\xxxx\yyyy.csv")
> .Select(_ => _.Split(','))
> .ToArray();

「データが英数字だけ」とはどういう意味でしょう?

以下の記事の「CSV形式とは?」のセクションの 4, 5, 6, 7, 8 の対応が
必要な場合も上記のようにしてできますか?

CSV形式のファイルをDataTableや配列等として取得する
http://dobon.net/vb/dotnet/file/readcsvfile.html
引用返信 編集キー/
■102420 / inTopicNo.7)  Re[3]: C# Visual Studio csvファイルの読み込み
□投稿者/ furu (219回)-(2023/09/25(Mon) 20:20:29)
No102415 (WebSurfer さん) に返信
> 「データが英数字だけ」とはどういう意味でしょう?
> 以下の記事の「CSV形式とは?」のセクションの 4, 5, 6, 7, 8 の対応が
> 必要な場合も上記のようにしてできますか?
文字通り
ダブルクォートもスペースもカンマも制御文字も含まない
英数字だけの場合です。
  例 A,12c,456,Ab777
4, 5, 6, 7, 8の対応は不要です。

自作したCSVファイルなら
最初はこれで十分かと思います。
引用返信 編集キー/
■102421 / inTopicNo.8)  Re[1]: C# Visual Studio csvファイルの読み込み
□投稿者/ radian (150回)-(2023/09/26(Tue) 09:43:56)
2023/09/26(Tue) 10:13:59 編集(投稿者)

No102409 (ka さん) に返信
> 現在こんな感じでlabelに反映しているのですが、これだと直接書き込まなければいけず、見にくくなるのと効率も良くないのでCSVファイルを使おうと思いました。
> 調べてもこの環境ではない方ばかりでしたので教えていただけると幸いです。

ファイル入出力って、別に環境に左右される部分じゃないと思いますけど。
"C# CSV"で関連記事調べれば、既存の記事は沢山出てきますよね。
調べて何を試して、どう上手くいかなかったかくらいは書けませんか?
何も試さないのは、質問ではなく只の丸投げです。

あと、本当にCSVを使う必要があるかどうかも疑わしいです。
labelがいくつくらいあって、どういうCSVを読ませて設定するつもりですか?
見づらいだけなら、もっと見やすいコレクション設計と書き方にすることも出来ると思いますが。
引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ