文本文件解析并转换为 JSON?
Text File Parsing and convert to JSON?
首先,感谢阅读本文!其次,我无法控制从中获取数据的 .txt 文件。我希望能够获取数据并将其分成完整匹配项,然后显示这些结果,然后显示即将到来的匹配项。
例如:
最近完成的比赛
W6: John Smith vs. Joe Smith, 0-0
L7: Doug Smith vs. Jason Smith, 1-2
and so on
即将到来的比赛
W1: Joan Smith vs. Bruce Smith, 0-0
W1: Jenn Smith vs. David Smith, 0-0
and so on
这是一个示例文件:https://drive.google.com/file/d/11dW2pOK-MXHGRzQhJWb37tlWMqazj8UZ/view?usp=sharing
上面的示例数据link:
<|> Most Recent Completed Matches: W6: Jason Bertolo vs. Ed Gabele, 0-0 | W6: Ed Gabele vs. Jason Bertolo, 0-0 | L7: Doug Metcalf vs. Jason Bertolo, 1-2 | L6: Tom Walsh vs. Jason Bertolo, 0-2 | L5: Jason Bertolo vs. Kevin Kronk, 2-0 | L5: Tom Walsh vs. Zach Dotson, 2-0 | L4: Kevin Kronk vs. Bruce Patete, 2-1 | L4: Zach Dotson vs. Tom Dotson, 0-0 | L3: Bruce Patete vs. Joseph Hornback, 2-0 | L3: Kevin Kronk vs. Matt Smith, 2-1 | L3: Matt Borders vs. Tom Dotson, 1-2 | L3: Zach Dotson vs. Mick Pillar, 2-0 | L2: David Mosel vs. Joseph Hornback, 0-2 | L2: Antoine Tucker vs. Matt Smith, 0-0 | L2: Tom Dotson vs. Mike Conley, 2-1 | L2: Mick Pillar vs. Hannah Fields, 2-0 | L1: Mike Minor vs. Joseph Hornback, 0-2 | L1: David Mosel vs. Tom Johnson, 2-1 | L1: Matt Smith vs. Jennifer Hamilton, 2-1 | L1: Lori Fields vs. Mike Conley, 1-2 | L1: Owen Miller vs. Tom Dotson, 1-2 | L1: Ken Kronk vs. Hannah Fields, 0-2 | W5: Ed Gabele vs. Doug Metcalf, 3-1 | W4: Doug Metcalf vs. Tom Walsh, 3-2 | W4: Jason Bertolo vs. Ed Gabele, 1-3 | W3: Tom Walsh vs. Kevin Kronk, 3-0 | W3: Bruce Patete vs. Doug Metcalf, 1-3 | W3: Ed Gabele vs. Zach Dotson, 3-1 | W3: Matt Borders vs. Jason Bertolo, 0-3 | W2: Kevin Kronk vs. Ken Kronk, 3-2 | W2: Mick Pillar vs. Tom Walsh, 2-3 | W2: Doug Metcalf vs. Owen Miller, 3-2 | W2: Lori Fields vs. Bruce Patete, 1-3 | W2: Matt Smith vs. Zach Dotson, 1-3 | W2: Antoine Tucker vs. Ed Gabele, 0-3 | W2: David Mosel vs. Jason Bertolo, 0-3 | W2: Matt Borders vs. Mike Minor, 3-1 | W1: Joseph Hornback vs. Ken Kronk, 2-3 | W1: Tom Walsh vs. Tom Johnson, 3-0 | W1: Jennifer Hamilton vs. Bruce Patete, 0-3 | W1: Zach Dotson vs. Mike Conley, 3-2 | W1: Ed Gabele vs. Tom Dotson, 3-0 | W1: Mike Minor vs. Hannah Fields, 3-1 <|> Upcoming Matches: <|>
到目前为止我试过的代码是:
<?php
$text = file_get_contents('https://drive.google.com/uc?export=download&id=11dW2pOK-MXHGRzQhJWb37tlWMqazj8UZ');
$json = (explode('|',$text));
//var_dump ($json);
//print "\n";
$trimmed = trim($text);
print_r ($trimmed);
?>
它看起来不错,但对于我的生活,我无法弄清楚现在如何简单地列出两个“|”之间的所有值字符。
关于我可以做些什么来以达到我想要的结果的方式操作此文本的任何想法?
此外,您应该知道,在实际比赛中,此数据每 60 秒就会更改一次。我不知道这是否重要,但我想我会确保您知道这些数据不是静态的。唯一不变的是 <|> 表示最近的匹配或已完成的匹配,并且结果总是在两个 | 之间。字符。
再次感谢您的宝贵时间!
这是您需要的开始。有一些方法可以使它更紧凑,但我会为了清楚起见。您应该对 preg_match 调用的结果添加错误检查,以便知道它是否由于某种原因而失败。
<?php
$text = file_get_contents('sample_data');
// The sample data has two sections,
// one for completed matches and one for upcoming matches.
// Extract the 'variable' text of these two sections:
preg_match('/^ *<\|> Most Recent Completed Matches: (.+) <\|> Upcoming Matches: (.+) <\|> *$/', $text, $reg_matches);
$completed_text = $reg_matches[1];
$upcoming_text = $reg_matches[2];
// Within the text of a section, the matches are separated by '|',
// so split the section-text on that character:
$completed_array = explode("|", $completed_text);
$upcoming_array = explode("|", $upcoming_text);
echo "\n";
echo "Most Recent Completed Matches\n";
echo "\n";
foreach ( $completed_array as $match_text )
{
echo "$match_text\n";
}
echo "\n";
echo "Upcoming Matches\n";
echo "\n";
foreach ( $upcoming_array as $match_text )
{
echo "$match_text\n";
}
?>
首先,感谢阅读本文!其次,我无法控制从中获取数据的 .txt 文件。我希望能够获取数据并将其分成完整匹配项,然后显示这些结果,然后显示即将到来的匹配项。
例如:
最近完成的比赛
W6: John Smith vs. Joe Smith, 0-0
L7: Doug Smith vs. Jason Smith, 1-2
and so on
即将到来的比赛
W1: Joan Smith vs. Bruce Smith, 0-0
W1: Jenn Smith vs. David Smith, 0-0
and so on
这是一个示例文件:https://drive.google.com/file/d/11dW2pOK-MXHGRzQhJWb37tlWMqazj8UZ/view?usp=sharing
上面的示例数据link:
<|> Most Recent Completed Matches: W6: Jason Bertolo vs. Ed Gabele, 0-0 | W6: Ed Gabele vs. Jason Bertolo, 0-0 | L7: Doug Metcalf vs. Jason Bertolo, 1-2 | L6: Tom Walsh vs. Jason Bertolo, 0-2 | L5: Jason Bertolo vs. Kevin Kronk, 2-0 | L5: Tom Walsh vs. Zach Dotson, 2-0 | L4: Kevin Kronk vs. Bruce Patete, 2-1 | L4: Zach Dotson vs. Tom Dotson, 0-0 | L3: Bruce Patete vs. Joseph Hornback, 2-0 | L3: Kevin Kronk vs. Matt Smith, 2-1 | L3: Matt Borders vs. Tom Dotson, 1-2 | L3: Zach Dotson vs. Mick Pillar, 2-0 | L2: David Mosel vs. Joseph Hornback, 0-2 | L2: Antoine Tucker vs. Matt Smith, 0-0 | L2: Tom Dotson vs. Mike Conley, 2-1 | L2: Mick Pillar vs. Hannah Fields, 2-0 | L1: Mike Minor vs. Joseph Hornback, 0-2 | L1: David Mosel vs. Tom Johnson, 2-1 | L1: Matt Smith vs. Jennifer Hamilton, 2-1 | L1: Lori Fields vs. Mike Conley, 1-2 | L1: Owen Miller vs. Tom Dotson, 1-2 | L1: Ken Kronk vs. Hannah Fields, 0-2 | W5: Ed Gabele vs. Doug Metcalf, 3-1 | W4: Doug Metcalf vs. Tom Walsh, 3-2 | W4: Jason Bertolo vs. Ed Gabele, 1-3 | W3: Tom Walsh vs. Kevin Kronk, 3-0 | W3: Bruce Patete vs. Doug Metcalf, 1-3 | W3: Ed Gabele vs. Zach Dotson, 3-1 | W3: Matt Borders vs. Jason Bertolo, 0-3 | W2: Kevin Kronk vs. Ken Kronk, 3-2 | W2: Mick Pillar vs. Tom Walsh, 2-3 | W2: Doug Metcalf vs. Owen Miller, 3-2 | W2: Lori Fields vs. Bruce Patete, 1-3 | W2: Matt Smith vs. Zach Dotson, 1-3 | W2: Antoine Tucker vs. Ed Gabele, 0-3 | W2: David Mosel vs. Jason Bertolo, 0-3 | W2: Matt Borders vs. Mike Minor, 3-1 | W1: Joseph Hornback vs. Ken Kronk, 2-3 | W1: Tom Walsh vs. Tom Johnson, 3-0 | W1: Jennifer Hamilton vs. Bruce Patete, 0-3 | W1: Zach Dotson vs. Mike Conley, 3-2 | W1: Ed Gabele vs. Tom Dotson, 3-0 | W1: Mike Minor vs. Hannah Fields, 3-1 <|> Upcoming Matches: <|>
到目前为止我试过的代码是:
<?php
$text = file_get_contents('https://drive.google.com/uc?export=download&id=11dW2pOK-MXHGRzQhJWb37tlWMqazj8UZ');
$json = (explode('|',$text));
//var_dump ($json);
//print "\n";
$trimmed = trim($text);
print_r ($trimmed);
?>
它看起来不错,但对于我的生活,我无法弄清楚现在如何简单地列出两个“|”之间的所有值字符。
关于我可以做些什么来以达到我想要的结果的方式操作此文本的任何想法?
此外,您应该知道,在实际比赛中,此数据每 60 秒就会更改一次。我不知道这是否重要,但我想我会确保您知道这些数据不是静态的。唯一不变的是 <|> 表示最近的匹配或已完成的匹配,并且结果总是在两个 | 之间。字符。
再次感谢您的宝贵时间!
这是您需要的开始。有一些方法可以使它更紧凑,但我会为了清楚起见。您应该对 preg_match 调用的结果添加错误检查,以便知道它是否由于某种原因而失败。
<?php
$text = file_get_contents('sample_data');
// The sample data has two sections,
// one for completed matches and one for upcoming matches.
// Extract the 'variable' text of these two sections:
preg_match('/^ *<\|> Most Recent Completed Matches: (.+) <\|> Upcoming Matches: (.+) <\|> *$/', $text, $reg_matches);
$completed_text = $reg_matches[1];
$upcoming_text = $reg_matches[2];
// Within the text of a section, the matches are separated by '|',
// so split the section-text on that character:
$completed_array = explode("|", $completed_text);
$upcoming_array = explode("|", $upcoming_text);
echo "\n";
echo "Most Recent Completed Matches\n";
echo "\n";
foreach ( $completed_array as $match_text )
{
echo "$match_text\n";
}
echo "\n";
echo "Upcoming Matches\n";
echo "\n";
foreach ( $upcoming_array as $match_text )
{
echo "$match_text\n";
}
?>