2016-01-24 3 views
1

Я хочу, чтобы вставлять данные с разделителями табуляции (показано ниже) в многострочное текстовое поле.Разбор данных из текстового поля в несколько текстовых полей - VB.NET

данных:

Fat 119.3g 62.1% 
Saturated Fat 26.4g 
Cholesterol 442.5mg 
Sodium 3,824.8mg 
Carbohydrates 80.1g 18.5% 
Fiber 12.1g 
Sugars 26.6g 
Protein 83.7g 19.4% 

Примечание: Каждая строка: [имя питательных веществ] [TAB] [г/мг сумма] [TAB] [% (только на 3)]

Когда я нажимаю кнопку, я хотел бы следующее случилось:

fatInput.text = "119.3" 
satfatInput.text = "26.4" 
cholesteralInput.text = "442.5" 
sodiumInput.text = "3824.8" 
carbInput.text = "80.1" 
fiberInput.text = "12.1" 
sugarInput.text = "26.6" 
proteinInput.text = "83.7" 

Итак, подведем итог, она тянет эти числа из текстового поля я вставлял в них и вводил их в отдельные текстовые поля. Запятые, «g» и «mg» не должны включаться. Три процента не имеют значения и могут быть проигнорированы. Имена, порядок и вкладки питательных веществ не изменяются.

Возможно ли это?

СПАСИБО ДЛЯ ПОМОЩИ !!!

Отказ от ответственности: Не программист, просто у вас есть базовые знания и мысли о программе развлечений, чтобы помочь мне отслеживать, что я ем. Я завершил программу, но решил усовершенствовать ее ниже, поэтому мне не нужно вручную вводить эти цифры. Если это слишком сложно, мне не нужен ответ, только какое-то направление, и я могу понять это. Я не знаю, с чего начать!

+0

управления пользовательского интерфейса делают ужасные переменные. Это происходит из какого-то файла? – Plutonix

+0

Это на самом деле с сайта, поэтому я бы хотел его скопировать или вставить. –

ответ

1

TextBox имеет свойство Lines, предоставляя вам доступ к введенным текстовым строкам.

Тогда вы можете разделить линию дальше с String.Split методом

Dim parts() As String = line.Split(ControlChars.Tab) 

VB имеет удобный Val функцию, которая получает номер, содержащийся в строке. но он не обрабатывает запятой, поэтому удалить его с помощью функции Replace перед тем, как число

Dim d As Double = Val(parts(1).Replace(",", "")) 

Тогда вы можете получить единицу, глядя на двух прямо большинство символов с помощью функции Right и посмотреть, является ли это " мг ", если не проверить правильность самого символа, чтобы увидеть, является ли это" g ".

+0

Спасибо, это имеет смысл для меня до сих пор, я дам ему попробовать завтра! –

0

Благодаря Оливье для получения моего мозга думает в правильном порядке:

  1. использовать линии свойства, чтобы положить ему на массив
  2. захватить одну строку из массива
  3. захватить только цифры от (я использовал инструкцию if/then, так как Val продолжал возвращать «0»)
  4. отключил его «g» или «mg» (что было легко, так как я уже имел оператор if/then)
  5. repeat for каждая из 8 строк

Вероятно противный, но вот код, который я использовал:

Dim msgStr As String 
    Dim newStr As String = "" 
    Dim tempArray() As String 
    tempArray = pasteInput.Lines 
    msgStr = (tempArray(0)) 
    For Each value As Char In msgStr 
     If value >= "0" And value <= "9" Or value = "." Then 
      newStr &= value 
     ElseIf value = "g" Or value = "mg" Then 
      fatInput.Text = newStr 
      newStr = "" 
      Exit For 
     End If 
    Next 
    msgStr = (tempArray(1)) 
    For Each value As Char In msgStr 
     If value >= "0" And value <= "9" Or value = "." Then 
      newStr &= value 
     ElseIf value = "g" Or value = "mg" Then 
      satfatInput.Text = newStr 
      newStr = "" 
      Exit For 
     End If 
    Next 
    msgStr = (tempArray(2)) 
    For Each value As Char In msgStr 
     If value >= "0" And value <= "9" Or value = "." Then 
      newStr &= value 
     ElseIf value = "g" Or value = "mg" Then 
      cholInput.Text = newStr 
      newStr = "" 
      Exit For 
     End If 
    Next 
    msgStr = (tempArray(3)) 
    For Each value As Char In msgStr 
     If value >= "0" And value <= "9" Or value = "." Then 
      newStr &= value 
     ElseIf value = "g" Or value = "mg" Then 
      sodiumInput.Text = newStr 
      newStr = "" 
      Exit For 
     End If 
    Next 
    msgStr = (tempArray(4)) 
    For Each value As Char In msgStr 
     If value >= "0" And value <= "9" Or value = "." Then 
      newStr &= value 
     ElseIf value = "g" Or value = "mg" Then 
      carbInput.Text = newStr 
      newStr = "" 
      Exit For 
     End If 
    Next 
    msgStr = (tempArray(5)) 
    For Each value As Char In msgStr 
     If value >= "0" And value <= "9" Or value = "." Then 
      newStr &= value 
     ElseIf value = "g" Or value = "mg" Then 
      fiberInput.Text = newStr 
      newStr = "" 
      Exit For 
     End If 
    Next 
    msgStr = (tempArray(6)) 
    msgStr = Replace(msgStr, "Sugars", "") 
    For Each value As Char In msgStr 
     If value >= "0" And value <= "9" Or value = "." Then 
      newStr &= value 
     ElseIf value = "g" Or value = "mg" Then 
      sugarInput.Text = newStr 
      newStr = "" 
      Exit For 
     End If 
    Next 
    msgStr = (tempArray(7)) 
    For Each value As Char In msgStr 
     If value >= "0" And value <= "9" Or value = "." Then 
      newStr &= value 
     ElseIf value = "g" Or value = "mg" Then 
      proteinInput.Text = newStr 
      newStr = "" 
      Exit For 
     End If 
    Next 
Смежные вопросы