2012-05-09 29 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);