【问题标题】:How do you convert a CSV file into a 2D array in Java or C++如何在 Java 或 C++ 中将 CSV 文件转换为二维数组
【发布时间】:2013-05-09 03:47:19
【问题描述】:

我的问题标题没有完全概括我的问题。我有一个文本文件,其中包含多行数据,每行采用以下格式:

a, 日期, b, c, d, 用户名, e, 描述

a、b、c、d 和 e 不需要用于任何事情。

注意事项:

  • 日期采用这种格式 -> 2013-04-07T22:23:58Z(不需要“T22:23:58Z”)
  • 描述是登录、注销或扩展
  • 相同的用户名会在整个文件中多次出现

我需要编写一个代码,从文本文件中获取数据,并输出用户当天延长了哪些用户以及延长了多少次。

文本文件示例:

a,2013-04-07T22:23:58Z,b,c,d,约翰,扩展 a,2013-04-07T22:23:51Z,b,c,d,约翰,登录 a,2013-07-07T22:23:51Z,b,c,d,约翰,扩展 a,2013-04-07T22:23:58Z,b,c,d,标记,扩展 a,2013-03-07T22:23:51Z,b,c,d,坦率,登录 一个,2013-07-11T22:23:51Z,b,c,d,约翰,扩展

示例输出:

2013-04-07: 约翰-> 1 扩展 标记 -> 1 扩展 2013-07-07: 约翰-> 1 扩展 2013-07-11: 约翰-> 1 扩展

谁能给我解释一下,或者更好地告诉我如何做到这一点?

【问题讨论】:

标签: java c++ arrays csv


【解决方案1】:

不是你真正需要的语言,但这是 awk 中的一个解决方案 :)

#!/bin/awk
BEGIN {
  FS=",";
}
/extend/{
    split($2,date,"T");
    dates[date[1],$6]++;
}
END {
  last = ""
  n = asorti(dates, dest)
  for (i = 1; i <= n; i++) {
    split(dest[i], idx, SUBSEP)
    if ( last != idx[1]) {
      last = idx[1]
      print "\n"idx[1]
    }
    print idx[2] " -> " dates[idx[1], idx[2]] " extend"
  }
}

【讨论】:

    【解决方案2】:

    另一种解决方案不是您所需的语言.. PHP ;)

    <?php
    
    $handle = fopen("php://stdin", "r");
    $dates = array();
    
    while (!feof($handle)) { 
        $data = explode(',', stream_get_line($handle, 200, "\n"));
        if (trim($data[6])=='extend') {
          @$dates[strstr($data[1], 'T', true)][$data[5]]++;
        }
    } 
    
    arsort($dates);
    
    foreach ($dates as $date => $users) {
      echo $date;
    
      foreach ($users as $user => $times)
        echo "\n$user -> $times extend";
    
      echo '\n\n';
    }
    
    ?>
    

    在控制台中这样使用:./script.php

    【讨论】:

      猜你喜欢
      • 2020-10-04
      • 2015-05-28
      • 2015-06-02
      • 1970-01-01
      • 2021-03-11
      • 2016-09-24
      • 1970-01-01
      • 1970-01-01
      • 2012-03-08
      相关资源
      最近更新 更多