2-dimensionales Array auswerten

Post a reply


In an effort to prevent automatic submissions, we require that you complete the following challenge.
Smilies
:D :) ;) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :!: :?: :idea: :| :mrgreen: :geek: :ugeek: :arrow: :angel: :clap: :crazy: :eh: :lolno: :problem: :shh: :shifty: :sick: :silent: :think: :thumbup: :thumbdown: :salute: :wave: :wtf: :yawn: :facepalm: :bravo: :dance: :beard: :morebeard: :xmas: :HeHe: :trollface: :cookie: :rainbow: :monkeysee: :monkeysay: :happybday: :headwall: :offtopic: :superhappy: :terms: :beer:
View more smilies

BBCode is ON
[img] is OFF
[flash] is OFF
[url] is ON
Smilies are ON

Topic review
   

Expand view Topic review: 2-dimensionales Array auswerten

Re: 2-dimensionales Array auswerten

by effel » 24 Jul 2020, 14:16

man kann auch mehr als einen Bahnhof auf einer `blauen` anzeigen lassen.
AbfahrtKöln Hbf, Köln-Nippes, Köln Hansaring
https://iris.noncd.db.de/wbt/js/index.html?bhf=KK,KKHR,KKN&Zeilen=50
damit reduziert sich der Aufwand an die aktuellen Abfahrtzeiten zu kommen erheblich

Re: 2-dimensionales Array auswerten

by effel » 24 Jul 2020, 09:46

ja es gibt zwei möglichkeiten die Datenbank anzusprechen. Ich nutze erstmal die andere bis ich die ganze Liste gefunden habe

Code: Select all

FileEncoding, UTF-8
	existListe = Bahnhof_ID_Liste.txt
	if not fileexist(existListe)
	{
		try
		{
		ToolTip Download DBase
		UrlDownLoadToFile, https://ds100.frankfurtium.de/dumps/ds100.html, Bahnhof_ID_Liste.txt
		ToolTip
		}
		catch e
		{
		ErrorMessage	:=	"Ausnahme ausgelöst!`n`nWas: " e.what 
						.	"`nDatei: " e.file
				        .	"`nZeile: " e.line 
						.	"`nNachricht: " e.message 
						.	"`nZusatz: " e.extra
		MsgBox,,ErrorMessage:, % ErrorMessage, 2
		FileAppend, % ErrorMessage, ErrorMessage.txt
		}
   }

	FileRead, bhid, Bahnhof_ID_Liste.txt

	xfa=<tbody>
	yfc=</tbody>
	xIDb=
	xIDb :=xStr(bhid,,xfa,xfc)
	xIDb := StrReplace(xIDb, "</th>`n     <td>", "</th><td>", 1)

	BahnhofsArray := {}   ; 'leeres' associative array

	Loop, Parse, xIDb, `n, `r
	{
		{
		IDa=<th id="
		IDc=">
		ID:=
		ID:=xStr(A_LoopField,,IDa,IDc)
		Citya=<th id="%ID%">%ID%</th><td>
		Cityc=</td>
		City:=
		City:=xStr(A_LoopField,,Citya,Cityc)
		if city<>
		BahnhofsArray[City] := ID
		}
	}

;BahnhofsArray["Köln Hbf"] := "kk"
needle := "Köln Hbf"
MsgBox % BahnhofsArray[needle]
MsgBox % BahnhofsArray["Hamburg-Altona"]
MsgBox % BahnhofsArray["Osinowka Grenze RU"]

Code: Select all

xStr(ByRef H, C:=0, B:="", E:="",ByRef BO:=1, EO:="", BI:=1, EI:=1, BT:="", ET:="") {                           
Local L, LB, LE, P1, P2, Q, N:="", F:=0                 ; xStr v0.97 by SKAN on D1AL/D343 @ tiny.cc/xstr  
Return SubStr(H,!(ErrorLevel:=!((P1:=(L:=StrLen(H))?(LB:=StrLen(B))?(F:=InStr(H,B,C&1,BO,BI))?F+(BT=N?LB
:BT):0:(Q:=(BO=1&&BT>0?BT+1:BO>0?BO:L+BO))>1?Q:1:0)&&(P2:=P1?(LE:=StrLen(E))?(F:=InStr(H,E,C>>1,EO=N?(F
?F+LB:P1):EO,EI))?F+LE-(ET=N?LE:ET):0:EO=N?(ET>0?L-ET+1:L+1):P1+EO:0)>=P1))?P1:L+1,(BO:=Min(P2,L+1))-P1)  
}

Re: 2-dimensionales Array auswerten

by BoBo » 24 Jul 2020, 07:57

Bei der Suche über andreas-seier.eu kann im DropDownMenu Frankfurt Hbf (tief) gewählt werden. Nach Aufruf/Submit werden dann in der Adresszeile einige Parameter aufgeführt. Für diese Station scheint mit dem Kürzel FF H aus der Ausgangsliste nichts zu gehen. Was jedoch funzt ist die Bahnhofnummer
https://iris.noncd.db.de/wbt/js/index.html?
bhf=FF ; FF = Frankfurt Hbf | FF H = Frankfurt Hbf (tief) was aber nicht geht
Zeilen=50

https://iris.noncd.db.de/wbt/js/index.html?
typ=ab
bhf=8098105 ; statt Acronym die Nummer, damit lädt die Seite erfolgreich.
zugtyp=
platform=
bhfname=
style=ab
via=1
impressum=1
lang=de
SecLang=
zeilen=25
paging=
pagingdauer=

Re: 2-dimensionales Array auswerten

by effel » 24 Jul 2020, 06:00

ich gehe mal davon aus, das Betriebsbahnhöfe usw nicht angezeigt werden.
Wenn ich deine Suche in der Abfrage der Bahn für die blaue Tafel eingebe, kommt auch kein Ergebnis

https://www.bahnhof.de/service/search/bahnhof-de/520608?query=Frankfurt+%28Main%29+Hoch%2FTief

hier gehts:
https://www.bahnhof.de/service/search/bahnhof-de/520608?query=k%C3%B6ln+hbf

weitere infos
https://andreas-seier.eu/bahn/a.html

Re: 2-dimensionales Array auswerten

by BoBo » 24 Jul 2020, 05:43

@effel - Kürzel wie Frankfurt (Main) Hoch/Tief (vermutlich die RMV S-Bahnen), was laut Liste "FF H" ergeben würde, funktionieren als Link-parameter nicht. Gibts dazu eine bekannte Lösung?

Re: 2-dimensionales Array auswerten

by BoBo » 24 Jul 2020, 05:00

Code: Select all

BahnhofsArray := {}   ; 'leeres' associative array
BahnhofsArray["Köln Hbf"] := "kk"    ; legt ein item als 'schlüssel-wert'-paar an

BahnhofsID := BahnhofsArray["Köln Hbf"]   ; abfrage des wertes für den schlüssel "Köln Hbf"
MsgBox % BahnhofsID
MsgBox % BahnhofsArray["Köln Hbf"]
Du verbuxelst (eindimmensionales) Array mit assoziativem Array.

Code: Select all

BahnhofsArray := []   ; "leeres" array
BahnhofsArray.push("kk","Köln Hbf") ; legt zwei items, hier an position 1 und 2 an
BahnhofsID := BahnhofsArray[1]   ; 
MsgBox % BahnhofsID
MsgBox % BahnhofsArray[1]

Re: 2-dimensionales Array auswerten

by effel » 24 Jul 2020, 04:52

Geht doch nicht. Ich dachte es so verstanden zu haben.

Code: Select all

BahnhofsArray := []
BahnhofsArray.push("kk","Köln Hbf")
BahnhofsName := "Köln Hbf"
BahnhofsID := BahnhofsArray[BahnhofsName]
MsgBox % BahnhofsID

Re: 2-dimensionales Array auswerten

by just me » 24 Jul 2020, 04:50

Na ja, das BahnhofsArray ist eindimensional. ;)

Re: 2-dimensionales Array auswerten

by effel » 24 Jul 2020, 04:38

das habe ich gesucht.
just me wrote:
24 Jul 2020, 04:19

Code: Select all

BahnhofsName := "Köln Hbf"
BahnhofsID := BahnhofsArray[BahnhofsName]
direkt auslesen.
danke just me.

passt das nicht zum Titel? auswerten... auslesen... war doch knapp dran ;)

Re: 2-dimensionales Array auswerten

by just me » 24 Jul 2020, 04:19

Moin,

ich verstehe bisher nicht, was der Titel mit Deinem Problem zu tun hat.

Alle AHK-Arrays sind assoziativ, d.h., sie verbinden einen Schlüsselbegriff mit einem Wert. Für AHK ist es egal, ob der Schlüsselbegriff numerisch (mit oder ohne Lücken) oder eine Zeichenkette ist. Bei Zeichenketten muss man allerdings im Hinterkopf behalten, dass AHK 1.1 Großkleinschreibung nicht beachtet.

Wenn Du die HTML-Datei auswertest, kannst Du ein Array aufbauen, das den 'Klarnamen' Köln Hbf als Schlüssel und die Abkürzung/ID KKals Wert enthält. Den Wert kannst Du dann mit

Code: Select all

BahnhofsName := "Köln Hbf"
BahnhofsID := BahnhofsArray[BahnhofsName]
direkt auslesen.

Re: 2-dimensionales Array auswerten

by BoBo » 24 Jul 2020, 01:17

Dann noch eine Frage, kann ich ein normales Array umsortieren? ich meine damit der erste wird zu letzten, nicht a-z sortiert.
Die Frage (oder so ähnlich) hatten wir vor kurzem auch im berüchtigten "Ahnungslosigkeit ..."-thread. Die default Ausgabe der keys erfolgt wohl grundsätzlich alphabetisch sortiert, unabhängig davon ob das associative array in zufälliger Reihenfolge angelegt wurde. Würde demnach noch (mindestens) einen Extraschritt z.B. über Sort (reverse) erfordern.
Wenn ich bisher mit Array arbeite, werden sie meist geloopt. gibt es auch eine Möglichkeit das Array auszuwerten, ohne tausende Zeilen durch zu loopen?
Logisch lässt sich das array auch gezielt abfragen. Beim standard array über die Position des items ("array[3]" oder "array.3") bzw beim associative array über den Schlüssel ("array.key[2]" oder "array.key.2")

Code: Select all

arr := {"key":["x","y","z"]}
MsgBox % var := arr.key.2    ; abfrage der 2. position des item mit dem schlüssel 'key'  = "y"
... oder schon direkt bei der 'Bestückung' eines (unbenannten?) arrays/matchlist mittels StrSplit()

Code: Select all

string := "a,b,c,d,e"
MsgBox % StrSplit(string,",").3   ; liefert "c" = das 3. item
Das decoding des html-konstrukts würde ich entweder über RegEx (bevorzugt) oder über COM + innertext (?) machen.

PS. Das ist übrigens der erste thread bei dem ich nahezu konstant nur "Bahnhof" verstehe :mrgreen:

2-dimensionales Array auswerten

by effel » 23 Jul 2020, 18:49

hallo,
ich beschäftige mich mit den Daten der blauen Bahnhofstafel, die Auswertung der Daten habe ich mit arrays gehändelt. das funktioniert alles ganz gut.

Ich beziehe die Daten von:
https://iris.noncd.db.de/wbt/js/index.html?bhf=KK&Zeilen=50" ; abfahrt köln hbf
https://iris.noncd.db.de/wbt/js/index.html?typ=an&style=an&bhf=KK&Zeilen=50" ; ankunft köln hbf


Jede `Tour`bekommt eine eigene TripID Beispiel: 0-3441732994589337025-2007240459-1.
Die 1 am Ende zeigt den Startbahnhof an und zählt bei jedem folgenden Bahnhof aufwärts.

Diese TripID finde ich auf jeder Bahnhofsanzeige wo der Zug hält und kann, wenn ich auch diese Seite parse, mein Ergebnis mit den dortigen Abfahrtzeiten erweitern. Man könnte Live verfolgen, in welchem Bahnhof der Zug grade ist.


So einen Datensatz bekomme ich jeweils für Ankunft und Abfahrt.

In dem `Ankunft` sind die Bahnhöfe aufgeführt, die der Zug seit Tourbeginn bedient hat. In dem `Abfahrt` sind die Bahnhöfe bis zum Ziel aufgeführt.

Code: Select all

0-3441732994589337025-2007240459-1
04:59
IC 2314
Westerland(Sylt)

Düsseldorf Hbf,Duisburg Hbf,Essen Hbf,Gelsenkirchen Hbf,Dülmen,Osnabrück Hbf,Bremen Hbf,Hamburg-Harburg,Hamburg Hbf,Hamburg Dammtor,Itzehoe,Heide(Holst),Husum,Niebüll
Düsseldorf Hbf,Duisburg Hbf,Essen Hbf,Gelsenkirchen Hbf,Dülmen,Osnabrück Hbf,Bremen Hbf,Hamburg-Harburg,Hamburg Hbf,Hamburg Dammtor,Itzehoe,Heide(Holst),Husum,Niebüll
Hält auch in Dülmen.
Hält nicht in Münster(Westf)Hbf.
5
Nun mein Problem:

In dieser Liste https://ds100.frankfurtium.de/dumps/ds100.html finde ich alle Bahnhöfe mit dazugehörendem Code. Aus "Köln HBF" wird KK
<tr>
<th id="KK">KK</th>
<td>Köln Hbf</td>
</tr>

Weiteres Beispiel:
<tr>
<th id="AHI">AHI</th>
<td>Heide (Holst)</td>
</tr>


Wenn ich bisher mit Array arbeite, werden sie meist geloopt. gibt es auch eine Möglichkeit das Array auszuwerten, ohne tausende Zeilen durch zu loopen?

Ich habe Heide (Holst) und das Abfrageergebnis soll AHI sein.

Dann noch eine Frage, kann ich ein normales Array umsortieren? ich meine damit der erste wird zu letzten, nicht a-z sortiert.

Top