[R] Effacer une ligne et agrandir une page

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Bonjour
Niveau 5
Niveau 5
Messages : 138
Enregistré le : ven. 06 juin 2014 08:27
Status : Hors ligne

[R] Effacer une ligne et agrandir une page

#1

Message 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
Modifié en dernier par Bonjour le dim. 22 juin 2014 09:39, modifié 1 fois.
Avatar du membre
jguinch
Modérateur
Modérateur
Messages : 2515
Enregistré le : lun. 14 févr. 2011 22:12
Status : Hors ligne

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

#2

Message 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 ?
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
Bonjour
Niveau 5
Niveau 5
Messages : 138
Enregistré le : ven. 06 juin 2014 08:27
Status : Hors ligne

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

#3

Message par Bonjour »

Merci pour la premiere astuce

C'est par rapport à un numéro de ligne
Avatar du membre
jguinch
Modérateur
Modérateur
Messages : 2515
Enregistré le : lun. 14 févr. 2011 22:12
Status : Hors ligne

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

#4

Message 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...
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
Bonjour
Niveau 5
Niveau 5
Messages : 138
Enregistré le : ven. 06 juin 2014 08:27
Status : Hors ligne

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

#5

Message par Bonjour »

Si j'ai bien compris ton programme fait une copie du texte mais sans la ligne à supprimer c'est ça ?
Avatar du membre
jguinch
Modérateur
Modérateur
Messages : 2515
Enregistré le : lun. 14 févr. 2011 22:12
Status : Hors ligne

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

#6

Message 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...)
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
Bonjour
Niveau 5
Niveau 5
Messages : 138
Enregistré le : ven. 06 juin 2014 08:27
Status : Hors ligne

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

#7

Message 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 ?
Avatar du membre
jguinch
Modérateur
Modérateur
Messages : 2515
Enregistré le : lun. 14 févr. 2011 22:12
Status : Hors ligne

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

#8

Message 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
 
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2284
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

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

#9

Message 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.
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
Répondre