Question Vérifier l'intégrité d'un fichier CSV
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
- Messages : 6311
- Remerciements reçus 68
Il y a juste un pb potentiel qui est qu'un champ chaîne peut contenir le caractère délimiteur...mais ça à l'air de marcher.
A moins d'être assuré que ce cas ne se présentera jamais.
Pas évident comme traitement.
J'ai essayé avec import-csv, mais si le nb de champ ne correspond pas il n'y a pas d'erreur, les membres restant sont vides.
On peut donc retrouver une date dans un membre de type chaîne.
Excel fait à peu la même chose, mais lui, donne un type adéquate à chaque cellule.
Une autre approche , les regex
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
- Messages : 6311
- Remerciements reçus 68
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Arthur
- Hors Ligne
- Membre elite
-
- Messages : 226
- Remerciements reçus 0
Heureusement pour toi au boulot c'est tranquille donc voilà un exemple :
[code:1]$regex = [regex] '(,)(?=(?:[^\"]|\"[^\"]*\"«»)*$)'
$string = \"\"\"toto\"\",\"\"toto mange des pommes, avec du chocolat\"\",\"\"salut\"\"\"
$res = $regex.Matches($string)
$res.count
#2
$string = \"\"\"toto\"\",\"\"toto mange des pommes, avec du chocolat\"\",\"\"salut\"\",,,\"
$res = $regex.Matches($string)
$res.count
#5
[/code:1]
Voilà à toi de l'inclure dans ton script.
Tu peux vraiment optimiser ton script avec et ça fait cool en plus.
Il existe pas mal de méthodes et d'options avec les regex sous .Net (on peut bien s’éclater) mais je ne suis pas le plus apte à en parler.
Message édité par: bilbao, à: 29/12/11 10:14<br><br>Message édité par: bilbao, à: 29/12/11 10:17
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
- Messages : 6311
- Remerciements reçus 68
[code:1]
\"1\",\"2\",\"3\",\"4\" #ligne ok
\"1\",\"2\",\"3\", #ligne incomplète, car CRLF
\"4\" #ligne incomplète
\"1\",\"2\",\"3\", #ligne ok
\"1\",\"2\",\"3\",\"4\" #ligne ok
\"1\",\"2\",\"3\", #ligne ok
\"1\",\"2\",\"3\", #ligne incomplète, car CRLF
\"4\" #ligne incomplète
[/code:1]
Le test sur le nombre de délimiteur d'une ligne dépend de la validité de la ligne suivante.
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- arnau
-
Auteur du sujet
- Hors Ligne
- Nouveau membre
-
- Messages : 11
- Remerciements reçus 0
En effet on peut faire avec les regex, je n'y suis pas habitué sous Windows (awk et sed vaincront !
)
Heureusement pour toi au boulot c'est tranquille donc voilà un exemple :
[code:1]$regex = [regex] '(,)(?=(?:[^\"]|\"[^\"]*\"«»)*$)'
$string = \"\"\"toto\"\",\"\"toto mange des pommes, avec du chocolat\"\",\"\"salut\"\"\"
$res = $regex.Matches($string)
$res.count
#2
$string = \"\"\"toto\"\",\"\"toto mange des pommes, avec du chocolat\"\",\"\"salut\"\",,,\"
$res = $regex.Matches($string)
$res.count
#5
[/code:1]
Voilà à toi de l'inclure dans ton script.
Tu peux vraiment optimiser ton script avec et ça fait cool en plus.
Il existe pas mal de méthodes et d'options avec les regex sous .Net (on peut bien s’éclater) mais je ne suis pas le plus apte à en parler.
Message édité par: bilbao, à: 29/12/11 10:14<br><br>Message édité par: bilbao, à: 29/12/11 10:17
Merci à vous 2 pour votre aide, je vais voir ce que je peux en tirer mais ce qui est certain c'est que j'ai plusieurs options grâce à vous.
Pour le fichier CSV, je ne crois pas avoir de cellule qui contient une string qui elle même contient un \";\" pour différencier la partie string et la partie délimiteur. C'est pour ça que vous anticipez sans doute avec les regex.
Le problème c'est que je ne comprends pas bien ton script bilbao (désolé
Un petit éclaircissement sur cette définition ne serait pas de refus
Merci beaucoup
Connexion ou Créer un compte pour participer à la conversation.
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les initiés
- Vérifier l'intégrité d'un fichier CSV