Интерпретация этого необработанного текста — стратегия?

У меня есть необработанный текст:

________________________________________________________________________________________________________________________________
Pos Car  Competitor/Team                Driver                   Vehicle              Cap   CL Laps     Race.Time Fastest...Lap

1     6  Jason Clements                 Jason Clements           BMW M3               3200       10     9:48.5710   3 0:57.3228*
2    42  David Skillender               David Skillender         Holden VS Commodore  6000       10     9:55.6866   2 0:57.9409 
3    37  Bruce Cook                     Bruce Cook               Ford  Escort         3759       10     9:56.4388   4 0:58.3359 
4    18  Troy Marinelli                 Troy Marinelli           Nissan  Silvia       3396       10     9:56.7758   2 0:58.4443 
5    75  Anthony Gilbertson             Anthony Gilbertson       BMW M3               3200       10    10:02.5842   3 0:58.9336 
6    26  Trent Purcell                  Trent Purcell            Mazda RX7            2354       10    10:07.6285   4 0:59.0546 
7    12  Scott Hunter                   Scott Hunter             Toyota  Corolla      2000       10    10:11.3722   5 0:59.8921 
8    91  Graeme Wilkinson               Graeme Wilkinson         Ford  Escort         2000       10    10:13.4114   5 1:00.2175 
9     7  Justin Wade                    Justin Wade              BMW M3               4000       10    10:18.2020   9 1:00.8969 
10   55  Greg Craig                     Grag Craig               Toyota  Corolla      1840       10    10:18.9956   7 1:00.7905 
11   46  Kyle Orgam-Moore               Kyle Organ-Moore         Holden VS Commodore  6000       10    10:30.0179   3 1:01.6741 
12   39  Uptiles Strathpine             Trent Spencer            BMW Mini Cooper S    1500       10    10:40.1436   2 1:02.2728 
13  177  Mark Hyde                      Mark Hyde                Ford  Escort         1993       10    10:49.5920   2 1:03.8069 
14   34  Peter Draheim                  Peter Draheim            Mazda RX3            2600       10    10:50.8159  10 1:03.4396 
15    5  Scott Douglas                  Scott Douglas            Datsun  1200         1998        9     9:48.7808   3 1:01.5371 
16   72  Paul Redman                    Paul Redman              Ford  Focus          2lt         9    10:11.3707   2 1:05.8729 
17    8  Matthew Speakman               Matthew Speakman         Toyota  Celica       1600        9    10:16.3159   3 1:05.9117 
18   74  Lucas Easton                   Lucas Easton             Toyota  Celica       1600        9    10:16.8050   6 1:06.0748 
19   77  Dean Fuller                    Dean Fuller              Mitsubishi  Sigma    2600        9    10:25.2877   3 1:07.3991 
20   16  Brett Batterby                 Brett Batterby           Toyota  Corolla      1600        9    10:29.9127   4 1:07.8420 
21   95  Ross Hurford                   Ross Hurford             Toyota  Corolla      1600        8     9:57.5297   2 1:12.2672 
DNF  13  Charles Wright                 Charles Wright           BMW 325i             2700        9     9:47.9888   7 1:03.2808 
DNF  20  Shane Satchwell                Shane Satchwell          Datsun  1200 Coupe   1998        1     1:05.9100   1 1:05.9100 

Fastest Lap Av.Speed Is 152kph, Race Av.Speed Is 148kph
R=under lap record by greatest margin, r=under lap record, *=fastest lap time
________________________________________________________________________________________________________________________________
Issue# 2 - Printed Sat May 26 15:43:31 2012                     Timing System By NATSOFT (03)63431311 www.natsoft.com.au/results
Amended 

Мне нужно проанализировать его в объект с очевидными полями Position, Car, Driver и т.д. Проблема в том, что я понятия не имею, какую стратегию использовать. Если бы я разделил его на пробелы, то в итоге получился бы такой список:

["1", "6", "Jason", "Clements", "Jason", "Clements", "BMW", "M3", "3200", "10", "9:48.5710", "3", "0:57.3228*"]

Можете ли вы увидеть проблему. Я не могу просто интерпретировать этот список, потому что у людей может быть только 1 имя, или 3 слова в имени, или много разных слов в машине. Это делает невозможным просто ссылаться на список, используя только индексы.

Как насчет использования смещений, определяемых именами столбцов? Хотя я не совсем понимаю, как это можно использовать.

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

  1. Разбить текст на новую строку, создав набор строк.
  2. Найдите наиболее распространенные пробельные символы в каждой строке. т.е. позиции (индексы) в каждой строке, где все остальные строка содержит пробел. Например:
  3. Разделите строки на основе этих общих символов.
  4. Обрезать строки

Существует несколько проблем:

Если имена содержат одинаковую длину, например:

Jason Adams
Bobby Sacka
Jerry Louis

Тогда это будет интерпретировано как два отдельных элемента: ([ "Джейсон" "Адамс" , «Бобби», «Сака», «Джерри», «Луи» ).

В то время как, если бы они все различались вот так:

Dominic Bou
Bob Adams
Jerry Seinfeld

Тогда оно правильно разделилось бы на последнюю букву 'd' в Seinfeld (и, таким образом, мы получили бы набор из трех имен( ["Доминик Боу", " Боб Адамс", "Джерри Сайнфелд"]).

Это также довольно хрупко. Я ищу более приятное решение.

7
задан Dominic Bou-Samra 19 July 2012 в 08:52
поделиться