CSVファイルを取り込み、データテーブル内の最初の列が行カウンタであるデータテーブルにインポートするツールを開発しようとしています。C#:可変構造のCSVファイルを行カウンタ付きのデータテーブルに読み込む
CSVファイルはさまざまな顧客からのもので、構造が異なります。ヘッダ行があるものもあります。いくつかはいくつかのヘッダ行を持っています。一部にはヘッダ行がありません。彼らはまた、さまざまな列を持っています。
これまでのところ、以下のコードがあります。
public void Import_CSV()
{
OpenFileDialog dialog = new OpenFileDialog();
dialog.Filter = "CSV Files (*.csv)|*.csv";
bool? result = dialog.ShowDialog();
if (result ?? false)
{
string[] headers;
string CSVFilePathName = dialog.FileName;
string delimSelect = cboDelimiter.Items.GetItemAt(cboDelimiter.SelectedIndex).ToString();
// If user hasn't selected a delimiter, assume comma
if (delimSelect == "")
{
delimSelect = ",";
}
string[] delimiterType = new string[] {cboDelimiter.Items.GetItemAt(cboDelimiter.SelectedIndex).ToString()};
DataTable dt = new DataTable();
// Read first line of file to get number of fields and create columns and column numbers in data table
using (StreamReader sr1 = new StreamReader(CSVFilePathName))
{
headers = sr1.ReadLine().Split(delimiterType, StringSplitOptions.None);
//dt.Columns.Add("ROW", typeof(int));
//dt.Columns["ROW"].AutoIncrement = true;
//dt.Columns["ROW"].AutoIncrementSeed = 1;
//dt.Columns["ROW"].AutoIncrementStep = 1;
int colCount = 1;
foreach (string header in headers)
{
dt.Columns.Add("C" + colCount.ToString());
colCount++;
}
}
using (StreamReader sr = new StreamReader(CSVFilePathName))
{
while (!sr.EndOfStream)
{
string[] rows = sr.ReadLine().Split(delimiterType, StringSplitOptions.None);
DataRow dr = dt.NewRow();
for (int i = 0; i < headers.Length; i++)
{
dr[i] = rows[i];
}
dt.Rows.Add(dr);
}
}
dtGrid.ItemsSource = dt.DefaultView;
txtColCount.Text = dtGrid.Columns.Count.ToString();
txtRowCount.Text = dtGrid.Items.Count.ToString();
}
}
これは、それが(csvファイルにありますどのように多くによるC1、C2 ...)列のヘッダーを作成し、行が中に書かれていると同じくらいで、動作しますが、私は追加したいです左端の列と行番号の行が追加されます。コードでは、オートナンバーの列を作成するコメントアウトされたセクションがあるのがわかりますが、データテーブルに行がどのように書き込まれているか完全にわかっています。そのセクションのコメントを外すと、csvファイルの最初の列がintフィールドに書き込もうとすると、エラーが発生します。各行のどのフィールドをどの列に入れることができるかを指定することができますが、この時点で列が不明なためここでは役立ちません。構造にかかわらず、行カウンタを使用して任意のファイルを読み込むことができるだけです。
希望は意味があります。
これは、もう少し説明を行うことができますが、それは正解です:
次に、あなたのループでは、手つかずの最初の列を残すためにオフセットを導入。 – Flater
ちょっとDymanoid、入力のおかげで!そして答え!結局単純です。再度、感謝します。 – Mark