2016-03-23 38 views
0

Verilerimi .csv dosyası olarak dışa aktarıyorum. İlk sütunun, hem tek bir satırda, hem de ikinci sütundaki Adresle, bir noktalı virgülle ayrılmış ad ve yaş olmasını istiyorum.CSV dışa aktarma alanında alan bölme

Tek bir hücrede adı ve yaşı birlikte alıyorum ancak adres, aynı satırın ikinci sütununda değil, sonraki satırda devam ediyor.

Bir sonraki sütuna adres almak için onu nasıl ayırmalıyım?

btnPrint_4 = new JButton("Print"); 
btnPrint_4.addActionListener(new ActionListener() { 
    public void actionPerformed(ActionEvent arg0) { 
     //export Excel file 
     try{ 

      new JTextField(); 
      // create new file 
      String path="C:\\ExcelFile.csv"; 
      File file = new File(path); 

      // if file doesnt exists, then create it 
      if (!file.exists()) { 
       file.createNewFile(); 
      } 

      FileWriter fw = new FileWriter(file.getAbsoluteFile(), true); 
      BufferedWriter bw = new BufferedWriter(fw); 
      // write in file      
      if (txtName.getText() !=null && txtAge.getText() !=null) { 
       bw.write(txtName_4.getText()); 
       bw.write(";"); 
       bw.write(txtAge.getText()); 
       //bw.write(System.getProperty("line.separator"));    
       //bw.write("\n"); 
       bw.write(";"); 
       bw.write(txtAddress.getText()); 


      } else {  

       System.out.print("Error :"); 
      }      
      // close connection 
      bw.flush(); 
      bw.close(); 
      fw.close(); 
     } catch(Exception e) { 
      System.out.println(e); 
     }  

Beklenen Çıktı

enter image description here

+0

java nesnelerinden csv oluşturmak için Jackson'ı kullanmak çok fazla iş yaratabilir. http://www.cowtowncoder.com/blog/archives/2012/03/entry_468.html – Simon

cevap

0

Herkes: Eğer alanlarda noktalı virgül kullanmak istiyorsanız

, sadece, sizin ekran görüntüsünde beklenen sonucu üretecektir (a ile kaçan) çift tırnak alanını çevreleyen zorunda SO yakındır, fakat tam olarak değil. CSV, "Virgülle Ayrılmış Dosya" için bir kısaltmadır. Gerçek karakterler genellikle virgül içerdiğinden, sütunları ayırmak için diğer karakterleri, özellikle de sekmeleri kullanmak yaygınlaşır, ancak basit başlayalım.

if (txtName.getText() !=null && txtAge.getText() !=null) { 
    bw.write(txtName_4.getText()); 
    bw.write(";"); 
    bw.write(txtAge.getText()); 
    bw.write(','); 
    bw.write(txtAddress.getText()); 
    bw.write(System.getProperty("line.separator"));    

sürece hiçbir virgül içeren dosyanın içine yazıyoruz metin olarak, iyi olacak: Sen isim ve yaş arasındaki noktalı virgül, vb gibi yaş ve adres, arasına virgül gerekir.

Ancak Erick, verilerimde virgül varsa ne olur?

Asla korkmayın ki, bunun çeşitli yolları vardır. Bu uygulama için en basit olan, her bir hücrede bulunan veriyi tırnak içine koymak olacaktır:

if (txtName.getText() !=null && txtAge.getText() !=null) { 
    bw.write("\""); 
    bw.write(txtName_4.getText()); 
    bw.write(";"); 
    bw.write(txtAge.getText()); 
    bw.write("\",\""); 
    bw.write(txtAddress.getText()); 
    bw.write("\""); 
    bw.write(System.getProperty("line.separator"));    
+0

Merhaba @Erick, hala doğru çıktı değil .. "Name; AgeAddress" gibi çıkıyor – coder

1

Kullanım sekmesi ; ait \t INPLACE

    bw.write(txtName_4.getText()); 
        bw.write("\t"); 
        bw.write(txtAge.getText()); 
       //bw.write(System.getProperty("line.separator"));    
       //bw.write("\n"); 
        bw.write("\t"); 
        bw.write(txtAddress.getText()); 
excel

düzgün sütunlu değerini görüntülemek üzere çıkış CSV dosyasındaki isim, yaş ve adres sütunu ayırmak için
+0

Merhaba @Mahendra, bw.write ("\ t") denedim; ama aynı zamanda çalışmıyor. – coder

+0

Excel, TSV (sekmeyle ayrılmış değer) dosyaları için CSV'yi (virgülle ayrılmış değer) kolayca açabilir, bu nedenle, '\ t' ve ',' her ikisi de çalışmalıdır. – Mahendra

+0

Neredeyse haklı. OP'nin ilk yarı-kolonuna ihtiyacı var. Sorudaki ekran görüntüsüne bakın. İsim ve yaş arasında bir yarı-kolon ve yaş ve adres arasında bir sekme olmalıdır. –

0

Sorununuzu anlamıyorum, kodunuz çalışıyor ve [en azından anlıyorum] ne yapıyorsunuz? yap.

bw.write("\n"); 

yeni bir satır ve

bw.write(System.getProperty("line.separator")); 

boş çizgi oluşturur oluşturur.

Yani bu kodu:

Name1;Age1; 
Address1; 

Name2;Age2; 
Address2; 

Name3;Age3; 
Address3; 

Ne bekliyordun:

for (int i = 1; i < 4; i++) { 
     // write in file 
     bw.write("Name" + i); 
     bw.write(";"); 
     bw.write("Age" + i); 
     bw.write(";"); 
     bw.write("\n"); 
     bw.write("Address" + i); 
     bw.write(";"); 
     bw.write(System.getProperty("line.separator")); 
     bw.write("\n"); 
    } 

bu .csv dosyasını üretecek? Bugüne kadar

for (int i = 1; i < 4; i++) { 
     // write in file 
     bw.write("\"Name" + i); 
     bw.write(";"); 
     bw.write("Age" + i); 
     bw.write("\";"); 
     bw.write("Address" + i); 
     bw.write(";"); 
     bw.write("\n"); 
    } 
+0

Tamam, eğer alanlarda noktalı virgül kullanmak isterseniz, sadece alanı çift tırnak işaretleri ile sarmak zorundasınız.) – Ben

İlgili konular