Javascript 从未格式化的CSV文件中提取数据

Javascript 从未格式化的CSV文件中提取数据,javascript,php,Javascript,Php,我只想在网页上显示some.csv中的某些部分。 我使用了下面的代码来显示整行,但看起来不太好 some.csv "1","[('1012', 5), ('1046', 5), ('1052', 5), ('1056', 4.9910199299984184), ('1030', 4.8534167927670344), ('1040', 4.8212814442619543), ('1035', 4.7661155679960796), ('1034', 4.6870279945429703)

我只想在网页上显示some.csv中的某些部分。 我使用了下面的代码来显示整行,但看起来不太好

some.csv

"1","[('1012', 5), ('1046', 5), ('1052', 5), ('1056', 4.9910199299984184), ('1030', 4.8534167927670344), ('1040', 4.8212814442619543), ('1035', 4.7661155679960796), ('1034', 4.6870279945429703), ('1042', 4.5541209598953358), ('1027', 4.5151900893812948)]"

"2","[('1049', 5), ('1016', 4.6133266327772251), ('1010', 4.5357481760897569), ('1046', 4.3349671883556038), ('1050', 4.3227509505599846), ('1037', 4.2902806273386966), ('1041', 4.2507193844291828), ('1053', 4.0984615265310147), ('1009', 4.098439317076469), ('1030', 4.0)]"

"3","[('1012', 4.9811840834706604), ('1016', 4.8312378650104533), ('1041', 4.7528923569042405), ('1049', 4.5049427949269853), ('1050', 4.3853256507131384), ('1045', 4.1598878939000565), ('1005', 4.1014830595313585), ('1022', 4.0958233778390403), ('1054', 4.0854105427315339), ('1024', 4.061922071985868)]"
code.php

<?php
    $f = fopen("C://xampp/htdocs/Game/python/some.csv", "r");
    $i = 0;
    while (($line = fgetcsv($f)) !== false) {
        $i++;
            echo "<tr>";
            foreach ($line as $cell) {
                if($i==1)
                    echo "<td>" . htmlspecialchars($cell) . "</td>";
            }
            echo "</tr>\n";
    }
    fclose($f);
?>

问题是,
fgetcsv
生成的数组中的第二个元素看起来像Python代码。可以使用正则表达式从每个元组中提取第一个元素

while (($line = fgetcsv($f)) !== false) {
    preg_match_all("/'(\d+)'/", $line[1], $matches);

    echo '<tr>';
    foreach ($matches[1] as $number) {
        echo "<td>$number</td>";
    }
    echo '</tr>';
}
while(($line=fgetcsv($f))!==false){
preg_match_all(“/”(\d+)“/”,$line[1],$matches);
回声';
foreach($matches[1]作为$number){
回显“$number”;
}
回声';
}
如果CSV是由Python脚本生成的,那么最好修改该脚本,使其只输出CSV文件中所需的数值,或者以PHP可以直接处理的格式输出结果,如


我不确定您想要如何将结果格式化为一个表,所以我在猜测这一部分,但是一旦您在数组中获得这些数字,您应该能够对其执行任何需要的操作。

问题是,
fgetcsv
生成的数组中的第二个元素看起来像Python代码。可以使用正则表达式从每个元组中提取第一个元素

while (($line = fgetcsv($f)) !== false) {
    preg_match_all("/'(\d+)'/", $line[1], $matches);

    echo '<tr>';
    foreach ($matches[1] as $number) {
        echo "<td>$number</td>";
    }
    echo '</tr>';
}
while(($line=fgetcsv($f))!==false){
preg_match_all(“/”(\d+)“/”,$line[1],$matches);
回声';
foreach($matches[1]作为$number){
回显“$number”;
}
回声';
}
如果CSV是由Python脚本生成的,那么最好修改该脚本,使其只输出CSV文件中所需的数值,或者以PHP可以直接处理的格式输出结果,如


我不确定您想要如何将结果格式化为一个表,所以我在猜测这一部分,但是一旦您在数组中获得这些数字,您应该能够对其执行任何需要的操作。

PHP将像这样解析CSV:
array(“1”),“[('1012',5),('1046',5),('1052',5),('1056',4.991019929998484),('1030',4.8534167927670344),('1040',4.8212814442619543),('1035',4.7661155679960796),('1034',4.6870279945429703),('1042',4.5541209598953358),('1027',4.51511900893812948)]”,
,因此“转储第一个元素很容易,但转储另一个元素很困难,我会在字符串中循环并在撇号之间剪切所有数字(')。最好的解决方案是,如果你能得到一个合适的CSV作为源,那么现在输出是什么样子的?因此,你知道php正在输出表元素,但你不想要一个表,你只想要一行逗号分隔的值?他想要每行上的第一个元素line@LudovitMydla 1[('1012', 5), ('1046', 5), ('1052', 5), ('1056',4.9910199299984184),('1030',4.8534167927670344),('1040',4.8212814442619543),('1035',4.7661155679960796),('1034',4.6870279945429703),('1042',4.5541209598953358),('1027',4.51511900893812948)]PHP将像这样解析CSV:
数组(“1”,“[('1012',5),('1046',5),('1052',4189994),('41994),(',('1030',4.8534167927670344),('1040',4.8212814442619543),('1035',4.7661155679960796),('1034',4.6870279945429703),('1042',4.5541209598953358),('1027',4.51511900893812948)]”,
,因此“转储第一个元素很容易,但转储另一个元素很困难,我会在字符串中循环并在撇号之间剪切所有数字(')。最好的解决方案是,如果你能得到一个合适的CSV作为源,那么现在输出是什么样子的?因此,你知道php正在输出表元素,但你不想要一个表,你只想要一行逗号分隔的值?他想要每行上的第一个元素line@LudovitMydla 1[('1012', 5), ('1046', 5), ('1052', 5), ('1056', 4.9910199299984184), ('1030', 4.8534167927670344), ('1040', 4.8212814442619543), ('1035', 4.7661155679960796), ('1034', 4.6870279945429703), ('1042', 4.5541209598953358), ('1027', 4.5151900893812948)]您忘记了标记,否则它将无法正确显示,应该在while构造之外,但是这应该是aceptedanswer@Geomorillo我没有忘记。我也遗漏了其他部分,打开/关闭文件等。我只是想展示如何处理这些行,并认为它们可以从那里运行。我假设表t上面的代码给出的输出是这样的:“10121046105210561030104010351034104210271049101610101046101010461050105010371041105310091030”@ajay你是想把10121046等数字都放在一个单独的单元格里,还是作为CSV放在一个单独的单元格里?@Don't你忘了吗标记或它不能正确显示的标记应该在while构造之外,但是这应该是aceptedanswer@Geomorillo我没有忘记。我也遗漏了其他部分,打开/关闭文件等。我只是想展示如何处理这些行,并认为它们可以从那里运行。我假设表、tbody和wOP在这里没有提供的代码中已经包含了其他任何数字。上面的代码给出了如下输出:“101210461052105610301040103510341042102710491016101010461050105010371041105310091030”@ajay您希望10121046等数字都在单独的单元格中,还是作为CSV在单独的单元格中?@Don'tPanic单独的单元格中