如何验证csv文件?

Rac*_*hel 12 php csv

我们如何验证CSV文件?

我有一个结构的CSV文件:

Date;Id;Shown
15-Mar-10;231;345
15-Mar-10;232;346
and so on and on !!! approx around 80,000 rows. 
Run Code Online (Sandbox Code Playgroud)

如何在开始使用解析之前验证此CSV文件fgetcsv

Pas*_*TIN 22

我不会尝试先验证文件:我宁愿一行一行地处理它,分别处理每一行:

  • 读一行
  • 验证它没关系
  • 使用数据
  • 然后去下一行.


现在,什么可以"验证它没关系"意味着什么?

  • 至少有:确保我可以读取该行,CSV,跟一般的功能集(也许fgetcsv,也许具体到我的项目的一些其他功能-无论如何,如果我不能看我的函数读取数百一条线,这可能是因为那条线上有问题)
  • 然后,检查字段数
  • 然后,对于每个字段,检查它是否包含" 有效 "数据
    • 强制性?期权?
    • 数字?
    • 串?
    • 约会?
    • 等等
  • 然后,对于每个领域,进行一些更仔细的检查
    • 例如,对于"代码"字段:它是否对应于对我的应用程序合法的值?

如果一切顺利 - 好吧,没有更多的事要做,除了使用数据;-)
当你完成一行时,只需重复下一行.


当然,如果你想在做任何数据库(或类似的东西)之前接受或拒绝整个文件,你必须:

  • 逐行解析文件,应用" 验证 "的想法
  • 将每行的数据存储在内存中
  • 并且,当整个文件被读入内存时,
    • 要么开始使用数据
    • 或者,如果一行出错,拒绝一切.


在您的具体情况下,您有三种字段:

Date;Id;Shown
15-Mar-10;231;345
15-Mar-10;232;346
Run Code Online (Sandbox Code Playgroud)

根据我的猜测:

  • 第一个必须是约会
    • 使用一些正则表达式来验证这并不容易:每个月的天数不一样,有很多个月,根据年份,2月份的天数不一样,......
    • 在这种情况下,我可能会尝试用类似的东西来解析日期(不确定它对你正在使用的格式是否正常)strtotime
    • 或者我只是explode字符串
      • 确保有三个部分
      • 第三个是2位数
      • 第二一个是一个Jan,Feb,Mar,...
      • 第一个对应于正确的天数,具体取决于其他两个天
  • 第二个 :
    • 必须是整数
    • 必须是数据库中存在的有效值吗?
      • 如果是这样,一个简单的SQL查询将允许您检查
  • 对于第三个,不太确定......
    • 我猜它必须是一个整数?