PHP 文件解析--行中最后一项的问题

PHP file parse--problems with last item in row

我在服务器上有一个从数据库导出生成的文本文件。我无法控制那个文件。我试图在 PHP 中解析它以获取一些数据以显示在网页上。当我尝试搜索一行中的最后一项时,它找不到。

这是文本文件的一部分:

ERMHDR  8.2 2017-02-02  Project admin   Primavera Admin dbxDatabaseNoName   Project Management  USD
%T  CURRTYPE
%F  curr_id decimal_digit_cnt   curr_symbol decimal_symbol  digit_group_symbol  pos_curr_fmt_type   neg_curr_fmt_type   curr_type   curr_short_name group_digit_cnt base_exch_rate
%R  1   2   $   .   ,   #1.1    (#1.1)  Dollar  USD 3   1
%R  10  2   $   .   ,   #1.1    (#1.1)  Argentine Peso  ARS 3   3.077
%R  11  2   A$  .   ,   #1.1    (#1.1)  Australian Dollar   AUST    3   1.208
%R  13  2   R$  .   ,   #1.1    (#1.1)  Brazilian Real  BRL 3   2.014
%R  14  2   £   .   ,   #1.1    (#1.1)  British Pound   U.K.    3   0.501762
%R  15  2   CA$ .   ,   #1.1    (#1.1)  Canadian Dollar CAD 3   1.10573
%R  16  2   Y   .   ,   #1.1    (#1.1)  Chinese Yuan    CNY 3   7.694
%R  17  2   €   .   ,   #1.1    (#1.1)  EURO    EUR 3   0.739088
%R  20  2   HK$ .   ,   #1.1    (#1.1)  Hong Kong Dollar    HKD 3   7.81967
%R  21  2   Rs  .   ,   #1.1    (#1.1)  Indian Rupee    INR 3   40.67
%R  23  2   ¥   .   ,   #1.1    (#1.1)  Japanese Yen    JPY 3   120.167
%R  24  2   K   .   ,   #1.1    (#1.1)  Korean Won  KRW 3   924.743
%R  25  2   N$  .   ,   #1.1    (#1.1)  Mexican Peso    MXN 3   10.7938
%R  26  2   R   .   ,   #1.1    (#1.1)  Russian Rouble  RUB 3   25.8085
%R  28  2   Sk  .   ,   #1.1    (#1.1)  Swedish Krona   SEK 3   6.80579
%R  29  2   kr  .   ,   #1.1    (#1.1)  Swiss Franc CHF 3   1.21864
%R  30  2   NIS .   ,   #1.1    (#1.1)  Israel Shekel   ILS 3   3.96384

这非常有效。它找到第二个值为“10”且行号为 returns 的行。

<?php
    $txt_file    = file_get_contents('sandbox/uploads/sample3.xer');
    $rows        = explode("\n", $txt_file);
    array_shift($rows);

    foreach($rows as $row => $data)
    {
        $row_data = explode("\t", $data);

        if($row_data[1] == "10"){ //THIS IS THE LINE GIVING ME PROBLEMS
            echo 'Row #: ';
            echo $row;
            echo '     ';
            echo $row_data[1];
            echo '<br>';
        }
    }
?>

但是,如果我将指示的行更改为此,它不起作用。

if($row_data[1] == "CURRTYPE"){

我认为问题是当我展开文件时,我不知何故在每一行的末尾放置了一个特殊字符,我需要在我的 if 语句中包含该字符,但我无法弄清楚那个特殊字符是什么字符是。我试过添加 space, \n, \t.

有人能帮忙吗???

尝试用文件读取。这会将每一行变成一个数组。 我在你的文本部分试过了,得到了所有的行。 并使用 explode(' ', THE LINE YOU WANT); 将为您提供该行中的每个单词

$test_file = file('sample3.xer');
$line_4 = $test_file[4];
$string_line = explode(' ', $line_4);
foreach ($string_line as $k => $v) {
if (!empty($v)) echo $v.'<br>';
}

使用 trim 删除字符串开头或结尾的任何其他字符(例如空格)。

if (strcasecmp(trim($row_data[1]), 'currtype') === 0)