2010-05-19 8 views
0

we are getting the following texfile_screenshot1.JPG when we are exporting data to .txt filenous obtenons Txt mais pas obtenir un bon alignement

we need output which is shown in texfile_screenshot2.JPG

suivant est le code

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

vos liens ne fonctionnent pas ... –

+0

corrigez vos liens, ils sont inaccessibles . –

Répondre

0

Vous devez imprimer un "\t" (onglet) au lieu de trois espaces concaténés.

Comme si

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

EDIT: Cela peut ne pas toujours bien, si votre la différence de longueur des chaînes sont plus d'un onglet. Si vous créez un fichier délimité par des tabulations, cela fonctionnera. Si vous voulez une sorte de colonne vue ce n'est pas une bonne approche .. (une autre édition, paxdiablos réponse est meilleure pour la deuxième méthode.)

0

Vous devez utiliser les onglets (\ t) au lieu des espaces pour obtenir la colonne -comme alignement

Voici votre exemple mis à jour

$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

Tout ce que vous semblez faire est de trois espaces à annexant la fin de chaque champ. Peut-être que vous devriez faire quelque chose comme:

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

En d'autres termes, assurez-vous que le champ est de 14 caractères ou plus, la troncature à 14.

Ou mieux encore, utiliser les installations printf:

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

En fait, votre segment entier pourrait être comprimé à quelque chose comme:

$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

Eh bien, vous écrivez uname1, password1 et email1 dans un fichier, séparés par trois espaces (et pour quelle raison, trois espaces de plus à la fin de chaque ligne).

Utilisez str_repeat pour ajouter autant de cases que vous avez besoin: http://php.net/manual/de/function.str-repeat.php

Comme ceci:

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

Vous devez savoir $ longest_uname, $ longest_password, $ longest_email d'abord par votre itérer tableau et trouver la chaîne la plus longue pour chacune de vos colonnes.

Si vous n'avez pas besoin de remplir la dernière colonne avec des espaces, vous pouvez ignorer la partie "longest_email".

EDIT: Bien sûr, les solutions "tab" mentionnées ici fonctionneront aussi, mais seulement si la différence entre les longueurs de vos chaînes dans une colonne ne dépasse pas une tabulation. Aussi la méthode "substr (..., 14)" fonctionnera, mais seulement si aucune chaîne ne dépasse 14 caractères ...

+0

Belle forme de réduction. Bien sûr, ce n'est pas la solution * entière *, c'est pourquoi j'ai écrit: "Vous aurez besoin de savoir ..." – Select0r

+0

Ok, alors votre commentaire est" soulignant les failles ", mon EDIT est" creuser à d'autres réponses "Mmh, ok ... peu importe :) – Select0r

+0

Argument juste.Je vais effacer mes commentaires (même si je l'ai souligné Mais je ne refuse toujours pas les réponses concurrentes à moins qu'elles ne soient terriblement mauvaises. – paxdiablo

Questions connexes