2016-09-20 7 views
1

ich eine Textdatei aus unserer Banking-Software erzeugt haben, die wie folgt aussieht:PHP lesen Textdatei mit Säule

The Text File Looks like this

Dies ist mein Code, um die Textdatei Inhalt Zeile für Zeile zu drucken:

<?php 
$myFile = "20151231.txt"; 


$lines = file($myFile); 
foreach ($lines as $line_num) { 
    echo htmlspecialchars($line_num)."<br>"; 
} 

Er druckt wie folgt aus:

But it prints like this

Ich möchte nur jede Zeile, die mit:

====> 

Ich will alles andere gelöscht.

Ich habe viel versucht, aber nicht Zeilen mit den Spalten getrennt gedruckt, wie es in der Textdatei Bild aussieht. Diese

ist, wie ich jede Zeile zu drucken möchten:

====>0518 Intt on Consumer Loan   401010707         108,149.00 

Ihre Unterstützung in Bezug auf diese wird sehr geschätzt.

+0

haben Sie gemeinsam mit einem If Block versuchen innen um zu überprüfen, ob die Zeile mit ===> beginnt? – dubes

+0

Ich stellte meinen Code oben @ Sasikumar – Rashel

+0

Nein, ich habe nicht @ dubes – Rashel

Antwort

1

Sie können es als Tabelle drucken:

<?php 
$myFile = "20151231.txt"; 
$lines = file($myFile); 
echo '<table>'; 
foreach ($lines as $line_num) { 
    if (strpos($line_num, '====>') !== false) { 
     $str = trim(htmlspecialchars($line_num)); 
     echo '<tr>'; 
     echo '<td>' . getColumnText("/====>\d+/", $str) .'</td>'; 
     echo '<td>' . getColumnText("/\s([a-zA-Z\s]+)/", $str) .'</td>'; 
     $secondCol = getColumnText("/\s([0-9]+)/", $str); 
     echo '<td>' . $secondCol .'</td>'; 
     $thirdCol = end(explode(" ", $str)); 
     if (trim($secondCol) === $thirdCol) { 
      echo '<td style="text-align:right">' . str_repeat(" ", 10) .'</td>'; 
     } else { 
      echo '<td style="text-align:right">' . str_repeat(" ", 10) . $thirdCol .'</td>'; 
     } 
     echo '</tr>'; 
    } 
} 
echo '</table>'; 

function getColumnText($pattern, $str) { 
    preg_match($pattern, $str, $matches); 
    return trim(current($matches)); 
} 
+0

Es trennt jedes Wort. Aber ich wollte, dass die Spalten getrennt werden. Und es löscht nicht die anderen Zeilen, die ich nicht möchte – Rashel

+0

So sieht es jetzt aus: http://imgur.com/krQrMo1 – Rashel

+0

@Rashel Ich habe meine Antwort aktualisiert –

0

ja können Sie tun, mit strpos oder regularexpression und ich nur Code schreibe mit strpos

<?php $myFile = "text.txt"; 


$lines = file($myFile); 
echo '<table cellspacing="20">'; 
$linenum = 1; 
foreach ($lines as $line_num) { 
    echo '<tr>'; 
    // check whether line conatain ====>, if you want to check starting of line then just put 0 instead of false in following condition 
    if(strpos($line_num,'====>')!==false) 
    { 
     $texts= substr($line_num, strpos($line_num,'====>')+5); 
     $textarr = explode(" ", $texts); 
     echo '<td>'.$linenum.'</td>'; 
     foreach($textarr as $arr) 
     { 
      echo '<td>'.$arr.'</td>'; 
     } 
     $linenum++; 

     //print_r($textarr); 
     //echo htmlspecialchars($line_num)."<br>"; 

    } 

} 
echo '<table>'; 
+0

Es zeigt "Undefinierte Variable: line_num" – Rashel

+0

ich nur meine Antwort aktualisieren .. Eigentlich habe ich vergessen foreach zu haben –

+0

Ja, das druckt nun die Zeilen die ich will und löscht alles andere. Aber die Spalten sind nicht getrennt. Ich meine, wenn es Spalten zwischen den Spalten gäbe, wäre es besser. Ich meine, zuerst die Zeilennummer, dann eine kleine Lücke, dann die Beschreibung, dann eine etwas größere Lücke etc. würde es besser aussehen beim Drucken – Rashel