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

わんくま同盟

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

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

ツリー一括表示

C# Visual Studio csvファイルの読み込み /ka (23/09/24(Sun) 00:24) #102409
Re[1]: C# Visual Studio csvファイルの読み込み /WebSurfer (23/09/24(Sun) 07:24) #102410
Re[1]: C# Visual Studio csvファイルの読み込み /WebSurfer (23/09/24(Sun) 07:32) #102411
Re[1]: C# Visual Studio csvファイルの読み込み /KOZ (23/09/24(Sun) 12:35) #102412
Re[1]: C# Visual Studio csvファイルの読み込み /furu (23/09/25(Mon) 09:29) #102414
│└ Re[2]: C# Visual Studio csvファイルの読み込み /WebSurfer (23/09/25(Mon) 10:23) #102415
│  └ Re[3]: C# Visual Studio csvファイルの読み込み /furu (23/09/25(Mon) 20:20) #102420
Re[1]: C# Visual Studio csvファイルの読み込み /radian (23/09/26(Tue) 09:43) #102421


親記事 / ▼[ 102410 ] ▼[ 102411 ] ▼[ 102412 ] ▼[ 102414 ] ▼[ 102421 ]
■102409 / 親階層)  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ファイルを使おうと思いました。
調べてもこの環境ではない方ばかりでしたので教えていただけると幸いです。
[ □ Tree ] 返信 編集キー/

▲[ 102409 ] / 返信無し
■102410 / 1階層)  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 メソッドを見てください。
[ 親 102409 / □ Tree ] 返信 編集キー/

▲[ 102409 ] / 返信無し
■102411 / 1階層)  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


[ 親 102409 / □ Tree ] 返信 編集キー/

▲[ 102409 ] / 返信無し
■102412 / 1階層)  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;
        }
    }
}


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

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

[ 親 102409 / □ Tree ] 返信 編集キー/

▲[ 102409 ] / ▼[ 102415 ]
■102414 / 1階層)  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]);

[ 親 102409 / □ Tree ] 返信 編集キー/

▲[ 102414 ] / ▼[ 102420 ]
■102415 / 2階層)  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
[ 親 102409 / □ Tree ] 返信 編集キー/

▲[ 102415 ] / 返信無し
■102420 / 3階層)  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ファイルなら
最初はこれで十分かと思います。
[ 親 102409 / □ Tree ] 返信 編集キー/

▲[ 102409 ] / 返信無し
■102421 / 1階層)  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を読ませて設定するつもりですか?
見づらいだけなら、もっと見やすいコレクション設計と書き方にすることも出来ると思いますが。
[ 親 102409 / □ Tree ] 返信 編集キー/


管理者用

- Child Tree -