まず、csvファイルをdatagridviewにインポートし、必要な形式に変更しました。DataGridviewの値をコレクションクラスに格納する方法C#
ボタンをクリックして不要なデータを除外することができます。console.writelineを使用してコンソールに必要なデータを取得します。 (テストのために、実際に何が起こっているかを見ることができます)。私が計算したいデータに満足していない列がかなりあるので、私は.contains()
と.replace
を使ってそれを除外します。
今、配列に値を保持するcell.value.toString()を格納したいのですが、配列を移植する方法がわかりません。
は、ここでは、コード
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace test2
{
public partial class Form1 : Form
{
OpenFileDialog openFile = new OpenFileDialog();
public int colC { get; private set; }
public Form1()
{
InitializeComponent();
}
public void Button1_Click(object sender, EventArgs e)
{
if (openFile.ShowDialog() == DialogResult.OK)
{
List<string[]> rows = File.ReadLines(openFile.FileName).Select(x => x.Split(',')).ToList();
DataTable dt = new DataTable();
List<string> headerNames = rows[0].ToList();
foreach (var headers in rows[0])
{
dt.Columns.Add(headers);
}
foreach (var x in rows.Skip(1).OrderBy(r => r.First()))
{
if (x[0] == "Lot ID") //linq to check if 2 lists are have the same elements (perfect for strings)
continue; //skip the row with repeated headers
if (x.All(val => string.IsNullOrWhiteSpace(val))) //if all columns of the row are whitespace/empty, skip this row
continue;
dt.Rows.Add(x);
}
dataGridView1.DataSource = dt;
dataGridView1.ReadOnly = true;
// dataGridView1.Columns["Lot ID"].ReadOnly = true;
//dataGridView1.Columns[" Magazine ID"].ReadOnly = true;
//dataGridView1.Columns["Frame ID"].ReadOnly = true;
}
}
public void Form1_Load_1(object sender, EventArgs e)
{
openFile.Filter = "CSV|*.csv";
}
public void Button2_Click(object sender, EventArgs e)
{
SaveFileDialog sfd = new SaveFileDialog();
sfd.Filter = "txt files (*.txt)|*.txt|Csv files (*.csv)|*.csv";
sfd.FilterIndex = 2;
if (sfd.ShowDialog() == DialogResult.OK)
{
try
{
StreamWriter sw = new StreamWriter(sfd.FileName, false);
{
string columnHeaderText = "";
int countColumn = dataGridView1.ColumnCount - 1;
if (countColumn >= 0)
{
columnHeaderText = dataGridView1.Columns[0].HeaderText;
}
for (int i = 1; i <= countColumn; i++)
{
columnHeaderText = columnHeaderText + ',' + dataGridView1.Columns[i].HeaderText;
}
sw.WriteLine(columnHeaderText);
foreach (DataGridViewRow dataRowObject in dataGridView1.Rows)
{
if (!dataRowObject.IsNewRow)
{
string dataFromGrid = "";
dataFromGrid = dataRowObject.Cells[0].Value.ToString();
for (int i = 1; i <= countColumn; i++)
{
dataFromGrid = dataFromGrid + ',' + dataRowObject.Cells[i].Value.ToString();
}
sw.WriteLine(dataFromGrid);
}
}
sw.Flush();
sw.Close();
}
}
catch (Exception exceptionObject)
{
MessageBox.Show(exceptionObject.ToString());
}
}
}
public void Button3_Click(object sender, EventArgs e)
{
foreach (DataGridViewRow row in dataGridView1.Rows)
{
foreach (DataGridViewCell cell in row.Cells)
{
//prevent error occur coz , only execute the not null line
if(cell.Value != null)
{
string cellV = cell.Value.ToString();
//do operations with cell, filter out the unnecessary data
if (!cellV.Contains("="))
{
continue;
}
else if (cellV.Contains("P = "))
{
cellV = cellV.Replace("P = ", "");
}
else if (cellV.Contains("F = n/a"))
{
cellV =cellV.Replace("F = n/a", "0");
}
else if (cellV.Contains("F = "))
{
cellV = cellV.Replace("F = ", "");
}
Console.WriteLine(cellV + "\n");
}
}
}
}
}
}
私は私がアレイ状にフィルタリングされたデータを保存するにはどうすればよいcontinue
を使用して計算に関連していないすべてのデータをスキップ???
ご質問がございましたら、お気軽にお問い合わせください。
ご質問の内容を理解することは非常に困難です。あなたがしようとしていることは何でも...あなたはそれをはるかに複雑にしているようです。 'button3_Click'イベントとは何でしょうか? [良い質問をするにはどうすればいいですか?](http://stackoverflow.com/help/how-to-ask)... [[最小限で完全で検証可能な例を作成する方法](http ://stackoverflow.com/help/mcve) – JohnG
私はいくつかの計算を行うことができるように、セルの値に配列を移植しようとしています。 button3_clickは計算を実行するとしますが、まだ関数を完了していません。 – ccs
私は何かが欠けている場合は申し訳ありません...私はあなたが何を意味するのか分からない_ "セルの値に配列を移植して_を計算できるようにする" _...ボタン3のイベントが(失敗した)等号(=)を含むセルを解析します。あなたが投稿したコードはそれほど役に立ちません。最初のファイルはcsvファイルを読み込み、秒はそれを保存し、第3は "="を含む文字列の解析を試みます。あなたが達成したいことが分からなければ、答えはほとんどが投機であろう。 – JohnG