我需要一个建议。解析文本文件
我需要剪切和解析文本文件(使用货币汇率)。下面我们就从这个文件中的小片段:
c057z110323
h057z110323
a057z110323
b012z110323
c058z110324
h058z110324
a058z110324
c059z110325
h059z110325
a059z110325
c060z110328
h060z110328
a060z110328
c061z110329
h061z110329
a061z110329
c062z110330
h062z110330
a062z110330
b013z110330
c063z110331
h063z110331
a063z110331
c064z110401
h064z110401
a064z110401
c065z110404
h065z110404
a065z110404
c066z110405
h066z110405
a066z110405
c067z110406
h067z110406
a067z110406
b014z110406
c068z110407
h068z110407
a068z110407
c069z110408
h069z110408
a069z110408
正如你可以看到有很多线路(在原文件大约有行80000(被添加每天几行)
字符串格式如下:
A000112233
where
A - type
000 - number of the file (created this year)
11 - year
22 - month
33 - day
我用下面的代码片段获得25个最新行从文件:
$file = "http://www.nbp.pl/kursy/xml/dir.txt";
$data = file($file);
$count = count($data);
for($i = $count - 25; $i < $count; $i++)
{
if(substr($data[$i], 0, 1) === 'a')
{
$latest[] = $data[$i];
}
}
我只需要得到以“a”开头的行。输出数组看起来如下:
array(8) {
[0]=>
string(13) "a062z110330
"
[1]=>
string(13) "a063z110331
"
[2]=>
string(13) "a064z110401
"
[3]=>
string(13) "a065z110404
"
[4]=>
string(13) "a066z110405
"
[5]=>
string(13) "a067z110406
"
[6]=>
string(13) "a068z110407
"
[7]=>
string(13) "a069z110408
"
}
现在我需要每个数组元素比较当前日期前得到最新的工作日的最新项目。我正在使用这种方式:
$i = 1;
foreach($latest as $row)
{
$plural = ($i > 1) ? 's' : null;
if(substr(trim($row), -6) === date("ymd", strtotime("-" . $i . " day" . $plural))
{
$filename = $row;
break;
}
$i++;
}
它的工作相当好,但我面临一个大问题。我无法对$latest
数组按最近的六个字符排序。我尝试使用sort(),rsort()来做到这一点。他们没有一个对我有好处。
任何人都可以帮助我解决这个问题,或者有更好的方法来做我正在寻找的东西。