2012-05-09 28 views
2

我正在寫一個文本文件與PHP使用mysql數據庫字段,這是本質上的動態。我無法保持列寬完好無損,請參閱下面的數據和列以更好地瞭解我的意思。PHP使用動態數據從MYSQL問題創建文本文件

文本文件輸出:以上

   450 65445 90900 87954   112 
       90900 45875 24565 15484   KA01 23232 

php腳本:現在

$myFile = "testFile.txt"; 
$fh = fopen($myFile, 'w') or die("can't open file"); 

if ($quer2[DCNO1]>0){fwrite($fh, str_pad($quer2[DCNO1],19, " ", STR_PAD_LEFT));} if ($quer2[DCNO2]>0) {fwrite($fh, str_pad($quer2[DCNO2],6, " ", STR_PAD_LEFT));} if ($quer2[DCNO3]>0) {fwrite($fh, str_pad($quer2[DCNO3],6, " ", STR_PAD_LEFT));} if ($quer2[DCNO4]>0) {fwrite($fh, str_pad($quer2[DCNO4],6, " ", STR_PAD_LEFT));} 
fwrite($fh, str_pad($dchd2['PO_No'],13, " ", STR_PAD_LEFT)); 
$stringData = "\n"; 
fwrite($fh, $stringData); 

if ($quer2[DCNO5]>0) {fwrite($fh, str_pad($quer2[DCNO5],19, " ", STR_PAD_LEFT));} if ($quer2[DCNO6]>0) {fwrite($fh, str_pad($quer2[DCNO6],6, " ", STR_PAD_LEFT));} if ($quer2[DCNO7]>0) {fwrite($fh, str_pad($quer2[DCNO7],6, " ", STR_PAD_LEFT));} if ($quer2[DCNO8]>0) {fwrite($fh, str_pad($quer2[DCNO8],6, " ", STR_PAD_LEFT));} 
fwrite($fh, str_pad($dchd2['Vehicle_no'],20, " ", STR_PAD_LEFT)); 
$stringData = "\n"; 
fwrite($fh, $stringData); 

fclose($fh); 

如果列一個值是0,則空間變的,因爲我的IF條件去掉,在這樣的一種情況,我如何計算空間並給予這些額外的空間。

文本文件輸出,如果值中的一個在我的IF條件是0:

   450 90900   112 
       90900 45875 24565 15484   KA01 23232 
+0

[嘗試這種] [1]
str_pad(「」,20);也工作正常,但嘗試聯繫也 [1]:http://stackoverflow.com/questions/10460298/how-to-write-fixed-width-text-file-with-php-and-mysql-data?answertab=active#頂部 – jayanthan

回答

0

使用製表符( 「\ t」 的)。它確保不同行上的每個項目在相同的列上開始。

這意味着當物品的長度爲2個字符並且無法填充4個空格標籤時,會添加2個空格。請記住:不同的編輯對製表符有不同的概念,有些編輯器通常插入空格而不是製表符。

編輯:實際上更簡單的解決方案將是有一個else子句和寫str_pad(「」,20);

+0

嗯,你仍然有同樣的問題,只是8的倍數。 –

+0

是的,你是對的,他只是沒有在每個代碼執行路徑中一致地使用它,因此存在問題 –

+0

@LukaRamishvili the else option is a賭注ter選項。它工作正常。非常感謝。 – user1114409

0

你的代碼非常繁忙,嘗試通過一個函數來集中它,你可以在一個地方處理'0'。像下面的(此代碼的東西還沒有被測試,但應該給你正確的想法

$myFile = "testFile.txt"; 
$fh = fopen($myFile, 'w') or die("can't open file"); 

function writepad($str,$pad) 
{ 
    global $fh; 
    if($str==0) $str=" "; //handle the case where str is 0, replace it with a space 
    fwrite($fh,str_pad($str,$pad,STR_PAD_LEFT)); 
} 
writepad($quer2[DCNO1],19); 
writepad($quer2[DCNO2],6); 
writepad($quer2[DCNO3],6); 
writepad($quer2[DCNO4],6); 
writepad($quer2['PO_No'],13); 

fwrite($fh, "\n"); 

writepad($quer2[DCNO5],19); 
writepad($quer2[DCNO6],6); 
writepad($quer2[DCNO7],6); 
writepad($quer2[DCNO8],6); 
writepad($quer2['Vehicle_no'],20); 

fwrite($fh, "\n"); 

fclose($fh);