|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | |||
|
Invité de passage
![]() Analyste d'exploitation Inscription : août 2011 Messages : 9 ![]() |
Bonjour à tous,
Je résume mon problème: Je veux importer plusieurs milliers de fichier texte dans une table, avec pour chacun le nom du fichier dans une colonne et le contenu dans une autre (memo). Voici le code que j'utilise: Code :
Citation:
J'ignore pourquoi, est-ce que vous avez une idée? Merci d'avance pour votre aide. |
|||
|
|
00
|
|
|
#2 |
![]() ![]() René MAROTInscription : octobre 2005 Messages : 5 479 ![]() |
As-tu vérifié que tu ne satures pas ta base ?
Une base Access ne peut pas excéder 2 Go et quand tu y arrives, il se passe des choses bizares. A+
__________________
Vous voulez une réponse rapide et efficace à vos questions téchniques ? Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs. |
|
|
00
|
|
|
#3 |
|
Invité de passage
![]() Analyste d'exploitation Inscription : août 2011 Messages : 9 ![]() |
Oui effectivement, j'ai vérifié et la taille de la base dépasse un peu les deux gigs...
Je me demande comment contourner cette limite, il faudrait que je découpe mes fichiers sur plusieurs bases... Je ne vois pas autre chose, d'autres idées? Merci! |
|
|
00
|
|
|
#4 |
![]() ![]() René MAROTInscription : octobre 2005 Messages : 5 479 ![]() |
En effet tu peux découper ta base en plusieurs, chacune peut alors être de 2 Go au max.
Pourquoi as-tu besoin de charger tous ces fichiers textes ? Ne pourrais-tu travailler ligne par ligne et extraire les info qui t'interessent au fur et à mesure ? A+
__________________
Vous voulez une réponse rapide et efficace à vos questions téchniques ? Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs. |
|
|
00
|
|
|
#5 |
|
Invité de passage
![]() Analyste d'exploitation Inscription : août 2011 Messages : 9 ![]() |
Chacun de ces fichiers représente une facture, c'est fou, j'en ai des centaines de milliers à traiter, j'ai besoin de tout, l'entête de la facture ainsi que les lignes de détails..
Suivant ceci, j'ai essayé d'ouvrir les fichiers au moyen d'un textstream et de séparer mes colonnes au moyen d'un split, par contre les séparateurs me donnent des problèmes. J'ai un fichier qui a l'allure suivante: ""TOTO", "12, rue BLABLA", "", 0.01" quand je fais un Split avec un délimiteur "," sur la ligne j'obtiens: "TOTO" "12 rue BLABLA" "" 0.01 Alors que je voudrais avoir: "TOTO" "12, rue BLABLA" "" 0.01 Le problème étant que le split ne différencie pas le séparateur "," d'une virgule incluse à l'intérieur d'un champs. Est-ce que vous voyez une solution? Merci |
|
|
00
|
|
|
#6 | ||
|
Membre éclairé
![]() Michel Développeur informatique Inscription : février 2008 Messages : 263 ![]() |
Pour ton split,
Tu aurais peut être plus de succès avec ceci : (si bien sûr chaque ligne est bien constituée ainsi que tu le décris : ""TOTO", "12, rue BLABLA", "", 0.01") Code :
Bien sur, ensuite pour toutes les occurences de Tableau (de Tableau(0) à Tableau(n), il te faudra sons doute faire sauter les guillemets restants. Michel |
||
|
|
00
|
|
|
#7 | ||
|
Invité de passage
![]() Analyste d'exploitation Inscription : août 2011 Messages : 9 ![]() |
Malheureusement, ça ne marche pas directement parce que les champs numériques peuvent se suivre dans le fichier sans être entrecoupé par un champs texte.
ex. ""TOTO", "12, rue BLABLA", "", 0.01, 123, 34, 0.45,"TATA"" En alternative, j'ai essayé d'importer les fichiers avec la commande DoCmd.TransferText avec des spec. d'importation comma delimited et double quote encased text, ça règle le problème des "" et des virgules, par contre je suis incapable de copier le nom du répertoire (Path) dans ma table et de plus une tonne de fichier d'erreur d'import sont automatiquement générés et ce malgré que tous les champs de ma table soit définie en texte (255) Code :
a+ |
||
|
|
00
|
|
|
#8 | ||||
|
Membre éclairé
![]() Michel Développeur informatique Inscription : février 2008 Messages : 263 ![]() |
En fait, j'avais basé ma réponse sur la ligne que tu nous avais donnée en exemple initialement :
Citation:
Citation:
Donc : "Texte,Texte,Texte,NB,NB,NB,NB,Texte" ? Sur cette base, il serait possible d'écrire : Code :
Résultat(0)="TOTO" Résultat(1)="12, rue BLABLA" Résultat(2)="" Résultat(3)="0.01" etc. Resultat(7)="TATA" Pourquoi faire simple quand JE peux faire compliqué Michel |
||||
|
|
00
|
|
|
#9 | |
|
Invité de passage
![]() Analyste d'exploitation Inscription : août 2011 Messages : 9 ![]() |
Bonjour Orion, non ce n'était qu'un exemple simplifié, pour la structure complète du fichier voir le texte suivant, pour un total de 90 colonnes à gérer. J'ai remplacé certain caractère par des X pour préserver la confidentialité des informations.
Merci Citation:
|
|
|
|
00
|
|
|
#10 |
|
Invité de passage
![]() Analyste d'exploitation Inscription : août 2011 Messages : 9 ![]() |
Je vais tester cette solution et je te reviens plus tard
|
|
|
00
|
|
|
#11 |
![]() ![]() René MAROTInscription : octobre 2005 Messages : 5 479 ![]() |
Si ta structure est constante, tu peux aussi regarder la vielle instruction Read, combinée à Open NomFic as #NumFic for Input et Close #NumFic, qui permet de lire des fichiers textes séquentiellement donc un enregistrement à la fois.
A+
__________________
Vous voulez une réponse rapide et efficace à vos questions téchniques ? Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs. |
|
|
00
|
|
|
#12 | ||
|
Invité de passage
![]() Analyste d'exploitation Inscription : août 2011 Messages : 9 ![]() |
Bonjour à tous,
Pour conclure ce fil, j'ai créé une nouvelle version de la fonction split qui tient compte des délimiteurs de texte. Cette fonction manipule une variable globale. Pour résumer; - lecture d'une ligne du fichier - Appel de la fonction SplitDelimText avec la ligne du fichier en argument - Écriture du résultat retourné colonne par colonne à partir du tableau StrTab() et d'un recordset collection fields. Voici le code de ma fonction Split, au cas où quelqu'un serait intéressé: Code :
|
||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com