denick
Anmeldedatum: 15.09.2006 Beiträge: 1122 Wohnort: Berlin
|
Verfasst am: Do März 20, 2008 4:23 pm Titel: TechDemo: Datei in Teilen lesen |
|
|
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 |
|