Extraction et nettoyage de ligne avec un split dans un csv
4 réponses
---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
'*******************************************************************************
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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
"---DGI972---" <gilles.dermigny@*NO SPAM*laposte.net> a écrit dans le
message de
news:mn.f5127d89809185ad.55474@NOSPAMlaposte.net
| 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
"---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
---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
Le 01/10/2008, Gilles LAURENT [MVP] a supposé :
"---DGI972---" <gilles.dermigny@*NO SPAM*laposte.net> a écrit dans le
message de
news:mn.f5127d89809185ad.55474@NOSPAMlaposte.net
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.
"---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
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
"---DGI972---" <gilles.dermigny@*NO SPAM*laposte.net> a écrit dans le
message de
news:mn.09ad7d8ae1122600.55474@NOSPAMlaposte.net
| 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
"---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
---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 !!!
;-)
Gilles LAURENT [MVP] a écrit :
"---DGI972---" <gilles.dermigny@*NO SPAM*laposte.net> a écrit dans le
message de
news:mn.09ad7d8ae1122600.55474@NOSPAMlaposte.net
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
"---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