Lire les gros fichier ligne par ligne avec des Flux de données ADO?
Je veux utiliser ADO Flux de lire les lignes d'un local gros fichier texte avec l'encodage UTF-8 j'ai donc essayer
Set objStream = CreateObject("ADODB.Stream")
objStream.Charset = "utf-8"
objStream.Type = 2
objStream.Open
objStream.LoadFromFile = strFile
objStream.LineSeparator = 10
Do Until objStream.EOS
strLine = objStream.ReadText(-2)
Loop
Cependant, le résultat est que le script prend beaucoup de RAM et de CPU usages. Si il ya une façon de dire au script de ne pas charger tout le contenu du fichier dans la mémoire, mais il suffit de l'ouvrir et de le lire jusqu'à ce qu'il rencontre un séparateur de ligne?
si vous voulez commencer à la première lineseparator vous ne devriez pas en boucle jusqu'à l'EOS (fin des cours), je suis également pas sûr si vous avez changé votre lineseparator de la valeur par défaut CrLf à la Fl comme vous l'avez fait.
OriginalL'auteur Teiv | 2013-03-01
Vous devez vous connecter pour publier un commentaire.
Que vous travaillez avec
Stream
objet, je pense qu'il est évident, cependant,.LoadFromFile
de remplissage actuel de flux avec l'ensemble du contenu du fichier, et pas de n'importe quel cutomize option pour charger parial de données à partir d'un fichier.Comme pour la lecture 1 ligne, vous avez déjà fait cela avec
.ReadText(-2)
, (-2 = adReadLine).[MODIFIER] eh Bien, pour .LineSeparator vous pouvez utiliser seulement 3 constantes:
Si vous avez besoin de casser votre
Do..Loop
à la lettre, comme.ReadText
est le seul choix pour la lecture de flux de texte, vous pouvez l'utiliser en conjonction avecInStr
fonction etExit Do
alors vous trouverez votre séparateur personnalisé.Peu de temps, c'est l'optimisation de l'ensemble que vous pouvez faire (ou au moins autant que je sache).
Ok, probablement que j'ai mal compris votre question, je vais mettre à jour ma réponse ensuite.
OriginalL'auteur Panayot Karabakalov
Si vous regardez cet extrait de J. T. Roff est ADO livre, vous verrez que, en théorie, vous pouvez lire un fichier ligne par ligne (sans le charger complètement en mémoire). J'ai essayé d'utiliser le fichier: protocoll /dans le paramètre source, mais n'a pas réussi.
Donc, nous allons essayer une autre approche: Pour traiter l' .fichier txt comme un encodés en utf-8 trivial (une colonne) ADO table de base de données, vous avez besoin d'un schéma.fichier ini dans le répertoire source:
Alors vous pouvez faire:
Pour certains regard de fond ici.
sTDir
, "C:/lib/linesutf8.txt", "C:/lib", "C:/lib/", "C:\lib\linesutf8.txt", "C:\lib", "C:\lib\" et d'échec. MerciSi vous obtenez un "Fournisseur pas trouvé d'erreur", alors quelque chose est incorrect avec le "Provider=..." propriété ou votre ADO installer. sTDir est le dossier de la .fichier txt (et le schéma.fichier ini) résident dans.
Le chemin d'accès à mon fichier texte est c:\test.txt et c'était ma tentative de pastebin.com/r4Zm1N4d . J'ai ouvert l'invite de commande et de l'exécution du script mais je n'ai eu "Pas assez de mémoire disponible pour traiter cette commande" (80078008) sur la ligne 10, qui est "WScript.Stdin.Readline" . Avez-vous une idée sur cette erreur?
utilisez "\" pour le séparateur de chemin, la ligne 10 est le ".Ouvrir", est-il "travailler" avec un petit fichier?
Je pense que votre dernier commentaire est de user433531, droit? 😉
OriginalL'auteur Ekkehard.Horner