Java CSV file Manipulation - PullRequest
       8

Java CSV file Manipulation

1 голос
/ 15 мая 2011

У меня есть следующий образец CSV-файла

rc,u,s,ui,gh
m,1,8,0,12
n,3,0,0,7
d,1,1,8,0

Я хочу прочитать этот CSV-файл и получить столбец по его имени (например, s).вычитать извлеченный столбец из некоторых значений и обновлять этот столбец в файле CSV.

Есть ли простой способ сделать это в Java?

Ответы [ 5 ]

0 голосов
/ 20 ноября 2017

Вы можете использовать JEzCSV для чтения или записи файла CSV, можете ли вы прочитать код, с открытым исходным кодом

0 голосов
/ 15 мая 2011

В PHP вы можете попробовать что-то вроде этого:

<code><?php
function csv2PhpArray($sFile,$sSeparator = ';'){
$arrCsv;
$arrCsvKeys;
$i = 0;
    if (($handle = fopen($sFile, "r")) !== false) {
        while (($arrRow = fgetcsv($handle, 1000, $sSeparator)) !== false) {
            //Each row
            $nLenRow = count($arrRow);
            for ($j=0; $j < $nLenRow; $j++) {
                if($i==0){
                    $arrCsvKeys[] = $arrRow[$j];
                }else{
                    $arrCsv[$arrCsvKeys[$j]][] = $arrRow[$j];
                }
            }
            if($i==0) $i++;
        }
        fclose($handle);
    }
    return $arrCsv;
}
function updateCsv($arrCsv,$sFile,$sSeparator = ';'){
    $arrCsvKeys = array_keys($arrCsv);
    $i = 0;
    $nMaxKeys = count($arrCsvKeys);
    $nMax  = count($arrCsv[$arrCsvKeys['0']]);
    $arrInput;
    for($k=0;$k<$nMaxKeys;$k++){
        $arrInput[$i][$k] = $arrCsvKeys[$k];
    }
    for($j=0;$j<$nMax;$j++){
        $i++;
        for($k=0;$k<$nMaxKeys;$k++){
            $arrInput[$i][$k] = $arrCsv[$arrCsvKeys[$k]][$j];
        }
    }

    $nMax  = count($arrInput);
    $fp = fopen($sFile, 'w');
    for($i=0;$i<$nMax;$i++){
        fputcsv($fp, $arrInput[$i]);
    }

    fclose($fp);
}

$arrCsv = csv2PhpArray('file.csv',';');
echo '<pre>';
var_dump($arrCsv);
echo '
'; $ nMax = count ($ arrCsv ['s']); для ($ I = 0; $ г <$ Nmax; $ я ++) { $ arrCsv ['s'] [$ i] = intval ($ arrCsv ['s'] [$ i]) + 10; } echo '<pre>'; var_dump($arrCsv); echo ''; updateCsv ($ arrCsv, 'file2.csv', ';'); echo '
';
var_dump(csv2PhpArray('file2.csv',';'));
echo '
'; ?>

Я положил два файла (file.csv и file2.csv), чтобы увидеть результаты обновления.

Я вижу, вы меняете ответ только на java, но я надеюсь, что это поможет вам.

0 голосов
/ 15 мая 2011
String line;
BufferedReader br = new BufferedReader(new FileReader("path_to_your_file"));

while ((line = br.readLine()) != null) { 
       StringTokenizer tokenizer = new StringTokenizer(line, ",");

       while(tokenizer.hasMoreTokens()) {
              String token = tokenizer.nextToken(); 
       } 
}

Таким образом, вы можете получить токены через запятую. Сделайте с ними что хотите, а затем посмотрите на класс BufferedWriter для сохранения значений.

0 голосов
/ 15 мая 2011

Насколько я знаю, «легкого» способа сделать это не существует, по крайней мере, с помощью стандартного Java API. Цикл, вероятно, будет единственным вариантом здесь.

Однако существуют другие языки, которые делают подобные вещи относительно простыми. R (свободно доступный и открытый исходный код) - отличный язык для манипулирования данными.

0 голосов
/ 15 мая 2011

Это довольно просто в PHP, вы можете использовать функцию fgetcsv http://php.net/manual/en/function.fgetcsv.php

Добавленный образец

    <?php

    $inHandle= fopen("input.csv", "r");

    $text = "";
    $someVar = array(1, 2, 3, 4);           // for subtracting 1 from col1 2 from col2 ...

    while ( ( $data = fgetcsv($inHandle) ) !== FALSE) 
    {
    $text  = $text  . $data[0];

    for ($i= 1; $i < count($data);  $i++) 
    {

        if($i==0)
            $text =  $text .  $data[$i] . ", ";
        else
            $text =  $text .  ( $data[$i] - $someVar[$i -1] ) . " , ";
    }
       $text =  $text . " \n";
    }

    fclose($inHandle);

    $outHandle = fopen('output.csv', 'w');

    fwrite($outHandle , $text );

    fclose($outHandle );
    ?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...