|
Fichier CSV et extrait chaine |
Débuté par Eric FONTAINE, 16 juin 2018 15:31 - 5 réponses |
| |
| | | |
|
| |
Membre enregistré 7 messages |
|
Posté le 16 juin 2018 - 15:31 |
Bonjour Je dois lire un fichier CSV qui contient "," comme séparateur. Le glitch est que dans mon fichier CSV, le manufacturier utilise la , dans la description du produit.
Exemples : Colonne 1 Colonne 2 Colonne 3 B00328BEY8,WiFi Booster RP-TNC High,Gain Screw-On OMNI-Directional ,111-8028066-0016227
Évidement ExtraitChaine prend 4 colonne dans cette situation
Comment je pourrais faire pour corrigé ce problème Merci pour vos suggestions Eric |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 182 messages Popularité : +10 (10 votes) |
|
Posté le 16 juin 2018 - 19:17 |
Hello, Voici une solution, à adapter ensuite à ton besoin :
Ref_Full est une chaîne = "B00328BEY8,WiFi Booster RP,TNC High-Gain Screw-On OMNI-Directional ,111-8028066-0016227" Ref_Container est un tableau <agrandissement=n> de chaînes
Ref_Commas est un entier = ChaîneOccurrence(Ref_Full, ",") SELON Ref_Commas CAS 2 Ref_Extracted est une chaîne = ExtraitChaîne(Ref_Full, rangPremier, [",", ", "]) TANTQUE Ref_Extracted <> EOT TableauAjoute(Ref_Container, Ref_Extracted) Ref_Extracted = ExtraitChaîne(Ref_Full, rangSuivant, [",", ", "]) FIN AUTRE CAS Ref_Chars est un entier = Taille(Ref_Full) Ref_Container[1] = ExtraitChaîne(Ref_Full, 1, [",", ", "]) Ref_Parsed est une chaîne = ChaîneSupprime(Ref_Full, 1, (Taille(Ref_Container[1]) + 1)) Ref_Container[3] = ExtraitChaîne(Ref_Parsed, 1, [",", ", "], DepuisFin) n est un entier = Position(Ref_Parsed, ",", 0, DepuisFin) Ref_Container[2] = ChaîneSupprime(Ref_Parsed, n, Ref_Chars) FIN
POUR CHAQUE Value de Ref_Container Trace(Value) FIN |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 2 566 messages Popularité : +222 (260 votes) |
|
Posté le 17 juin 2018 - 10:20 |
Bonjour,
Le plus simple ce serait de changer de séparateur. Si tu ne peux pas, le code le plus simple que je puisse proposer
sMachaine est une chaîne = "B00328BEY8,WiFi Booster RP-TNC High,Gain Screw-On OMNI-Directional ,111-8028066-0016227" nPos1,nPos2 sont des entiers
nPos1 = Position(sMachaine,",",1,DepuisDébut) nPos2 = Position(sMachaine,",",Taille(sMachaine),DepuisFin)
Trace(sMachaine[[1 À nPos1-1]]) Trace(sMachaine[[nPos1+1 À nPos2-1]]) Trace(sMachaine[[nPos2+1 À]])
C'est simple et efficace -- Cordialement,
Philippe SAINT-BERTINMessage modifié, 17 juin 2018 - 10:22 |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 7 messages |
|
Posté le 18 juin 2018 - 02:11 |
Merci pour ces réponses mais le problème est que j'ai d'autres valeurs avant et après la chaîne présenté En fait la chaîne présenté fait partie d'un fichier qui contient 15 éléments Je peut mettre le texte problématique comme premier élément de mon fichier.
sMachaine est une chaîne = "WiFi Booster RP-TNC High,Gain Screw-On OMNI-Directional ,111-8028066-0016227,B00328BEY8 ............."
De cette façon, est-ce plus facile de trouver une solution?
Merci de prendre le temps de répondre Eric |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 2 566 messages Popularité : +222 (260 votes) |
|
Posté le 18 juin 2018 - 07:17 |
Si c'est toi qui construit le fichier, je ne peux que t'engager à changer le séparateur, tu y gagneras du temps. Si le nombre d'éléments est fixe (15 dans le cas présent), il; et préférable de mettre cette valeur en fin de ligne.
En effet, tu récupèreras les 14 premières valeurs et enfin tout le reste. Il est aisé de retrouver la position de la 14ème occurrence de la virgule. Mais mon conseil reste de changer de séparateur.
-- Cordialement,
Philippe SAINT-BERTIN |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 190 messages Popularité : +21 (23 votes) |
|
Posté le 18 juin 2018 - 11:01 |
Bonjour
il me semble que pour éviter ce genre de soucis il y a une convention, les chaines doivent être encadrées par des quotes ou double quotes. genre : 1 , 2 , "je suis une chaine", 4, "5, rue des lilas", 6
après les instructions csv de windev ne tient pas compte de cette approche |
| |
| |
| | | |
|
| | | | |
| | |
|