2014-09-02 4 views
0

У меня есть основное текстовое поле, которое вводит текстовый файл с моего компьютера. Содержимое текстового файла: N14G73X315.2Y83.7I40.0J6.4A0.0H3K75T11F5M0C0.0.Как разбить/Скопировать/Переместить текстовые значения в соответствии с именем метки в отдельные отдельные текстовые поля

enter image description here

Так я хочу передать соответствующие значения в текстовые поля, показанные в ссылке ниже.

enter image description here

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

 private void button4_Click(object sender, EventArgs e) 
    { 
     Stream myStream = null; 
     OpenFileDialog openFileDialog1 = new OpenFileDialog(); 

     openFileDialog1.InitialDirectory = "c:\\"; 
     openFileDialog1.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*"; 
     openFileDialog1.FilterIndex = 2; 
     openFileDialog1.RestoreDirectory = true; 

     if (openFileDialog1.ShowDialog() == DialogResult.OK) 
     { 
      try 
      { 
       if ((myStream = openFileDialog1.OpenFile()) != null) 
       { 
        using (myStream) 
        { 
         textBox11.Text = File.ReadAllText(openFileDialog1.FileName); 
        } 
       } 
      } 
      catch (Exception ex) 
      { 
       MessageBox.Show("Error: Could not read file from disk. Original error: " + ex.Message); 
      } 
     } 
    } 
+0

@Shell Любая идея ??? – 2014-09-02 19:07:36

+0

Кстати, это действительно два вопроса, а не один. Разделение строки на несколько (под) строк является первым. А второе заполняет текстовое поле (что действительно фундаментально). –

ответ

0

Проверьте это:

class Program 
{ 
    static char[] alphabetArray1 = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z' }; 
    static char[] alphabetArray2 = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z' }; 
    static List<char> characterSet = new List<char>(); 
    static void Main(string[] args) 
    { 
     characterSet = alphabetArray1.ToList<char>(); 
     characterSet.AddRange(alphabetArray2.ToList<char>()); 

     YourMethod(@"N14G73X315.2Y83.7I40.0J6.4A0.0H3K75T11F5M0C0.0"); 

    } 

    static void YourMethod(string input) 
    { 
     Dictionary<char, string> dictionary = new Dictionary<char, string>(); 
     StringBuilder tempStr = new StringBuilder(string.Empty); 
     int currIndex = 0; 
     int prevCharIndex = 0; 
     while (currIndex < input.Length) 
     { 

      if (characterSet.Contains(input[currIndex])) 
      { 
       //charIndex = currIndex; 
       if (tempStr.Length > 0) 
       { 
        dictionary[input[prevCharIndex]] = tempStr.ToString(); 
        tempStr.Length = 0; 
       } 
       dictionary.Add(input[currIndex], string.Empty); 
       prevCharIndex = currIndex; 
      } 
      else 
      { 
       tempStr.Append(input[currIndex]); 
      } 
      currIndex++; 
     } 
     if (tempStr.Length > 0) 
     { 
      dictionary[input[prevCharIndex]] = tempStr.ToString(); 
      tempStr.Length = 0; 
     } 
    } 

} 

После этого вы будете иметь словарь алфавитов и соответствующие им значения. И все это просто.

вы получите значения что-то вроде этого:

Просто сопоставить свои значения в соответствующие текстовые поля. :)

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

+0

Где я должен указывать все соответствующие значения – 2014-09-08 22:26:07

+0

@, давая ошибку с именем Error ', имеет более чем одну точку входа: 'creater.Form1.Program.Main (string [])'. Скомпилируйте с/main, чтобы указать тип, содержащий точку входа. ' – 2014-09-08 22:31:11

+0

Я предполагаю, что существует два метода main(). Попробуйте удалить его в моем коде и переименуйте его в другое. Затем назовите его из основного метода. – Prashant19sep

0

Я думаю, вы могли бы использовать что-то вроде этого:

string originalText = textBox11.Text; 
string[] splitString = originalText.Split(new Char [] {'N' , 'G', 'X', 'Y', 'I', 'J', 'H', 'K', 'F', 'T'}); 

А затем получить доступ ко всем номерам с помощью:

textBoxN.text = splitString[0]; 
textBoxG.text = splitString[1]; 
textBoxX.text = splitString[2]; 
textBoxY.text = splitString[3]; 

если я не ошибаюсь.

+0

, который был идеальным. но если я не дал букву «A» в текстовом поле, это дало мне ошибку под названием «Индекс был за пределами массива». – 2014-09-02 20:31:51

+0

Я считаю, что это потому, что у вас меньше расколов в вашем массиве splitString, чем вы пытаетесь использовать. Я полагаю, вы могли бы просто использовать предложение Try Catch вокруг части «textBoxN = splitString [0]». ИЛИ вы могли бы просто пропустить через splitString, чтобы никогда не выйти из пределов. :-) – Burro

Смежные вопросы