2014-11-24 6 views
2

Я добавляю данные в последнюю строку csv. Я хотел удалить существующую строку, а затем переписать ее с добавленным элементом. Есть ли способ удалить строку в csv? Я использую opencsv для чтения и записи файла. Я попытался использовать класс CSVIterator. Однако, похоже, что итератор не поддерживает операцию remove(). Вот код, который я попробовал:удалить строку в файле csv

static String[] readLastRecord(File outputCSVFile) throws WAGException { 
     checkArgument(outputCSVFile != null, "Output CSV file cannot be null"); 
     FileReader fileReader = null; 
     CSVReader csvFileReader = null; 
     CSVIterator csvIterator = null; 
     String[] csvLastRecord = null; 
     try { 
      fileReader = new FileReader(outputCSVFile); 
      csvFileReader = new CSVReader(fileReader, ',', '\'', 
        csvRowCount - 1); 
      csvIterator = new CSVIterator(csvFileReader); 
      while (csvIterator.hasNext()) { 
       csvLastRecord = csvIterator.next(); 
       csvIterator.remove(); 
      } 
     } catch (IOException ioEx) { 
      throw new WAGException(
        WAGInputExceptionMessage.FILE_READ_ERR.getMessage()); 
     } finally { 
      try { 
       if (csvFileReader != null) 
        csvFileReader.close(); 
      } catch (IOException ioEx) { 
       throw new WAGException(
         WAGInputExceptionMessage.FILE_CLOSE_ERR.getMessage()); 
      } 
     } 
     return csvLastRecord; 
    } 
+0

В API говорит, что 'удалить()' * это * поддерживается итератора: HTTP: //opencsv.sourceforge.net/apidocs/, когда вы пишете «кажется, что итератор не поддерживает операцию remove()», вы должны предоставить более подробную информацию: он не компилируется? он компилируется, но не запускается? он работает, но не делает того, что вы хотите, чтобы он делал? – alfasin

+0

Реализация на sourceforge.net говорит, что он не поддерживается .. Это итератор только для чтения. http://sourceforge.net/p/opencsv/source/ci/3ba1873ef55b014893cae73b015d2bcb55b7d5a4/tree/src/main/java/au/com/bytecode/opencsv/CSVIterator.java – user3453784

+0

В этом случае вам нужно будет прочитать все строк в структуру данных (список может быть достаточно хорош), удалите нужную строку и переопределите (перепишите) файл. – alfasin

ответ

1

я только что нашел ответ. Надеюсь, поможет.

Вы должны читать CSV, добавлять элементы в списке строки, удалить конкретную строку из нее с allelements.remove (ROWNUMBER), а затем записать строку списка обратно в файл CSV.

Номер строки: int с номером строки.

   CSVReader reader2 = new CSVReader(new FileReader(filelocation)); 
       List<String[]> allElements = reader2.readAll(); 
       allElements.remove(rowNumber); 
       FileWriter sw = new FileWriter(filelocation); 
       CSVWriter writer = new CSVWriter(sw); 
       writer.writeAll(allElements); 
       writer.close(); 

Посмотрите на этот пример из opencsv opencsv example

-1

использования в отключенном, чтобы удалить строку в файл CSV

function readCSV($csvFile){ 
    $file_handle = fopen($csvFile, 'r'); 
    while (!feof($file_handle)) { 
     $line_of_text[] = fgetcsv($file_handle, 1024); 
    } 
    fclose($file_handle); 
    return $line_of_text; 
} 

$csvFile1 = '../build/js/snowcem.csv'; 
$csv1 = readCSV($csvFile1); 
//specified row number want to delete on place of $id 
unset($csv1[$id]); 
$file = fopen("../build/js/snowcem.csv","w"); 

foreach ($csv1 as $file1) { 
    $result = []; 
    array_walk_recursive($file1, function($item) use (&$result) { 
    $item = '"'.$item.'"'; 
     $result[] = $item; 
    }); 
    fputcsv($file, $result); 
} 

fclose($file); 
Смежные вопросы