【问题标题】:sscanf and white-space problemssscanf 和空白问题
【发布时间】:2012-02-15 01:29:23
【问题描述】:

我真的很生气,希望你能帮我解决一个问题。

风景。

一个 php 文件读取文本文件中的一些数据并填充一个 mysql 数据库。 为此,我使用了“sscanf”函数,一切运行良好……但并非总是如此! 由于部分文本数据文件格式略有差异,导致数据库中的字段填写错误。

这是一个例子:

这是数据文件.txt的通用行:

...
<name:4>John <country:3>USA <age:2>20
...

要读取文件中的数据并填充 MyQSL 数据库,我使用函数 sscanf 后跟特定参数,如下例所示:

 $values = sscanf ($s, "<name:%d>%s ", $length,$personal_data['name']);
 $values = sscanf ($s, "<country:%d>%s ", $length,$personal_data['country']);
 $values = sscanf ($s, "<age:%d>%s ", $length,$personal_data['age']);

这些参数没问题,MyQSL 数据库填充正确;每个字段都有它的数据。姓名 -> “约翰” - 国家 -> “美国” - 年龄“20”

不幸的是,包含我的数据的文本文件有点不同,即使使用相同的格式。 这是另一个例子:

 <name:4>John<country:3>USA<age:2>20

在这种情况下,之前使用的具有相同参数的 sscanf 函数会出错。数据库中的所有字段都有错误的数据。这是因为源文件 (.txt) 中每个字段的末尾没有空格 数据库将以这种方式填充 NAME -> "John "ry:3>USA" - AGE"

所以我必须修改sscanf参数如下:

 $values = sscanf ($s, "<name:%d>%s<", $length,$personal_data['name']);
 $values = sscanf ($s, "<country:%d>%s<", $length,$personal_data['country']);
 $values = sscanf ($s, "<age:%d>%s<", $length,$personal_data['age']);

一切又好了。

问题是空白。在某些 .txt 文件中存在于每个字段之后,而在其他文件中则没有。您可以注意到 %s 参数后的差异(在一种情况下是空格,在另一种情况下是

我该如何解决这个问题?有没有办法告诉 sscanf 在文本源文件中每个字段都以空格或

提前致谢,马修

【问题讨论】:

    标签: php mysql scanf


    【解决方案1】:

    我目前没有安装 PHP,所以我无法测试这个答案,但您可以使用带有 preg_split() 的正则表达式拆分该字符串。

    例子:

    $str = '<name:4>John<country:3>USA<age:2>20';
    $values = preg_split('/<[a-z]+:\d>/', $str);
    

    $data 将是一个包含每个字段值的数组。

    PHP - preg_split()

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-02
      • 2019-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-21
      相关资源
      最近更新 更多