C # - Добавление текстового поля к строковым значениям и проверка дубликатов / Конкаттинг - PullRequest
0 голосов
/ 18 июля 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     
..      ......    ......  ......   ..   .......

Я хотел бы иметь два текстовых поля (помеченных X и Y ), которыеполучить ввод от пользователя (только цифры, которые являются положительными или отрицательными и могут быть десятичными. ex. -124.893 )

С этими текстовыми полями я хотел бы найтизначения под 3-м и 4-м точками в строке после line.Split(" ");.Это значение для набора данных над значениями, которые я хотел бы получить:

 64.770  98.425 
-69.850  98.425
-19.685  83.820
 25.400  83.820
 62.484  98.425
 ......  ......

С этими значениями я хотел бы получить данные из текстовых полей X и Y и добавьте его к этим значениям.Таким образом, если пользователь введет «10.552» в текстовое поле X и «-140.123» в текстовое поле Y, новые значения будут:

 75.322  -41.698
-59.298  -41.698
-9.133   -56.303
 35.952  -56.303
 73.036  -41.698

Другая проблема, которую я хотел бы решить, связана сесли строка имеет повторяющееся значение «RD».Таким образом, в приведенном выше примере есть две линий, которые помечаются "L5" , которые необходимо изменить.Когда второе значение найдено, оно изменяет первое найденное значение на L5-1 , а второе значение на L5-2 .Это не ограничивается только двумя значениями, а скорее бесконечным количеством «- #».

Таким образом, окончательный текст будет выглядеть так: (с добавлением и объединением) :

R.D.    P.N.      X       Y         Rot  Pkg
L5-1    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-2    120910    73.036  -41.698   180  SOP8     
..      ......    ......  ......   ..   .......

ВОПРОСЫ:

  • Как получить ввод из текстового поля (отрицательный, положительные, десятичные, только числа) и добавить его к значению в строке, а затем поместить это новое значение обратно в то же место в строке?
  • Как найти строку, которая уже началась с той жезначение?
    • Когда эта строка найдена, как мне соотнести «-1», «-2», «-3» и т. Д. Со значениями?

Ответы [ 2 ]

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

Вместо того, чтобы иметь дело с текстовыми данными и всегда преобразовывать типы данных, вы можете иметь объект, имеющий строго типизированные числовые данные, проанализированные из текстового документа, выполнять все вычисления в памяти с использованием числовых типов данных, а затем снова преобразовывать их в текст в отобразить значения.

Для нумерации повторяющихся значений можно указать Dictionary<string,int> со значением RD в качестве ключа и значением в качестве числа раз, которое оно появляется в столбце RD. Вы можете иметь другой словарь того же типа, за исключением того, что он отслеживает последний назначенный номер. Просматривая список элементов для их отображения, вы можете проверить словарь, вычесть один из значения в первом словаре, добавить один к значению во втором словаре и объединить результат со значением RD (item.RD += "-"+number). .

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

В дополнение к ответу @marks, я бы сказал, что в вашем конкретном случае вы можете иметь данные, но вам также следует обратить особое внимание на числа с плавающей запятой.Я понятия не имею, насколько сильная точность вам нужна, но, например, в файле вы можете хранить их как целые числа, поэтому ваши текущие значения умножаются на 1000. А когда пользователь вставляет число с плавающей запятой, умножьте его на 1000 и после добавления /вычитать или что-то еще.Когда вы собираетесь показать пользователю, разделите его на 1000.

Надеюсь, это поможет.

С уважением.

...