sscanf和白空间问题

时间:2012-02-15 01:29:23

标签: php mysql scanf

我真的因为一个问题而生气,我希望你可以帮我解决。

场景。

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数据库填充正确;每个字段都有自己的数据。 NAME - &gt; “约翰” - 国家 - &gt; “美国” - 年龄“20”

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

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

在这种情况下,使用之前使用的相同参数的sscanf函数运行错误。数据库中的所有字段都有错误的数据。这是因为源文件(.txt)中每个字段的末尾没有空格。 将以这种方式填充数据库NAME - &gt; “John”ry:3&gt; 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参数之后的差异(在一个案例中后跟一个空格,在其他情况下是&lt;在其他情况下)。

我该如何解决这个问题?有没有办法告诉sscanf在文本源文件中每个字段以空格或<&lt;空格结尾? ?? 有什么建议吗?想法?

提前谢谢,Mattew

1 个答案:

答案 0 :(得分:0)

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

示例:

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

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

PHP - preg_split()