C # - найти номер в строке и добавить значение - PullRequest
0 голосов
/ 19 июля 2011

У меня есть файл, который выглядит следующим образом:

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

И у меня есть два текстовых поля с пометкой Xinput и Yinput.Из этих текстовых полей пользователь вводит значения в них.После того, как значения введены и пользователь нажимает «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 ]

1 голос
/ 19 июля 2011

Вы можете прочитать файл как структурированные данные, используя ADO.Net.Существует множество примеров для чтения текстовых файлов с ado.net

Как только вы получите структурированный формат в наборе данных ado, вы можете просматривать и добавлять значения.Должно быть довольно легко.

Вот хорошая статья

Ссылка на статью

0 голосов
/ 19 июля 2011

Попробуйте, у меня нет вашего файла, так что это лучшее предположение. Я уверен, что я не пропустил много. Я знаю, что это кажется излишним, но вы действительно имеете полный контроль над каждым значением в ваших данных таким образом.

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")
0 голосов
/ 19 июля 2011

Считайте все содержимое файла в StringBuilder и попробуйте регулярное выражение.

0 голосов
/ 19 июля 2011

В качестве первого шага вводим класс для однократной записи, что-то очевидное, например

 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 ...

Чтобы прочитать файл построчно: Из 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();
...