dongrong3171 2017-06-07 13:49
浏览 75
已采纳

解析csv,其中最后一个“标题”后跟一个空格

I'm trying to parse csv using str_getcsv in the following manner however I'm running into two problems (below).

$url = 'http://my.events.calendar/api/csv?mycalendarquery';
$response = wp_remote_get($url);
$response_body = $response['body']; // this is a really long string
$parsed_string = str_getcsv($response_body, ',', '"');
$full_events_array = array_chunk($parsed_string, 11);

Problem 1 - I can't use explode because one of the fields in the csv is "Description" which contains many/lengthy prose descriptions of events. Naturally these include commas, new lines, returns, etc...

Problem 2 - This is the one I have a question about. The categories (headers?) for the csv file are "Subject", "Date", (more things here...) "Description", "Calendar Address". However the last one doesn't have a comma after it. So, the entries for "Subject" and "Calendar" address are being combined like this -

array(11) {
  [0] =>
  string(32) "Calendar Address
  "Application Due"" // this pattern happens for every event but with a url instead.
// Yes, I know this looks wrong in the code block, but this is exactly how the data is coming in (complete with the double quotes).

How do I parse this so that Calendar Address and Application Due are separated?

For reference, I've also tried str_getcsv($response_body, '"', ','); str_getcsv($response_body, ',', '"', ' '); and several other combinations. Thanks for the help!

  • 写回答

1条回答 默认 最新

  • dongyiyu882684 2017-06-08 23:23
    关注

    This script will read the CSV file into 251 rows of 12 elements each.

    <?php // demo/temp_44414553.php
    /**
     * https://stackoverflow.com/questions/44414553/parsing-csv-where-the-last-header-is-followed-by-a-space?noredirect=1#comment75830321_44414553
     */
    error_reporting(E_ALL);
    
    // UNABLE TO ACCESS: http://events.uconn.edu/exports-2017-05-31-2017-07-01.csv
    // COPY MADE HERE FROM THE DOWNLOAD LINK
    $url = 'storage/exports-2017-05-31-2017-07-01.csv';
    $csv = file_get_contents($url);
    echo $csv;
    
    $fpr = fopen($url, 'r');
    if (!$fpr) trigger_error("Unable to open $url", E_USER_ERROR);
    
    $kount = 0;
    while (!feof($fpr))
    {
        $row = fgetcsv($fpr);
        $kount++;
        if (!$row) break;
        echo PHP_EOL . count($row);
    }
    
    echo PHP_EOL . "There are $kount rows in the CSV at $url";
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复
  • ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
  • ¥15 绘制多分类任务的roc曲线时只画出了一类的roc,其它的auc显示为nan
  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
  • ¥15 错误 LNK2001 无法解析的外部符号
  • ¥50 安装pyaudiokits失败
  • ¥15 计组这些题应该咋做呀
  • ¥60 更换迈创SOL6M4AE卡的时候,驱动要重新装才能使用,怎么解决?