2016-09-20 2 views
1

У меня есть текстовый файл, созданный из нашего банковского программного обеспечения, которое выглядит следующим образом:PHP Чтение текстовых файлов с колонкой Отдельно

The Text File Looks like this

Это мой код, чтобы напечатать строку содержимого текстового файла построчно:

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


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

Он печатает так:

But it prints like this

Я просто хочу каждую строку, которая начинается с:

====> 

Я хочу, чтобы все остальное удалить.

Я пробовал много, но не смог напечатать строки с разделенными столбцами, поскольку он выглядит в текстовом файле.

Это, как я хочу каждую строку печати:

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

Ваша помощь относительно этого будет высоко оценен.

+0

вы пытались с блоком If внутри foreach проверить, начинается ли строка с ===>? – dubes

+0

Я поставил свой код выше @ Sasikumar – Rashel

+0

Нет, я не @ dubes – Rashel

ответ

1

Вы можете распечатать его в виде таблицы:

<?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

Он отделяет каждое слово. Но я хотел, чтобы столбцы были разделены. И он не удаляет другие строки, которые я не хочу – Rashel

+0

Вот как это выглядит сейчас: http://imgur.com/krQrMo1 – Rashel

+0

@ Rashel Я обновил свой ответ –

0

да, вы можете сделать это с strpos или regularexpression и я просто пишу код, используя 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

Он показывает «Неопределенная переменная: line_num» – Rashel

+0

Я просто обновляю свой ответ .. на самом деле я забыл иметь foreach –

+0

Да, теперь это печатает строки, которые я хочу, и удалял все остальное. Но столбцы не разделены. Я имею в виду, если бы между колоннами были пробелы, было бы лучше. Я имею в виду, сначала номер строки, затем небольшой пробел, затем описание, затем немного больший пробел и т. Д., Помогли бы ему выглядеть лучше при печати. ​​ – Rashel