4

У меня есть некоторые данные (основные личные данные), которые мне нужно экспортировать из старой унаследованной системы в более новую (MySQL DB). Это примерно 200 МБ, разделенных на 6 файлов.

Система, из которой я экспортирую, может экспортировать все необходимые данные в виде файла Excel. Однако метод создания Excel состоит в том, чтобы создать таблицу HTML и сохранить ее с расширением .xls . При просмотре в текстовом редакторе они просто выглядят так (за исключением 600 000 строк).

<table>
<tr>

            <td class="tableh">
                <b>Birth&nbsp;Date</b>
            </td>

            <td class="tableh">
                <b>First&nbsp;Name</b>
            </td>

К моему большому удивлению, Excel может открыть такой документ. К сожалению, для этого требуется около получаса (на файл) и почти столько же времени, чтобы сохранить его в правильном формате.

У кого-нибудь есть предложения по их конвертации (быстрее, чем 45-60 минут требуется Excel)?

3 ответа3

2

Это всего лишь один стол? Вы уверены, что ваша система не может экспортировать как CSV? (Кажется необычным то, что он может экспортировать в Excel или HTML, но не CSV.)

Я был бы соблазн разделить файл (ы) вверх (снова), а затем собрать его позже. Я бы попробовал заменить (в ST или другом редакторе) текст, который не требует регулярных выражений. Regex-replace, вероятно, намного медленнее, чем стандартная замена. Я бы использовал стандартную замену как можно чаще, даже используя ее только для того, чтобы уменьшить количество замен регулярных выражений, которые мне нужно сделать. Я бы немного поэкспериментировал, чтобы понять, сколько времени может занять весь процесс.

В качестве альтернативы я мог бы попытаться преобразовать файл в формат XML, добавив теги в начале и, опять же, немного заменив. Затем пропустите Excel, и я нашел это для MySQL:

LOAD XML LOCAL INFILE '/pathtofile/file.xml' 
INTO TABLE my_tablename(personal_number, firstname, ...);

импортировать XML. «Загрузка XML INFILE доступна из MySQL 5.2»

Вы можете подождать, чтобы увидеть, может ли кто-то еще внести свой вклад. Удачи.

2

Подходит ли решение не от Excel? Если да, то какова скорость загрузки и загрузки?

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

Входной файл

<table>
<tr>
            <td class="tableh">
                <b>Birth&nbsp;Date</b>
            </td>
            <td class="tableh">
                <b>First&nbsp;Name</b>
            </td>
</table>
</tr>

Выходной файл

Birth Date, First Name
  • Вы можете выбирать между различными разделителями (запятая, точка с запятой, вертикальная черта, табуляция)

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

0

Извините, у меня нет кода для обмена, но, возможно, ваша лучшая стратегия - вырезать часть процесса в Excel и перейти прямо к тексту, разделенному запятыми.

Две идеи:

  1. Сделайте html-файл правильным xml-файлом (нужно только пару тегов заголовка и общий тег-обертку), создайте таблицу стилей xslt (должна быть очень простой) и запустите xml-файл через процессор xslt, такой как xsltproc .

  2. Если вы работаете в Linux / Unix, подумайте над написанием скрипта с использованием потокового редактора, такого как awk чтобы вырезать теги и вывести поля.

В любом случае логика будет выглядеть примерно так:

  • если вы встретите <th> , выведите новую строку
  • если вы встретите пару <td> </td> , выведите ее содержимое в кавычках

На SO есть отличный xslt форум, на котором стоит публиковать примеры кода.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .