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)
我在服务器上有一个从数据库导出生成的文本文件。我无法控制那个文件。我试图在 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)