2010-11-29 30 views
0

J'ai extrait le texte suivant d'un fichier txt, mais je voudrais attribuer à chacun des trois nombres des variables individuelles comment puis-je obtenir ceci?Séparer une chaîne et affecter des segments fractionnés à des variables

(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 

seulement maintenant le produit de xVal et zval est affiché comme 0,123 8,910 et non 0,123 + 8,910 = 9,033

le 9,033 qui est ce qui im ​​après

Répondre

0

Pourvu que votre format soit cohérent, les expressions régulières seraient une bonne approche à suivre pour obtenir cette information. Si vous mettez entre parenthèses des sections d'une expression régulière, vous pouvez récupérer ultérieurement la valeur de ces sections de la chaîne en utilisant la propriété .Groups sur votre résultat RegEx. Voici un exemple simple:

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) 

Vous voulez vérifier que l'expression régulière est correcte (il y a beaucoup de sites en ligne où vous pouvez jouer avec des expressions régulières, et que les groupes correspondants alignés correctement (vous pouvez jouer avec les groupes pour comprendre ce que vous avez besoin

+0

J'ai réussi à coder ce qui suit (voir eddit) – alf

1

J'aime string.Split et 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 

Depuis ce qui donne un peu de code repetetive, peut être encapsulé le comportement répétitif dans une méthode (peut mettre à jour la réponse avec ça plus tard; besoin de se précipiter vers le train ...).