如何在CSV或C ++中将CSV文件转换为2D数组

时间:2013-05-14 18:03:24

标签: java c++ arrays csv

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

a, date, b, c, d, Username, e, Description

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

注意:

  • 日期采用此格式 - > 2013-04-07T22:23:58Z(不需要“T22:23:58Z”)
  • 说明可以是登录,退出或扩展
  • 相同的用户名将在整个文件中多次显示

我需要编写一个代码来获取文本文件中的数据,然后输出当天用户扩展的次数和次数。

文本文件示例:

a,2013-04-07T22:23:58Z,b,c,d,john,extend
a,2013-04-07T22:23:51Z,b,c,d,john,login
a,2013-07-07T22:23:51Z,b,c,d,john,extend
a,2013-04-07T22:23:58Z,b,c,d,mark,extend
a,2013-03-07T22:23:51Z,b,c,d,frank,login
a,2013-07-11T22:23:51Z,b,c,d,john,extend

示例输出:

2013-04-07:
john -> 1 extend
mark -> 1 extend

2013-07-07:
john -> 1 extend

2013-07-11:
john -> 1 extend

有人可以向我解释,或者更好地告诉我如何做到这一点?

2 个答案:

答案 0 :(得分:0)

不是您真正需要的语言,但这是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"
  }
}

答案 1 :(得分:0)

和另一种不是您所需语言的解决方案.. 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&lt; input.txt中