Анализ CSV для вставки базы данных при неправильном форматировании - PullRequest
1 голос
/ 01 марта 2012

Недавно я написал почтовую платформу для одного из наших сотрудников. Система работает отлично, отлично масштабируется и ей интересно пользоваться. Тем не менее, в настоящее время он не работает из-за ошибки, которую я не могу понять, как исправить (довольно неопытный разработчик).

Процесс идет примерно так ...

  1. Загрузить файл CSV в определенный каталог FTP.
  2. Перейти на страницу import_mailing_list.
  3. Выберите файл CSV в каталоге FTP.
  4. Назовите и опишите, что содержится в списке.
  5. Свяжите заголовки файлов со столбцами базы данных.

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

Это все прекрасно работает, за исключением конкретного случая, когда необработанный формат CSV неправильно отформатирован. Например ...

fname, lname, email
Bob, Schlumberger, bob@bob.com
Bobbette, Schlumberger
Another, Record, goeshere@email.com

Как видите, во второй строке отсутствует запятая. Это может привести к ошибке при попытке получить «valArray [3]» (или valArray [2], в случае любого языка, кроме моего).

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

Наш стек - ColdFusion 8/9 и MySQL 5.1. Вот почему я называю индекс массива [3].

Ответы [ 2 ]

5 голосов
/ 01 марта 2012

Там ArrayIsDefined(array, elementIndex) или ArrayLen(array)

кажется неэффективным?

Ты должен кодировать то, что тебе нужно, забудь о неэффективности. Сделайте это правильно, прежде чем быстро (при необходимости).

1 голос
/ 01 марта 2012

Полагаю, если вы ищете другой способ сделать это (вместо того, чтобы каждый раз проверять длину массива, хотя для меня это звучит не так уж плохо), вы можете обернуть каждую попытку вставки строки в try / catchблок.Если произойдет сбой, поместите строку с ошибкой в ​​буфер (включая номер строки и сообщение об ошибке), который затем можно будет отобразить пользователю после завершения пакета, чтобы они могли видеть каждую из строк с ошибками и причины их сбоя.Это имеет преимущества: 1) отсутствие необходимости каждый раз явно проверять длину массива и 2) обнаружение других ошибок, которые вы, возможно, не ожидали заранее (например, значение слишком велико для вашего поля, например).

...