Я пытаюсь анализировать большой TXT-файл построчно (6 млн. Строк, 200 МБ), используя операторы if с методом String.contains (String).На данный момент он очень медленный, есть способ улучшить скорость.
Я знаю, что есть также String.firstIndexOf, но, похоже, он медленнее.Regex, вероятно, тоже медленнее.
Импорт строк TXT и разбиения:
let content = try String(contentsOfFile:path, encoding: String.Encoding.ascii)
print("LOADED 0");
return content.components(separatedBy: "\n")
Синтаксический анализ:
if(line.contains("<TAG1>")) {
var thisline = line;
thisline = thisline.replacingOccurrences(of: "<TAG1>", with: "")
thisline = thisline.replacingOccurrences(of: "</TAG1>", with: "")
text = "\(text)\n\(thisline): ";
} else if(line.contains("<TAG2>")) {
var thisline = line;
thisline = thisline.replacingOccurrences(of: "<TAG2>", with: "")
thisline = thisline.replacingOccurrences(of: "</TAG2>", with: "")
text = "\(text) - \(thisline) ";
}
Вероятно, будет больше операторов if (которые, вероятно,замедлите синтаксический анализ еще больше)
Было бы здорово, если бы скорость могла быть улучшена, это занимает ок.5-10 минут на моем Macbook (в зависимости от размера файла)
Редактировать: Кажется, что строка + "\ n" + строка2 быстрее, чем "(строка) \ n (строка2)", но это не такСлишком много помогает
Edit2: я добавил индикатор прогресса в приложение, и кажется, что он быстро запускается и замедляется к концу?