Bonjour
j'ai vu pas mal d'exemple pour exploiter le contenu d'un fichier, seulement
ca fait un petit moment que je butte sur ceci:
- Comment copier dans un nouveau fichier les n dernieres lignes d'un autre
fichier
De plus si y a un moyen de ne pas compter la totalitée des lignes car mon
fichier fait environ 800 000 lignes alors le comptage prend plusieurs
minutes. Je me demandai si un truc du genre endofstream -100 ou quelque
chose comme ca n'existait pas :)
Bref mes connaissances vbs sont limitées pour aller plus loin dans ce genre
de chose si vous avez une idée
j'ai vu pas mal d'exemple pour exploiter le contenu d'un fichier, seulement ca fait un petit moment que je butte sur ceci: - Comment copier dans un nouveau fichier les n dernieres lignes d'un autre fichier De plus si y a un moyen de ne pas compter la totalitée des lignes car mon fichier fait environ 800 000 lignes alors le comptage prend plusieurs minutes. Je me demandai si un truc du genre endofstream -100 ou quelque chose comme ca n'existait pas :)
Rien n'existe pour cela (à ma connaissance). Avec vbs, dans un fichier texte, la lecture étant séquentielle, tu dois lire toutes les lignes depuis le début. Si tu connais le nombre de lignes à copier, tu peux utiliser la technique du buffer circulaire. Un tableau de N chaînes. Un pointeur que tu incrémentes à chaque lecture et que tu remets à zéro quand la fin du tableau est atteinte. Ainsi, la N+1ème chaîne écrasera la première lue (N+2 la deuxième etc ...) À la fin du fichier, tu aura donc bien dans ton tableau les N dernières lignes lues. Pas besoin de revenir en arrière ou de recommencer depuis le début.
Je ne pense pas que cela soit si long, même avec 800000 lignes. Tu utilises ReadLine ?
-- Fred
Dans : news:ulpj0NyZHHA.3984@TK2MSFTNGP02.phx.gbl,
technicland disait :
Bonjour
Bonjour,
j'ai vu pas mal d'exemple pour exploiter le contenu d'un fichier,
seulement ca fait un petit moment que je butte sur ceci:
- Comment copier dans un nouveau fichier les n dernieres lignes d'un
autre fichier
De plus si y a un moyen de ne pas compter la totalitée des lignes car
mon fichier fait environ 800 000 lignes alors le comptage prend
plusieurs minutes. Je me demandai si un truc du genre endofstream
-100 ou quelque chose comme ca n'existait pas :)
Rien n'existe pour cela (à ma connaissance).
Avec vbs, dans un fichier texte, la lecture étant séquentielle, tu dois
lire toutes les lignes depuis le début.
Si tu connais le nombre de lignes à copier, tu peux utiliser la
technique du buffer circulaire.
Un tableau de N chaînes.
Un pointeur que tu incrémentes à chaque lecture et que tu remets à zéro
quand la fin du tableau est atteinte.
Ainsi, la N+1ème chaîne écrasera la première lue (N+2 la deuxième etc
...)
À la fin du fichier, tu aura donc bien dans ton tableau les N dernières
lignes lues. Pas besoin de revenir en arrière ou de recommencer depuis
le début.
Je ne pense pas que cela soit si long, même avec 800000 lignes. Tu
utilises ReadLine ?
j'ai vu pas mal d'exemple pour exploiter le contenu d'un fichier, seulement ca fait un petit moment que je butte sur ceci: - Comment copier dans un nouveau fichier les n dernieres lignes d'un autre fichier De plus si y a un moyen de ne pas compter la totalitée des lignes car mon fichier fait environ 800 000 lignes alors le comptage prend plusieurs minutes. Je me demandai si un truc du genre endofstream -100 ou quelque chose comme ca n'existait pas :)
Rien n'existe pour cela (à ma connaissance). Avec vbs, dans un fichier texte, la lecture étant séquentielle, tu dois lire toutes les lignes depuis le début. Si tu connais le nombre de lignes à copier, tu peux utiliser la technique du buffer circulaire. Un tableau de N chaînes. Un pointeur que tu incrémentes à chaque lecture et que tu remets à zéro quand la fin du tableau est atteinte. Ainsi, la N+1ème chaîne écrasera la première lue (N+2 la deuxième etc ...) À la fin du fichier, tu aura donc bien dans ton tableau les N dernières lignes lues. Pas besoin de revenir en arrière ou de recommencer depuis le début.
Je ne pense pas que cela soit si long, même avec 800000 lignes. Tu utilises ReadLine ?
-- Fred
Jacques Barathon [MS]
"technicland" wrote in message news:
Bonjour j'ai vu pas mal d'exemple pour exploiter le contenu d'un fichier, seulement ca fait un petit moment que je butte sur ceci: - Comment copier dans un nouveau fichier les n dernieres lignes d'un autre fichier De plus si y a un moyen de ne pas compter la totalitée des lignes car mon fichier fait environ 800 000 lignes alors le comptage prend plusieurs minutes. Je me demandai si un truc du genre endofstream -100 ou quelque chose comme ca n'existait pas :)
Je ne crois pas que ça existe tel que tu le souhaiterais, à moins que quelque chose m'échappe (possible, vu ma connaissance moyenne de VBS :-)). Si j'ai raison, il faudra en effet lire la totalité du fichier avant de faire l'opération de suppression.
Je ne fournirai pas la solution en VBS, n'étant pas assez habitué aux manipulations du FSO et autres objets liés aux fichiers pour donner une réponse optimale. Je me contenterai de t'indiquer une solution en PowerShell, que je t'invite à découvrir si tu ne l'as pas encore fait. Sous PowerShell tu peux lire l'intégralité du contenu de ton fichier dans une variable (qui sera stockée comme un tableau), puis indiquer à PowerShell d'écrire le contenu du tableau des lignes "total - n" à "total" où total correspond au nombre de lignes total et n le nombre de lignes de fin que tu veux recopier. Ca donne un script comme ça par exemple:
L'exemple ci-dessus copiera les 100 dernières lignes de source.log dans resultat.log. Si un fichier resultat.log existait déjà, il sera écrasé. Pour éviter cela et ajouter les lignes à la fin du fichier existant, tu peux ajouter le paramètre -append:
"technicland" <webmasterpasdepourriels@technicland.com> wrote in message
news:ulpj0NyZHHA.3984@TK2MSFTNGP02.phx.gbl...
Bonjour
j'ai vu pas mal d'exemple pour exploiter le contenu d'un fichier,
seulement ca fait un petit moment que je butte sur ceci:
- Comment copier dans un nouveau fichier les n dernieres lignes d'un autre
fichier
De plus si y a un moyen de ne pas compter la totalitée des lignes car mon
fichier fait environ 800 000 lignes alors le comptage prend plusieurs
minutes. Je me demandai si un truc du genre endofstream -100 ou quelque
chose comme ca n'existait pas :)
Je ne crois pas que ça existe tel que tu le souhaiterais, à moins que
quelque chose m'échappe (possible, vu ma connaissance moyenne de VBS :-)).
Si j'ai raison, il faudra en effet lire la totalité du fichier avant de
faire l'opération de suppression.
Je ne fournirai pas la solution en VBS, n'étant pas assez habitué aux
manipulations du FSO et autres objets liés aux fichiers pour donner une
réponse optimale. Je me contenterai de t'indiquer une solution en
PowerShell, que je t'invite à découvrir si tu ne l'as pas encore fait. Sous
PowerShell tu peux lire l'intégralité du contenu de ton fichier dans une
variable (qui sera stockée comme un tableau), puis indiquer à PowerShell
d'écrire le contenu du tableau des lignes "total - n" à "total" où total
correspond au nombre de lignes total et n le nombre de lignes de fin que tu
veux recopier. Ca donne un script comme ça par exemple:
L'exemple ci-dessus copiera les 100 dernières lignes de source.log dans
resultat.log. Si un fichier resultat.log existait déjà, il sera écrasé. Pour
éviter cela et ajouter les lignes à la fin du fichier existant, tu peux
ajouter le paramètre -append:
Bonjour j'ai vu pas mal d'exemple pour exploiter le contenu d'un fichier, seulement ca fait un petit moment que je butte sur ceci: - Comment copier dans un nouveau fichier les n dernieres lignes d'un autre fichier De plus si y a un moyen de ne pas compter la totalitée des lignes car mon fichier fait environ 800 000 lignes alors le comptage prend plusieurs minutes. Je me demandai si un truc du genre endofstream -100 ou quelque chose comme ca n'existait pas :)
Je ne crois pas que ça existe tel que tu le souhaiterais, à moins que quelque chose m'échappe (possible, vu ma connaissance moyenne de VBS :-)). Si j'ai raison, il faudra en effet lire la totalité du fichier avant de faire l'opération de suppression.
Je ne fournirai pas la solution en VBS, n'étant pas assez habitué aux manipulations du FSO et autres objets liés aux fichiers pour donner une réponse optimale. Je me contenterai de t'indiquer une solution en PowerShell, que je t'invite à découvrir si tu ne l'as pas encore fait. Sous PowerShell tu peux lire l'intégralité du contenu de ton fichier dans une variable (qui sera stockée comme un tableau), puis indiquer à PowerShell d'écrire le contenu du tableau des lignes "total - n" à "total" où total correspond au nombre de lignes total et n le nombre de lignes de fin que tu veux recopier. Ca donne un script comme ça par exemple:
L'exemple ci-dessus copiera les 100 dernières lignes de source.log dans resultat.log. Si un fichier resultat.log existait déjà, il sera écrasé. Pour éviter cela et ajouter les lignes à la fin du fichier existant, tu peux ajouter le paramètre -append:
Je ne fournirai pas la solution en VBS, n'étant pas assez habitué aux manipulations du FSO et autres objets liés aux fichiers pour donner une réponse optimale. Je me contenterai de t'indiquer une solution en PowerShell, que je t'invite à découvrir si tu ne l'as pas encore fait.
Lut Malheureusement je suis obligé de m en tenir a VBS c'est des serveurs en 2000 ou 2003 et je ne peux pas installer ce que je veux d apres ce que j'ai lu y a des trucs a installer pour PowerShell Laurent
Jacques Barathon [MS] wrote:
Je ne fournirai pas la solution en VBS, n'étant pas assez habitué aux
manipulations du FSO et autres objets liés aux fichiers pour donner
une réponse optimale. Je me contenterai de t'indiquer une solution en
PowerShell, que je t'invite à découvrir si tu ne l'as pas encore
fait.
Lut
Malheureusement je suis obligé de m en tenir a VBS c'est des serveurs en
2000 ou 2003 et je ne peux pas installer ce que je veux d apres ce que j'ai
lu y a des trucs a installer pour PowerShell
Laurent
Je ne fournirai pas la solution en VBS, n'étant pas assez habitué aux manipulations du FSO et autres objets liés aux fichiers pour donner une réponse optimale. Je me contenterai de t'indiquer une solution en PowerShell, que je t'invite à découvrir si tu ne l'as pas encore fait.
Lut Malheureusement je suis obligé de m en tenir a VBS c'est des serveurs en 2000 ou 2003 et je ne peux pas installer ce que je veux d apres ce que j'ai lu y a des trucs a installer pour PowerShell Laurent
Jacques93
Bonjour technicland,
Jacques Barathon [MS] wrote:
Je ne fournirai pas la solution en VBS, n'étant pas assez habitué aux manipulations du FSO et autres objets liés aux fichiers pour donner une réponse optimale. Je me contenterai de t'indiquer une solution en PowerShell, que je t'invite à découvrir si tu ne l'as pas encore fait.
Lut Malheureusement je suis obligé de m en tenir a VBS c'est des serveurs en 2000 ou 2003 et je ne peux pas installer ce que je veux d apres ce que j'ai lu y a des trucs a installer pour PowerShell Laurent
Peut être une piste : faire une recherche sur 'tail windows'
-- Cordialement,
Jacques.
Bonjour technicland,
Jacques Barathon [MS] wrote:
Je ne fournirai pas la solution en VBS, n'étant pas assez habitué aux
manipulations du FSO et autres objets liés aux fichiers pour donner
une réponse optimale. Je me contenterai de t'indiquer une solution en
PowerShell, que je t'invite à découvrir si tu ne l'as pas encore
fait.
Lut
Malheureusement je suis obligé de m en tenir a VBS c'est des serveurs en
2000 ou 2003 et je ne peux pas installer ce que je veux d apres ce que j'ai
lu y a des trucs a installer pour PowerShell
Laurent
Peut être une piste : faire une recherche sur 'tail windows'
Je ne fournirai pas la solution en VBS, n'étant pas assez habitué aux manipulations du FSO et autres objets liés aux fichiers pour donner une réponse optimale. Je me contenterai de t'indiquer une solution en PowerShell, que je t'invite à découvrir si tu ne l'as pas encore fait.
Lut Malheureusement je suis obligé de m en tenir a VBS c'est des serveurs en 2000 ou 2003 et je ne peux pas installer ce que je veux d apres ce que j'ai lu y a des trucs a installer pour PowerShell Laurent
Peut être une piste : faire une recherche sur 'tail windows'
-- Cordialement,
Jacques.
Jacques93
Peut être une piste : faire une recherche sur 'tail windows'
Lut merci mais je ne veux rien avoir a installer ou copier sur les serveurs mis a part les scripts Laurent
technicland
Fred wrote:
Rien n'existe pour cela (à ma connaissance). Avec vbs, dans un fichier texte, la lecture étant séquentielle, tu dois lire toutes les lignes depuis le début. Si tu connais le nombre de lignes à copier, tu peux utiliser la technique du buffer circulaire. Un tableau de N chaînes. Un pointeur que tu incrémentes à chaque lecture et que tu remets à zéro quand la fin du tableau est atteinte. Ainsi, la N+1ème chaîne écrasera la première lue (N+2 la deuxième etc ...) À la fin du fichier, tu aura donc bien dans ton tableau les N dernières lignes lues. Pas besoin de revenir en arrière ou de recommencer depuis le début.
Je ne pense pas que cela soit si long, même avec 800000 lignes. Tu utilises ReadLine ?
Salut oui c'est ReadLine la j'arrive a sortir la derniere ligne et mais j'en voudrais environ 500 et j ai du mal avec les tableaux! Voici un script trouvé sur google qui affiche la derniere ligne et le temps d'execution pour 140Mo 30seondes
myFile = "C:fichier.txt" Set fso = CreateObject("Scripting.FileSystemObject") Const ForReading = 1 ', ForWriting = 2 Set s = fso.OpenTextFile(myFile, ForReading)
StartTime = Timer Do until s.AtEndOfStream LastLine = s.ReadLine Loop
Rien n'existe pour cela (à ma connaissance).
Avec vbs, dans un fichier texte, la lecture étant séquentielle, tu
dois lire toutes les lignes depuis le début.
Si tu connais le nombre de lignes à copier, tu peux utiliser la
technique du buffer circulaire.
Un tableau de N chaînes.
Un pointeur que tu incrémentes à chaque lecture et que tu remets à
zéro quand la fin du tableau est atteinte.
Ainsi, la N+1ème chaîne écrasera la première lue (N+2 la deuxième etc
...)
À la fin du fichier, tu aura donc bien dans ton tableau les N
dernières lignes lues. Pas besoin de revenir en arrière ou de
recommencer depuis le début.
Je ne pense pas que cela soit si long, même avec 800000 lignes. Tu
utilises ReadLine ?
Salut
oui c'est ReadLine la j'arrive a sortir la derniere ligne et mais j'en
voudrais environ 500 et j ai du mal avec les tableaux!
Voici un script trouvé sur google qui affiche la derniere ligne et le temps
d'execution pour 140Mo 30seondes
myFile = "C:fichier.txt"
Set fso = CreateObject("Scripting.FileSystemObject")
Const ForReading = 1 ', ForWriting = 2
Set s = fso.OpenTextFile(myFile, ForReading)
StartTime = Timer
Do until s.AtEndOfStream
LastLine = s.ReadLine
Loop
Rien n'existe pour cela (à ma connaissance). Avec vbs, dans un fichier texte, la lecture étant séquentielle, tu dois lire toutes les lignes depuis le début. Si tu connais le nombre de lignes à copier, tu peux utiliser la technique du buffer circulaire. Un tableau de N chaînes. Un pointeur que tu incrémentes à chaque lecture et que tu remets à zéro quand la fin du tableau est atteinte. Ainsi, la N+1ème chaîne écrasera la première lue (N+2 la deuxième etc ...) À la fin du fichier, tu aura donc bien dans ton tableau les N dernières lignes lues. Pas besoin de revenir en arrière ou de recommencer depuis le début.
Je ne pense pas que cela soit si long, même avec 800000 lignes. Tu utilises ReadLine ?
Salut oui c'est ReadLine la j'arrive a sortir la derniere ligne et mais j'en voudrais environ 500 et j ai du mal avec les tableaux! Voici un script trouvé sur google qui affiche la derniere ligne et le temps d'execution pour 140Mo 30seondes
myFile = "C:fichier.txt" Set fso = CreateObject("Scripting.FileSystemObject") Const ForReading = 1 ', ForWriting = 2 Set s = fso.OpenTextFile(myFile, ForReading)
StartTime = Timer Do until s.AtEndOfStream LastLine = s.ReadLine Loop
"technicland" a écrit dans le message de news: | Bonjour
Bonjour,
| j'ai vu pas mal d'exemple pour exploiter le contenu d'un fichier, | seulement ca fait un petit moment que je butte sur ceci: | - Comment copier dans un nouveau fichier les n dernieres lignes d'un | autre fichier | De plus si y a un moyen de ne pas compter la totalitée des lignes car | mon fichier fait environ 800 000 lignes alors le comptage prend | plusieurs minutes. Je me demandai si un truc du genre endofstream | -100 ou quelque chose comme ca n'existait pas :)
Affichage des N dernières lignes d'un fichier texte Note : Une ligne se termine par la séquence CRLF (Windows)
+++ Exemple cscript PopLastNLines.vbs d:testfile.txt 300
--- PopLastNLines.vbs ---
strStart=Now Set oFs=CreateObject("Scripting.FileSystemObject") Set oFile=oFs.OpenTextFile (WScript.Arguments(0),1) arrLines=Split (oFile.ReadAll, VBCrLf) For i=1 To WScript.Arguments(1) WScript.Echo arrLines (UBound (arrLines) - i) Next WScript.Echo strStart WScript.Echo Now
--- PopLastNLines.vbs ---
Temps de traitement : < 40 secondes (affichage inclus)
- Tests réalisés sur un fichier texte de 800 000 lignes - Les lignes sont composées de 80 caractères suivis d'un CrLf - Plateforme Pentium M 1500MHz 512 Mo - Mémoire physique disponible < 140 Mo
"technicland" <webmasterpasdepourriels@technicland.com> a écrit dans le
message de news:ulpj0NyZHHA.3984@TK2MSFTNGP02.phx.gbl
| Bonjour
Bonjour,
| j'ai vu pas mal d'exemple pour exploiter le contenu d'un fichier,
| seulement ca fait un petit moment que je butte sur ceci:
| - Comment copier dans un nouveau fichier les n dernieres lignes d'un
| autre fichier
| De plus si y a un moyen de ne pas compter la totalitée des lignes car
| mon fichier fait environ 800 000 lignes alors le comptage prend
| plusieurs minutes. Je me demandai si un truc du genre endofstream
| -100 ou quelque chose comme ca n'existait pas :)
Affichage des N dernières lignes d'un fichier texte
Note : Une ligne se termine par la séquence CRLF (Windows)
+++ Exemple
cscript PopLastNLines.vbs d:testfile.txt 300
--- PopLastNLines.vbs ---
strStart=Now
Set oFs=CreateObject("Scripting.FileSystemObject")
Set oFile=oFs.OpenTextFile (WScript.Arguments(0),1)
arrLines=Split (oFile.ReadAll, VBCrLf)
For i=1 To WScript.Arguments(1)
WScript.Echo arrLines (UBound (arrLines) - i)
Next
WScript.Echo strStart
WScript.Echo Now
--- PopLastNLines.vbs ---
Temps de traitement : < 40 secondes (affichage inclus)
- Tests réalisés sur un fichier texte de 800 000 lignes
- Les lignes sont composées de 80 caractères suivis d'un CrLf
- Plateforme Pentium M 1500MHz 512 Mo
- Mémoire physique disponible < 140 Mo
"technicland" a écrit dans le message de news: | Bonjour
Bonjour,
| j'ai vu pas mal d'exemple pour exploiter le contenu d'un fichier, | seulement ca fait un petit moment que je butte sur ceci: | - Comment copier dans un nouveau fichier les n dernieres lignes d'un | autre fichier | De plus si y a un moyen de ne pas compter la totalitée des lignes car | mon fichier fait environ 800 000 lignes alors le comptage prend | plusieurs minutes. Je me demandai si un truc du genre endofstream | -100 ou quelque chose comme ca n'existait pas :)
Affichage des N dernières lignes d'un fichier texte Note : Une ligne se termine par la séquence CRLF (Windows)
+++ Exemple cscript PopLastNLines.vbs d:testfile.txt 300
--- PopLastNLines.vbs ---
strStart=Now Set oFs=CreateObject("Scripting.FileSystemObject") Set oFile=oFs.OpenTextFile (WScript.Arguments(0),1) arrLines=Split (oFile.ReadAll, VBCrLf) For i=1 To WScript.Arguments(1) WScript.Echo arrLines (UBound (arrLines) - i) Next WScript.Echo strStart WScript.Echo Now
--- PopLastNLines.vbs ---
Temps de traitement : < 40 secondes (affichage inclus)
- Tests réalisés sur un fichier texte de 800 000 lignes - Les lignes sont composées de 80 caractères suivis d'un CrLf - Plateforme Pentium M 1500MHz 512 Mo - Mémoire physique disponible < 140 Mo