Hallo SOLVE-SMART,
dass war genau das was ich gesucht habe, in meinem String den ich bearbeite, kommt eben nur das Format 08:30 AM/PM vor.
Ganz herzlichen Dank für deine Unterstützung!
Hallo SOLVE-SMART,
dass war genau das was ich gesucht habe, in meinem String den ich bearbeite, kommt eben nur das Format 08:30 AM/PM vor.
Ganz herzlichen Dank für deine Unterstützung!
Hallo und vielen Dank auch dir gmmk,
Ich habe es gestern auch noch geschafft die entsprechenden Daten aus den Quellcode mit vielen Zeilen allein für die Daten um Platz 1 in der Tabelle zu "filtern".
Hoffe nur das der Betreiber nicht so häufig in der Saison sein Design anpasst ![]()
Hier mal die Funktion: (ist sicher einfacher zu lösen aber ich bin leider in Autoit immer noch Laie)
Func _Platz_1()
$s_pl1 = '<span class="hidden-lg hidden-xl">1.</span>' ; Suchstring
$openfile = FileOpen($file, 0); öffnet das File mit den Quellcode der Webseite
For $i = 1 To _FileCountLines($file) ;geht nun jede Zeile durch bis der Suchstring gefunden ist
$readline = FileReadLine($openfile, $i); und speichert die Zeilennummer in $i
If StringInStr($readline, $s_pl1) Then; Wenn der Suchstring gefunden wurde, dann
$sMannschaft_pl1 = FileReadLine($file,$i+1);gehe eine Zeile darunter
$aString_pl1 = StringSplit($sMannschaft_pl1,"/");und Splitte den String auf(Array)
$sr1_pl1 = StringReplace($aString_pl1[14],'">',""); in Zeile 11 befindet sich nun der Name der Mannschaft die auf Platz 1 ist
$sr2_pl1 = StringReplace($sr1_pl1,"<","");ersetzen
$sBegegnungen_pl1 = FileReadLine($file,$i+3);gehe drei Zeilen darunter zum String Begegnungen
$aStringBegegnungen_pl1 = StringSplit($sBegegnungen_pl1,">");und Splitte den String auf(Array)
$srBeg_pl1 = StringReplace($aStringBegegnungen_pl1[2],"</td","");ersetzen
$sSiege_pl1 = FileReadLine($file,$i+4);gehe vier Zeilen darunter zum String Siege
$aStringSiege_pl1 = StringSplit($sSiege_pl1,">");und Splitte den String auf(Array)
$srSiege_pl1 = StringReplace($aStringSiege_pl1[2],"</td","");ersetzen
$sUnentschieden_pl1 = FileReadLine($file,$i+5);gehe weiter zum nächsten String Unentschieden
$aStringUnentschieden_pl1 = StringSplit($sUnentschieden_pl1,">");und Splitte den String auf(Array)
$srUnentschieden_pl1 = StringReplace($aStringUnentschieden_pl1[2],"</td","");ersetzen
$sVerloren_pl1 = FileReadLine($file,$i+6);gehe weiter zum nächsten String Verloren
$aStringVerloren_pl1 = StringSplit($sVerloren_pl1,">");und Splitte den String auf(Array)
$srVerloren_pl1 = StringReplace($aStringVerloren_pl1[2],"</td","");ersetzen
$sSpiele_pl1 = FileReadLine($file,$i+8);gehe weiter zum nächsten String Spiele
$aStringSpiele_pl1 = StringSplit($sSpiele_pl1,">");und Splitte den String auf(Array)
$srSpiele_pl1 = StringReplace($aStringSpiele_pl1[2],'<em class="visible-xs-block"',"");ersetzen
$sSaetze_Baelle_pl1 = FileReadLine($file,$i+10);gehe weiter zum nächsten String Sätze/Bälle
$aStringSaetze_Baelle_pl1 = StringSplit($sSaetze_Baelle_pl1,"=");und Splitte den String auf(Array)
$sr1Saetze_Baelle_pl1 = StringReplace($aStringSaetze_Baelle_pl1[2],'"',"");ersetzen
$sr2Saetze_Baelle_pl1 = StringReplace($sr1Saetze_Baelle_pl1,';',"");ersetzen
$sPM_pl1 = FileReadLine($file,$i+29);gehe weiter zum nächsten String Verloren
$aStringPM_pl1 = StringSplit($sPM_pl1,">");und Splitte den String auf(Array)
$srPM_pl1 = StringReplace($aStringPM_pl1[2],"</td","")
$sPunkte_pl1 = FileReadLine($file,$i+30);gehe weiter zum nächsten String Verloren
$aStringPunkte_pl1 = StringSplit($sPunkte_pl1,">");und Splitte den String auf(Array)
$srPunkte_pl1 = StringReplace($aStringPunkte_pl1[2],"</td","")
Global $P1_Platz = "1."
Global $P1_Mannschaft = $sr2_pl1
Global $P1_Begegnungen = $srBeg_pl1
Global $P1_Anzahl_Siege = $srSiege_pl1
Global $P1_Anzahl_Unentschieden = $srUnentschieden_pl1
Global $P1_Anzahl_Verloren = $srVerloren_pl1
Global $P1_Spiele = $srSpiele_pl1
Global $P1_PlusMinus = $srPM_pl1
Global $P1_Punkte = $srPunkte_pl1
Global $P1_Saetze_Baelle = $sr2Saetze_Baelle_pl1
_Platz_2()
Exit
EndIf
Next
MsgBox(0, "Platz 1", $s_pl1 & " kein Eintrag vorhanden!")
EndFunc
Alles anzeigen
Vielen Dank für deine Anregungen, werde mal sehen ob ich was mit anfangen kann.
Der Betreiber bietet ja sogar iframes an, jedoch sind diese sehr unflexibel wenn es um Layout und responsives design geht, daher der Ansatz eben nur die Daten direkt zu holen und dann in einer eigenen Tabelle einzubetten.
Hallo,
ich möchte gerne für einen Verein die aktuelle Tabellensituation auf deren Homepage integrieren.
Da es keine API seitens des Betreibers gibt, wollte ich es jetzt mit Autoit probieren die Daten von deren Webseite zu holen um danach diese in eine Datenbank zu schreiben.
Das schreiben der Daten in eine mysql Datenbank soll hier nicht der Punkt sein aber mit der Aufbereitung der Daten habe ich ein Problem.
Hier mal die Webseite (Tabelle) die ich meine, es geht da nur um den Inhalt aus dieser Tabelle.
Mein Ansatz war bisher mit _IEDocReadHTML mir den Quellcode der Seite in ein Textfile zu speichern, jedoch sind das ja recht viele für mich uninteressante Zeilen die ich dann irgendwie herausfiltern müsste um einen brauchbaren String zu bekommen.
Gibt es dafür eine andere Alternative?
#include <ie.au3>
Global $url="https://www.mytischtennis.de/clicktt/WTTV/20-21/ligen/3-Kreisklasse-4-VR/gruppe/385717/tabelle/gesamt"
Global $file=@ScriptDir & "\ausgabe.txt"
ausgabe()
Func ausgabe()
$oIE = _IECreate($url,1,0)
$sSource = _IEDocReadHTML($oIE)
If NOT StringInStr($sSource,@CRLF) Then
$sSource=StringReplace($sSource,@LF,@CRLF)
Endif
FileWrite($file,$sSource)
EndFunc
Alles anzeigen
Danke water, jetzt funktioniert es und ist auch noch schnell.
Hallo water,
vielen Dank für dein Tip.
Habe das jetzt mal so "reingepinselt"
#include <Excel.au3>
$pfad = @scriptdir&"\test.xlsx"
$tabelle = "Tabelle1"
$Spalte = "B"
$wert = "Wert"
$oExcel=_Excel_Open(true)
$oWorkbook=_Excel_BookOpen($oExcel,$pfad)
Local $iLastUsedRow =$oWorkbook.ActiveSheet.UsedRange.Rows.Count
_Excel_RangeWrite($oWorkbook,$tabelle,$wert,$Spalte&$iLastUsedRow+1)
Alles anzeigen
jetzt schreibt er mir bei einer leeren Tabelle immer den Wert in die nächste freie Zelle in Spalte B, eigentlich gut so, jedoch wenn irgendwo z.b in Spalte A oder in sonst einer anderen, ein Wert weiter "unten in der Reihe" steht, nimmt er diesen als letzte Zeile und schreibt mir natürlich nicht mehr in die nächste freie Zelle in Spalte B. Ich brauchte also eine Funktion die genau in Spalte B die letzte Zeile findet.
@water,Kannst du mir bitte sagen wie ich das für mein Vorhaben umsetzen kann?
Suche in Spalte "B" die nächste freie Zelle und schreibe den Wert dort rein.
Habe mal etwas probiert, jedoch mache ich wohl was falsch.
#include <Excel.au3>
$pfad = @scriptdir&"\test.xlsx"
$tabelle = "Tabelle1"
$Spalte = "B"
$wert = "Wert"
$oExcel=_Excel_Open(true)
$oWorkbook=_Excel_BookOpen($oExcel,$pfad)
$oRange = $oWorkbook.ActiveSheet.UsedRange.SpecialCells($xlCellTypeLastCell)
_Excel_RangeWrite($oWorkbook,$tabelle, $wert,$oRange)
_Excel_BookSave($oWorkbook)
Alles anzeigen
Perfekt, beide Beispiele führen zum Erfolg.
Danke für die schnelle Hilfe ![]()
Hallo,
ich würde gerne in die nächst freie Zelle in Spalte B schreiben.
Also wenn z.b: in B1 und B2 schon was steht, dann schreibe in B4 usw.
In diesen Beispiel wird nur in eine bestimmte Zelle geschrieben.
Wow...alles funktioniert.
Danke eukalyptus
Hallo,
vieleicht kann mir jemand bei meinem Problem helfen.
Mir ist aufgefallen, dass ein Eintrag (item) auf zwei verschiedene Arten in meinem Beispiel
markiert sein kann.
Einmal ist wenn ich direkt mit der Maus draufklick der Eintrag "blau" markiert und alle Funktionen aus den
Contextmenü funktionieren. Wenn ich den Mauszeiger danach ins leere Listview stelle ist der Eintrag nicht "blau"
sondern hat ein gestrichelten Rand. Wenn ich nun das Contextmenü aufrufe dann kann dieser "gestrichelte"
markierte Eintrag sogar kopiert aber nicht gelöscht werden.
Ich würde es gerne so haben das nur wenn der Eintrag "blau" markiert ist auch das Contextmenü seinen Dienst tut.
Hier mal das was ich meine in zwei Screenshots:
Screen 1: Blau markiert
Screen 2: gestrichelt markiert
Hier mal das Beispiel:
#include <GUIConstantsEx.au3>
#include <GuiListView.au3>
#include <MsgBoxConstants.au3>
Global $idListview
GUICreate("ListView", 400, 300)
$idListview = GUICtrlCreateListView("", 2, 2, 394, 268)
Global $CM = GUICtrlCreateContextMenu($idListview)
Global $CMDelete = GUICtrlCreateMenuItem("Eintrag löschen", $CM)
Global $CMCopy = GUICtrlCreateMenuItem("Eintrag speichern", $CM)
GUISetState(@SW_SHOW)
_GUICtrlListView_AddColumn($idListview, "Items", 100)
_GUICtrlListView_AddItem($idListview, "Item 1")
_GUICtrlListView_AddItem($idListview, "Item 2")
_GUICtrlListView_AddItem($idListview, "Item 3")
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $CMDelete
_GUICtrlListView_DeleteItemsSelected($idListview)
Case $CMCopy
_kopiere()
EndSwitch
WEnd
Func _kopiere()
Local $lesen = _GUICtrlListView_GetSelectionMark($idListview)
Local $item = _GUICtrlListView_GetItemTextString($idListview, $lesen)
If $lesen = -1 Then
MsgBox(0, "Fehler", "Kein Eintrag markiert!")
Else
FileWriteLine("speichern.txt", $item)
MsgBox(0, "", "Eintrag gespeichert")
EndIf
EndFunc ;==>_kopiere
Alles anzeigen
Hallo,
vielen Dank für eure Hilfe, es funktioniert jetzt.
Wo kann man jetzt das Thema als "gelöst" markieren?
Hallo,
ich habe hier ein .ini file das in etwa so aussieht:
[001]
Abteilung = "Abt.1"
Name = "MA.1"
Gruppe = 1
[002]
Abteilung = "Abt.1"
Name = "MA.2"
Gruppe = 1
[003]
Abteilung = "Abt.1"
Name = "MA.3"
Gruppe = 1
Jetzt suche ich nach einer Funktion die mir alle "Namen" aus der .ini Datei, aus allen Sektionen, ... in einer Combobox ausgibt.
Um zu verdeutlichen was ich meine, hier ein Foto:
http://gyazo.com/43567afd7c16794716c455499945c70e
Danke
Sorry Aspirin, ich hatte wohl eine variable vertauscht.
Natürlich geht es jetzt.
Local $path = @ScriptDir & "\beispiel.cfg"
Local $key = "name"
Local $name = "username5"
Local $s_Section = IniGetSectionByValue($path, $key, $name)
If @error = 1 Then
MsgBox(48, "Nichts gefunden", "Eintrag in ini-Datei nicht gefunden")
ElseIf @error = 2 Then
MsgBox(48, "Fehler", "Konnte ini-Datei nicht lesen")
Else
MsgBox(0, "", "name = " & $name & " in Section [" & $s_Section & "] gefunden.")
EndIf
Func IniGetSectionByValue($s_IniFile, $s_SearchKey, $s_SearchValue)
Local $a_Sections = IniReadSectionNames($s_IniFile)
If @error Then Return SetError(2, @error, "")
For $i = 1 To $a_Sections[0]
If IniRead($s_IniFile, $a_Sections[$i], $s_SearchKey, Default) = $s_SearchValue Then Return $a_Sections[$i]
Next
Return SetError(1, 0, "")
EndFunc ;==>IniGetSectionByValue
Hier die passende beispiel.cfg
;Beispiel cfg
[111]
gruppe = "admin"
name = "username1"
wert = 1
[22222]
gruppe = "user"
name = "username2"
wert = 1
[33333]
gruppe = "user"
name = "username3"
wert = 1
[44444]
gruppe = "gast"
name = "username4"
wert = 1
[55555]
gruppe = "user"
name = "username5"
wert = 1
Hallo nochmal,
ich hatte eben nochmal den Code von Aspirin getest und stellte fest, dass wenn der Suchbegriff sich nicht in der ersten
Sektion befindet, nicht weiter in den anderen Sektionen gesucht wird.
Wie müßte man den Code verändern damit das auch noch gelingt?
Danke euch beiden, so funktioniert es nun. ![]()
Hallo,
mein Problem ist vielleicht ganz ähnlich, daher grabe ich mal dieses Thema wieder hervor.
Die .cfg Datei die bei uns verwendet wird ähnelt einer .ini, allerdings mit Leerzeichen vor und nach den = Zeichen
weiterhin sind einige "Values" in " " geschrieben.
Wie sollte das Pattern aussehen, damit ich die sogenannte "Sektion" in der .cfg Datei ermitteln kann.
Als Suchbegriff wird der Name verwendet.
Hier der Aufbau der .cfg Datei:
[123]
gruppe = "Gruppe1"
name = "Name1"
wert = 1
[862]
gruppe = "Gruppe1"
name = "Name2"
wert = 1
Hallo,
das mit der Progressbar würde mich auch noch interessieren.
Alles anzeigen[autoit]
Du hast von Hilfe gesprochen, nicht von komplett schreiben lassen![]()
Das Beispiel hat ja bereits eine Schleife, in der eine MsgBox aufgeht für jede geänderte Datei. Hier musst du dann Code für den download einbauen.
Ohne Fortschrittsanzeige sähe das dann so aus: Wie du dann den Fortschrittsbalken ainbaust, musst du selbst rausfinden.For $i = 1 To $aUpdates[0][0]
[/autoit]
SplashTextOn("Download Patch", $aUpdates[$i][0] & @CRLF & "Von: " & $aUpdates[$i][2] &@CRLF & "Nach: " & $sZiel)
If StringInStr($aUpdates[$i][0], '\') Then DirCreate( $sZiel & StringRegExpReplace($aUpdates[$i][0], '\\[^\\]*$', ''))
InetGet($aUpdates[$i][2], $sZiel & $aUpdates[$i][0], 1)
;MsgBox(0, '', "z.B. Download datei..."& @CRLF & $aUpdates[$i][0] & @CRLF & "Von: " & $aUpdates[$i][2] &@CRLF & "Nach: " & $sZiel)
SplashOff()
Next
also mit einer Datei habe ich sowas auch schonmal gemacht, jedoch der Patcher stellt ja erst anhand von den md5-hash fest welche Datei er laden soll.
Das heißt, dass die Größe der Dateien die geladen werden bei jeden unterschiedlich sein können.
Vielleicht kann mir da mal jemand auf die Sprünge helfen?
Danke für die schnelle Antwort chip,
mein Problem hat sich jedoch schon aufgelöst ![]()
es lag nicht am Script wie ich anfangs vermutet hatte, ich habe noch einmal eine subdomain eingerichtet und die Berechtigungen gesetzt, jetzt funktioniert es auch mit ISS 7.
Leider kann ich nicht mehr nachvollziehen was ich vorher verkehrt gemacht hatte.
...schönen Tag noch