openCSVを使用してcsvファイルを開き、すべての列を繰り返し処理しています。ユーザーIDが異なる場合は、ファイルの最後に新しいJavaBeanペアを書き込みます。CSVReaderでファイル全体がチェックされない
問題は、読者がファイル全体ではなく、自分のファイルの最初の列だけをチェックすることです。作成時には、ファイルにはヘッダのみが含まれ、それ以外のものは含まれません。プログラムはすべての列をチェックし、sudoIDが異なっていれば、それをファイルに書き出します。最初の行のsudoIDがメインクラスからインポートされたものと等しい場合、それは認識され、書き込まれません。しかし、この-same- sudoIDが2行目にある場合、それは認識されず、再度書き込まれます。私のCSVはこのように見える場合
例えば、それは動作します:
"Patient_id Pseudo_ID",
"32415","PAT106663926"
を、それはこのようになります場合は、sudoIDを再書き込みます:
"Patient_id Pseudo_ID",
"32416","PAT104958880"
"32415","PAT106663926"
感謝を! マイコード:
public class CSVConnection {
@SuppressWarnings({ "deprecation", "resource", "rawtypes", "unchecked" })
public String getID(String sID,String pseudoID) throws IOException, CsvDataTypeMismatchException, CsvRequiredFieldEmptyException{
try {
CsvToBean csv = new CsvToBean();
String csvFilename = "CsvFile.csv";
Writer writer= new FileWriter(csvFilename,true);
CSVReader csvReader = new CSVReader(new FileReader(csvFilename),',','"',1);
ColumnPositionMappingStrategy strategy = new ColumnPositionMappingStrategy();
strategy.setType(PatientCSV.class);
String[] columns = new String[] {"patID","pseudoID"};
strategy.setColumnMapping(columns);
//Set column mapping strategy
StatefulBeanToCsv<PatientCSV> bc = new StatefulBeanToCsvBuilder<PatientCSV>(writer).withMappingStrategy(strategy).build();
List patList = csv.parse(strategy, csvReader);
for (Object patObj : patList) {
PatientCSV pat = (PatientCSV) patObj;
if(((PatientCSV) patObj).getPatID().equals(sID)){
return pat.getPseudoID();
}
else
{
PatientCSV pat1 = new PatientCSV();
pat1.setPatID(sID);
pat1.setPseudoID(pseudoID);
patList.add(pat1);
/*Find a way to import it to the CSV*/
bc.write(pat1);
writer.close();
return pseudoID;
}
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
public static void main(String [] args) throws IOException, CsvDataTypeMismatchException, CsvRequiredFieldEmptyException{
CSVConnection obj = new CSVConnection();
String sID="32415";
String pseudoID="PAT101830150";
obj.getID(sID,pseudoID);
}
}
とJava Beanが:
public class PatientCSV {
private String patID;
private String pseudoID;
public String getPatID() {
return patID;
}
public void setPatID(String patID) {
this.patID = patID;
}
public String getPseudoID() {
return pseudoID;
}
public void setPseudoID(String pseudoID) {
this.pseudoID = pseudoID;
}
public PatientCSV(String patID, String pseudoID) {
super();
this.patID = patID;
this.pseudoID = pseudoID;
}
public PatientCSV() {
super();
// TODO Auto-generated constructor stub
}
public String toString()
{
return "Patient [id=" + patID + ", pseudoID=" + pseudoID + "]";
}
}
これらの警告をすべて表示しないでください。彼らは*良い*理由のためにそこにいる、すなわちあなたがそれらに対処し、修正する必要があります。 – QBrute
@QBrute良い点。私は私の問題の解決策を見つけた後、これを変更しようとしました。アドバイスをいただきありがとうございます。 –