Under Nativescript (Ts), i read a csv file, extract here :
25300-2-0842;A PATTE PEINT;2;PC;2 10 C;;;;;
25300-2-0845;A PATTE PEINT;2;PC;2 10 C;;;;;
25300-2-0980;B FIXATION BATTERIE PEINT;2;PC;2 10 C;;;;;
25300-2-1390;B TOLE PEINT C3;8;PC;3 10 C;;;;;
25300-2-1528;A CAPOT PEINT C3;4;PC;4 10 C;;;;;
25300-2-0285;B TOLE PEINT;4;PC;2 11 C;;;;;
I need the location of an item, location is the 5th token of a line and it's read with
global.currentLine.emplacement = helper.getToken(fileInput[i], 5).trim().toUpperCase();
When i parse lines, the value of the location token is altered
Trace shows that :
- CSV file contains "2 10 C"
- fileInput[i] returns "25300-2-0842;A PATTE PEINT;2;PC;210 C;;;;;"
- therefore getToken returns "210 C"
- and then location is incorect
Any idea ? Does the readTextSync make implicit conversion ?
export function getToken(Text:string="", Index:number=1, Separator:string=";"):string {
let result = "";
if ((Text != null) && (Text != "")) {
let temp = Text.split(Separator);
Index--;
if (Index < temp.length)
result = temp[Index];
}
return result;
}
async function loadData():Promise<boolean> {
global.lignes = -1;
const filepath = fileCheck("stock.csv");
if (filepath == "") {
helper.loading.hide();
await helper.dialogsModule.alert({
title : "Erreur critique !",
message : "\nLe fichier des données stocks (stock.csv) n'est pas présent.\nL'application EASY va se terminer.",
okButtonText : " OK ",
cancelable : false
})
exit()
}
const filefevcsv : File = File.fromPath(filepath);
global.fileinput = filefevcsv.readTextSync(loadError, encoding.UTF_8);
let dummy = "";
let fileInput = global.fileinput.split("\n");
let lengthData = fileInput.length;
if (lengthData < 3) {
helper.loading.hide();
await helper.dialogsModule.alert({
title : "Erreur critique !",
message : "\nLe fichier des données stocks (stock.csv) ne semble pas complet.\nL'application EASY va se terminer.",
okButtonText : " OK ",
cancelable : false
})
exit()
}
global.lignes = 0;
global.data.length = 0;
let maxloop = lengthData + 1;
for (let i = 1; i < maxloop; i++) {
dummy = helper.getToken(fileInput[i],1).trim();
if (dummy == "")
continue;
global.lignes++;
global.currentLine.reference = dummy;
global.currentLine.description = helper.getToken(fileInput[i], 2).trim();
global.currentLine.quantite = parseCheck(helper.getToken(fileInput[i], 3).replace(",", "."));
global.currentLine.unite = helper.getToken(fileInput[i], 4).trim().toUpperCase();
if (global.currentLine.unite == "")
global.currentLine.unite = "PC";
global.currentLine.emplacement = helper.getToken(fileInput[i], 5).trim().toUpperCase();
// Structure différente si gestion double emplacement ou non
let colnum;
if (global.dblempl) {
global.currentLine.emplacement2 = helper.getToken(fileInput[i], 6).trim().toUpperCase();
colnum = 7;
}
else
colnum = 6;
global.currentLine.observation = helper.getToken(fileInput[i], colnum).trim();
global.currentLine.observation = global.currentLine.observation.replace(/<br>/g, "\n");
global.currentLine.operation = helper.getToken(fileInput[i], colnum+1).trim();
global.currentLine.operateur = helper.getToken(fileInput[i], colnum+2).trim();
global.currentLine.horodatage = helper.getToken(fileInput[i], colnum+3).trim();
if (global.currentLine.horodatage == "") {
global.currentLine.horodatage = "--/--/----";
}
dummy = helper.getToken(fileInput[i], colnum+4).trim().toUpperCase();
global.currentLine.cq = (dummy == "1") || (dummy == "VRAI") || (dummy == "TRUE") || (dummy == "X")
await global.data.push(helper.copyArray(global.currentLine));
}
return true;
}
The good result should be "2 10 C" not "210 C"
This alteration is on every line
Via Active questions tagged javascript - Stack Overflow https://ift.tt/xQufPbK
Comments
Post a Comment