мы получаем файл .txt, но не выравниваем - PullRequest
0 голосов
/ 19 мая 2010

мы получаем следующее texfile_screenshot1.JPG при экспорте данных в файл .txt

нам нужен вывод, который показан в 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 голосов
/ 19 мая 2010

Итак, вы записываете 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".

РЕДАКТИРОВАТЬ: Конечно, упомянутые здесь "tab" -разрешения тоже будут работать, но только если разница между длинами ваших строк в одном столбце не будет превышать одну вкладку. Также будет работать метод «substr (..., 14)», но только если строка не длиннее 14 символов ...

0 голосов
/ 19 мая 2010

Вам нужно использовать табуляцию (\ 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);
0 голосов
/ 19 мая 2010

Все, что вы делаете, - это добавление трех пробелов в конец каждого поля. Возможно, вам следует заняться чем-то вроде:

$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);
0 голосов
/ 19 мая 2010

Вам нужно напечатать "\t" (табуляцию) вместо трех объединенных пробелов.

Вроде так

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

РЕДАКТИРОВАТЬ: Это может не всегда работать, хотя, если разница в длине строк больше, чем одна вкладка. Если вы создаете файл с разделителями табуляции, это будет работать. Если вам нужен какой-то вид столбца, это не очень хороший подход ... (другое редактирование; ответ paxdiablos лучше для второго метода)

...