在PHP中解析逗号分隔文件,然后添加到DB

时间:2011-05-13 19:01:45

标签: php mysql explode

这可能是一个难度,所以你得到奖励积分!

这是.TXT文件而不是CSV

我正在尝试将以下逗号分隔的文件解析为可读表,然后将所有内容导入到我的表中。这是我得到的信息:

这是我从中导入的“模板”。 (这是文件中的第一行):

    "Public/Private","Record Manager","Company","Contact","Address 1","Address 2","Address 3","City","State","Zip","Country","ID/Status","Phone","Fax","Home Phone","Mobile Phone","Pager","Salutation","Last Meeting","Last Reach","Last Attempt","Letter Date","Title","Assistant","Last Results","Referred By","User 1","User 2","User 3","User 4","User 5","User 6","User 7","User 8","User 9","User 10","User 11","User 12","User 13","User 14","User 15","Home Address 1","Home Address 2","Home City","Home State","Home Zip","Home Country","Alt Phone","2nd Contact","2nd Title","2nd Phone","3rd Contact","3rd Title","3rd Phone","First Name","Last Name","Phone Ext.","Fax Ext.","Alt Phone Ext.","2nd Phone Ext.","3rd Phone Ext.","Asst. Title","Asst. Phone","Asst. Phone Ext.","Department","Spouse","Record Creator","Owner","2nd Last Reach","3rd Last Reach","Web Site","Ticker Symbol","Create Date","Edit Date","Merge Date","E-mail Login","E-mail System"

以下是某人通常会输入的示例:

    "Public","John Doe”,"Einstein Construction","Bill Gates","3441 State Route 1","","","Somecity","CA","15212","","","724-555-2135","","","","","Jill","","4/18/2011","11/23/2009","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Bill","Gregor","235","","","","","","","","","","Tom Jones","SuperMart","","","www.website.com","","11/14/2009","4/19/2011","","",""

这是我在数据库(MySQL)中的字段:(显然没有美元符号。)

        $rep 
        $date 
        $account 
        $areacode 
        $number 
        $address1 
        $address2 
        $city 
        $state 
        $zip 
        $country 
        $fax 
        $descmaker1 
        $descmaker2 
        $title 
        $email 
        $cvendor 
        $cequipment 
        $leaseexp1 
        $leaseexp2
        $leaseexp3 
        $leaseexp4 
        $leaseexp5
        $leaseexp6 
        $volume
        $notes  
                    $lastchange

这就是我需要它们映射到的地方..(右边的我的字段,左边的文件)

                   Record Manager -> $rep 
(record manager i'd rather use our variable which is = $session->userinfo['fullname']
        Create Date -> $date (can the "/" be removed so its MMDDYYYY)
        Company -> $account 
        Phone (can you explode the areacode off?) -> $areacode 
        Phone (and put the number after the areacode here?)-> $number 
        Address 1 -> $address1 
        Address 2 -> $address2 
        City -> $city 
        State -> $state 
        Zip -> $zip 
        Country -> $country 
        Fax -> $fax 
        Salutation -> $descmaker1 
        $descmaker2 
        Title -> $title 
        Email Login -> $email 
                    Edit Date -> $lastchange

我现在所拥有的(真的不起作用)如下。它显示了大量混乱的数据。

    <?php


$a = file_get_contents( "upload/contacts.txt" );
$a = str_replace( array( "\r\n", "\t") , array( "[NEW*LINE]" , "[tAbul*Ator]" ) , $a);

print "<table border=\"1\">";
foreach( explode( "[NEW*LINE]" , $a ) AS $lines){
echo "<tr>";
foreach( explode( "[tAbul*Ator]" , $lines ) AS $li ) {
echo "<td>";
echo $li ;
}
echo "</tr>";

}

echo "</table>";


?>

3 个答案:

答案 0 :(得分:4)

$file = fopen('mass-parse.txt', 'r');

while ($line = fgets($file)) {
    list(   $rep, $date, $account, $areacode, $number,
            $address1, $address2, $city, $state, $zip, $country,
            $fax, $descmaker1, $descmaker2, $title, $email,
            $cvendor, $cequipment, $leaseexp1, $le, $leaseexp3, $leaseexp4, $leaseexp5, $leaseexp6,
            $volume, $notes, $lastchange) = explode(',', str_replace('"','',$line));

    // do stuff with variables 
}

答案 1 :(得分:2)

要读取CSV文件(它是一个,不管.txt扩展名),您可以使用此代码段而不是繁琐的手动阅读和拆分:

$csv = array_map("str_getcsv", file("upload/contacts.txt"));

此外,你可能想调查LOAD DATA INFILE,因为MySQL通常可以直接导入这些数据结构。

LOAD DATA INFILE 'upload/contacts.txt'
INTO TABLE contacts
(rep, date, account, areacode, number, address1, city, ...)

(您必须注意将文件中的出现与正确的数据库列名匹配!)

答案 2 :(得分:1)

要使用php解析csv数据文件,请参阅http://php.net/manual/en/function.fgetcsv.php