格式化错误时解析CSV以进行数据库插入

时间:2012-03-01 17:55:12

标签: parsing csv coldfusion formatting

我最近为我们的一名员工编写了一个邮件平台供我们使用。该系统运行良好,扩展性好,使用起来很有趣。但是,由于我无法弄清楚如何解决(相当缺乏经验的开发人员)的错误,它目前无法运行。

这个过程是这样的......

  1. 将CSV文件上传到特定的FTP目录。
  2. 转到import_mailing_list页面。
  3. 在FTP目录中选择一个CSV文件。
  4. 命名并描述列表包含的内容。
  5. 将文件标题与数据库列关联。
  6. 然后,后端循环遍历文件的每一行,将值与标题相关联,并将这些值导入数据库。

    这一切都非常有效,除非在特定情况下,原始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 个答案:

答案 0 :(得分:5)

ArrayIsDefined(array, elementIndex)ArrayLen(array)

  

似乎效率低下?

你需要编码你需要编码的代码,忘记低效率。在你快速获得它之前(在需要时)正确使用它。

答案 1 :(得分:1)

我想如果你正在寻找另一种方法(不是每次都检查数组长度,虽然这听起来对我来说真的不好),你可以在try / catch中包装每一行插入尝试块。如果失败,则将失败的行填入缓冲区(包括行号和错误消息),然后在批处理完成后将其显示给用户,这样他们就可以看到每个失败的行以及它们失败的原因。这样做的优点是:1)不必每次都明确检查数组长度,2)捕获您可能事先没有预料到的其他错误(例如,对于您的字段,值可能太长)。

相关问题