funkey: Da ging es aber darum den gesamten Text ohne die Tags ("<...>") zu erfassen. Hier will er ja nur den Text zwischen diesen bestimmten Tags ("In meinem TXT ist eine unmenge von Text bzw. Code").
Beiträge von Oscar
-
-
Kannst Du mit StringRegExp lösen:
[autoit]
[/autoit]
#include<Array.au3>
$string = '<word><name>Beispielwort</name> was ganz anderes <word><name>trara</name> 455tgfere<word><name>gefunden</name><wwfeee>'
$array = StringRegExp($string, '<word><name>(.*?)</name>', 3)
_ArrayDisplay($array) -
Das macht keinen Unterschied. Eine Endlosschleife bleibt eine Endlosschleife, ganz egal welche Zahl Du da einträgst.
Du musst Dir erstmal Deinen Programmablauf anschauen. Die erste Endlosschleife wird doch nirgendwo verlassen (Stichwort: ExitLoop).Edit: Oder, was hier angebrachter wäre, Du läßt die zweite Schleife weg, packst den Rest aus der 2. Schleife in eine Funktion und rufst diese per AdlibEnable auf.
-
Und wann (zu welchem Zeitpunkt) wird die zweite While...WEnd-Schleife ausgeführt? [Wink mit dem Zaunpfahl]

-
Ich habe mein Script mal kommentiert (und noch etwas erweitert) und in Scripte gepostet.
-
Es gibt ein neues, verbessertes Beispiel-Script: Listview-Datenbank v3
Hier ist mal ein (kommentiertes) Beispiel-Script, wie man mit Listview eine Datenbank erstellen kann.Vorhandene Eigenschaften:- Neuen Eintrag erstellen- Eintrag bearbeiten- Datenbank laden/speichern- Markierte Einträge löschen- Alle Einträge löschen- Kontextmenü für "Neuen Eintrag", "Eintrag bearbeiten" und "Markierte Einträge löschen"- Sortieren des Listviews über einen Klick auf die Spaltenüberschrift- Suche im gesamten Listview nach dem eingegebenen Suchbegriff und Anzeige in einem extra Listview -
Micha, Deine "Sparvariante" ist aber eine Zeile länger.

-
Benutze zwei ineinander verschachtelte Schleifen:
[autoit]
[/autoit]
While 1
$begin = TimerInit()
While TimerDiff($begin) < 5000
Sleep(100)
WEnd
MsgBox(0, "", "")
WEnd -
Das geht mit:
[autoit]
[/autoit]
_GUICtrlListView_RegisterSortCallBack($hLVHandle)und dann:
[autoit]
[/autoit]
Case $hListView
_GUICtrlListView_SortItems($hLVHandle, GUICtrlGetState($hListView)) -
Hmm...habe das gerade mal mit ~1500 Einträgen probiert. Ich finde, dass das recht flott geht.
Ok, das sortieren dauert etwas, aber so schlimm finde ich das nicht.Liegt wohl auch am verwendeten Rechner.

Edit: Noch ein Test mit 5380 Einträgen: umsortieren des Listview dauert bei mir ~20 sek. Naja, für eine Scriptsprache ganz passabel.
-
Wie sieht es denn jetzt mit dem November-Wettbewerb aus?
Wer hat denn alles mitgemacht und, vor allem, wo sind die Scripte?

-
Eine Inidatei ist als Datenbank nicht so gut geeignet. Benutze lieber ein eigenes Format.
Ich habe Dein Beispielscript mal zu einem "Listview-Datenbank-Beispiel" ausgebaut:Edit: Jetzt mit noch mehr Funktionen (Neuer Eintrag, Eintrag bearbeiten, Markierte Einträge löschen, usw.)
Edit2: Habe die Load-Funktion noch etwas beschleunigt.
Spoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [autoit]
#include<ListViewConstants.au3>
#include<ButtonConstants.au3>
#include<GUIConstantsEx.au3>
#include<Guilistview.au3>Global $sHeader = "Artikelnummer|Art|Nummer|Baureihe|Name"
[/autoit] [autoit][/autoit] [autoit]
Global $sDBFile = @ScriptDir & "\datenbank.txt"
Global $iEdit#Region Hauptfenster
[/autoit] [autoit][/autoit] [autoit]
Global $hGui = GUICreate("Listview-Datenbank-Beispiel", 600, 480)
Global $hListView = GUICtrlCreateListView($sHeader, 0, 0, 600, 420, $LVS_SHOWSELALWAYS)Global $hLVHandle = GUICtrlGetHandle($hListView)
[/autoit] [autoit][/autoit] [autoit]
_GUICtrlListView_SetColumn($hLVHandle, 0, "Artikelnummer", 120, 1) ; 120 Px breit, rechts ausgerichtet
_GUICtrlListView_SetColumn($hLVHandle, 1, "Art", 60, 0) ; 60 Px breit, links ausgerichtet
_GUICtrlListView_SetColumn($hLVHandle, 2, "Nummer", 90, 0) ; 90 Px breit, links ausgerichtet
_GUICtrlListView_SetColumn($hLVHandle, 3, "Baureihe", 100, 0) ; 100 Px breit, links ausgerichtet
_GUICtrlListView_SetColumn($hLVHandle, 4, "Name", 120, 0) ; 120 Px breit, links ausgerichtetGlobal $hNew = GUICtrlCreateButton("Neuer Eintrag", 5, 430, 80, 35, $BS_DEFPUSHBUTTON)
[/autoit] [autoit][/autoit] [autoit]
Global $hEdit = GUICtrlCreateButton("Markierten Eintrag bearbeiten", 95, 430, 110, 35, $BS_MULTILINE)
Global $hLoad = GUICtrlCreateButton("Laden", 230, 430, 70, 35)
Global $hSave = GUICtrlCreateButton("Speichern", 310, 430, 70, 35)
Global $hDel = GUICtrlCreateButton("Markierte Einträge löschen", 400, 430, 90, 35, $BS_MULTILINE)
Global $hDelAll = GUICtrlCreateButton("Alle Einträge löschen", 500, 430, 90, 35, $BS_MULTILINE)
#EndRegion Hauptfenster#Region Fenster für neuen Eintrag
[/autoit] [autoit][/autoit] [autoit]
Global $hGuiNew = GUICreate("Neuer Eintrag", 502, 120)
Global $aHeader = StringSplit($sHeader, '|'), $aNew[$aHeader[0]]
For $i = 1 To $aHeader[0]
GUICtrlCreateLabel($aHeader[$i], 4 + ($i - 1) * 100, 25, 90, 20)
$aNew[$i - 1] = GUICtrlCreateInput("", 2 + ($i - 1) * 100, 40, 98, 20)
Next
Global $hCreate = GUICtrlCreateButton("Eintrag speichern", 190, 90, 130, 25, $BS_DEFPUSHBUTTON)
#EndRegion Fenster für neuen Eintrag_GUICtrlListView_RegisterSortCallBack($hLVHandle)
[/autoit] [autoit][/autoit] [autoit]GUISetState(@SW_SHOW, $hGui)
[/autoit] [autoit][/autoit] [autoit]If FileExists($sDBFile) Then Load()
[/autoit] [autoit][/autoit] [autoit]While 1
[/autoit] [autoit][/autoit] [autoit]
$nMsg = GUIGetMsg(1)
Switch $nMsg[0]
Case $hListView
_GUICtrlListView_SortItems($hLVHandle, GUICtrlGetState($hListView))
Case $hNew
WinSetTitle($hGuiNew, "", "Neuer Eintrag")
GUISetState(@SW_SHOW, $hGuiNew)
GUISetState(@SW_DISABLE, $hGui)
Case $hEdit
WinSetTitle($hGuiNew, "", "Eintrag bearbeiten")
GUISetState(@SW_SHOW, $hGuiNew)
GUISetState(@SW_DISABLE, $hGui)
Edit()
Case $hLoad
Load()
Case $hSave
Save()
Case $hDel
If MsgBox(256 + 32 + 4, "Einträge löschen", "Wollen sie die markierten Einträge wirklich löschen?") = 6 Then _GUICtrlListView_DeleteItemsSelected($hLVHandle)
Case $hDelAll
If MsgBox(256 + 32 + 4, "Einträge löschen", "Wollen sie wirklich alle Einträge löschen?") = 6 Then _GUICtrlListView_DeleteAllItems($hLVHandle)
Case $hCreate
NewItem()
Case $GUI_EVENT_CLOSE
Switch $nMsg[1]
Case $hGui
If MsgBox(32 + 4, "Beenden", "Wollen sie das Programm wirklich beenden?") = 6 Then End()
Case $hGuiNew
$iEdit = 0
GUISetState(@SW_HIDE, $hGuiNew)
GUISetState(@SW_ENABLE, $hGui)
WinActivate($hGui)
EndSwitch
EndSwitch
WEndFunc End()
[/autoit] [autoit][/autoit] [autoit]
;~ Save()
_GUICtrlListView_UnRegisterSortCallBack($hLVHandle)
Exit
EndFuncFunc NewItem()
[/autoit] [autoit][/autoit] [autoit]
Local $sItem = ""
For $i = 0 To UBound($aNew) - 1
If $iEdit Then
_GUICtrlListView_SetItemText($hLVHandle, $iEdit, GUICtrlRead($aNew[$i]), $i)
Else
$sItem &= GUICtrlRead($aNew[$i]) & "|"
EndIf
GUICtrlSetData($aNew[$i], "")
Next
If $iEdit Then
$iEdit = 0
GUISetState(@SW_HIDE, $hGuiNew)
GUISetState(@SW_ENABLE, $hGui)
WinActivate($hGui)
Else
GUICtrlSetState($aNew[0], $GUI_FOCUS)
GUICtrlCreateListViewItem(StringTrimRight($sItem, 1), $hListView)
EndIf
EndFunc ;==>NewItemFunc Edit()
[/autoit] [autoit][/autoit] [autoit]
$iEdit = _GUICtrlListView_GetSelectionMark($hLVHandle)
Local $aItem = _GUICtrlListView_GetItemTextArray($hLVHandle, $iEdit)
For $i = 1 To $aItem[0]
GUICtrlSetData($aNew[$i - 1], $aItem[$i])
Next
EndFunc ;==>EditFunc Load()
[/autoit] [autoit][/autoit] [autoit]
Local $hFile = FileOpen($sDBFile, 0), $sItem
If $hFile <> -1 Then
_GUICtrlListView_BeginUpdate($hLVHandle)
While True
$sItem = FileReadLine($hFile)
If @error Then ExitLoop
GUICtrlCreateListViewItem($sItem, $hListView)
WEnd
_GUICtrlListView_EndUpdate($hLVHandle)
FileClose($hFile)
EndIf
EndFunc ;==>LoadFunc Save()
[/autoit]
Local $iCount = _GUICtrlListView_GetItemCount($hLVHandle) - 1, $sItem
Local $hFile = FileOpen($sDBFile, 2)
If $hFile <> -1 Then
For $i = 0 To $iCount
$sItem = _GUICtrlListView_GetItemTextString($hLVHandle, $i)
FileWriteLine($hFile, $sItem)
Next
FileClose($hFile)
EndIf
EndFunc ;==>Save -
Schau Dir mal mein Script aus dem folgenden Post an: [ offen ] taste gedrückt halten
-
So, jetzt ist Schluß!
Wir unterstützen hier keine Spaßviren. Thread closed!
-
Ich hatte nur gefragt, weil ich die oberen Zeilen nicht kommentiert hatte.
-
Hier kommt das Beispielscript:
Spoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [autoit]
#include<GUIConstantsEx.au3>
#include<IE.au3>
#include<WindowsConstants.au3>$HTMLTitle = 'Test'
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
$sDest = '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">' & @CRLF & '<html>' & @CRLF
$sDest &= '<head>' & @CRLF & '<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">' & @CRLF
$sDest &= '<title>' & $HTMLTitle & '</title>' & @CRLF & '</head>' & @CRLF & '<body bgcolor="#000000">' & @CRLF
$sDest &= '<p><font color="#ffff00">Das</font> <font color="#00ffff">ist ein</font> <font color="#00ff00">Beispieltext.</font></p>'
$sDest &= '</body>'
$sDestFile = @ScriptDir & '\beispieltext.html'
$hFile = FileOpen($sDestFile, 2) ; Zieldatei zum schreiben öffnen
FileWrite($hFile, $sDest) ; HTML in Datei schreiben
FileClose($hFile) ; Datei schließen$Width = 500 ; Breite des Fensters
[/autoit] [autoit][/autoit] [autoit]
$Height = 300 ; Höhe des Fensters
$Left = Int(@DesktopWidth/2-$Width/2) ; Horizontale Position (zentriert)
$Top = Int(@DesktopHeight/2-$Height/2) ; Vertikale Position (zentriert)$oIE = _IECreateEmbedded() ; Einen "eingebetteten" IE erstellen
[/autoit] [autoit][/autoit] [autoit]$hGui = GUICreate($HTMLTitle, $Width, $Height, $Left, $Top, $WS_SIZEBOX) ; Anzeigefenster erstellen
[/autoit] [autoit][/autoit] [autoit]GUICtrlCreateObj($oIE, 10, 10, $Width-20, $Height-50) ; IE in die GUI integrieren
[/autoit] [autoit][/autoit] [autoit]
GUICtrlSetResizing(-1, $GUI_DOCKBORDERS)
_IENavigate($oIE, $sDestFile) ; die HTML-Seite aufrufen
GUISetState()Do
[/autoit]
Until GUIGetMsg() = -3Kannst Du HTML?
-
Das habe ich mir schon gedacht. Deshalb mein Hinweis auf die Forenregeln!
Du bist lange genug dabei. Lies sie und beachte sie!
-
Soll/muss es denn ein Eingabefeld sein?
Weil, wenn Du das nur für eine Ausgabe benötigst, dann kannst Du auch eine HTML-Datei erstellen (mit verschiedenen Schriftfarben) und diese dann in einem embedded IE anzeigen lassen.
-
Wozu brauchst Du 1000 Messageboxen?
Ich habe das Gefühl, es wird mal wieder Zeit auf die Forenregeln hinzuweisen.

-
Damit Du Dir nicht die Mühe machen musst, das Bild zu zerschneiden und dann mühsam wieder mit einzelnen Pics zusammenzusetzen habe ich Dir mal ein Beispiel erstellt, wie man es stattdessen machen kann:
Spoiler anzeigen
[autoit]
[/autoit]
#include<GUIConstantsEx.au3>
Opt('MouseCoordMode', 0)
Global $aCoord[5][4] = [ _
[016,019,050,064], _
[016,065,050,108], _
[016,109,050,152], _
[016,153,050,196], _
[016,197,050,240] _
]
Global $aElements[5] = [ _
'Wasserstoff', _
'Lithium', _
'Natrium', _
'Kalium', _
'Rubidium' _
]
$iLeft = 80
$iTop = 30
$hGui = GUICreate('PSE', 800, 600)
GUISetBkColor(0xffffff)
$hPic = GUICtrlCreatePic('pse-gross.gif', $iLeft, $iTop, 650, 442)
GUISetState()
While True
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
Exit
Case $hPic
$aInfo = GUIGetCursorInfo($hGui)
$aInfo[0] -= $iLeft
$aInfo[1] -= $iTop
For $i = 0 To UBound($aCoord) - 1
If $aInfo[0] > $aCoord[$i][0] And $aInfo[0] < $aCoord[$i][2] And $aInfo[1] > $aCoord[$i][1] And $aInfo[1] < $aCoord[$i][3] Then ExitLoop
Next
If $i <= UBound($aCoord) -1 Then
ToolTip($aElements[$i])
Else
ToolTip('')
EndIf
EndSwitch
WEndIst jetzt nur für die ersten 5 Elemente (hatte keine Lust alle Koordinaten rauszusuchen), aber ich denke, dass es das Prinzip verdeutlicht. Zum Ausbau also das Array erweitern und die übrigen Koordinatenwerte eintragen.