Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Extraction et nettoyage de ligne avec un split dans un csv

4 réponses
Avatar
---DGI972---
Bonjour,

Je suis en train de faire un petit vbscrit pour extraire d'un fichier
csv en position (1) toute la ligne qui contient le numéro présent dans
un fichier txt

Par ex:

le fichier 30092008NPAI.txt qui contient:

112076
90553
42951

et le fichier csv

2;51268;51268; MARE MONARD ;21/09/1945;43;96
1;112076;112076;MIDE EMIL ;30/05/1956;43;96
2;128200;128200;BOUR AMEL ;01/08/1922;43;186
2;295270;295270;PONT MICHEL ;11/11/1924;43;186
2;90553;90553;MANY LAURE ;20/11/1964;43;66.
2;93968;93968;GIAU FRANC ;02/04/1935;42;93.
2;92215;92215;HOME FIDELE ;17/02/1923;43;186.
1;42951;42951;MEAU JEROME ;30/09/1948;43;96.
2;117936;117936;MATH RUDE ;31/03/1921;43;186.

il me faudrait en sortie un fichier csv
(nomfichiercsv_NPAI_Nomfichiertxt.csv) sans les numéros présent dans le
fichier txt.

2;51268;51268; MARE MONARD ;21/09/1945;43;96
2;128200;128200;BOUR AMEL ;01/08/1922;43;186
2;295270;295270;PONT MICHEL ;11/11/1924;43;186
2;93968;93968;GIAU FRANC ;02/04/1935;42;93.
2;92215;92215;HOME FIDELE ;17/02/1923;43;186.
2;117936;117936;MATH RUDE ;31/03/1921;43;186.

Voici mon Vbscript rien de très compliqué mais je bute sur le test du
split en position (1) (pas trés bien documenté la fonction split) et
sur la boucle for each.

Merci d'avance

Title = "Extraction NPAI"
Prompt = "Voulez vous lancer l'extraction des NPAI dans les Fichiers
CSV ?"_
&VbCrLf&VbCrLf&" Si oui:"_
&VbCrLf&"1/ Choisir le fichier CSV "_
&VbCrLf&"2/ Choisir le fichier TXT NPAI "
messagefile = msgbox(Prompt, vbOKCancel, Title)
IF messagefile = 2 then
wscript.quit
END IF
Wscript.Echo "1/ Choisir le fichier CSV."
fichCSV = ChooseFile()
Wscript.Echo "2/ Choisir le fichier TXT NPAI."
fichNPAI = ChooseFile()
Set oFs=CreateObject("Scripting.FileSystemObject")
Set oFileCSV=oFs.OpenTextFile(fichCSV)
Set oFileNPAI=oFs.OpenTextFile(fichNPAI)
'sCurrentFolder=oFs.GetParentFolderName(WScript.ScriptFullName)
sCurrentFolder=oFs.GetParentFolderName(fichCSV)
Set
oFileOut=oFs.OpenTextFile(sCurrentFolder&"\"&oFs.GetBaseName(fichCSV)&"NPAI"&oFs.GetBaseName(fichNPAI)&".csv",2,
True)
NPAI=Split(oFileNPAI.ReadAll,VBCrLf)
csv=Split(oFileCSV.ReadAll,VBCrLf)
For Each strLine In NPAI
For Each strField In csv
If strLine = split(csv,";")(1)then next
End if
Next
oFileOut.WriteLine strField
Next
Wscript.echo "L'Extraction des NPAI a bien été traitée dans le
répertoire "_
&sCurrentFolder&VbCrLf&VbCrLf&" et le nouveau fichier
"&oFs.GetBaseName(fichCSV)&"_"&oFs.GetBaseName(fichNPAI)&".csv a été
correctement nettoyé et généré"
WScript.Quit

'*******************************************************************************
Function ChooseFile()
On Error Resume Next
Dim Q2, sRet
Q2 = chr(34)
ChooseFile = ""
Set IE = CreateObject("InternetExplorer.Application")
IE.visible = False
IE.Navigate("about:blank")
Do Until IE.ReadyState = 4
Loop
IE.Document.Write "<HTML><BODY><INPUT ID=" & Q2 & "Fil" & Q2 &
"Type=" & Q2 & "file" & Q2 & "></BODY></HTML>"
With IE.Document.all.Fil
.focus
.click
ChooseFile = .value
End With
IE.Quit
Set IE = Nothing
End Function
'*******************************************************************************

4 réponses

Avatar
Gilles LAURENT [MVP]
"---DGI972---" <gilles.dermigny@*NO SPAM*laposte.net> a écrit dans le
message de
news:
| Bonjour,

Bonjour,

| Je suis en train de faire un petit vbscrit pour extraire d'un fichier
| csv en position (1) toute la ligne qui contient le numéro présent dans
| un fichier txt
[...]

J'utiliserai pour cela un dictionnaire qui contiendrai tous les codes à
supprimer du fichier csv. Dans un premier temps on charge tous les codes
dans le dictionnaire à partir du fichier txt puis dans un second temps
on parcours le fichier csv en excluant les lignes contenant les codes
précédemment chargés. Ci-dessous un bout de code VBScript permettant de
réaliser ce traitement. L'affichage des lignes restantes se fait ici
dans la console :

--- Coupez ici : CodeSnippet.vbs ---
Set oFs=CreateObject("Scripting.FileSystemObject")
Set oDic=CreateObject("Scripting.Dictionary")
Set oFile=oFs.OpenTextFile(fichNPAI)
While Not oFile.AtEndOfStream
oDic(oFile.ReadLine())=True
Wend
Set oFile=oFs.OpenTextFile(fichCSV)
While Not oFile.AtEndOfStream
sLine=oFile.ReadLine()
If Not oDic.Exists(Split(sLine,";")(1)) Then WScript.Echo sLine
Wend
--- Coupez ici : CodeSnippet.vbs ---

--
Gilles LAURENT
MVP Windows Server - Admin Frameworks
http://glsft.free.fr
Avatar
---DGI972---
Le 01/10/2008, Gilles LAURENT [MVP] a supposé :
"---DGI972---" <gilles.dermigny@*NO SPAM*laposte.net> a écrit dans le
message de
news:
Bonjour,



Bonjour,

Je suis en train de faire un petit vbscrit pour extraire d'un fichier
csv en position (1) toute la ligne qui contient le numéro présent dans
un fichier txt


[...]

J'utiliserai pour cela un dictionnaire qui contiendrai tous les codes à
supprimer du fichier csv. Dans un premier temps on charge tous les codes
dans le dictionnaire à partir du fichier txt puis dans un second temps
on parcours le fichier csv en excluant les lignes contenant les codes
précédemment chargés. Ci-dessous un bout de code VBScript permettant de
réaliser ce traitement. L'affichage des lignes restantes se fait ici
dans la console :

--- Coupez ici : CodeSnippet.vbs ---
Set oFs=CreateObject("Scripting.FileSystemObject")
Set oDic=CreateObject("Scripting.Dictionary")
Set oFile=oFs.OpenTextFile(fichNPAI)
While Not oFile.AtEndOfStream
oDic(oFile.ReadLine())=True
Wend
Set oFile=oFs.OpenTextFile(fichCSV)
While Not oFile.AtEndOfStream
sLine=oFile.ReadLine()
If Not oDic.Exists(Split(sLine,";")(1)) Then WScript.Echo sLine
Wend
--- Coupez ici : CodeSnippet.vbs ---



Mais c'est bien sur ...

Le Dictionary, je l'avais oublié celui là ...

Comme d'habitude super impec et en plus les perfomances sont au rendez
vous :
sur un fichier csv de 60 000 lignes et un txt de 4000 lignes le
traitement s'effectue en 3 secondes sur un AMD turion X2 1.9 GHz 2 G de
ram.

Merci beaucoup gilles
Avatar
Gilles LAURENT [MVP]
"---DGI972---" <gilles.dermigny@*NO SPAM*laposte.net> a écrit dans le
message de
news:
| Mais c'est bien sur ...
| Le Dictionary, je l'avais oublié celui là ...

:-)

| Comme d'habitude super impec et en plus les perfomances sont au rendez
| vous :
| sur un fichier csv de 60 000 lignes et un txt de 4000 lignes le
| traitement s'effectue en 3 secondes sur un AMD turion X2 1.9 GHz 2 G
| de ram.

Une bête de course par rapport à mon petit portable :
Intel Pentium M - 1,5 GHz - 1 Go

Merci pour ce retour.

--
Gilles LAURENT
MVP Windows Server - Admin Frameworks
http://glsft.free.fr
Avatar
---DGI972---
Gilles LAURENT [MVP] a écrit :
"---DGI972---" <gilles.dermigny@*NO SPAM*laposte.net> a écrit dans le
message de
news:
Mais c'est bien sur ...
Le Dictionary, je l'avais oublié celui là ...



:-)

Comme d'habitude super impec et en plus les perfomances sont au rendez
vous :
sur un fichier csv de 60 000 lignes et un txt de 4000 lignes le
traitement s'effectue en 3 secondes sur un AMD turion X2 1.9 GHz 2 G
de ram.



Une bête de course par rapport à mon petit portable :
Intel Pentium M - 1,5 GHz - 1 Go

Merci pour ce retour.



Les cordonniers les plus mal chaussés !!!

;-)