我们得到.txt文件,但没有得到正确的对齐

时间:2010-05-19 07:02:33

标签: php import alignment text-files

we are getting the following texfile_screenshot1.JPG when we are exporting data to .txt file

we need output which is shown in texfile_screenshot2.JPG

以下是代码

$myFile = "user_password.txt";
     $fh = fopen($myFile, 'a') or die("can't open file");
     $newline ="\r\n";
     fwrite ($fh,$newline);

      $stringData1 = $_POST['uname1']." "." "." " ;
      fwrite($fh, $stringData1);

      $stringData1 =$_POST['password1']." "." "." ";
      fwrite($fh,$stringData1);

  $stringData1 = $_POST['email1']." "." "." ";
      fwrite($fh, $stringData1);

 fclose($fh);

4 个答案:

答案 0 :(得分:0)

您需要打印"\t"(标签)而不是三个连接空格。

喜欢这样

$stringData1 = $_POST['uname1']."\t";
fwrite($fh, $stringData1);

编辑:如果您的字符串长度差异超过一个标签,这可能并不总是有效。如果您正在创建制表符分隔文件,这将有效。如果你想要某种列视图,这不是一个好方法..(另一个编辑;对于第二种方法,paxdiablos答案更好。)

答案 1 :(得分:0)

您需要使用制表符(\ t)而不是空格来获得类似列的对齐

以下是您更新的示例

  $myFile = "user_password.txt";
  $fh = fopen($myFile, 'a') or die("can't open file");
  $newline ="\r\n";
  fwrite ($fh,$newline);

  $stringData1 = $_POST['uname1']."\t" ;
  fwrite($fh, $stringData1);

  $stringData1 =$_POST['password1']."\t";
  fwrite($fh,$stringData1);

  $stringData1 = $_POST['email1']."\t";
  fwrite($fh, $stringData1);

  fclose($fh);

答案 2 :(得分:0)

您似乎正在做的是在每个字段的末尾添加三个空格。也许你应该做更多的事情:

$stringData1 = substr($_POST['uname1'] . "              ",0,14) . " ";
fwrite($fh, $stringData1);

换句话说,确保该字段为14个字符或更多,将其截断为14。

或者更好的是,使用printf工具:

fprintf ($fh, "%-14s ", $_POST['uname1']);

事实上,您的整个细分可以压缩为:

$myFile = "user_password.txt";
$fh = fopen($myFile, 'a') or die("can't open file");
fprintf ($fh, "\r\n%14s %14s %14s",  $_POST['uname1'], $_POST['password1'],
    $_POST['email1']);
fclose($fh);

答案 3 :(得分:0)

好吧,你将uname1,password1和email1写入一个文件,用三个空格分隔(并且出于什么原因,每行末尾还有三个空格)。

使用str_repeat根据需要添加任意数量的空格:http://php.net/manual/de/function.str-repeat.php

像这样:

$stringData1 = $POST['uname1'] . str_repeat(" ", $longest_uname - strlen($POST['uname1']) + 1);
fwrite($fh, $stringData1);
$stringData1 = $POST['password1'] . str_repeat(" ", $longest_password - strlen($POST['password1']) + 1);
fwrite($fh, $stringData1);
$stringData1 = $POST['email1'] . str_repeat(" ", $longest_email - strlen($POST['email1']) + 1);
fwrite($fh, $stringData1);

您需要先查找$ longest_uname,$ longest_password,$ longest_email,方法是遍历数组并找到每列最长的字符串。

如果您不需要使用空格右边填充最后一列,则可以跳过“longest_email”-part。

编辑:当然,此处提到的“标签”解决方案也可以使用,但前提是一列中字符串长度之间的差异不会超过一个标签。此外,“substr(...,14)” - 方法也可以,但是只有当字符串不超过14个字符时...