首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP:上传文本文件并对文件内容进行处理

PHP:上传文本文件并对文件内容进行处理
EN

Stack Overflow用户
提问于 2011-08-05 08:34:59
回答 4查看 1.6K关注 0票数 1

我有一个文本文件,其中包含数据/字段,这些数据/字段由确切的列no分隔。每一行新的数据表示新的一行数据。

文件内容示例:

约翰周星驰26 543大道

从上面的内容来看,前10列是表示名称的。接下来的两个是为了年龄。剩下的是地址。

我需要将这些数据从上传的文件中分离出来,并将其显示在格式化的表中,该表将在用户确认后插入到数据库中。

我是PHP新手。我认为substr可以工作。

请指导我怎么做。我使用的是PHP代码点火器,但是普通PHP中的基本步骤就可以了。谢谢

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-08-05 08:43:56

读取文件的每一行,并使用substr或正则表达式解析这些行:

代码语言:javascript
复制
$data = array();
$h = fopen($uploadedfile,"r");
while (false !== ($line = fgets($h)))
{
    /* substring way: */
    $data[] = array(
        'name' => trim(substr($line,0,10)),
        'age' => intval(sbstr($line,10,2),10),
        'address' => trim(substr($line,12))
    );

    /* regular expression way: */
    preg_match("'^(.{10})(.{2})(.*)$'",$line,$n);
    $data[] = array(
        'name' => trim($n[1]),
        'age' => intval($n[2],10),
        'address' => trim($n3)
    );
}
fclose($h);

然后迭代$data数组,以表形式显示它。

编辑:您在评论中要求的内容也可以使用正则表达式来完成。如果$val是解析的10个字符串,那么:

代码语言:javascript
复制
$val = preg_replace("'^0*'","",$val);

将取代所有领先的0

票数 2
EN

Stack Overflow用户

发布于 2011-08-05 08:41:00

是的,你应该使用substr。这提取了字符串的一部分。类似于:

代码语言:javascript
复制
$name = trim(substr($line, 0, 10));
$age = trim(substr($line, 10, 2));
$addr = trim(substr($line, 12));

我增加了剪裁以删除任何额外的空格。

票数 1
EN

Stack Overflow用户

发布于 2011-08-05 08:44:46

嗯,我建议你不要使用substr,因为人的名字并不总是相同的长度,所以这会造成一些问题。我认为explodeimplode函数会为您带来更好的效果,它们将字符串拆分为数组并返回。

http://php.net/manual/en/function.explode.php

http://www.php.net/manual/en/function.implode.php

代码语言:javascript
复制
<?PHP

$str = "John Chow 26 543 Avenue Street";
$data = explode(" ", $str);

$first_name = $data[0];
$last_name = $data[1];
$age = $data[2];

$address = implode(" ", array_slice($data, 3));

?>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6953529

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档