2017-06-22 4 views
1

J'ai un fichier texte et il a plus de 85k lignes Y at-il un moyen de définir la ligne de départ? Par exemple; J'ai déjà lu et écrit les lignes 1-10 dans un autre fichier et je veux obtenir une valeur à la ligne 12 pour l'ajouter dans la dernière ligne que j'ai écrite. Je veux seulement lire la ligne 12.Existe-t-il un moyen de définir la ligne de lecture de départ dans vbscript?

  1. Texte/échantillon/1/GetValue/12
  2. Texte/échantillon/2/GetValue/11
  3. Texte/échantillon/3/GetValue/10
  4. Text/échantillon/4/GetValue/9
  5. Text/échantillon/5/GetValue/8
  6. Text/échantillon/6/GetValue/7
  7. Text/échantillon/7/GetValue/6
  8. Text/échantillon/8/GetValue/5
  9. Text/échantillon/9/GetValue/4
  10. Text/échantillon/10/GetValue/3
  11. Text/échantillon/11/GetValue/2
  12. texte/échantillon/12/GetValue/1
+1

lecture/écriture de fichiers ne fonctionne pas de cette façon sur les ordinateurs. –

+0

@Edss Vérifie ma réponse! – Hackoo

+0

Merci @Hackoo; Mais j'ai déjà trouvé une solution en utilisant Readall et je travaille sur Split et Do Loop – Edss

Répondre

3

L'objet TextStream fournit avant la lecture séquentielle uniquement. Voir les documents pour .Skip, .SkipLine, .Read, .ReadLine et .ReadAll.

Donc, vous devez sauter/lire à la position désirée, ou faire une chaîne Mid travailler sur le contenu complet (.Readall) du fichier.

+0

J'utilise actuellement skipline mais toujours pas assez, merci pour le conseil! :) – Edss

+0

Si vous voulez lire une ligne spécifique (disons 12ème), utilisez simplement la méthode skipline 11 fois (peut être dans une boucle) et lisez la 12ème ligne. Quel code avez-vous écrit jusqu'ici? Postez-le ici afin que nous puissions signaler l'erreur (s). – Gurman

+0

N'y a-t-il pas d'autre moyen que skipline? Pour i = 1 à 10 \t iOpen.SkipLine Suivant – Edss

0

Voici un exemple de fonction qui peut fait l'affaire pour vous:

Option Explicit 
Dim Title,FromLine,ToLine,fso,Readfile,strBuff,InputFile,TotalNbLines 
Title = "Extract Lines From TextFile" 
InputFile = "c:\test.txt" 
Set fso = CreateObject("Scripting.FileSystemObject") 
Set Readfile = Fso.OpenTextFile(InputFile,1) 
strBuff = Readfile.ReadAll 
TotalNbLines = Readfile.Line 
Readfile.Close 
'******************************************************************************************************* 
MsgBox "The total number of lines in this file """& InputFile &""" = "& TotalNbLines,VbInformation,Title 
'******************************************************************************************************* 
MsgBox "Extract the 3 last lines" & vbcrlf & vbcrlf &_ 
ExtractLinesFromTextFile(InputFile,TotalNbLines - 2,TotalNbLines),64,Title 'To extract the 3 last lines 
'******************************************************************************************************* 
MsgBox "Extract line from line 1 to 2" & vbcrlf & vbcrlf &_ 
ExtractLinesFromTextFile(InputFile,1,2),64,Title 'Extract line from line 1 to 2 
'******************************************************************************************************* 
MsgBox "Extract line N°2" & vbcrlf & vbcrlf &_ 
ExtractLinesFromTextFile(InputFile,2,2),64,Title 'Extract line N°2 
'******************************************************************************************************* 
MsgBox "Extract line from line 1 to 5" & vbcrlf & vbcrlf &_ 
ExtractLinesFromTextFile(InputFile,1,5),64,Title 'Extract line from line 1 to 5 
'******************************************************************************************************* 
MsgBox "Extract line from line 1 to 10" & vbcrlf & vbcrlf &_ 
ExtractLinesFromTextFile(InputFile,1,10),64,Title'Extract line from line 1 to 10 
'******************************************************************************************************* 
MsgBox "Extract line N° 12" & vbcrlf & vbcrlf &_ 
ExtractLinesFromTextFile(InputFile,12,12),64,Title'Extract line N° 12 
'********************************************************************************************************* 
Public Function ExtractLinesFromTextFile(ByRef TextFile, ByRef FromLine, ByRef ToLine) '<-- Inclusive 
    Const TristateUseDefault = -2 'To Open the file using the system default. 
    On Error Resume Next 
    If FromLine <= ToLine Then 
     With CreateObject("Scripting.FileSystemObject").OpenTextFile(TextFile,1,true,TristateUseDefault) 
      If Err.number <> 0 Then 
       MsgBox err.description,16,err.description 
       Exit Function 
      Else 
       Do Until .Line = FromLine Or .AtEndOfStream 
        .SkipLine 
       Loop 
       Do Until .Line > ToLine Or .AtEndOfStream 
        ExtractLinesFromTextFile = ExtractLinesFromTextFile & (.ReadLine & vbNewLine) 
       Loop 
      End If 
     End With 
    Else 
     MsgBox "Error to Read Line in TextFile", vbCritical,"Error to Read Line in TextFile" 
    End If 
End Function 
'*********************************************************************************************************