2012-01-24 71 views
2

我想創建一個製表符分隔文件輸出,我可以用它來加載到快速書。我在頭上使用以下代碼。創建制表符分隔文件

header("Content-type: text/plain"); 
header("Content-Disposition: attachment; filename=\"my-data.txt\""); 

我有兩個問題。第一個是一些內容是文本,但其中有一個逗號,(這就是爲什麼我使用製表符分隔的原因.SQL(善意地)在這些字段中放置「」,然後將其轉移到文本文件,然後therfore隨後到帳戶包我不能看到我如何勸阻SQL做這個或如何從文本文件的內容中刪除它

其次,腳本中的第一個輸出是一個echo語句然後是製表符等;然而實際的輸出在開始時包含了一個額外的行(我可以看到已經插入了ASCII 0A)我無法看到來自哪裏?

我已附加我正在使用的代碼,以防萬一我失去了一些明顯的東西。

幫助

非常感謝

<?php 
header("Content-type: text/plain"); 
header("Content-Disposition: attachment; filename=\"my-data.txt\""); 
// Open standard includes 
include ('./includes/protect.php'); //User name and password control 
require_once('Connections/Dragonnet.php'); 
mysql_select_db($database_Dragonnet, $Dragonnet); //Connect to database 
?> 

<?php 

$batch1 = $_GET["batch1"]; 
$batch2 = $_GET["batch2"]; 
$query = "SELECT invtrans.StdInvNar1 AS 'invtrans StdInvNar1', 
        invtrans.StdInvNar2 AS 'invtrans StdInvNar2', 
        invtrans.StdInvNar3 AS 'invtrans StdInvNar3', 
        invtrans.StdInvNar4 AS 'invtrans StdInvNar4', 
        invtrans.StdInvNar5 AS 'invtrans StdInvNar5', 
        invtrans.StdInvNar6 AS 'invtrans StdInvNar6', 
        invtrans.StdInvNar7 AS 'invtrans StdInvNar7', 
        invtrans.StdInvNar8 AS 'invtrans StdInvNar8', 
        invtrans.StdInvNar9 AS 'invtrans StdInvNar9', 
        invtrans.StdInvNar10 AS 'invtrans StdInvNar10', 
        invtrans.InvNar1 AS 'invtrans InvNar1', 
        invtrans.InvNar2 AS 'invtrans InvNar2', 
        invtrans.InvNar3 AS 'invtrans InvNar3', 
        invtrans.InvNar4 AS 'invtrans InvNar4', 
        invtrans.InvNar5 AS 'invtrans InvNar5', 
        invtrans.InvNar6 AS 'invtrans InvNar6', 
        invtrans.InvNar7 AS 'invtrans InvNar7', 
        invtrans.InvNar8 AS 'invtrans InvNar8', 
        invtrans.InvNar9 AS 'invtrans InvNar9', 
        invtrans.InvNar10 AS 'invtrans InvNar10', 
        invtrans.Charge AS 'invtrans Charge', 
        invtrans.Cost AS 'invtrans Cost', 
        invtrans.VATtype AS 'invtrans VATtype', 
        invtrans.VATRate AS 'invtrans VATRate', 
        invtrans.SiteName AS 'invtrans SiteName', 
        invtrans.SiteTown AS 'invtrans SiteTown', 
        invtrans.UnitPrice AS 'invtrans UnitPrice', 
        invtrans.Type AS 'invtrans Type', 
        invtrans.InvBatch AS 'invtrans InvBatch', 
        invoiceheaders.Name AS 'invoiceheaders Name', 
        invoiceheaders.Addr1 AS 'invoiceheaders Addr1', 
        invoiceheaders.Addr2 AS 'invoiceheaders Addr2', 
        invoiceheaders.Addr3 AS 'invoiceheaders Addr3', 
        invoiceheaders.Town AS 'invoiceheaders Town', 
        invoiceheaders.County AS 'invoiceheaders County', 
        invoiceheaders.Country AS 'invoiceheaders Country', 
        invoiceheaders.PostCode AS 'invoiceheaders PostCode', 
        invoiceheaders.EMail AS 'invoiceheaders EMail', 
        invoiceheaders.Fax AS 'invoiceheaders Fax', 
        invoiceheaders.InvNo AS 'invoiceheaders InvNo', 
        invoiceheaders.InvDate AS 'invoiceheaders InvDate', 
        invoiceheaders.InvType AS 'invoiceheaders InvType', 
        invoiceheaders.DelType AS 'invoiceheaders DelType' 
FROM (invtrans invtrans 
    INNER JOIN invoiceheaders invoiceheaders ON (invoiceheaders.InvNo = invtrans.InvNumber)) 
WHERE 
(
    invtrans.InvBatch = "."'".$batch1."'"." OR invtrans.InvBatch = "."'".$batch2."'".") 
ORDER BY invoiceheaders.InvNo 

"; 

$result = mysql_query($query) or die(mysql_error()); 

//Create Headers 

    echo "Customer Ref"; 
    echo chr(9); 
    echo "Account Ref"; 
    echo chr(9); 
    echo "TxnDate"; 
    echo chr(9); 
    echo "Invoice No"; 
    echo chr(9); 
    echo "BillingAddress1"; 
    echo chr(9); 
    echo "BillingAddress2"; 
    echo chr(9); 
    echo "BillingAddress3"; 
    echo chr(9); 
    echo "BillingAddressTown"; 
    echo chr(9); 
    echo "BillingAddressCounty"; 
    echo chr(9); 
    echo "BillingAddressCountry"; 
    echo chr(9); 
    echo "BillingAddressPostcode"; 
    echo chr(9); 
    echo "Phone"; 
    echo chr(9); 
    echo "Fax"; 
    echo chr(9); 
    echo "email"; 
    echo chr(9); 
    echo "Description"; 
    echo chr(9); 
    echo "Rate"; 
    echo chr(9); 
    echo "UnitOfMeasure"; 
    echo chr(9); 
    echo "SalesTaxCode"; 
    echo chr(9); 
    echo "Amount"; 
    echo chr(9); 
    echo chr(13); 

while($row = mysql_fetch_array($result)) 

    { 
    //create variables 
    $description = $row['invtrans StdInvNar1']." ".$row['invtrans StdInvNar2']." ".$row['invtrans StdInvNar3']." ".$row['invtrans StdInvNar4']." ".$row['invtrans StdInvNar5']." ".$row['invtrans StdInvNar6']." ".$row['invtrans StdInvNar7']." ".$row['invtrans StdInvNar8']." ".$row['invtrans StdInvNar9']." ".$row['invtrans StdInvNar10']; 
    $description = $description." ".$row['invtrans InvNar1']." ".$row['invtrans InvNar2']." ".$row['invtrans InvNar3']." ".$row['invtrans InvNar4']." ".$row['invtrans InvNar5']." ".$row['invtrans InvNar6']." ".$row['invtrans InvNar7']." ".$row['invtrans InvNar8']." ".$row['invtrans InvNar9']." ".$row['invtrans InvNar10']; 


    //output file 
    echo $row['invoiceheaders Name']; 
    echo chr(9); 
    echo "Account Ref"; 
    echo chr(9); 
    echo $row['invoiceheaders InvDate']; 
    echo chr(9); 
    echo $row['invoiceheaders InvNo']; 
    echo chr(9); 
    echo $row['invoiceheaders Addr1']; 
    echo chr(9); 
    echo $row['invoiceheaders Addr2']; 
    echo chr(9); 
    echo $row['invoiceheaders Addr3']; 
    echo chr(9); 
    echo $row['invoiceheaders Town']; 
    echo chr(9); 
    echo $row['invoiceheaders County']; 
    echo chr(9); 
    echo $row['invoiceheaders Country']; 
    echo chr(9); 
    echo $row['invoiceheaders PostCode']; 
    echo chr(9); 
    echo "01212331234"; 
    echo chr(9); 
    echo $row['invoiceheaders Fax']; 
    echo chr(9); 
    echo $row['invoiceheaders EMail']; 
    echo chr(9); 
    echo $description; 
    echo chr(9); 
    echo $row['invtrans Charge']; 
    echo chr(9); 
    echo "UnitOfMeasure"; 
    echo chr(9); 
    echo "SalesTaxCode"; 
    echo chr(9); 
    echo $row['invtrans Charge']; 
    echo chr(9); 
    echo chr(13); 
    } 

?> 

回答

8

使用內置fputcsv()功能用「\ t」的分離ratherthan試圖「滾你自己的」

1

不同字符集讀取標籤不同。此外,選項卡可以在空格(以及空格數[3/4])和選項卡之間切換,具體取決於用於創建它們的IDE。

你需要選擇一個不同的分隔符......我可以建議一個管道'|'因爲它不會在英文或HTML中使用,因此它可能會被拾取並作爲特殊字符清除。

+0

隨着你所勾勒出的,我很驚訝,製表符分隔的文件已經使用了這麼多年沒有人意識到每個人 –

+0

通知這麼多的應用程序的問題,這就是爲什麼所有主要的應用程序不用它。我沒有提到它有可能會起作用,而且您可能會找到一種方法來定期獲取它,但這是假定文件創建和發送和接收的兩個方面都是完美的。 – Relic

+0

所有主要應用? Excel提供它作爲導入/導出選項(這是導入字符分隔文件的默認字符)...這是一個相當重要的應用程序,同樣是Quickbooks(否則OP將不需要它)......空格的數量是隻與固定列寬的文件相關,而不是以製表符或逗號分隔 –

2

首先,製表符分隔的文件工作得很好。我幾乎每天都會使用它們。與逗號分隔的文件相比,它們更容易處理,因爲有太多數據在其中有註釋(例如,姓,名和街道地址)。

你正在插入你的換行符而沒有意識到它。 從此標籤的所有內容?>到此標籤?php被髮送到瀏覽器。有你的換行符。

至於額外的引號,請使用trim語句。

echo trim($row['invtrans Charge']); 
相關問題