Импорт координат x и y из файла .txt - PullRequest
0 голосов
/ 06 мая 2018

Мне нужно прочитать координаты из текстового файла для моего проекта, но текстовый файл выглядит так

1 37.4393516691 541.2090699418

2 612.1759508571 494.3166877396

3 38.1312338227 353.1484581781

и больше места впереди. У меня есть код, который я пробовал, но я не мог заставить работать сепараторы.

      1    1150.0  1760.0

      2     630.0  1660.0

      3      40.0  2090.0

Код:

 string[] cityPositions = File.ReadAllLines(ofd.FileName);
                foreach (string cityP in cityPositions)
                {
                    int startIndexX = cityP.IndexOf("  ", StringComparison.CurrentCultureIgnoreCase) + 3;
                    int endIndexX = cityP.IndexOf(" ", StringComparison.CurrentCultureIgnoreCase);
                    int X = int.Parse(cityP.Substring(startIndexX, endIndexX - startIndexX));

                    int startIndexY = cityP.IndexOf(" ", StringComparison.CurrentCultureIgnoreCase) + 3;
                    int endIndexY = cityP.IndexOf("", StringComparison.CurrentCultureIgnoreCase);
                    int Y = int.Parse(cityP.Substring(startIndexY, endIndexY - startIndexY));
                    create_City(new Point(X, Y));
                }

Ответы [ 3 ]

0 голосов
/ 06 мая 2018

Если вы хотите использовать регулярные выражения, попробуйте это:

        String expression = @"(\d)([\d\.]*)([\d\.]*)";

        Regex r = new Regex(expression);

        foreach (String cityPosition in cityPositions)
        {
            MatchCollection mc = r.Matches(cityPosition);
            int index = Convert.ToInt32(mc[0].Value);
            decimal coOrdX = Convert.ToDecimal(mc[1].Value);
            decimal coOrdY = Convert.ToDecimal(mc[2].Value);

            Console.WriteLine(String.Format("{0} {1} {2}", index, coOrdX, coOrdY));
        }

Этот код выдаст такой вывод:

1 1150.0 1760.0
2 630.0 1660.0
3 40.0 2090.0

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

0 голосов
/ 06 мая 2018

Вместо работы с индексами вы можете заменить несколько пробелов одним пробелом, например

    RegexOptions options = RegexOptions.None;
    Regex regex = new Regex("[ ]{2,}", options);     
    cityP = regex.Replace(cityP, " ");

затем используйте разделение, чтобы получить координаты

    var x = double.Parse(cityP.Split()[1]);
    var y = double.Parse(cityP.Split()[2]);
0 голосов
/ 06 мая 2018

Прежде всего ваш тип данных не совпадает. Вы должны использовать double для координат и использовать метод Split, например:

double X = double.Parse(cityP.Split()[1], CultureInfo.InvariantCulture);
double Y = double.Parse(cityP.Split()[2], CultureInfo.InvariantCulture);

Функция разделения без указания параметров будет разделена пробелами.

EDIT

Непонятно в вопросе, но, если ваши строки не имеют одинакового шаблона и имеют разные пробелы, используйте метод Split следующим образом:

double X = double.Parse(cityP.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries)[1], CultureInfo.InvariantCulture);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...