2009-10-05 3 views
0

내가 날리고 "는 인덱스 어레이의 경계를 벗어난"행 번호 574에 에러 인 :글꼴 문자열을 구문 분석 할 때 배열 오류 범위를 벗어나는 인덱스가 있습니까?

label.Font = 새로운 폰트 (fontNameFields [0] Single.Parse (fontNameFields [1]));

Label 
"hi tyler" 
23, 76 
Arial,12.5 

... 나는 성공적으로 다른 모든 정보 (그냥 맨 마지막 줄)을 분석 할 수 있으며, 코드 I :

는 ... 내가 분석하고 다음 텍스트 파일이 정확한 정보가 포함되어 있습니다 이은 다음과 같습니다

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])); 

... 난 글꼴 물건을 가져옵니다 정규식에 문제가있을 수 있습니다 생각 ... 누군가가 도와주세요 수, 난 몰라,하지만 그냥 작동하지 않습니다? Parsing font info and converting it to System.Drawing.Font

+0

'Console.WriteLine' 문은 무엇을 출력합니까? –

+0

나는 모른다. 그 winforms 애플 리케이션, 그래서 아무 콘솔 창이 나타납니다. 그 라인을 지우는 것을 잊어 버렸습니다. –

+1

당신은 도움을 요청하지만, 당신 자신의 디버깅을 할 수는 없습니까? 'MessageBox.Show'에 대해 들어 본 적이 있습니까? –

답변

0

그것은 단지 조금 더 제한적인 글꼴 무엇의 조건과 크기에, slashmais 솔루션과 유사하다

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

을 시도하고 :

이 문제의 역사에 대한

참조 나는 블록을 더 명확하게 볼 수 있기 때문에 좋아하는 원본에 더 가깝습니다.

+0

감사합니다 mjv - 당신 r 정규식에 오류가 없습니다, 그러나, 내가 바보 같은 줄 바깥 오류보다 여전히 점점 오전 : label.Font = new Font (fontNameFields [0], Single.Parse() fontNameFields [1])); –

+0

@baeltazor 나는 당신의 논리가 프로그램에서 Font = new Font() 줄 앞에서이 글꼴 줄이 하나의 단일 토큰으로 나중에 분할 될 것으로 예상했음을 보지 못했습니다. 잠시 후에, 나는 정규식을 적절하게 편집 할 것이다! – mjv

관련 문제