0

カンマで区切られた6列を含むCSVファイルがあります。

VendorCode, VendorName, Material, MaterialDescription, Reason, Quantity    

「Reason」列の値が次のように含まれているため、「Reason」列を除く各列からデータを取得できます。

Pitted, Rusty     

(つまり、その列にはコンマ区切りの値があります)

(したがって、ピット値は「Reason」配列リストに挿入され、Rustyは「Quantity」配列リストに挿入されます)

::

csvファイルの1行には次のものが含まれます。

AA90、ABC LTD。、2.71E + 11、ASSY / LAM`E'CE-MSSL-RINDER、 "VisualCrack、BH、Damage、Burr"、330

必要な出力: 「pitty、rusted」は単一の文字列として扱われ、データベースに保存する必要があります

私はこれを試しました

while ((thisLine = myInput2.readLine()) != null)  {

    String[] str = thisLine.split(",");
    for(int j=0; j<str.length; j++) {
        switch(j) {
            case 0: DR_VendorCode.add(str[j]);//getContents()); break;
            case 1:DR_VendorName.add(str[j]);//getContents()); break;
            ....
        }

        i1++;
    }
}

for(int k=0;k<DR_VendorCode.size()+1;k++) {

    String DR_VCODE=DR_VendorCode.get(k).toString();
    String DR_VNAME=DR_VendorName.get(k).toString();
    ....
}
4

3 に答える 3

0

を含むパターンを検索することをお勧めします

"  ,   " // (make sure multiple commas could also occur)

つまり、二重引用符、1つ以上のコンマ、二重引用符。

  1. これらのコンマを記号などに置き換えます。
  2. 次に、すべてのコンマをuに置き換えます。
  3. 記号をコンマに戻します。

これは部分的な擬似コードです!パターンを置き換える方法がわかりませんが、わかります。

String inlineCommasReplaced = thisLine.replace( \"\,\", \"\|\"); // replace pattern "," with "|"
String outterCommasReplaced = inlineCommasReplaced.replace(",", ",,"); // Replace the comma seperated with double commas for instance
String replaceBackInlineCommas = outterCommasReplaces.replace( \"|,\", \"\,\"); // replace back the "|" to ","
String[] str = replaceBackInlineCommas.split(",,"); // split on ,,
于 2012-12-04T10:08:30.847 に答える
0

どうぞ ...

String regex = "\"[^\"]+\"|[^,]+";
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(thisLine);
while(m.find()) {
    System.out.println(thisLine.substring(m.start(),m.end()));
    // I suppose you could construct an array here rather than just printing it
}

出力..。

AA90
ABC LTD.
2.71E+11
ASSY/LAM`E'CE-MSSL-RINDER
"VisualCrack,B.H,Damage,Burr"
330

複数の引用符が埋め込まれた5番目(実際には1つだけを除く)の列を処理するには...

String regex = "\".*\"|[^,]+";

出力..。

AA90
ABC LTD.
2.71E+11
ASSY/LAM`E'CE-MSSL-RINDER
"VisualCrack,B.H,"Damage",Burr"
330
于 2012-12-04T12:47:51.370 に答える
0

最後に@xagygの助けを借りて問題を解決します

最終的なコードは:

import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import java.util.StringTokenizer;
import java.util.regex.Matcher;
//import org.apache.commons.collections.*;
//import org.apache.commons.collections.MultiMap;
//import org.apache.commons.collections.MultiHashMap;
import java.util.regex.Pattern;

public class readFileandPopulate{

  public static void main(String[] args) 
  {
      ArrayList<String> total=new ArrayList<String>();

     ArrayList<String> vcode=new ArrayList<String>();
      ArrayList<String> vname=new ArrayList<String>();
      ArrayList<String> material=new ArrayList<String>();
      ArrayList<String> mat_desc=new ArrayList<String>();
      ArrayList<String> reason=new ArrayList<String>();
      ArrayList<String> quantity=new ArrayList<String>();

      try
      {
          FileInputStream fstream1 = new FileInputStream("C:\\filesuploaded\\DEVELOPMENT_REJECTION.csv");
          DataInputStream in1 = new DataInputStream(fstream1);
          BufferedReader br1 = new BufferedReader(new InputStreamReader(in1));
          String strLine1;
          while ((strLine1 = br1.readLine()) != null)  
          {
              String regex = "\"[^\"]+\"|[^,]+";
              Pattern p = Pattern.compile(regex);
              Matcher m = p.matcher(strLine1);
              while(m.find()) {
                  total.add(strLine1.substring(m.start(),m.end()));
                  }
          }
          for(int i = 0; i < total.size(); i++)
          {
              if(i % 6 == 0)
                  vcode.add(total.get(i));
              else if(i % 6 == 1)
                  vname.add(total.get(i));
              else if(i % 6 == 2)
                  material.add(total.get(i));
              else if(i % 6 == 3)
                  mat_desc.add(total.get(i));
              else if(i % 6 == 4)
                  reason.add(total.get(i));
              else if(i % 6 == 5)
                  quantity.add(total.get(i));
          }
          System.out.println("vcode content: "+vcode);
          System.out.println("vname content: "+vname);
          System.out.println("material content: "+material);
          System.out.println("mat_desc content: "+mat_desc);
          System.out.println("reason content: "+reason);
          System.out.println("quantity content: "+quantity);      
          in1.close();

      }
      catch (Exception e)
          {     e.printStackTrace();
                System.err.println("Error: " + e.getMessage());
          }

  }

}
于 2012-12-05T04:11:00.803 に答える