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

问题描述 投票:0回答:2

我在服务器上有一个通过数据库导出生成的文本文件。我无法控制该文件。我试图在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”的行并返回行号。

<?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语句中包括该字符,但是我无法弄清楚那个特殊字符是什么。我尝试添加一个空格,\ n,\ t。

任何人都可以帮忙吗?

php parsing explode
2个回答
0
投票

尝试与文件一起阅读。这会将每一行变成一个数组。我在您的文字部分尝试过并得到所有行。


0
投票

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

if (strcasecmp(trim($row_data[1]), 'currtype') === 0)
热门问题
推荐问题
最新问题