【问题标题】:we are getting .txt file but not getting proper alignment我们正在获取 .txt 文件,但没有正确对齐
【发布时间】:2010-05-19 15:21:09
【问题描述】:

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

【问题讨论】:

  • 更正您的链接,它们无法访问。

标签: php import alignment text-files


【解决方案1】:

您需要使用制表符 (\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】:

    您需要打印一个"\t"(制表符)而不是三个连接的空格。

    像这样

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

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

    【讨论】:

      【解决方案3】:

      您似乎所做的只是在每个字段的末尾附加三个空格。也许你应该做的更像是:

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

      【讨论】:

        【解决方案4】:

        嗯,你正在将 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”部分。

        编辑:当然,这里提到的“制表符”解决方案也可以,但前提是你的字符串在一列中的长度之间的差异不会超过一个制表符。 “substr(..., 14)”- 方法也可以工作,但前提是没有字符串长度超过 14 个字符...

        【讨论】:

        • 不错的形式downvoating。当然这不是完整的解决方案,这就是为什么我写道:“你需要找出...”
        • 好的,那么您的评论是“指出缺陷”,我的编辑是“挖掘其他答案”。嗯,好吧......随便:)
        • 足够公平的论点。我会清除我的 cmets(即使我指出了 response 对你的挖掘的缺陷)。但我仍然不会对竞争性答案投反对票,除非它们非常糟糕。
        猜你喜欢
        • 2020-05-13
        • 1970-01-01
        • 2022-01-16
        • 2015-05-04
        • 2019-08-24
        • 2019-12-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多