Seite auslesen und 3 Spalten einer Tabelle löschen

Hallo,
ich habe hier die Seite unserer Schule: bs-gelnhausen.de/Vertretungsplan/V_C_117_1.html

ich will sie gerne auslesen (darf ich auch für ein AndroidApp)
es sollen 3 Spalten komplett verschwinden und dann wieder ausgegeben werden.

Kann mir jemand helfen wie das ganze funktionieren soll?

Spalte Klasse, Merkmal und Info
und zu dem gehören immer die Stunden 1 2 || 3 4 || 5 6 || 8 9 || 10 11 zusammen kann man das auch iwie hinbiegen das alles in einer Zeile angezeigt wird? weil die Stunden eh zusammen gehören und es steht eh bei beiden Stunden das gleiche drinn

wäre echt geil wenn das jemand hinbekommt
dann kann ich es in die App einfügen und schon sieht des Top auf meinem Handy aus

gruß

Hi,

mit PHP und fopen(bei bplaced pro 3,00 monat) geht das.

LG Flo

Das erste Problem bei HTML-Tabellen ist eigentlich, dass die Überschriften immer ganz oben stehen, und Du den Spalten-index in einer/mehreren Variablen/Array speichern müsstest.

Wenn Du nur eine ganz normale Tabelle auslesen willst - kein großes Problem.
Wenn Du allerdings colspans drinnen hast müssen nicht nur die tds gezählt werden sondern auch noch der Colspan-Wert.
Wenn der Colspan über CSS festgelegt wird, wäre es vielleicht einfacher nach vorgefertigten Klassen zu Fragen.

Es ist also Deine Sache, ob nur diese Version verändert werden soll, oder vielleicht auch mögliche zukünftige.

Momentan ist die erste Tabellenzeile nur eine ganz normale Zeile, und die Tabelle ist nur HTML. ( Wenn ich nichts übersehen habe. )
Es sind also keine speziellen Kopfzeilen zu berücksichtigen ( die haben andere Tags ).

Jetzt werden eigentlich nur 3 Funktionen benötigt:
PHP: strpos(string, gesuchterString, startPosition); und substr(string, startPosition, länge);
JavaScript-Equivalente sind: PHP: string.indexOf(gesuchterString, startPosition); und string.substr(startPosition, länge);

Und eine trim-funktion wäre noch nützlich, aber die zu finden überlasse ich mal Dir :wink:

Dokument bearbeiten mit JavaScript:[code]var content = document.getElementsByTagName(“html”)[0];
» // content bearbeiten
document.open();
document.write
( // doctype

  • “”
  • content
  • "
    );
    document.close();[/code]

Der zugehörige Code ist etwa so ( ich nehme mal JavaScript an, aber nach PHP zu übersetzen dürfte nicht schwer sein wenn Du Dich an eine solche Aufgabe heranwagst. ): var spalte; var iSpalte; spalte[0] = 'spaltenname1'; // ... start = content.indexOf("<table>");// Startposition end = content.indexOf("</table>")// das Ende for( var i=0 ; i<spalte.length ; i++ ) { for( var iCell=0 ; true ; iCell++ ) { cellStart = content.indexOf("<td>", start)+4// länge <td> ; cellEnde = content.indexOf("</td>") ; cellContent = trim content.substr(spalteStart, spalteEnde-spalteStart) ; if( spalte[i] == cellContent ) { iSpalte[i] = iCell break; } start = cellEnde } }// jetzt hast Du in iSpalte[i] den jeweiligen Spaltenindex, nicht den Namen // verbessern könnte man das ganze noch mit einer weiteren start-Variable, die für jedes i zurückgesetzt wird ( ist zwar langsamer, aber die Reihenfolge ist dann egal )

Un die Spalten auszulesen kannst Du einfach in jedem

bis eine Zählervariable laufen lassen, die die s wie hier zählt und den startwert mitzieht, sodass immer der folgende Tag gelesen wird.
Wenn Du überprüfen willst, ob das tag-ende erreicht ist, nimm die end variable als beispiel ( natürlich immer von start aus gesehen ) und überprüfe in jedem durchlauf td-ende < tr-ende bzw tr-ende < table-ende.

if iCell == irgendeine(iSpalte): schreibe den Inhalt in tr-results.
Nach jeder Zeile: schreibe tr-results in table-results, setze tr-results für den nächsten durchlauf zurück.

Wenn das Tabellenende erreicht ist, hast Du den ersten Teil ja schon geschaft :wink:

Tabelle erstellen:var result = "<table>"; for( var i=0 ; i < table-results.length ; i++ ) { result += "<tr>"; ; for( var iCell=0 ; i < tr-results.length ; i++ ) result += "<td>"+tr-results[iCell]+"</td>" ; result += "</tr>" } result += "</table>"

OK - Wenn Du alles verstanden hast, hast Du es fast geschafft :wink:

Jetzt nur noch ein wenig überlegen, die absichtlich falsch geschriebenen Variablen so bennenen, dass sie Deinen Bedürftnissen entsprechen und ein wenig testen.

Sollten weitere Probleme auftreten:
http://de.selfhtml.org/javascript/objekte/node.htm für die document-Interaktion,
http://de.selfhtml.org/javascript/index.htm für allgemeine Java-Probleme und
http://php.net/ für PHP Probleme

Sorry das ich das hier ein wenig übereilt abschicke, aber ich habe noch wichtige Termine heute.

PS: Die Seite mit der Tabelle lädt sehr langsam :wink:

okay
deine code schnipsel verstehe ich ja soweit,
da ich keinen Zugriff auf die Seite habe btw auf den Server muss ich es extern von meinem Server aus laden
allerdings bekomme ich die Seite nicht so das ich sie bearbeiten kann
kann mir dazu nochmal jemand ein Code Snipet posten?

gruß
danke schonmal

Frag halt mal ob sie dir die Informationen auch noch anderweitig ausgeben können. XML oder so?

Hi,

wenn du es über PHP machen möchtet. Brauchst du sockets aber gibt hier mit bplaced pro oder auf square7 …

Hier ein (fast) fertiges Script:

[code]<?php
// URL, die durchsucht werden soll
$url = “http://bs-gelnhausen.de/Vertretungsplan/V_C_117_1.html”;

// Zeichenfolge vor relevanten Einträgen
$startstring = “

”;

// bis zum nächsten html tag bzw. Zeichenfolge nach relevanten Einträgen
$endstring = “

”;

$file = fopen($url,“r”);
$i=0;
while (!feof($file)) {
// Wenn das File entsprechend groß ist, kann es unter Umständen
// notwendig sein, die Zahl 2000 entsprechend zu erhöhen. Im Falle
// eines Buffer-Overflows gibt PHP eine entsprechende Fehlermeldung aus.
$zeile[$i] .= fgets($file,2000000);
$i++;
}
fclose($file);

// Nun werden die Daten entsprechend gefiltert.
for ($j=0;$j<$i;$j++) {
if ($resa = strstr($zeile[$j],$startstring)) {
$resb = str_replace($startstring, “”, $resa);
$endstueck = strstr($resb, $endstring);
$resultat .= str_replace($endstueck,"",$resb);
$resultat .= " : “;
}
}
$ergebnis = explode(” ; “, $resultat);
foreach($ergebnis as $name => $wert) {
echo $name .”: “. $wert .”
";
}
[/code]
Dann brauchst nur noch ablesen lesen welche zellen du brauchst werden ja durch das foreach ausgegeben (die zahlen dafor merken) und dann kannst es foreach löschen und wie ganz normale php variablen verwenden

lg flo

//ediit: hier ein link zum script grojer.square7.ch/bforumantwort.php
//edit2: mist wird ja zeile für zeile ausgelesen

Hi,

hab verbesserungen am Code von mir oben gepostet vorgenommen und klappt es glaub ich mal so wie du es wolltest. Jetz kannst du die Infos wo du benötigst einfach per $ergebnis[NUMMER] ausgeben lassen.

Hier ein Bsp. da stehen auch die nummern die du statt NUMMER einsetzen musst.
grojer.square7.ch/bforumantwort.php

lg flo

[code]<?php
// URL, die durchsucht werden soll
$url = “http://bs-gelnhausen.de/Vertretungsplan/V_C_117_1.html”;

// Zeichenfolge vor relevanten Einträgen
$startstring = “<td align=“left””;

// bis zum nächsten html tag bzw. Zeichenfolge nach relevanten Einträgen
$endstring = “”;

$file = fopen($url,“r”);
$i=0;
while (!feof($file)) {
// Wenn das File entsprechend groß ist, kann es unter Umständen
// notwendig sein, die Zahl 2000 entsprechend zu erhöhen. Im Falle
// eines Buffer-Overflows gibt PHP eine entsprechende Fehlermeldung aus.
$zeile[$i] .= fgets($file,2000000);
$i++;
}
fclose($file);

// Nun werden die Daten entsprechend gefiltert.
$del1 = “bgcolor=”#CCCCFF" >";
$del2 = “bgcolor=”#9999FF" >";

for ($j=0;$j<$i;$j++) {
if ($resa = strstr($zeile[$j],$startstring)) {
$j++;
$resa .= $zeile[$j];
$j++;
$resa .= $zeile[$j];
$j++;
$resa .= $zeile[$j];
$resb = str_replace($startstring, “”, $resa);
$endstueck = strstr($resb, $endstring);
$hilfsvariable = str_replace($endstueck,"",$resb);
$hilfsvariable = str_replace($del1,"", $hilfsvariable);
$hilfsvariable = str_replace($del2,"", $hilfsvariable);
$resultat .= $hilfsvariable;
$resultat .= " ; “;
}
}
$ergebnis = explode(” ; “, $resultat);
foreach($ergebnis as $name => $wert) {
echo $name .”: “. $wert .”
";
}
?>[/code]

ich bedanke mich

hier das resultat:
xetu-hosting.de/Vertretungsplan_ … n/bg12.php

jetzt bin ich dabei mein Menü in Android zu basteln mal schauen wie das hinhaut

Hi,

bitte kein Problem :wink:
Hab dein Problem einfach als weiterbildung für mich genutzt :stuck_out_tongue:
Hab davor mit externen seiten noch nie so wirklich was zu tun gehabt

lg flo

hallo,
habe noch ein Problem

hier mal meine Page derzeit:

xetu-hosting.de/bg12.php

so nun habe ich das Problem das Merkmal bei Raumänderungen leer bleibt und bei Arbeitsaufträgen also muss ich wenn Merkmal leer bleibt den Wert einer anderen Spalte laden

derzeit lasse ich den Wert für Mermal so ausgeben:

echo '<td align="left" bgcolor="#CCCCFF">'. $ergebnis[$g] ."</td>"; $g = $g +24;

wobei $g immer hochgezählt wird in der Schleife mit +24

wie kann ich jetzt Prüfen ob $ergebnis[$g] leer ist ? weil anscheind wenns leer ist ein Leerzeichen drinne ist

gruß
danke für die Hilfe

hoi so :wink:

if(empty($ergebnis[g])) { // Variable leer oder null } else { //varialbe mit irgend einem inhalt }

p.s. wird nicht klappen da da lgaub immer mit drin steht

&nsbp;

sonst musst du halt prüfen ob nur ein leer zeichen drin ist prüfen so in der art:

if($ergebnis[g] == '&nbsp;') { //nur ein leerzeichen } else { // i-was anderes als leerzeichen }

oder

if($ergebnis[g] != '&nbsp;') { //i-was nur kein leerzeichen }

lg flo

hinter jeden Frei scheint auch ein Leerzeichen zu stehen :stuck_out_tongue:

also es klappt gar nix lässt die zeile einfach weiterhin leer … total kacke …

HI… ja das macht nichts es würd überprüft ob einzig und allein ein leerzeichen vorkommt …

wenn du das auch überprüfen willst ob bei frei und leerzeichen vorkommt dann machst halt

if($variable == ‘Frei&nsbp;’) {
// Frei + leerzeichen
}

//edit: schreib doch mal bitte echo “”. $ergebnis[g] ."";

einfach nur damit man die zeile eindeutig indentivizieren kann und dann schickst du mir bitte den code ausschnitt dann pass ich die if anfrage an

hier mal mein gesamter Code klappt alles noch net so wie ich mir das vorstelle :stuck_out_tongue:
die IF abfrage klappt immer noch nicht

[code]<?php
// URL, die durchsucht werden soll
$url = “http://bs-gelnhausen.de/Vertretungsplan/V_C_117_1.html”;

// Zeichenfolge vor relevanten Einträgen
$startstring = “<td align=“left””;

// bis zum nächsten html tag bzw. Zeichenfolge nach relevanten Einträgen
$endstring = “”;

$file = fopen($url,“r”);
$i=0;
while (!feof($file)) {
// Wenn das File entsprechend groß ist, kann es unter Umständen
// notwendig sein, die Zahl 2000 entsprechend zu erhöhen. Im Falle
// eines Buffer-Overflows gibt PHP eine entsprechende Fehlermeldung aus.
$zeile[$i] .= fgets($file,2000000);
$i++;
}
fclose($file);

// Nun werden die Daten entsprechend gefiltert.
$del1 = “bgcolor=”#CCCCFF" >";
$del2 = “bgcolor=”#9999FF" >";

for ($j=0;$j<$i;$j++) {
if ($resa = strstr($zeile[$j],$startstring)) {
$j++;
$resa .= $zeile[$j];
$j++;
$resa .= $zeile[$j];
$j++;
$resa .= $zeile[$j];
$resb = str_replace($startstring, “”, $resa);
$endstueck = strstr($resb, $endstring);
$hilfsvariable = str_replace($endstueck,"",$resb);
$hilfsvariable = str_replace($del1,"", $hilfsvariable);
$hilfsvariable = str_replace($del2,"", $hilfsvariable);
$resultat .= $hilfsvariable;
$resultat .= " ; “;
}
}
$ergebnis = explode(” ; ", $resultat);

foreach($ergebnis as $name => $wert) {
$name ;
}

$table_erstellen = $name - 11 / 12;
$table_erstellen = $table_erstellen / 12 /2;
$table_erstellen = floor ($table_erstellen);

echo '
<!doctype HTML PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN”>

Vertretungsplan 12BG - bs-gelnhausen.de/Vertretungsplan (c) bs-gelnhausen h1 { font-family: Tahoma; font-size: 12px; font-weight: normal; text-align: Right} h2 { font-family: Tahoma; font-size: 18px; font-weight: bold; text-align: left} caption { font-family: Tahoma; font-size: 18px; font-weight: bold; text-align: center; height: 40} p { font-family: Tahoma; font-size: 12px; font-weight: normal; text-align: left} remark { font-family: Tahoma; font-size: 12px; font-weight: normal; text-align: Left} a { font-family: Tahoma; font-size: 12px; font-weight: normal; text-align: left; text-decoration: none} body { font-family: Tahoma; font-size: 12px; font-weight: normal; text-align: left} td { font-family: Tahoma; font-size: 12px; font-weight: normal} '; echo '

Achten Sie bitte auch auf die Vertretungsmonitore und Aushänge in der Schule!

'; echo ''; echo '"; echo '"; echo '"; echo '"; echo '"; echo '"; echo '"; echo "";

$a = 12;
$b = 13;
$c = 14;
$d = 15;
$e = 16;
$f = 21;
$g = 22;
$h = 26;

for ($j=0;$j<$table_erstellen;$j++){
echo “

”;
echo ‘";
$a = $a + 24;
echo ‘";
$b = $b +24;
echo ‘”;
$c = $c +24;
$h = $h +24;
echo ‘";
$d = $d +24;
echo ‘";
$e = $e +24;
echo ‘";
$f = $f +24;
if ($ergebnis[$g] == ‘Frei&nsbp;’) {
echo’";
}
if ($ergebnis[$g] != ‘Frei&nsbp;’) {
echo’’;
}
$g = $g +24;
echo "</tr>";

}
echo “

'. $ergebnis[0] ."'. $ergebnis[1] ."'. $ergebnis[2] ."'. $ergebnis[3] ."'. $ergebnis[4] ."'. $ergebnis[9] ."'. $ergebnis[10] ."
’. $ergebnis[$a] ."’. $ergebnis[$b] ."’. $ergebnis[$c] . “/” . $ergebnis[$h] . “’. $ergebnis[$d] ."’. $ergebnis[$e] ."’. $ergebnis[$f] ."’. $ergebnis[$g] ."Merkmal
”;

echo ’

mobile code by | xetu-hosting.de
Created by daVinci 5 | www.stueber.de

';

?>[/code]

danke schonmal
gruß

So sollte es gehn:

hallo,
also bei mir geht das immer noch nicht

siehe meine ausgelesene Seite:

xetu-hosting.de/bg12.php

und die original Seite steht überall Frei aber trotzdem wird überall Merkmal angezeigt

bs-gelnhausen.de/Vertretungsplan/V_C_117_1.html

hi füg mal des einfach genau so ein und poste dann mal den quelltext

[code]<?php
// URL, die durchsucht werden soll
$url = “http://bs-gelnhausen.de/Vertretungsplan/V_C_117_1.html”;

// Zeichenfolge vor relevanten Einträgen
$startstring = “<td align=“left””;

// bis zum nächsten html tag bzw. Zeichenfolge nach relevanten Einträgen
$endstring = “”;

$file = fopen($url,“r”);
$i=0;
while (!feof($file)) {
// Wenn das File entsprechend groß ist, kann es unter Umständen
// notwendig sein, die Zahl 2000 entsprechend zu erhöhen. Im Falle
// eines Buffer-Overflows gibt PHP eine entsprechende Fehlermeldung aus.
$zeile[$i] .= fgets($file,2000000);
$i++;
}
fclose($file);

// Nun werden die Daten entsprechend gefiltert.
$del1 = “bgcolor=”#CCCCFF" >";
$del2 = “bgcolor=”#9999FF" >";

for ($j=0;$j<$i;$j++) {
if ($resa = strstr($zeile[$j],$startstring)) {
$j++;
$resa .= $zeile[$j];
$j++;
$resa .= $zeile[$j];
$j++;
$resa .= $zeile[$j];
$resb = str_replace($startstring, “”, $resa);
$endstueck = strstr($resb, $endstring);
$hilfsvariable = str_replace($endstueck,"",$resb);
$hilfsvariable = str_replace($del1,"", $hilfsvariable);
$hilfsvariable = str_replace($del2,"", $hilfsvariable);
$resultat .= $hilfsvariable;
$resultat .= " ; “;
}
}
$ergebnis = explode(” ; ", $resultat);

foreach($ergebnis as $name => $wert) {
$name ;
}

$table_erstellen = $name - 11 / 12;
$table_erstellen = $table_erstellen / 12 /2;
$table_erstellen = floor ($table_erstellen);

echo '
<!doctype HTML PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN”>

Vertretungsplan 12BG - bs-gelnhausen.de/Vertretungsplan (c) bs-gelnhausen h1 { font-family: Tahoma; font-size: 12px; font-weight: normal; text-align: Right} h2 { font-family: Tahoma; font-size: 18px; font-weight: bold; text-align: left} caption { font-family: Tahoma; font-size: 18px; font-weight: bold; text-align: center; height: 40} p { font-family: Tahoma; font-size: 12px; font-weight: normal; text-align: left} remark { font-family: Tahoma; font-size: 12px; font-weight: normal; text-align: Left} a { font-family: Tahoma; font-size: 12px; font-weight: normal; text-align: left; text-decoration: none} body { font-family: Tahoma; font-size: 12px; font-weight: normal; text-align: left} td { font-family: Tahoma; font-size: 12px; font-weight: normal} '; echo '

Achten Sie bitte auch auf die Vertretungsmonitore und Aushänge in der Schule!

'; echo ''; echo '"; echo '"; echo '"; echo '"; echo '"; echo '"; echo '"; echo "";

$a = 12;
$b = 13;
$c = 14;
$d = 15;
$e = 16;
$f = 21;
$g = 22;
$h = 26;

for ($j=0;$j<$table_erstellen;$j++){
echo “

”;
echo ‘";
$a = $a + 24;
echo ‘";
$b = $b +24;
echo ‘”;
$c = $c +24;
$h = $h +24;
echo ‘";
$d = $d +24;
echo ‘";
$e = $e +24;
echo ‘";
$f = $f +24;
if ($ergebnis[$g] == ‘Frei’) {
//
//
//Das passiert wenn in Merkmal Frei drinnen ist
//
//
echo’";
} else {
//
//
//Das passiert wenn in Merkmal NICHT Frei drinnen ist
//
//
echo’’;
}

//test
echo ‘

’. $ergebnis[$g] .’

’;

$g = $g +24;

echo “

”;
}
echo “
'. $ergebnis[0] ."'. $ergebnis[1] ."'. $ergebnis[2] ."'. $ergebnis[3] ."'. $ergebnis[4] ."'. $ergebnis[9] ."'. $ergebnis[10] ."
’. $ergebnis[$a] ."’. $ergebnis[$b] ."’. $ergebnis[$c] . “/” . $ergebnis[$h] . “’. $ergebnis[$d] ."’. $ergebnis[$e] ."’. $ergebnis[$f] ."’. $ergebnis[$g] ."Merkmal
”;

echo ’

mobile code by | xetu-hosting.de
Created by daVinci 5 | www.stueber.de

';

?>[/code]

hallo,
also dann mal hier de Quelltext

[code]<!doctype HTML PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN”>

Vertretungsplan 12BG - bs-gelnhausen.de/Vertretungsplan (c) bs-gelnhausen h1 { font-family: Tahoma; font-size: 12px; font-weight: normal; text-align: Right} h2 { font-family: Tahoma; font-size: 18px; font-weight: bold; text-align: left} caption { font-family: Tahoma; font-size: 18px; font-weight: bold; text-align: center; height: 40} p { font-family: Tahoma; font-size: 12px; font-weight: normal; text-align: left} remark { font-family: Tahoma; font-size: 12px; font-weight: normal; text-align: Left} a { font-family: Tahoma; font-size: 12px; font-weight: normal; text-align: left; text-decoration: none} body { font-family: Tahoma; font-size: 12px; font-weight: normal; text-align: left} td { font-family: Tahoma; font-size: 12px; font-weight: normal}

Achten Sie bitte auch auf die Vertretungsmonitore und Aushänge in der Schule!

$ergebnis[$g]

$ergebnis[$g]

$ergebnis[$g]

Datum Tag Stunde Lehrer Fach VRaum Merkmal
16.12.2010 Do 1 / 2 SCUL WIBE4   Merkmal
    3 / 4 SAND e5   Merkmal
    5 / 6 FALK d5   Merkmal

mobile code by | xetu-hosting.de
Created by daVinci 5 | www.stueber.de

[/code]

Hi,

hab nen fehler rein gemacht sorry… bitte übernimm nochmal den Code von oben
also aus diesem Post:
viewtopic.php?p=322350#p322350

Hab das oben ausgebessert da ich nicht in jedem Post den gleichen Code wiederholen will wird langsam unübersichtlich :wink:
Wäre nett wenn du dann nochmal den neuen Quellcode Postest

lg flo