Как бы вы разделить на \ r \ n, если String.Split (String []) не существует? - PullRequest
6 голосов
/ 11 января 2010

Использование .NET MicroFramework, которая является действительно урезанной версией C #. Например, System.String едва ли обладает какими-либо вкусностями, которыми мы наслаждались на протяжении многих лет.

Мне нужно разбить текстовый документ на строки, что означает разделение на \ r \ n. Однако String.Split обеспечивает разделение только по символам, а не по строкам.

Как эффективно разбить документ на строки (например, без сумасшедших циклов по каждому символу в документе)?

P.S. В System.String также отсутствует метод Replace, поэтому он не будет работать.
P.P.S. Regex также не является частью MicroFramework.

Ответы [ 6 ]

12 голосов
/ 11 января 2010

Вы можете сделать

string[] lines = doc.Split('\n');
for (int i = 0; i < lines.Length; i+= 1)
   lines[i] = lines[i].Trim();

Предполагая, что µF вообще поддерживает Trim (). Trim () удалит все пробелы, которые могут быть полезны. В противном случае используйте TrimEnd('\r')

6 голосов
/ 11 января 2010

Я бы перебрал все символы в документе, потому что это явно необходимо. Как вы думаете, String.Split работает? Однако я попытался бы сделать это, нажимая только один раз на каждого персонажа.

Держите список найденных строк. Повторно используйте IndexOf, передавая текущее смещение в строку (т.е. предыдущее совпадение + 2).

3 голосов
/ 11 января 2010

Как я могу эффективно разбить документ на строки (например, без зацикливания на каждом символе в документе)?

Как вы думаете, как работает встроенный Split?

Просто переопределите это как метод расширения.

2 голосов
/ 11 января 2010

А как же:

string path = "yourfile.txt";
string[] lines = File.ReadAllLines(path);

Или

string content = File.ReadAllText(path);
string[] lines = content.Split(
    Environment.NewLine.ToCharArray(),
    StringSplitOptions.RemoveEmptyEntries);

Помните, что .NET Micro Framework 3.0 , этот код может работать:

string line = String.Empty;
StreamReader reader = new StreamReader(path);
while ((line = reader.ReadLine()) != null)
{
    // do stuff
}
0 голосов
/ 22 августа 2017

Если вам нужна совместимая с MicroFramework функция разделения, которая работает для всей строки символов , вот та, которая делает трюк, аналогично версии обычных фреймворков с использованием StringSplitOptions .None:

    private static string[] Split(string s, string delim)
    {
        if (s == null) throw new NullReferenceException();

        // Declarations
        var strings = new ArrayList();
        var start = 0;

        // Tokenize
        if (delim != null && delim != "")
        {
            int i;
            while ((i = s.IndexOf(delim, start)) != -1)
            {
                strings.Add(s.Substring(start, i - start));
                start = i + delim.Length;
            }
        }

        // Append left over
        strings.Add(s.Substring(start));

        return (string[]) strings.ToArray(typeof(string));
    }
0 голосов
/ 01 сентября 2012

В некоторых случаях это может помочь:

StreamReader reader = new StreamReader(file);    
string _Line = reader.ReadToEnd();
string IntMediateLine = string.Empty;
IntMediateLine = _Line.Replace("entersign", "");
string[] ArrayLineSpliter = IntMediateLine.Split('any specail chaarater');
...