enum Je ne l'ai pas tellement utilisé, alors je l'ai fait en pratique. La praticité est inconnue. La version java est 6.
SamleFixedLengthFromCsv.java
package prottype;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import au.com.bytecode.opencsv.CSVReader;
public class SamleFixedLengthFromCsv {
//Définition de l'enregistrement: nombre de caractères
enum recordDef {
col01(8), col02(24), col03(24), col04(3);
private int length;
private recordDef(int length) {
this.length = length;
}
public int getLength() {
return this.length;
}
}
//Définition de l'enregistrement:(Caractère par défaut,caractère de remplissage)
enum recordVal {
col01("0,0"), col02(", "), col03(", "), col04("---,-");
private recordVal(String val) {
this.val = val;
}
private String val;
public void setVal(String val) {
this.val = val;
}
public String getVal() {
return this.val;
}
}
/**
*classe principale
*/
public static void main(String[] args) throws IOException {
SamleFixedLengthFromCsv proc = new SamleFixedLengthFromCsv();
proc.execute();
}
/**
*Courir
*/
protected void execute() {
try {
mainProc();
} catch (Exception e) {
System.out.println("La sortie du fichier a échoué ...");
}
}
/**
*Processus principal
*/
public void mainProc() throws Exception {
PrintWriter pw = null;
CSVReader reader = null;
try {
File file = new File("./test.dat");
reader = new CSVReader(new FileReader(new File("./test.csv")));
file.delete();
file.createNewFile();
pw = new PrintWriter(new BufferedWriter(new FileWriter(file)));
String[] record;
while ((record = reader.readNext()) != null) {
recordVal.col01.setVal(record[0] + ",0");
recordVal.col02.setVal(record[1]+", ");
recordVal.col03.setVal(record[2]+", ");
recordVal.col04.setVal(record[3]+ ",-");
pw.print(createFixedRecords() + System.getProperty("line.separator") );
}
pw.close();
reader.close();
} catch (Exception e) {
e.printStackTrace();
} finally {
if (pw != null) {
pw.close();
}
if (reader != null) {
reader.close();
}
}
}
/**
*Création d'enregistrements de longueur fixe
*/
private String createFixedRecords() {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < recordVal.values().length; i++) {
sb.append(createFixedColumn(i));
}
return sb.toString();
}
/**
*Convertir les éléments en longueur fixe
*/
private String createFixedColumn(int defNum) {
StringBuilder tempPad = new StringBuilder();
StringBuilder val = new StringBuilder(recordVal.values()[defNum].getVal().split(",")[0]);
StringBuilder pad = new StringBuilder(recordVal.values()[defNum].getVal().split(",")[1]);
if (val.length() < recordDef.values()[defNum].length) {
for (int i = val.length(); i < recordDef.values()[defNum].length; i++) {
tempPad.append(pad);
}
}
//Les nombres sont justifiés à droite, sinon justifiés à gauche
try {
Integer.parseInt(val.toString());
return tempPad.append(val).toString();
} catch(Exception e) {
return val.append(tempPad.toString()).toString();
}
}
}
before
test.csv(Fichier source de conversion)
"1","Bataille navale","Kongo","JPN"
"2","Croiseur lourd","Takao","JPN"
"3","Destructeur","Shigure","JPN"
after
test.csv(Fichier source de conversion)
00000001 Cuirassé, Kongo, JPN, ‥, ‥, ‥, ‥, ‥, ‥, ‥, ‥, ‥, ‥, ‥, ‥, ‥
00000002 Croiseur lourd, Kaohsiung, JPN, ‥, ‥, ‥, ‥, ‥, ‥, ‥, ‥, ‥, ‥, ‥
00000003 Destructeur, Shigure, JPN, ‥, ‥, ‥, ‥
Je veux m'habituer de plus en plus à utiliser enum.
Recommended Posts