2

本質的に動的なmysql dbフィールドを使用して、phpでテキストファイルを作成しています。列の幅をそのまま維持することができません。以下のデータと列を参照して、私の意味をよりよく理解してください。

テキストファイル出力:

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

列の 1 つの値が 0 の場合、IF 条件のためにスペースが削除されます。このような状況では、スペースを計算して余分なスペースを与えるにはどうすればよいですか。

IF 条件で値の 1 つが 0 の場合のテキスト ファイル出力:

                450 90900           112
              90900 45875 24565 15484          KA01 23232
4

2 に答える 2

0

タブストップ ("\t") を使用します。これにより、異なる行の各アイテムが同じ列で始まることが保証されます。

これは、アイテムが 2 文字の長さで 4 つのスペース タブを埋めることができない場合、2 つの空白が追加されることを意味します。

心に留めておいてください: エディタによってタブの概念が異なります。通常、タブの代わりにスペースを挿入するエディタもあります。

編集:実際には、より簡単な解決策は、else 句を使用して str_pad("", 20); と記述することです。

于 2012-05-09T05:07:05.943 に答える
0

あなたのコードは非常にビジーです。「0」を 1 か所で処理できる関数を使用してすべてを集中化してみてください。以下のようなもの (このコードはテストされていませんが、正しい考えが得られるはずです。

$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);
于 2012-05-09T05:36:21.517 に答える