Question Vérifier l'intégrité d'un fichier CSV

Plus d'informations
il y a 14 ans 2 mois #10872 par Laurent Dardenne
bilbao écrit:

mais ça à l'air de marcher.

Il y a juste un pb potentiel qui est qu'un champ chaîne peut contenir le caractère délimiteur...
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 :whistle:

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 14 ans 2 mois #10873 par Laurent Dardenne
Un exemple avec un lien sur la rfc.

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 14 ans 2 mois #10875 par Arthur
En effet on peut faire avec les regex, je n'y suis pas habitué sous Windows (awk et sed vaincront ! :evil: )

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. :P
Tu peux vraiment optimiser ton script avec et ça fait cool en plus. B)

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.

Plus d'informations
il y a 14 ans 2 mois #10878 par Laurent Dardenne
Un dernier point à prendre en compte :
[code:1]
\&quot;1\&quot;,\&quot;2\&quot;,\&quot;3\&quot;,\&quot;4\&quot; #ligne ok

\&quot;1\&quot;,\&quot;2\&quot;,\&quot;3\&quot;, #ligne incomplète, car CRLF
\&quot;4\&quot; #ligne incomplète

\&quot;1\&quot;,\&quot;2\&quot;,\&quot;3\&quot;, #ligne ok
\&quot;1\&quot;,\&quot;2\&quot;,\&quot;3\&quot;,\&quot;4\&quot; #ligne ok

\&quot;1\&quot;,\&quot;2\&quot;,\&quot;3\&quot;, #ligne ok
\&quot;1\&quot;,\&quot;2\&quot;,\&quot;3\&quot;, #ligne incomplète, car CRLF
\&quot;4\&quot; #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.

Plus d'informations
il y a 14 ans 2 mois #10888 par arnau
bilbao écrit:

En effet on peut faire avec les regex, je n'y suis pas habitué sous Windows (awk et sed vaincront ! :evil: )

Heureusement pour toi au boulot c'est tranquille donc voilà un exemple :

[code:1]$regex = [regex] '(,)(?=(?:[^\&quot;]|\&quot;[^\&quot;]*\&quot;«»)*$)'
$string = \&quot;\&quot;\&quot;toto\&quot;\&quot;,\&quot;\&quot;toto mange des pommes, avec du chocolat\&quot;\&quot;,\&quot;\&quot;salut\&quot;\&quot;\&quot;
$res = $regex.Matches($string)
$res.count
#2
$string = \&quot;\&quot;\&quot;toto\&quot;\&quot;,\&quot;\&quot;toto mange des pommes, avec du chocolat\&quot;\&quot;,\&quot;\&quot;salut\&quot;\&quot;,,,\&quot;
$res = $regex.Matches($string)
$res.count
#5
[/code:1]

Voilà à toi de l'inclure dans ton script. :P
Tu peux vraiment optimiser ton script avec et ça fait cool en plus. B)

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&lt;br&gt;&lt;br&gt;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 \&quot;;\&quot; 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é :)) je n'ai jamais utilisé la classe regex auparavant et même en essayant de comprendre ton script j'arrive pas à retomber sur tes résultats \&quot;2\&quot; et \&quot;5\&quot;. A mon avis, je dois mal comprendre la définition de ta variable regex.

Un petit éclaircissement sur cette définition ne serait pas de refus :) Autrement j'ai trouvé ce site pour comprendre le principe, mais appliqué au script: je pêche un peu ;)

Merci beaucoup

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.064 secondes
Propulsé par Kunena