|
分類:[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++;
}
}
|