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

わんくま同盟

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

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


■86496 / )  CSV読込時のループ処理中にHEADとDATAを取得する方法
□投稿者/ 河童 (2回)-(2018/02/06(Tue) 20:32:46)

分類:[C#] 

いつも大変お世話になっております。

CSV読込時のループ処理中にHEADとDATAを取得する方法
について教えてください。

★やりたいこと
CSVファイルを行で繰返処理をするとき
1行目(HEAD)に対応する2行目(DATA)の値を取得して
値を結合したいと思っています。

本当は、取得したHEADとDATAを
データベースに登録したいのですが、
とりあえず、値はテキストボックスに表示しています。


★CSVファイル(test.csv)
1行目はヘッダ情報
2行目はデータ
ファイルは必ず2行のみ
カラム数はファイルにより変わるがHEADとDATAのカラム数は同じ
DATAには空白あり

------------------------------------------------------------------------------------------------------
HEAD,担当者,帳票名称,MKAL0110011/S,KAL0110011,MKAL0120021/S,MKAL0390011/S,KAL0390011,MKAL03110031/S
DATA,担当者A,記録表,test1,担当者A,,test2,担当者A,
------------------------------------------------------------------------------------------------------

★現状のテキストボックスの表示結果
MKAL0110011/S,
MKAL0120021/S,
MKAL0390011/S,
MKAL03110031/S,
===
DATA
担当者A
記録表
test1
担当者A

test2
担当者A

===

★希望の結果
MKAL0110011/S,test1
MKAL0120021/S,
MKAL0390011/S,test2
MKAL03110031/S,

★わからないこと
HEADの値が
左端1文字目が「M」または「S」
かつ右端2文字が「/S」のときに対応する
DATAの値を取得する方法がわかりません。
HEADの判定は出来るのですが、
DATAの値をどのように判定すればよいか
教えてください。
よろしくお願いします。


★コード
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using Microsoft.VisualBasic.FileIO;

private void button7_Click(object sender, EventArgs e)
        {
            // CSVファイルの選択
            TextFieldParser parser = new TextFieldParser(@"C:\temp\test.csv", Encoding.GetEncoding("Shift_JIS"));

            parser.TextFieldType = FieldType.Delimited;
            parser.SetDelimiters(",");// ","区切り

            // 行数カウンタ(0:HEAD、1:DATA)
            int cnt = 0;

            // CSVファイルの読込
            while (parser.EndOfData == false) {

                //行セット
                string[] column = parser.ReadFields();

                if (cnt == 0) // HEADの処理
                {
                    //1行分のカラムで繰り返し処理
                    for (int i = 0; i < column.Length; i++)
                    {
                        // 値セット
                        string s = column[i];
                        // 空の文字列
                        if (s == null || s == "")
                        {
                        }
                        else
                        {
                            // 左端から1文字目
                            string s2 = s.Substring(0, 1);
                            // 右端から2文字
                            string s3 = s.Substring(s.Length - 2, 2);
                            // HEAD情報から登録する値を判定
                            if ((s2 == "M" || s2 == "S") && (s3 == "/S"))
                            {
                                textBox999.Text += column[i] + "," + "\r\n";
                                
                            }
                            else
                            {
                            }
                        }

                    }
                }
                else // DADAの処理
                {
                    //1行分のカラムで繰り返し処理
                    for (int i = 0; i < column.Length; i++)
                    {
                        // 値セット
                        string s = column[i];
                        // HEAD情報から登録する値を判定(空の文字列も含める)
                            textBox999.Text += column[i] + "\r\n";
                    }
                }

  
                textBox999.Text += "===\r\n";

                cnt++;
            }
        
        }

返信 編集キー/


管理者用

- Child Tree -