2017-06-19 8 views
0

OpenCSVを使用して1つのCSVファイルから読み込もうとしています。次に、入力csvからすべてのデータをコピーし、別のcsvファイルに出力して、新しい列に情報を追加したいとします。OpenCSV - 列を追加中に1つのcsvファイルを別のファイルにコピーする

 String element [] = null; 
     while((element = reader.readNext()) != null){ 
      ArrayList list = new ArrayList(Arrays.asList(reader)); 
      list.add(element); 
      list.add("JSON"); 
      writer.writeNext(element); 
     } 

これは正しくすべての行を印刷しないが、それはただのコピー:

public void run_streets_tsv(String tsvIn, String tsvOut) throws Exception 
{ 

    CSVReader reader = null; 
    CSVWriter writer = null; 

    try 
    { 

     reader = new CSVReader((new FileReader(tsvIn))); 
     writer = new CSVWriter(new FileWriter(tsvOut), '\t'); 

     String element [] = null; 
     List<String[]> a = new ArrayList<String[]>(); 

     while((element = reader.readNext()) != null){ 
      for(int i = 0; i<element.length; i++){ 
       a.add(i, element); 
       //a.add("JSON"); need to add this json element at the end of each column 
      } 
     } 
     writer.writeAll(a); 
    } 
    catch(Exception e) 
    { 
     throw e; 
     } 
    finally 
    { 
     reader.close(); 
     writer.close(); 
     } 
    } 

私がしようとしているもう一つの方法は、この(whileループを変え、他のすべてのコードが同じまま)のようなものです。その余分な "JSON"列にデータを追加したいと思います。

答えて

0

以下は、element -Arrayを1つ「拡大」し、新しく作成された最後のインデックスに何かを配置できるようにします。次に、その配列を保存します。

import java.util.Arrays; 

    String element[] = null; 
    while((element = reader.readNext()) != null){ 
     element = Arrays.copyOf(element, element.length + 1); 
     element[element.length - 1] = "JSON"; 
     writer.writeNext(element); 
    } 
+0

これは行単位で正しく読み取りますか?これを編集して列単位で読み込む方法はありますか? – Felix

+0

@Felixはい。 'csv'は行単位でデータを格納するので、列単位で読み込むには、ファイル全体を読む必要があります。ファイル全体を読むには 'reader.readAll()'を使います。ファイル全体をRAMに保存できない場合は、たとえば次のように作成できます。 'ArrayList '、1行を読み込み、リストに必要な列を追加して繰り返します。 – Poohl

+0

.readALL()はリストを必要とするので、.readAll()を使用することはできません。 @Poohl – Felix

0

[OK]をクリックして、いくつかのエラーが表示されます。

'reader.readNext()'文字列配列として入力から1行を返します。基本的に、これに出力用の要素を追加する必要があります。

while((element = reader.readNext()) != null) { 
    String[] output = getExpandedArray(element); 
    a.add(output); 
} 

getExpandedArrayを実装する必要があります。これを開始します。

private String[] getExpandedArray(String[] input) { 
    String[] output = null; 
    //Populate/create output from input, but with the array 1 bigger. 
    output[output.length -1] = "JSON"; 
    return output; 
} 
+0

'System.arrayCopy(...)'を使用すると、 'output'を1行で読み込むことができます。 – Poohl

+0

はい、あなたは質問が初心者からのものですが、私は彼らがJavaについて学ぶのを助けるためにそれを書いておくことをお勧めします。 – MartinByers

関連する問題