开发者

PHP: uploading a text file and processing on the file content

I have a text file containing data/fields which are separated by exact column no. Each new line represents a new row of data.

Example of file content:

John Chow 26 543 Avenue Street

From the above, first 10 columns are for the name. Next two are for age. And the rest are for the address.

I need to segregate those data from the uploaded file and display it to the user in a formatted table, which will later on be inserted into the database upon confirmation by user.

I am new to PHP. I think substr could work.

Please guide me on how t开发者_JS百科o go about it. I am using codeigniter with PHP, but basic steps in plain PHP will do. Thanks


Read every line of the file, and parse the lines with either substr or regular expression:

$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);

Then iterate the $data array to display it in a table form.

Edit: what you ask in the comments can be done also with regular expressions. If $val is the parsed 10 character string, then:

$val = preg_replace("'^0*'","",$val);

would replace all leading 0s.


Yes, you should be using substr. This extracts part of the string. Something like:

$name = trim(substr($line, 0, 10));
$age = trim(substr($line, 10, 2));
$addr = trim(substr($line, 12));

I've added trim to remove any extra whitespace.


Umm I suggest you don't use substr, because peoples names are not always going to be the same length so this will create some problems. I think the explode and implode functions would do the trick better for you, they split a string into an array and back.

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

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

<?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));

?>


You can use a regexp:

if (preg_match('/(.{10})(.{2})(.{12})/', $input, $output)) {
  var_dump($output);
}
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜