Разделение строки и назначение разделенных сегментов переменным - PullRequest
0 голосов
/ 29 ноября 2010

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

(234.134, 105.087, 0.000000)

EDDIT:

    Private Sub Button1_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    Dim str As String
    Dim XVAL As String
    Dim YVAL As String
    Dim ZVAL As String

    Dim strArr() As String
    Dim count As Integer
    str = "(0.123, 4.467, 8.910)"
    strArr = str.Split(", ")
    For count = 0 To strArr.Length - 3
        XVAL = (strArr(count))
    Next
    For count = 0 To strArr.Length - 2
        YVAL = (strArr(count))
    Next
    For count = 0 To strArr.Length - 1
        ZVAL = (strArr(count))
    Next

    Label1.Text = XVAL + ZVAL
    Label2.Text = YVAL
    Label3.Text = ZVAL

End Sub

только теперь произведение XVAL и ZVAL отображается как 0,123 8,910, а не 0,123 + 8,910 = 9,033

9,033, то есть то, что я после

Ответы [ 2 ]

1 голос
/ 29 ноября 2010

Мне нравятся string.Split и TryParse:

string input = "(234.134, 105.087, 0.000000)";
string[] numbers = input.Split(
                       new[] { ',', ')', '(' }, 
                       StringSplitOptions.RemoveEmptyEntries);
double x, y, z;
if (double.TryParse(numbers[0], 
                    NumberStyles.Any, 
                    CultureInfo.InvariantCulture, 
                    out x))
{
    // first string was not a valid number
}

if (double.TryParse(numbers[1], 
                    NumberStyles.Any, 
                    CultureInfo.InvariantCulture, 
                    out y))
{
    // second string was not a valid number
}

// and so on

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

0 голосов
/ 29 ноября 2010

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

Dim toMatch as String = "(234.134, 105.087, 0.00000)"
Dim regEx as Regex = new Regex("\((\d*(\.\d+)?), (\d*(\.\d+)?), (\d*(\.\d+)?)\)")

Dim match as Match = regEx.Match(toMatch)
Dim var1 as Float = Float.Parse(match.Groups(1).Value)
Dim var2 as Float = Float.Parse(match.Groups(3).Value)
Dim var3 as Float = Float.Parse(match.Groups(5).Value)

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...