2016-09-01 6 views
0

私はメモ帳からjavaにテキストをインポートして、それをcsvファイルに入れようとしているところの問題を扱っています。私はうまくそのように管理しましたが、今ではcsvの配列の各行から情報を削除する必要があります。インポートされたファイルから配列を編集する

Name = Bob, Age = 42, FavColor = Blue 
Name = Clarice, Age = 20, FavColor = Red 
Name = John, Age = 34, FavColor = Green 

そして、私は私が関連データのみを持っているように、CSVの各部分から名前=、年齢=とFavColor =を削除したい。だから、このようなその何かを視覚化するのに役立つ

。次のようになります。

Bob, 42, Blue 
Clarice, 20, Red 
John, 34, Green 

を私は自分のコードをやっているかのさらなる理解のために、これまでこのようなものになります。

public static void main(String[] args) throws IOException{    
    String file_name = "C:/Users/etc....";  
    PrintWriter pw = new PrintWriter(new File("test.csv")); 
    StringBuilder sb = new StringBuilder(); 

    try {   
     ReadFile file = new ReadFile(file_name); 
     String[] aryLines = file.OpenFile(); 

     sb.append("Name"); 
     sb.append(','); 
     sb.append("Age"); 
     sb.append(','); 
     sb.append("FavColor"); 
     sb.append('\n'); 

     int i;   
     for(i = 0; i < aryLines.length; i++) { 
      sb.append(aryLines[i]); 
      sb.append("\n");     
     } 

     pw.write(sb.toString()); 
     pw.close();    
     System.out.println("CSV Written");   
    }  
    catch (IOException e) { 
     System.out.println(e.getMessage());   
    }  
} 

配列が適切にメモ帳の情報が、私の各ラインを通過しているが情報を取り除く方法を困惑しています。どんな助けもありがとう。ありがとう!

+0

あなたのコードは、出力が異なって見えることを示唆しています。 –

+0

'ReadFile'オブジェクトとは何ですか? –

+0

混乱のため残念ですが、ReadFileオブジェクトは別のクラスのもので、ファイルを開いて行単位で移動して文字列に変換し、それらの文字列を上のコードの配列に入れます。その配列は、CSV Excelドキュメントに書き込まれます。 "file_name"/"file"がそこに私の情報を持つメモ帳であるので、出力が面白く見えるかもしれません。一度配列に格納されると、コンマの前の各情報がExcelドキュメントの独自のセルに格納されたCSV Excelドキュメントに格納されます。 – latiasfan

答えて

0

はこれを試してみてください:

EDIT

は、スペースで単語パターンを含む正規表現を変更:

import java.io.*; 
import java.nio.charset.Charset; 
import java.nio.file.*; 
import java.util.*; 

public class YourClass { 

    public static void main(String[] args) { 

     // Path to the file being converted 
     String infile = "C:/Users/.../test.txt"; // Some absolute path 
     // Path to the destination output file 
     String outfile = "C:/Users/.../test.csv"; // Some absolute path 

     try {   

      // Read all rows from the infile 
      List<String> rows = Files.readAllLines(Paths.get(infile), Charset.forName("UTF-8")); 
      // List of new rows to write to the outfile 
      ArrayList<String> nrows = new ArrayList<String>(); 

      // Enumerate rows 
      for (String row : rows) { 
       // Remove any word followed by any number of spaces and 
       // an equals sign followed by any number of spaces 
       String nrow = row.replaceAll("[\\w\\s]+\\s*=\\s*", ""); 
       // Append edited row to new rows 
       nrows.add(nrow); 
      }    

      // Get file descriptor 
      Path file = Paths.get(outfile); 
      // Write rows to outfile 
      Files.write(file, nrows, Charset.forName("UTF-8")); 

      // Update G/TUI 
      System.out.println("CSV Written"); 

     }  
     catch (IOException e) { 
      // You should catch specific exceptions 
      e.printStackTrace();   
     }  

    } 

} 
+0

これは最も効果的でした。適切に変換し、すべての適切な細胞を置くように管理されています。削除されたものを変更するにはちょっと編集しなければなりません(前には等号を取り除いて情報はありませんが、変更するのは難しくありません)が、完璧に動作します! – latiasfan

+0

@latiasfan出力はどのように見えましたか?ここに見せてもらえますか? –

+0

これは適切な方法でcsvに表示されますが、問題は、セルが "name = ajsldfkj"などしか持たないインスタンスでは、セルの値しか持たないことです。しかし、私はいくつかの場所を持っています。単に「好きな色=青」のようなものではなく、「色=」ではなく「お気に入り」ではないので、単に「青」ではなく「好きな青」のように表示されます" – latiasfan

0

これは単純明快ですので、私はあなたを概観与える:,によって

  1. スプリットを、あなたは=によって分割3つの文字列の配列
  2. foreach要素、あなたは、配列を取得しますします2つの弦からなる。 2番目の文字列
  3. 使用してくださいtrim()効果的にすべての段階で、配列の長さのため
  4. チェック
  5. あなたは、あなたのファイルがどのように大きなのようなものを見なければならない、あなたは効果的に実行することができますStringBuilderオブジェクトにすべてのものを追加しているので、メモリの。あるいは、すべての行で別のファイルに書き込むこともできますが、スループットは低下します。それらを一緒にバッチしてファイルにすることも考えられます。
+0

ありがとう、私はこれを試して、それがどのように動作するかを見ていきます。私はこれを行う方法を調べることを試みたが、私が見つけることができるすべての例がアレイのものを取り除く場合のためのものではなかったので、私は壁に対して頭を打っていた。 – latiasfan

0

あなたは簡単に正規表現でそれを置き換えることができます。

replaceAll("\\w+ = ", "") 
+0

私はこれを見て、どのように動作するかを見ていきます。 – latiasfan

関連する問題