Мне нужно разобрать список стран в формате HTML в SQL вставки. Есть ли более простой способ сделать это? - PullRequest
0 голосов
/ 16 марта 2009

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

<tr><td>Canada (CA)</td><td>Alberta (AB)</td></tr>
<tr><td>Canada (CA)</td><td>British Columbia (BC)</td></tr>
<tr><td>Canada (CA)</td><td>Manitoba (MB)</td></tr>

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

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

Так есть ли лучший способ сделать это? Или, что еще лучше, более простой способ наполнения базы данных страной и провинциями / штатами? Я осмотрел SO и единственные легкодоступные базы данных, которые я могу найти, не дают полного названия стран или провинций / штатов или используют IP-адреса вместо географических названий.

Ответы [ 9 ]

4 голосов
/ 16 марта 2009
  1. Вставьте его в электронную таблицу. Некоторые таблицы будут анализировать таблицу HTML для вас.

  2. Сохраните его как файл .CSV и обработайте его таким образом. Или . Добавьте в таблицу столбец, в котором будет указано что-то вроде следующего:

    = "ВСТАВИТЬ В СТРАНУ (КОД, ИМЯ) ЗНАЧЕНИЯ = ('" & A1 & "', '" & B1 & "');"

Затем у вас есть столбец операторов INSERT, который вы можете вырезать, вставить и выполнить.


Редактировать

Обязательно включайте тег <table> при вставке в электронную таблицу.

<table><tr><th>country</th><th>name></th></tr>
<tr><td>Canada (CA)</td><td>Alberta (AB)</td></tr>
<tr><td>Canada (CA)</td><td>British Columbia (BC)</td></tr>
<tr><td>Canada (CA)</td><td>Manitoba (MB)</td></tr>
</table>

Обработка файла CSV практически не требует разбора. Там есть кавычки и запятые. Намного легче жить, чем XML / HTML.

2 голосов
/ 16 марта 2009
/<tr><td>([^\s]+)\s\(([^\)])\)<\/td><td>([^\s]+)\s\(([^\)])\)<\/td><\/tr>/

Тогда у вас должно быть 4 захвата с 4 частями данных из любого механизма PCRE:)

Кроме того, что-то вроде http://jacksleight.com/assets/blog/really-shiny/scripts/table-extractor.txt обеспечивает большую полноту.

1 голос
/ 16 марта 2009

Если вы можете увидеть эту таблицу в браузере (Internet Explorer), вы можете выбрать всю таблицу, щелкнуть правой кнопкой мыши и «Экспорт в Microsoft Excel»

Это должно помочь вам получить данные в отдельные столбцы, я думаю.

1 голос
/ 16 марта 2009

Я недавно узнал , что если вы откроете URL-адрес из Excel, он попытается проанализировать данные таблицы.

1 голос
/ 16 марта 2009

Звучит как проблема, легко решаемая регулярным выражением.

0 голосов
/ 16 марта 2009

Здесь дует моя труба, но мой инструмент FOSS CSVfix сделает это с помощью комбинации команд read_xml и sql_insert.

0 голосов
/ 16 марта 2009

Загрузите данные HTML как XElements, используйте LINQ, чтобы получить нужные значения, а затем INSERT.

0 голосов
/ 16 марта 2009

Для .Net существует сборка с именем System.Xml; вы можете просто сослаться на сборку и преобразовать ваш HTML-документ в System.Xml.XmlDocument, вы можете легко определить узел HTML, содержащий ваши необходимые данные, и использовать дочерние узлы для добавления в ваши данные. Это требует небольшого разбора строки с вашей стороны.

0 голосов
/ 16 марта 2009

Вы должны сделать это программно? Если нет, могу ли я просто скопировать и вставить таблицу (из браузера) в MS Excel , а затем очистить все форматы? Таким образом, вы получите красивую таблицу, которую можно без проблем импортировать в вашу базу данных.

просто предложение ... hth

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