Индекс за пределами ошибки массива при разборе строки шрифта? - PullRequest
1 голос
/ 05 октября 2009

я получаю сообщение об ошибке «Индекс выходит за границы массива» в строке # 574:

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

... Следующий текстовый файл, который я анализирую, содержит эту точную информацию:

Label
"hi tyler"
23, 76
Arial,12.5

... Я могу успешно проанализировать всю другую информацию (только не самую последнюю строку), и у меня есть код:

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

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

Историю этой проблемы смотрите: Анализ информации о шрифте и преобразование его в System.Drawing.Font

1 Ответ

0 голосов
/ 05 октября 2009

Попробуйте

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

Это похоже на решение slashmais, только немного более ограниченное с точки зрения того, что такое шрифт и его размер, и ближе к вашему оригиналу, что мне нравится, потому что блоки более четко видны.

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