简体   繁体   English

c#将TEXT文件中的特定列添加到DataGridView

[英]c# Add Specific columns from a TEXT file to DataGridView

在此处输入图片说明

Hello Everyone, 大家好,

As shown in the above image I want to add the decimal numbers column wise from a text file to datagrid control. 如上图所示,我想将十进制数字从文本文件逐列添加到datagrid控件。

Following is my code snippet 以下是我的代码段

List<string> str = new List<string>();
        String st = "";
        int k = 0;
        string[] s ;
        //Path to write contents to text file
        string filename = @"E:\Vivek\contentcopy\clientlist.txt";
        Form.CheckForIllegalCrossThreadCalls = false;
        OpenFileDialog ofd = new OpenFileDialog();
        ofd.FileName = "";

        ofd.ShowDialog();
        st = ofd.FileName;

        if (string.IsNullOrEmpty(ofd.FileName))
            return;
        string Name = "", No1 = "",No2="";
        string[] lines = File.ReadAllLines(st).Where(sw => !string.IsNullOrWhiteSpace(sw)).ToArray();
        for (int i = 0; i < lines.Length; i++)
        {

            if (lines[i].Contains("VENTURA SECURITIES LIMITED (NSE F&O)")) continue;
            if (lines[i].Contains("ALL EXCHANGES DERIVATIVES CLIENTWISE STATEMENT AS ON 16-05-2012")) continue;
            if (lines[i].Contains("-------------------------------------------------------")) continue;
            s = lines[i].Split(' ');
            if (s[0] == "PARTY" || s[0] == "") continue;
            int z;
            Name = "";

            for (z = 1; z < s.Length; z++)
            {
                if (s[z] == "") continue;                    
                if (s[z].Contains('.'))
                {
                    No1+=s[z]+" ";
                    No2 = No1 + " ";  

                } 
                else
                {
                    Name += s[z];
                    str.Add(s[0]+"  "+Name);

                }



            }

            dataGridView1.Rows.Add();
            dataGridView1.Rows[k].Cells[0].Value = s[0];
            dataGridView1.Rows[k].Cells[1].Value = Name;
            dataGridView1.Rows[k].Cells[2].Value = No1;
            dataGridView1.Rows[k].Cells[3].Value =  No2;
            k++;
        }


        File.WriteAllLines(filename, str);
        dataGridView1.ReadOnly = true;
    }

The line No1=s[z] directly takes the last column values ie 46,123.19 and so on.I want to fetch each column from the text file and store it in a string variable and then assign it to the datagrid view I hope my doubt is clear.If not please let me know No1 = s [z]行直接获取最后一列的值,即46,123.19,依此类推。我想从文本文件中获取每一列并将其存储在字符串变量中,然后将其分配给datagrid视图,我希望我的疑问是清除。如果没有,请通知我

Lets say, you have for lines in your test file, then u need to do following things: 可以说,您在测试文件中有一行,那么您需要执行以下操作:

  1. Use StreamReader.ReadLine(), to read one line at time. 使用StreamReader.ReadLine()一次读取一行。
  2. Spilt the line using split(' ') and store it in a array 使用split('')溢出行并将其存储在数组中
  3. Remove all the empty ones from the array 从阵列中删除所有空的
  4. Now at index 2,3,4,5,6 of the resulting array will have the string equivalent of the decimal numbers. 现在,结果数组的索引2、3、4、5、6将具有与十进制数字等效的字符串。
  5. Repeat this for each StreamReader.ReadLine() 对每个StreamReader.ReadLine()重复此操作

Hope this will help. 希望这会有所帮助。

Here is the simplest Solution: 这是最简单的解决方案:

Add a DataGrid View to Form and add a Button: 将DataGrid视图添加到窗体并添加一个按钮:

 private void button1_Click(object sender, EventArgs e)
    {
        ReadAndFileter();
    }
    private void ReadAndFileter()
    {
        try
        {
            using(System.IO.StreamReader reader = new System.IO.StreamReader("file.txt"))
            {
                string line;
                string []array;
                int rowcount= 0;
                decimal number;
                string[] separators = { "\t", " " };
                int columnCount = 0;
                while ((line = reader.ReadLine()) != null)
                {

                   array = line.Split(separators, StringSplitOptions.RemoveEmptyEntries); 
                   dataGridView1.Rows.Add();
                   foreach  (string str in array)
                   {

                       if (Decimal.TryParse(str,out number))
                       {
                           dataGridView1.Rows[rowcount].Cells[columnCount++].Value = number;                               
                       }                           
                   }
                   rowcount++;
                   columnCount = 0;
                }
            }
        }
        catch (Exception ex)
        {
        }
    }

The File Contents are: 文件内容为:

Abc         20.122      69.33   0.00        693.25  0.00
def         36.20       96.20   1.15        69.56   8.96

And the final output: 最终输出: 图片

Your problem is that you are overwriting No1 every time you read a string, which explains why you only get the last value. 您的问题是,每次读取字符串时,您都会覆盖No1 ,这说明了为什么只获得最后一个值。 What you could do is either; 您可以做的是;要么。

Append the string: 附加字符串:

   No1 += s[z] + " ";

Which will put all the values behind eachother, seperated by a whitespace. 这会将所有值彼此抛在后面,并用空格分隔。

Or, you could make a List<String> and add each value to the list, meaning you have them stored seperated: 或者,您可以创建一个List<String>并将每个值添加到列表中,这意味着您将它们分开存储:

   List<String> values = new List<String>();
   foreach(...)
   {
      if (s[z] == "") continue;                    
      if (s[z].Contains('.'))
      {
            values.Add(s[z])
      } 
      else
      {
             Name += s[z];
             str.Add(s[0] + "  " + Name);
      }
   }

You can thereafter loop through the list and add each value to a row. 之后,您可以遍历列表并将每个值添加到一行。 Considering your code piece; 考虑您的代码段;

int i = 2;
foreach(string value in values)
{
   dataGridView1.Rows[k].Cells[i].Value = value;
   i++;
}

This should work. 这应该工作。

Hope this helps. 希望这可以帮助。

Here is edited code: but for future I must suggest to give a try at least.. 这是经过编辑的代码:但是为了将来,我必须至少建议尝试一下。

private void ReadAndFileter1()
    {
        try
        {
            using (System.IO.StreamReader reader = new System.IO.StreamReader("file.txt"))
            {
                string line;
                string[] array;
                int rowcount = 0;
                decimal number;
                string[] separators = { "\t", " " };
                int columnCount = 1;
                string[] lines = File.ReadAllLines("file.txt");
                for (int i = 0; i < lines.Length; i++)
                {
                    if (lines[i].Contains("VENTURA SECURITIES LIMITED (NSE F&O)")) continue;
                    if (lines[i].Contains("ALL EXCHANGES DERIVATIVES CLIENTWISE STATEMENT AS ON 16-05-2012")) continue;
                    if (lines[i].Contains("-------------------------------------------------------")) continue;

                    array = lines[i].Split(separators, StringSplitOptions.RemoveEmptyEntries);
                    if (array[0] == "PARTY" || array[0] == "") continue;

                    dataGridView1.Rows.Add();
                    foreach (string str in array)
                    {
                        if (Decimal.TryParse(str, out number))
                        {
                            dataGridView1.Rows[rowcount].Cells[columnCount++].Value = number;
                        }
                    }
                    dataGridView1.Rows[rowcount].Cells[0].Value = array[0];
                    rowcount++;
                    columnCount = 1;
                }
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
    }
}

网格列

Here it is: 这里是:

static void Main(string[] args)
    {
        Decimal result;
        string[] splitchar = new string[]{" "};

        using(StreamReader reader = new StreamReader(@"C:\Users\Dell\Desktop\input.txt"))
        {
            while(!reader.EndOfStream)
            {
                string[] splittedArray = reader.ReadLine().Split(splitchar,                      StringSplitOptions.RemoveEmptyEntries).Where(x => Decimal.TryParse(x, out result)).ToArray();

                // put your code here to get insert the values in datagrid
            }
        }

    }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM