2009-10-05 5 views
0

je continue à obtenir une erreur "Index est en dehors des limites du tableau" sur la ligne # 574 qui est:Index hors limites de l'erreur de tableau lors de l'analyse de la chaîne de police?

label.Font = new polices (fontNameFields [0], Single.Parse (fontNameFields [1]));

... Le fichier texte suivant je suis analyse contient cette information exacte:

Label 
"hi tyler" 
23, 76 
Arial,12.5 

... Je peux analyser avec succès toutes les autres informations (tout simplement pas la dernière ligne), et le code i ont est:

MatchCollection lines = Regex.Matches(File.ReadAllText(Path), @"(.+?)\r\n""([^""]+)""\r\n(\d+), (\d+)"); 
foreach (Match match in lines) 
{ 
    string control = match.Groups[1].Value; 
    string text = match.Groups[2].Value; 
    int x = Int32.Parse(match.Groups[3].Value); 
    int y = Int32.Parse(match.Groups[4].Value); 
    String cfont = match.Groups[5].Value; 
    string color = match.Groups[6].Value; 

    Console.WriteLine("{0}, \"{1}\", {2}, {3}, {4}, {5}", control, text, x, y, cfont, color); 



    switch (control) 
    { 
     case "Label": 
      Label label = new Label();  

      label.Text = text; 

      label.AutoSize = true; 
      label.IsAccessible = true; 

      label.MouseClick += new MouseEventHandler(label_MouseClick); 
      label.MouseDoubleClick += new MouseEventHandler(label_MouseDoubleClick); 
      label.MouseDown += new MouseEventHandler(label_MouseDown); 
      label.MouseMove += new MouseEventHandler(label_MouseMove); 
      label.MouseUp += new MouseEventHandler(label_MouseUp); 

      label.Location = new Point(x, y); 
      canvas.Controls.Add(label); 

          String fontName = cfont; 
    String[] fontNameFields = fontName.Split(','); 


    label.Font = new Font(fontNameFields[0], Single.Parse(fontNameFields[1])); 

... Je pense qu'il peut y avoir quelque chose de mal avec le regex qui obtient la substance de la police ... Je ne sais pas, mais ça ne marchera pas, quelqu'un peut-il s'il vous plaît aider?

Pour une histoire de ce problème, voir: Parsing font info and converting it to System.Drawing.Font

+0

Que génère votre instruction 'Console.WriteLine'? –

+0

je ne sais pas. c'est une application winforms, donc pas de fenêtre de console apparaît. J'ai simplement oublié de supprimer cette ligne –

+1

Vous demandez de l'aide, mais vous ne pouvez pas prendre la peine de faire votre propre débogage? Vous avez déjà entendu parler de 'MessageBox.Show'? –

Répondre

0

Essayez

@"(.+?)\r\n""([^""]+)""\r\n(\d+), (\d+)\r\n(\w+,\d+\.?\d)" 

Il est similaire à slashmais solution, seulement un peu plus restrictive en termes de ce qui est une police et sa taille, et plus proche de votre original, que j'aime car les blocs sont plus explicitement visibles.

+0

merci mjv - il n'y a pas d'erreurs sur votre regex que j'aime bien, cependant, je reçois toujours des erreurs hors limites stupides sur la ligne: label.Font = new Police (fontNameFields [0], Single.Parse (fontNameFields [1])); –

+0

@baeltazor J'ai échoué à voir que votre logique s'attendait à ce que cette ligne de police soit un seul jeton, qui sera ensuite divisé, avant la ligne Font = new Font() dans le programme. Vérifiez dans une minute, je vais modifier la regex en conséquence! – mjv

Questions connexes