Page 1 sur 1

[R] Effacer une ligne et agrandir une page

Posté : ven. 20 juin 2014 10:49
par Bonjour
Bonjour j'aimerai savoir comment effacer une ligne contenu dans un edit et dans un fichier txt et aussi comment agrandir une page internet j'ai essayer avec ce code mais ça ne marche pas

Code : Tout sélectionner

#include <IE.au3>
$internet=_IECreate("www.google.com")
WinSetState($internet,"",@SW_MAXIMIZE)
 
merci d'avance

Re: [...] Effacer une ligne et agrandir une page

Posté : ven. 20 juin 2014 11:10
par jguinch
Pour l'agrandissement, il faut travailler avec le titre de la fenêtre ou le handle.
Ici, $internet représente l'objet "Internet Explorer".
Tu peux récupérer me handle avec _IEPropertyGet :
► Afficher le texte
Pour effacer une ligne, ça dépend... c'est par rapport à un numéro de ligne, par rapport à du texte ?

Re: [...] Effacer une ligne et agrandir une page

Posté : ven. 20 juin 2014 11:16
par Bonjour
Merci pour la premiere astuce

C'est par rapport à un numéro de ligne

Re: [...] Effacer une ligne et agrandir une page

Posté : ven. 20 juin 2014 11:53
par jguinch
Voilà, pour supprimer un ligne dans un fichier, en fonction du numéro de ligne :
► Afficher le texte
Pour effacer la ligne dans ton Edit, il te suffit de lire le contenu du fichier, et l'afficher dans ton edit...

Re: [...] Effacer une ligne et agrandir une page

Posté : ven. 20 juin 2014 12:31
par Bonjour
Si j'ai bien compris ton programme fait une copie du texte mais sans la ligne à supprimer c'est ça ?

Re: [...] Effacer une ligne et agrandir une page

Posté : ven. 20 juin 2014 13:01
par jguinch
Oui c'est ça, en passant par un tableau, pour écriture dans le fichier (j'aurais pu écrire directement dans le fichier en fait...)

Re: [...] Effacer une ligne et agrandir une page

Posté : ven. 20 juin 2014 13:02
par Bonjour
Ok j'y avais pensé mais je trouvais ça problématique pour les très gros fichier, il n'y a pas d'autre façon ?

Re: [...] Effacer une ligne et agrandir une page

Posté : ven. 20 juin 2014 15:22
par jguinch
J'ai éditer mon code. (suppression d'une boucle inutile)
Par contre, je ne vois pas d'autre solution. :?:
A mon avis, on est bien obligé de lire le fichier et de l'écrire pour faire la modification. Après, on peut optimiser un peu le code en utilisant un seul FileWrite au lieu d'un FileWriteLine à chaque ligne, mais ça sera toujours la même technique...
Si quelqu'un a une autre idée ?

Edit : je viens de faire des tests en comparant l'écriture dans le fichier avec FileWriteLine pour chaque ligne et l'écriture une seule fois avec FileWrite : la différence est flagrante.
Pour un fichier d'1 million de lignes, 17 secondes pour le premier test contre 7 secondes pour le deuxième !

Code : Tout sélectionner

#Include <Array.au3>

Local $timer = TimerInit()
Local $sFile = @Scriptdir & "\myFile.txt"
Local $iret = _FileDeleteLine($sFile, 0) ; Deletes the first line in the file
ConsoleWrite ( (TimerDiff($timer) / 1000) & "secondes pour _FileDeleteLine" & @CRLF)

Local $timer = TimerInit()
Local $sFile = @Scriptdir & "\myFile.txt"
Local $iret = _FileDeleteLine2($sFile, 0) ; Deletes the first line in the file
ConsoleWrite ( (TimerDiff($timer) / 1000) & "secondes pour _FileDeleteLine2" & @CRLF)


; #FUNCTION# ====================================================================================================================
; Name ..........: _FileDeleteLine
; Description ...: Deletes a line in a file, from the line number
; Syntax ........: _FileDeleteLine($sFilename, $iLineNumber)
; Parameters ....: $sFilename           - Path and filename of the file to be delete line in.
;                  $iLineNumber         - Line number to delete (starts to 1).
; Return values .: Success : retuns 1
;                  Failure : return 0 and sets @error to :
;                              - 1 : Error opening specified file
;                              - 2 : File could not be written to
; Author ........: JGUINCH
; ===============================================================================================================================
Func _FileDeleteLine($sFilename, $iLineNumber)
    If NOT FileExists($sFilename) Then Return SetError(1, 0, 0)

    Local $aContent = FileReadToArray ($sFilename)
   
    Local $hFile = FileOpen($sFilename, 2)
    If $hFile = -1 Then Return SetError(2, 0, 0)

    For $i = 0 To UBound($aContent) - 1
        If $i = $iLineNumber - 1 Then ContinueLoop
        FileWriteLine($hFile, $aContent[$i])
    Next
    FileClose($hFile)

    Return 1
EndFunc


; #FUNCTION# ====================================================================================================================
; Name ..........: _FileDeleteLine2
; Description ...: Deletes a line in a file, from the line number
; Syntax ........: _FileDeleteLine2($sFilename, $iLineNumber)
; Parameters ....: $sFilename           - Path and filename of the file to be delete line in.
;                  $iLineNumber         - Line number to delete (starts to 1).
; Return values .: Success : retuns 1
;                  Failure : return 0 and sets @error to :
;                              - 1 : Error opening specified file
;                              - 2 : File could not be written to
; Author ........: JGUINCH
; ===============================================================================================================================
Func _FileDeleteLine2($sFilename, $iLineNumber)
    If NOT FileExists($sFilename) Then Return SetError(1, 0, 0)

    Local $aContent = FileReadToArray ($sFilename)
    Local $sNewContent
   
    Local $hFile = FileOpen($sFilename, 2)
    If $hFile = -1 Then Return SetError(2, 0, 0)

    For $i = 0 To UBound($aContent) - 1
        If $i = $iLineNumber - 1 Then ContinueLoop
        $sNewContent &= $aContent[$i] & @CRLF
    Next
    
    $sNewContent = StringRegExpReplace($sNewContent, "\R$", "")
    FileWrite($hFile, $sNewContent)
    FileClose($hFile)

    Return 1
EndFunc
 

Re: [...] Effacer une ligne et agrandir une page

Posté : ven. 20 juin 2014 17:08
par jchd
On peut aussi lire la seule fin du fichier si l'on sait à partir d'où le faire et l'écrire à la fin de la partie de tête qu'on souhaite conserver (FileSetPos). Mais bien sûr, il faut découvrir où est la partie à évincer.