[VB.NET 1.1][se repositionner dans un flux : BaseStream.Position BaseStream.Seek
ginkyo
Messages postés2Date d'inscriptionjeudi 21 août 2003StatutMembreDernière intervention21 août 2006
-
18 août 2006 à 19:16
ginkyo
Messages postés2Date d'inscriptionjeudi 21 août 2003StatutMembreDernière intervention21 août 2006
-
21 août 2006 à 10:14
Bonjour,
Je viens vers vous pour vous soumettre une chtite question :
J'ai besoin de récupérer la position (il n'existe pas de méthode pour récuperer juste le numéro de ligne) dans un flux, afin de la mettre à zéro pour lancer une recherche puis de retourner à la position initiale (avant la remise à zéro).
Dans la vrai vie j'ai un besoin d'intégrer dans un code vb un truc que l'on awk ou perl en deux temps trois mouvement : trouver les lignes qui ont 16 premiers octets identiques, si oui supprimer les lignes en doublons, en prenant soin de récupérer un champ (chiffres entre les caractères # et ; ) pour les additionner à la premier ligne et ainsi de suite.
Mon code :
Public Sub CompulserDoublon(ByVal strNom_Fichier As String)
Dim oFichier As System.IO.File
Dim sLigne As String
Dim arrLigne As Array
Dim iTailleLigne, iTailleLigne2, lLigneO, lLigneO2 As Long
Dim oFlux As New System.IO.FileStream(strNom_Fichier, IO.FileMode.Open, IO.FileAccess.ReadWrite, IO.FileShare.ReadWrite)
Dim oFluxLec As New System.IO.StreamReader(oFlux) ', True,System.Text.Encoding.ASCII )
Dim oFluxEcr As New System.IO.StreamWriter(oFlux)
Dim Regexp As Regex
Dim dQte, dQte2 As Double
Dim sPlop, sRecherche, sRecherche2, sRegx, sL As String
Dim sCompteur, sCompteur2 As Integer
Dim memStream As New MemoryStream(100)
Catch
oFluxLec.Close()
oFluxEcr.Close()
'sTempon = Nothing
End Try
End Sub
Le PB:
Je n'arrive pas à revenir à la position initiale :
'oFlux.Position() = lLigneO
'oFluxLec.BaseStream.Position() = lLigneO
oFluxLec.BaseStream.Seek(lLigneO, IO.SeekOrigin.Begin)
ne rend rien !
et donc à retourner dans la première boucle.
le type de fichier qu'il doit parser :
F40191937922____#145.31;F;1548;F40191__;010706;937922 AG010706; 145.31;PCFAC ;AC_;AA0706; ;300706;
F40191937922____#0.99;F;1548;F40191__;010706;937922 AG010706; 145.31;PCFAC ;AC_;AA0706; ;300706;
607100937922VIZZ#118.00;A;1548;607100__;010706;937922 AF010706; 118.00;PDFAC001548 ;AC_;AA0706;VIZZ; ;
606400937922VIZZ#3.50;D;1548;606400__;010706;937922 AT010706; 3.50;PDFAC001548 ;AC_;AA0706;VIZZ; ;
Les pb présentis :
+ Il n'y a pas de méthode get pour oFluxLec.BaseStream.Position() il est nécessaire d'utiliser
BaseStream.Seek
+ Mon fichier est en ASCII, vb utilise par défaut l'utf-8
+ Pour des raisons d'optimisation il se peut que la méthode position fonctionne par tranche de 1024 octets
En vous remerciant par avance pour votre aide précieuse.
ginkyo
Messages postés2Date d'inscriptionjeudi 21 août 2003StatutMembreDernière intervention21 août 2006 21 août 2006 à 10:14
à votre bon coeur msieur dame ....
(
"Il n'y a pas de méthode get pour oFluxLec.BaseStream.Position() il est nécessaire d'utiliser BaseStream.Seek"
Je voulais dire bien sûr :
Il n'y a pas de méthode SET pour oFluxLec.BaseStream.Position() il est nécessaire d'utiliser BaseStream.Seek
)