我试图将一些制表符分隔的数据转换为我可以使用的更好的格式。 JSON会很棒。制表符分隔的数据到JSON
数据例子是在这里:http://www.nlaa.ca/results/rr/2013/20130728tely10results.php
我已经下载了全部数据,并每年在它自己的文本文件。从那里,我将它们拼凑起来,并将它们运行成为一个foreach并逐行阅读它们。像这样:
// Grab all the .txt files
foreach (glob('src-data/*.txt') as $filename) {
$handle = fopen($filename, 'r');
if ($handle) {
// run line by line through the files
while (($line = fgets($handle)) !== false) {
// grab the fields
$clean = preg_split("/ +/", $line);
从这里,我希望把所有的线在一个巨大的关联数组:
// All the fields
$position = $clean[1];
$name = $clean[3] . " " . $clean[4];
$time = $clean[5];
$class = $clean[6];
$class_place = $clean[7];
$runners['position'] = $position;
$runners['name'] = $name;
$runners['time'] = $time;
$runners['class'] = $class;
$runners['class place'] = $class_place;
这八九不离十工作,但它仅创建每个.txt文件的一个数组我有。
当我做print_r($runners);
我得到两个数组 - 一个用于我在该目录中的两个示例.txt文件中的每一个。
我想将每个新行都推送到我的$runners[]
数组中,因为我循环它。
我在这里的最终目标是创建一个大JSON文件,我可以在路上使用Js。我认为只要运行json_encode($runners)
就可以工作,如果我能得到$runners
的工作,但感谢任何建议。谢谢!
下面是完整的代码,我使用的,只是要确定:
<?php
$runners = [];
// Grab all the .txt files
foreach (glob('src-data/*.txt') as $filename) {
$handle = fopen($filename, 'r');
if ($handle) {
// run line by line through the files
while (($line = fgets($handle)) !== false) {
// grab the fields
$clean = preg_split("/ +/", $line);
// All the fields
$position = $clean[1];
$name = $clean[3] . " " . $clean[4];
$time = $clean[5];
$class = $clean[6];
$class_place = $clean[7];
$runners['position'] = $position;
$runners['name'] = $name;
$runners['time'] = $time;
$runners['class'] = $class;
$runners['class place'] = $class_place;
$runners[] = $clean;
}
print_r($runners);
// write to json file
$jsonwrite = fopen('runners.json', 'w');
fwrite($jsonwrite, json_encode($runners));
fclose($jsonwrite);
fclose($handle);
} else {
echo "Error opening file";
}
}
?>
为什么不使用fgetcsv()代替手动解析原始数据行?您可以非常轻松地自定义分隔符。 –
谢谢马克 - 我给了这个快速尝试,但似乎并没有太多。所有列在它们之间具有不同数量的空格。也许fgetcsv()可以以某种方式处理。我会谷歌!谢谢 – saltcod