|
You last visited: Today at 03:36
Advertisement
HTML Tabelle --> Array
Discussion on HTML Tabelle --> Array within the AutoIt forum part of the Coders Den category.
05/06/2012, 22:25
|
#1
|
elite*gold: 528
Join Date: Jan 2012
Posts: 2,127
Received Thanks: 2,403
|
HTML Tabelle --> Array
Quote:
Originally Posted by Achat
Kann mir jemand beim einlesen einer Tabelle in einen Array helfen?
Und zwar möchte ich die Tabelle von  in ein zweidimensionales Array einlesen.
HTML: 
(passt nicht in den Thread, ist zu groß)
Ein Tipp wie ich da am besten anfangen kann, wäre nett, denn bei so einer großen Datenmenge verliert man schnell den Überblick.
Danke.
MfG
|
Quote:
Originally Posted by Lawliet!
Für sowas dann evl. doch nen Thread aufmachen ^^ Kann mir vorstellen, dass das ne große parsing Geschichte wird.
|
Hat jemand eine Idee?
Mein Ziel ist es, wie oben schon genannt, alles in einen Array einzulesen.
also
Code:
global $asSectionMods[1][2] = [['Sectionname','Mods']]
Vielen Dank im Voraus.
MfG
|
|
|
05/07/2012, 13:30
|
#2
|
elite*gold: 280
Join Date: May 2007
Posts: 2,818
Received Thanks: 3,483
|
Code:
Func BuildSectionModArray()
Local $regexp = StringRegExp(BinaryToString(InetRead("http://j.mp/mods-sections")), 'target="_blank">([^/]*?)<\/a><\/td><td><a href=.*? target="_blank">(.*?)<\/a> <\/td>', 3), $array[UBound($regexp)/2][2]
For $i=0 To UBound($regexp)-1 Step 2
$array[$i/2][0] = $regexp[$i]
$array[$i/2][1] = StringRegExpReplace($regexp[$i+1], '<\/a> <a href=.*? target="_blank">', ', ')
Next
Return $array
EndFunc
|
|
|
05/07/2012, 18:27
|
#3
|
elite*gold: 528
Join Date: Jan 2012
Posts: 2,127
Received Thanks: 2,403
|
Danke, das hat mir sehr geholfen.
Ich würde außerdem noch gerne die Links zu den Profilen der Mods in den Array einlesen, habe hier schon selbst was versucht (kenne mich mit RegExp nicht so aus -.-):
Code:
#include <Array.au3>
$asSectionMod=BuildSectionModArray()
_ArrayDisplay($asSectionMod)
Func BuildSectionModArray()
Local $array,$i
Local $regexp = StringRegExp(BinaryToString(InetRead("http://j.mp/mods-sections")), 'target="_blank">([^/]*?)<\/a><\/td><td><a href=.*? target="_blank">(.*?)<\/a> <\/td>', 3), $array[UBound($regexp)/2][3]
FileWrite('regexp.txt',$regexp)
For $i=0 To UBound($regexp)-1 Step 2
$array[$i/2][0] = $regexp[$i]
$array[$i/2][1] = StringReplace(StringRegExpReplace($regexp[$i+1], '<\/a> <a href=.*? target="_blank">', ', '),'&','')
Next
_ArrayDisplay($array)
Local $regexp = StringRegExp(BinaryToString(InetRead("http://j.mp/mods-sections")), '<a href="(http://www.elitepvpers.com/forum/members/\d.*?.html)" target="_blank">(.*?)</a>', 3)
ReDim $array[Ubound($array)+Ubound($regexp)][3]
for $i = 0 to UBound($regexp)-1 step 2
$array[$i/2][2]=$regexp[$i]
Next
Return $array
EndFunc
Es werden zwar Links zu den Profilen zurückgegeben, aber leider stimmen die nicht mit dem Namen überein. Wäre cool, wenn du mir da auch noch helfen könntest.
Vielen Dank im Voraus.
MfG
|
|
|
05/07/2012, 18:30
|
#4
|
elite*gold: 2
Join Date: Jul 2009
Posts: 14,456
Received Thanks: 4,685
|
Kannst du theoretisch mit StringinStr() raussuche
|
|
|
05/07/2012, 18:56
|
#5
|
elite*gold: 528
Join Date: Jan 2012
Posts: 2,127
Received Thanks: 2,403
|
Quote:
Originally Posted by Lawliet!
Kannst du theoretisch mit StringinStr() raussuche 
|
Aber die Namen sind nicht immer in der Url zum Profil. Also geht das wohl nicht.
Code:
#include <Array.au3>
#include <String.au3>
$asSectionMod=BuildSectionModArray()
_ArrayDisplay($asSectionMod)
Func BuildSectionModArray()
local $asSource[1]=[BinaryToString(InetRead("http://j.mp/mods-sections"))]
;~ Local $asSource=_StringBetween($sSource,'<img src="http://www.elitepvpers.com/forum/images/teamicons/relaunch/moderator.png" border="0" alt="" class="tcattdimgresizer"','by StG')
Local $array[1000][3],$i
Local $regexp = StringRegExp($asSource[0], 'target="_blank">([^/]*?)<\/a><\/td><td><a href=.*? target="_blank">(.*?)<\/a> <\/td>', 3)
FileWrite('regexp.txt',$regexp)
For $i=0 To UBound($regexp)-1 Step 2
$array[$i/2][0] = $regexp[$i]
$array[$i/2][1] = StringReplace(StringRegExpReplace($regexp[$i+1], '<\/a> <a href=.*? target="_blank">', ', '),'&','')
Next
_ArrayDisplay($array)
;~ Local $regexp = StringRegExp($asSource[0], '<a href="(http://www.elitepvpers.com/forum/members/\d.*?.html)" target="_blank">(.*?)</a>', 3)
for $i = 0 to UBound($array,2)-1
$regexp[$i] = StringRegExp($asSource[0], '</a></td><td><a href="(http://www.elitepvpers.com/forum/members/\d.*?.html)" target="_blank">('&$array[$i][1]&')</a>', 3)
Next
;~ ReDim $array[Ubound($array)+Ubound($regexp)][3]
for $i = 0 to UBound($regexp)-1 step 2
$array[$i/2][2]=$regexp[$i]
Next
Return $array
EndFunc
Also irgendwas mache ich da falsch....
Ich möchte noch den Link zum Modprofil auslesen, z.B.
HTML Code:
<a href="http://www.elitepvpers.com/forum/say-hello/" target="_blank">Say Hello</a></td><td><a href="[B]http://www.elitepvpers.com/forum/members/2204104--status.htm[/B]l" target="_blank">°Status</a>
MfG
|
|
|
05/07/2012, 19:09
|
#6
|
elite*gold: 0
Join Date: Mar 2011
Posts: 8,645
Received Thanks: 3,454
|
_StringBetween()
|
|
|
05/07/2012, 20:55
|
#7
|
elite*gold: 528
Join Date: Jan 2012
Posts: 2,127
Received Thanks: 2,403
|
EDIT
Kann geschlossen werden,
Bekomme das hier zurück:
MfG
Danke nochmal an alle, die sich am Thread beteiligt haben.
EDIT4:
Also es funktioniert, aber in manchen Teilen der Tabelle gibt es mehr als einen Mod, meine Funktion
Code:
Func _EPVP_STAFF()
local $sHTML=BinaryToString(InetRead("http://j.mp/mods-sections"))
local $asTable=_StringBetween($sHTML,'<img src="http://www.elitepvpers.com/forum/images/teamicons/relaunch/moderator.png" border="0" alt="" class="tcattdimgresizer" ','by StG')
$sHTML=$asTable[0]
Local $asRegexp = StringRegExp($sHTML, '<a href=(.*?) target="_blank">([^/]*?)</a></td><td><a href="(.*?).html" target="_blank">([^/]*?)</a>', 3)
local $asReturn[Ubound($asRegexp)][4],$iLoop,$asReturnFormatted[1][4] =[['ThreadLink','ThreadName','ModProfileLink','ModName']]
for $i = 0 To UBound($asRegexp)-5 step 4
$asThreadLink=_StringBetween($asRegexp[$i],'<a href="','"')
$asThreadLink=StringRegExp($asRegexp[$i],'http://www.elitepvpers.com/forum/[^members](.*)',3)
If IsArray($asThreadLink) Then
$asReturn[$i][0]='http://www.elitepvpers.com/forum/'&$asThreadLink[0]
EndIf
$asReturn[$i][1]=StringReplace($asRegexp[$i+1],'&','')
$asReturn[$i][2]=$asRegexp[$i+2]
$asReturn[$i][3]=StringReplace(StringReplace($asRegexp[$i+3],'Α','A'),'Crαnk','')
Next
for $i=0 to UBound($asReturn)-1
If $asReturn[$i][0] <> '' And $asReturn[$i][1] <> '' and $asReturn[$i][2] <> '' and $asReturn[$i][3] <>'' Then
Redim $asReturnFormatted[UBound($asReturnFormatted,1)+1][4]
$asReturnFormatted[Ubound($asReturnFormatted)-1][0]=$asReturn[$i][0]
$asReturnFormatted[Ubound($asReturnFormatted)-1][1]=$asReturn[$i][1]
$asReturnFormatted[Ubound($asReturnFormatted)-1][2]=$asReturn[$i][2]
$asReturnFormatted[Ubound($asReturnFormatted)-1][3]=$asReturn[$i][3]
EndIf
Next
Return $asReturnFormatted
;$asReturn[$x][0]=Threadlink
;$asReturn[$x][1]=Threadname
;$asReturn[$x][2]=Modlink
;$asReturn[$x][3]=Modname
EndFunc
gibt aber immer nur den ersten Mod zurück, der in der Tabelle steht - wie kann ich die Modnamen & ModUrls von allen Mods in einer Zeile auslesen?
MfG
|
|
|
05/08/2012, 00:02
|
#8
|
elite*gold: 280
Join Date: May 2007
Posts: 2,818
Received Thanks: 3,483
|
Code:
#include <array.au3>
$array = BuildSectionModArray()
_ArrayDisplay($array)
Func BuildSectionModArray()
Local $regexp = StringRegExp(BinaryToString(InetRead("http://j.mp/mods-sections")), 'target="_blank">([^/]*?)<\/a><\/td><td>(.*?) <\/td>', 3), $array[UBound($regexp)/2][3]
For $i=0 To UBound($regexp)-1 Step 2
Local $mod = ArrayToString(StringRegExp($regexp[$i+1], '<a href="(.*?)" target="_blank">(.*?)</a>', 3))
$array[$i/2][0] = $regexp[$i]
$array[$i/2][1] = $mod[0]
$array[$i/2][2] = $mod[1]
Next
Return $array
EndFunc
Func ArrayToString($array)
Local $string[2]
For $i=0 To UBound($array)-1 Step 2
$string[1]&=$array[$i]&', '
$string[0]&=$array[$i+1]&', '
Next
Local $return[2]=[StringTrimRight($string[0],2),StringTrimRight($string[1],2)]
Return $return
EndFunc
die arraytostring funktion ist eigentlich überflüssig, und braucht man so natürlich nicht (deshalb auch sehr ineffizient, aber kurz und bündig geschrieben). wollte nur alles sauber gepresst für die _ArrayDisplay funktion ausgeben =)
|
|
|
05/15/2012, 20:49
|
#9
|
elite*gold: 528
Join Date: Jan 2012
Posts: 2,127
Received Thanks: 2,403
|
Danke!
Ich habe jetzt selbst mal was ausprobiert:
Code:
Func _EPVP_STAFF()
local $iSize,$asReturn1[1][4]
Local $sHTML = _InetReadWinHttp('elitepvpers.com', 'forum/main/1421118-elitepvpers-staff-overview.html')
Local $asRegexp = StringRegExp($sHTML, '<a href="(.*?)" (target="_blank">[^/].*?</a>)</td><td>(<a href=".*?.html)" (target="\w*?">.*?</a>) </td></tr>', 3), $asReturn[UBound($asRegexp)][4]
;<a href="http://www.elitepvpers.com/forum/say-hello/" target="_blank">Say Hello</a></td><td><a href="(http://www.elitepvpers.com/forum/members/.*)" target="_blank">°Status</a> </td></tr>
;[5]|http://www.elitepvpers.com/forum/ion-hacks-bots-cheats-exploits/"|Aion Hacks, Bots, Cheats ; Exploits|http://www.elitepvpers.com/forum/members/296414-darkopm.html|http://www.elitepvpers.com/forum/members/296414-darkopm
_ArrayDisplay($asRegexp)
;~ ReDim $asReturn[Ubound($asReturn)/4]
For $i = 0 To UBound($asReturn) - 5 Step +4
;~ If $i = 0 Then ReDim $asReturn[Round(Ubound($asReturn)/4)][3]
$asReturn[$i / 4][0] = $asRegexp[$i]
Local $asArrayThreadName = StringRegExp($asRegexp[$i + 1], 'target="_blank">([^/].*?)</a>', 3)
Local $asArrayModLink = StringRegExp($asRegexp[$i + 2], 'href="(.*\.html)?', 3)
Local $asArrayModName = StringRegExp($asRegexp[$i + 3], 'target="_blank">(.*?)</a>', 3)
$asReturn[$i / 4][1] = StringReplace(StringReplace(_ArrayToString($asArrayThreadName, ','),'<b>',''),'</b>','')
$asReturn[$i / 4][2] = _ArrayToString($asArrayModLink, ',')
$asReturn[$i / 4][3] = _ArrayToString($asArrayModName, ',')
Next
local $sReturn1
$i=0
Do ;Leere Zeilen werden gelöscht
ReDim $asReturn1[Ubound($asReturn1)+1][4]
$asReturn1[$i][0]=$asReturn[$i][0]
$asReturn1[$i][1]=$asReturn[$i][1]
$asReturn1[$i][2]=$asReturn[$i][2]
$asReturn1[$i][3]=$asReturn[$i][3]
$i+=1
until $asReturn[$i][0] =''
Return $asReturn1
;$asReturn[$x][0]=Threadlink
;$asReturn[$x][1]=Threadname
;$asReturn[$x][2]=Modlink
;$asReturn[$x][3]=Modname
EndFunc ;==>_EPVP_STAFF
Es funktioniert auch soweit alles. Aber wenn es in einer Section mehrere Mods gibt, bekomme ich immer nur eine URL zu einem Modprofil. Die Namen der anderen Mods werden zwar angezeigt, aber nicht deren URL. Was kann man da machen? Geht das überhaupt in einem RegExp oder werden wie bei Lolkop's Beispiel zwei benötigt?
[IMG]

[/IMG]
MfG
|
|
|
05/15/2012, 21:23
|
#10
|
elite*gold: 280
Join Date: May 2007
Posts: 2,818
Received Thanks: 3,483
|
mein beispielcode funktionierte doch soweit? o0
|
|
|
05/15/2012, 21:24
|
#11
|
elite*gold: 528
Join Date: Jan 2012
Posts: 2,127
Received Thanks: 2,403
|
Danke für deine Antwort.
Ja, wollte es aber auch mal selbst ausprobieren, um zu lernen 
Was mache ich falsch?
MfG
|
|
|
05/15/2012, 22:14
|
#12
|
elite*gold: 280
Join Date: May 2007
Posts: 2,818
Received Thanks: 3,483
|
Quote:
Originally Posted by Achat
Es funktioniert auch soweit alles. Aber wenn es in einer Section mehrere Mods gibt, bekomme ich immer nur eine URL zu einem Modprofil. Die Namen der anderen Mods werden zwar angezeigt, aber nicht deren URL. Was kann man da machen? Geht das überhaupt in einem RegExp oder werden wie bei Lolkop's Beispiel zwei benötigt?
|
das mit den mods hatte nur funktioniert, weil ich den rest einfach gelöscht habe.
in der realität will man ja aber ohnehin nicht etwa einen string der modnamen, durch komma getrennt erhalten, sondern ein array von mods (im bestenfall als 2d array inclusive ihrer urls).
wie bereits gesagt hatte ich die funktion mit dem string nur eingebaut, um das ganze schöner ausgeben zu können.
das ganze in einem einzigen befehl auslesen kann deshalb nicht funktionieren, da selbst wenn man es bewerkstelligen könnte, die anzahl unbekannt wäre, und man das ganze nicht wie in meinem beispiel sortieren könnte...
das hauptarray bei meinem beispiel sieht ja so aus:
Code:
[0] = Sektion 0
[1] = string von mods und links 0
[2] = Sektion 1
[3] = string von mods und links 1
[4] = Sektion 2
[5] = string von mods und links 2
[...]
so lässt sich das ganze ja einfach wie in meinem beispiel mit einer for schleife zusammen sortieren.
Code:
[$i*2] entspricht jeweils einer Sektion für alle natürlichen zahlen ab 0, da dies die geraden zahlen sind
[$i*2+1] ist jeweils der nachfolger und somit der string von mods und links
würden wir aber die mods und strings mit einlesen, erhielten wir soetwas:
Code:
[0] = Sektion 0
[1] = link 0
[2] = mod 0
[3] = Sektion 1
[4] = link 1
[5] = mod 1
[6] = link 1
[7] = mod 1
[8] = link 1
[9] = mod 1
[10] = Sektion 2
[11] = link 2
[12] = mod 2
[13] = Sektion 3
[...]
da wir nun nicht wissen, wieviele mods und links wir pro sektion erhalten, können wir unmöglich anfangen das ganze in ein array zu sortieren.
|
|
|
05/15/2012, 23:33
|
#13
|
elite*gold: 2
Join Date: Jul 2009
Posts: 14,456
Received Thanks: 4,685
|
Man kann aber die URL aufrufen und die Modanzahl auslesen
|
|
|
05/16/2012, 09:45
|
#14
|
elite*gold: 280
Join Date: May 2007
Posts: 2,818
Received Thanks: 3,483
|
Quote:
Originally Posted by Lawliet!
Man kann aber die URL aufrufen und die Modanzahl auslesen 
|
da ist es immernoch wesentlich effizienter das ganze über 2 regexp befehle auszulesen, bevor man mehrere seiten läd :P
|
|
|
05/17/2012, 01:58
|
#15
|
elite*gold: 528
Join Date: Jan 2012
Posts: 2,127
Received Thanks: 2,403
|
Quote:
Originally Posted by Lawliet!
Man kann aber die URL aufrufen und die Modanzahl auslesen 
|
Quote:
Originally Posted by lolkop
da ist es immernoch wesentlich effizienter das ganze über 2 regexp befehle auszulesen, bevor man mehrere seiten läd :P
|
Die Modanzahl von jeder Sektion abzurufen würde lange dauern, aber dafür ist sie dann auch aktuell.
In dem epvp staff Thread steht Lawliet! noch nicht als Moderator drin.
MfG
|
|
|
 |
|
Similar Threads
|
[Joomla][HTML] modul in einer html datei verlinken?
11/11/2011 - Web Development - 1 Replies
ich hab vorher im joomla forum schon ein thread geöffnet aber da antwortet mir niemand und ich ich langsam keine gedult mehr.. will heute noch weiter probieren und so.
----------------------------------------
Bei den Modulen gibt es ein leeres, wo man ein editor hat. Ist es möglich eine verlinkung zum modul in der html zu machen?
Hier ein beispiel vom aufbau meiner website: Vorstellung wie die website ungefähr sein soll, wo ich welche div container gemacht habe, wie das ganze zur zeit...
|
Array
06/18/2011 - AutoIt - 0 Replies
Array Fehler
Ich habe hier mal wieder einen Fehler den ich nicht beheben kann
#include "WebTcp.au3"
#include <Array.au3>
#Include <File.au3>
TCPStartup()
_AutoITObject_Startup()
|
[HTML]Auswahl in Tabelle posten?
07/11/2010 - Web Development - 4 Replies
Hi,
ich bin noch neu hier also bitte nicht gleich bissige Antworten geben nur weil ich im erstellen von Websites noch ein ziemlicher noob bin.
Aaalso hier zu meiner Frage ( hört sich vielleicht komisch an für die HTML Profis unter euch, aber ich hoffe trotzdem, dass ich eine verständliche Antwort bekomme) :
Ich bin grad am basteln einer Homepage und da hätte ich gerne ein paar Sachen wie eine Textbox, Auswahlfenster usw.
Auf jeden Fall hat man dann am Ende einen Button, und jetzt zu...
|
[C] Pointer auf Array
08/26/2009 - General Coding - 3 Replies
Hallo,
Ich habe folgendende Pointer deklariert:
char *Menu0 = {"Gerd","Egon","Juergen&q uot;,"Karl","Hans-Dieter",&quo t;Hans-Guenther"};
char *Menu1 = {"Anna","Inge","Franziska ","Lisa","Maria"};
usw..
|
[HTML]HELP[/HTML]range hack and skill speed in extreme
08/21/2009 - Dekaron Private Server - 5 Replies
hey guys i need a little help about range hack and skill speed in extreme
i already unpack the Data its all done..1! my problem is wer i can edit the range ang skill speed in extreme..! pls :):):):):)
|
All times are GMT +1. The time now is 03:36.
|
|