Deutsches AutoHotkey Homepage AutoHotkey Community
Wir helfen uns gegenseitig aus der Patsche
 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   RegistrierenRegistrieren 
 ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

TechDemo: Datei in Teilen lesen

 
Neues Thema eröffnen   Neue Antwort erstellen    AutoHotkey Community Foren-Übersicht -> Skripte & Funktionen
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
denick



Anmeldedatum: 15.09.2006
Beiträge: 1122
Wohnort: Berlin

BeitragVerfasst am: Do März 20, 2008 4:23 pm    Titel: TechDemo: Datei in Teilen lesen Antworten mit Zitat

Moin,

wegen dieses Threads habe ich meinen alten Dateibetrachter etwas aufgehübscht. Ich nutze ihn für xMB große Logdateien, für die mir sonst nur der "Editor" zur Verfügung stünde. Man kann damit auch recht bequem das Ende wachsender Logdateien im Auge behalten, wenn man immer wieder mal per Button zum Dateiende springt:

Code:
#NoEnv
SetBatchLines, 0
SetControlDelay, 0
Titel := "  AHK - Textbetrachter"
File := ""
FontSize := "10"
Start := 0
Length := 2000
Rows := 25
; ------------------------------------------------------------------------------
Menu, Sub1, Add, &Öffnen, FILEOPEN
Menu, Sub1, Add, &Schließen, FILECLOSE
Menu, Sub1, Add
Menu, Sub1, Add, &Beenden, GuiClose
Menu, Bar1, Add, &Datei, :Sub1
Gui, Margin, 5, 5
Gui, Font, % "s" . FontSize
Gui, Menu, Bar1
Gui, Add, Edit, w0 h0
Gui, Add, Text, vTX1 0x200 h20, Datei:
GuiControlGet, TX1, Pos
Gui, Add, Text, vTXN 0x200 E0x200 x+5 yp hp, WWWWWWWWWWWWWWWWWWWWWWWWWWWWWW
GuiControl, , TXN
Gui, Add, Text, 0x200 x+10 yp hp, Größe:
Gui, Add, Text, vTXG 0x200 E0x200 x+5 yp hp Right, 0000000000
Gui, Add, Text, 0x200 x+5 yp hp, Bytes
GuiControl, , TXG
Gui, Add, Text, 0x200 xm y+5 w%TX1W% h20, Start:
Gui, Add, Edit, vEDS x+5 yp hp Limit10 Number Right, 0000000000
GuiControl, , EDS, %Start%
Gui, Add, Text, x+10 yp hp 0x200, Länge:
Gui, Add, Edit, vEDL x+5 yp hp Limit6 Number Right, 000000
GuiControl, , EDL, %Length%
W := (A_ScreenWidth // 10) * 8
Gui, Add, Edit, vEDT xm y+5 r%Rows% w%W% HScroll HwndEDTID, %Content%
Gui, Add, Button, xm y+5 vBTSAVE gBTSAVE Disabled, Speichern
Gui, Add, Button, x+10 yp vBTREAD gBTREAD Disabled, Neu einlesen
Gui, Add, Button, x+10 yp w50 gBTWEITER vBTA Disabled, <<
Gui, Add, Button, x+10 yp wp gBTWEITER vBTR Disabled, <
Gui, Add, Button, x+10 yp wp gBTWEITER vBTV Disabled, >
Gui, Add, Button, x+10 yp wp gBTWEITER vBTE Disabled, >>
Gui, Show, AutoSize, %Titel%
Return
; ------------------------------------------------------------------------------
GuiClose:
GuiEscape:
ExitApp
; ------------------------------------------------------------------------------
BTSAVE:
SplitPath, File, , , , Name
FileSelectFile, OutFile
              , S24
              , %A_ScriptDir%\%Name%_Teil
              , Speichern unter:
              , Textdatei (*.txt)
If (ErrorLevel) {
   Return
}
SplitPath, OutFile, , Dir, Ext, Name
If (Ext = "") {
   OutFile := Dir . "\" . Name . ".txt"
}
GuiControlGet, EDT
FileDelete, %OutFile%
FileAppend, %EDT%, %OutFile%
Return
; ------------------------------------------------------------------------------
BTWEITER:
Gui, Submit, NoHide
FileGetSize, Size, %File%
If (Size <> TXG) {
   GuiControl, , TXG, %Size%
}
EDS := A_GuiControl = "BTA" ? 0
     : A_GuiControl = "BTR" ? EDS - EDL
     : A_GuiControl = "BTV" ? EDS + EDL
     : A_GuiControl = "BTE" ? Size - EDL
     : EDS
If (EDS < 0) {
   EDS := 0
}
If (EDS >= Size) {
   EDS := Size - EDL
}
GuiControl, , EDS, %EDS%
GoSub, FILEREAD
Return
; ------------------------------------------------------------------------------
BTREAD:
GuiControlGet, TXG
FileGetSize, Size, %File%
If (Size <> TXG) {
   GuiControl, , TXG, %Size%
}
GoSub, FILEREAD
Return
; ------------------------------------------------------------------------------
FILEOPEN:
FileSelectFile, File, 1, , Datei auswählen:
If (ErrorLevel) {
   Return
}
GuiControl, , TXN, %File%
GuiControl, , EDS, %Start%
GuiControl, , EDL, %Length%
GuiControl, Enable, BTA
GuiControl, Enable, BTR
GuiControl, Enable, BTV
GuiControl, Enable, BTE
GuiControl, Enable, BTREAD
GuiControl, Enable, BTSAVE
Gosub, BTREAD
Return
; ------------------------------------------------------------------------------
FILECLOSE:
GuiControl, , TXN
GuiControl, , TXG
GuiControl, , EDS, %Start%
GuiControl, , EDL, %Length%
GuiControl, , EDT
GuiControl, Disable, BTA
GuiControl, Disable, BTR
GuiControl, Disable, BTV
GuiControl, Disable, BTE
GuiControl, Disable, BTREAD
GuiControl, Disable, BTSAVE
Return
; ------------------------------------------------------------------------------
FILEREAD:
Gui, Submit, Nohide
VarSetCapacity(Content, EDL)
Content := ReadFilePart(File, EDS, EDL)
ControlSetText, , , ahk_id %EDTID%
Control, EditPaste, %Content%, , ahk_id %EDTID%
Opt := EDS > 0 ? 0 : 1
GuiControl, Disable%Opt%, BTA
GuiCOntrol, Disable%Opt%, BTR
Opt := (EDS + EDL) < Size ? 0 : 1
GuiControl, Disable%Opt%, BTV
GuiCOntrol, Disable%Opt%, BTE
GuiControl, Focus, EDT
If (Opt) {
   SetTimer, FILESIZE, On
}
Return
; ------------------------------------------------------------------------------
FILESIZE:
GuiControlGet, TXG
FileGetSize, Size, %File%
If (Size > TXG) {
   SetTimer, FILESIZE, Off
   GuiControl, , TXG, %Size%
   GuiControl, Enable, BTV
   GuiControl, Enable, BTE
}
Return
; ------------------------------------------------------------------------------
ReadFilePart(File, Start=0, Length=1024)
{
   OPEN_EXISTING = 3
   GENERIC_READ = 0x80000000
   FILE_SHARE_READ = 1
   FILE_SHARE_WRITE = 2
   FILE_SHARE_DELETE = 4
   hFile := DllCall("CreateFile"
                  , "Str", File
                  , "Uint", GENERIC_READ
                  , "Uint", FILE_SHARE_READ + FILE_SHARE_WRITE + FILE_SHARE_DELETE
                  , "Uint", 0
                  , "Uint", OPEN_EXISTING
                  , "Uint", 0
                  , "Uint", 0)
   If (!hFile) {
      MsgBox, Fehler beim Öffnen!
      Return ""
   }
   DllCall("GetFileSizeEx"
         , "Uint", hFile
         , "Int64P", nSize)
   If (Start > nSize) {
      Return ""
   }
   FILE_BEGIN = 0
   DllCall("SetFilePointerEx"
         , "Uint", hFile
         , "Int64", Start
         , "Uint", 0
         , "Uint", FILE_BEGIN)
   VarSetCapacity(Part, Length, 0)
   DllCall("ReadFile"
         , "Uint", hFile
         , "Str", Part
         , "Uint", Length
         , "UintP", Length
         , "Uint", 0)
   DllCall("CloseHandle", "Uint", hFile)
   VarSetCapacity(Part, -1)
   Return Part
}

_________________
Hilfe zur Hilfe

(de)nick
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    AutoHotkey Community Foren-Übersicht -> Skripte & Funktionen Alle Zeiten sind GMT
Seite 1 von 1

 
Gehe zu:  
Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de