C# - 在字符串中查找数字并添加值

时间:2011-07-19 17:05:32

标签: c# string textbox split addition

我有一个看起来像这样的文件:

R.D.    P.N.      X       Y        Rot  Pkg
L5      120910    64.770  98.425   180  SOP8
L4      120911   -69.850  98.425   180  SOIC12
L10     120911   -19.685  83.820   180  SOIC10
L9      120911    25.400  83.820   180  0603
L5      120910    62.484  98.425   180  SOP8

我有两个标有XinputYinput标记的文本框。用户可以从这些文本框中输入值。输入值并且用户点击“GO”后,我想从文件中获取字符串,并将Xinput值添加到X列,将Yinput值添加到文件中的Y列。


我的意思......

因此,如果用户将“10.552”输入Xinput文本框,将“ - 140.123”输入Yinput文本框,则新数据看起来像这样:

R.D.  P.N.      X       Y         Rot  Pkg
L5    120910    75.322  -41.698   180  SOP8
L4    120911   -59.298  -41.698   180  SOIC12
L10   120911   -9.133   -56.303   180  SOIC10
L9    120911    35.952  -56.303   180  0603
L5    120910    73.036  -41.698   180  SOP8

问题:

  • 这可能吗?
  • 如果有可能,我该怎么做?

4 个答案:

答案 0 :(得分:1)

您可以使用ADO.Net将文件读取为结构化数据。有足够的样本用于使用ado.net

读取文本文件

在ado数据集中以结构化格式获取后,您可以遍历并添加值。应该相当容易。

这是一篇好文章

Article Link

答案 1 :(得分:0)

作为第一步介绍单入口的类,smth明显像

 class Entry
    {
      public string Rd { get; private set; }
      public string Pn { get; private set; }
      public double X { get; set; }
      // ... declare other properties

     // Initializes a new instance of the Entry class
     public Entry(string rawData)
     {
         if (rawData == null)
         {
            throw new ArgumentNullException("rawData", "Nullable data structure can not be processed");             
         }

         string[] values = rawData.Split('\t');
         if (values == null || values.Count() != 6)
         {
            throw new ArgumentException("rawData", "Invalid data structure can not be processed");
         }

         this.Rd = values[0];
         Double.TryParse(values[2], out this.X);
         // ....
     }
    }

构建此结构后,您可以轻松地将任何值添加到X,Y ...

逐行阅读文件: From MSDN

int counter = 0;
string line;

// Read the file and display it line by line.
System.IO.StreamReader file = 
   new System.IO.StreamReader("c:\\test.txt");
while((line = file.ReadLine()) != null)
{
   Console.WriteLine (line);
   counter++;
}

file.Close();

// Suspend the screen.
Console.ReadLine();

答案 2 :(得分:0)

试试这个,我没有你的文件所以这是一个最好的猜测。我敢肯定我没有遗漏太多东西。我知道这似乎有些过分,但你真的可以通过这种方式完全控制数据中的每个值。

public class ComponentLocation
        {
            public string ReferenceDesignator { get; set; }

            public string PartNumber { get; set; }

            public double xValue { get; set; }

            public double yValue { get; set; }

            public int Rotation { get; set; }

            public string Package { get; set; }

        }

        public IEnumerable<ComponentLocation> ParseColumns(string fileName)
        {
            IEnumerable<string> rawData = File.ReadLines(fileName);
            var rows = rawData.Skip(1).Select(l => l.Split('\t')).Select(str => new ComponentLocation
                                                                        {
                                                                            ReferenceDesignator = str[0],
                                                                            PartNumber = str[1],
                                                                            xValue = double.Parse(str[2]),
                                                                            yValue = double.Parse(str[3]),
                                                                            Rotation = int.Parse(str[4]),
                                                                            Package = str[5]
                                                                        });
            return rows.ToList();
        }

        public void DoWork(double x, double y, string fileName)
        {
            var components = ParseColumns(fileName);
            //Add values
            foreach (var component in components)
            {
                component.xValue += x;
                component.yValue += y;
            }

            //build file
            StringBuilder sbData = new StringBuilder();
            //header
            sbData.AppendLine("R.D.\tP.N.\tX\tY\tRot\tPkg");
            //data
            foreach (var component in components)
            {
                sbData.Append(component.ReferenceDesignator).Append('\t');
                sbData.Append(component.PartNumber).Append('\t');
                sbData.AppendFormat("{0:###.###}", component.xValue).Append('\t');
                sbData.AppendFormat("{0:###.###}", component.yValue).Append('\t');
                sbData.Append(component.Rotation).Append('\t');
                sbData.Append(component.Package).Append('\t').AppendLine();
            }
            //write
            File.WriteAllText(fileName, sbData.ToString());

        }

        //call DoWork
        DoWork(10.552, -140.123, @"C:\myfile.txt")

答案 3 :(得分:-1)

将整个文件内容读入StringBuilder并尝试正则表达式。