AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Auslesen einer csv.html

Ein Thema von Paulman · begonnen am 5. Jan 2015 · letzter Beitrag vom 6. Jan 2015
Antwort Antwort
Paulman

Registriert seit: 11. Dez 2012
15 Beiträge
 
#1

Auslesen einer csv.html

  Alt 5. Jan 2015, 12:39
Hallo und ein gesundes neues Jahr!

Ich habe folgendes Problem.
Ein IPswitch sendet ein paar Messdaten an die eigene Seite csv.html welche ohne Login ausgelesen werden kann.
Die Daten werden im Bereich von wenigen Millisekunden aktualisiert.
Nun möchte ich in zyklischen Abständen die Daten lesen und als String in eine eigene csv-Datei speichern.
Brauchen tue ich eigentlich nur die Werte 16 und 19, aber das ist ja erst mal Nebensache.

Der Hersteller stellt auch ein einfaches PHP Script mit Erläuterung zur Verfügung,
leider habe ich keinen Plan dies in Delphi umzusetzen.

Vielen Dank schon mal für eure Hilfe.


Delphi-Quellcode:
<?php
        $st= file_get_contents( "http://192.168.2.10/csv.html" ); // web-Seite einlesen
        echo "<br>".$st."<br>"; // Inhalt als String ausgeben
        $sta= explode( ",", $st, 100 ); // String in Array wandeln mit Trennzeichen Komma, bis zu 100 Elemente
        print_r ($sta); // komplettes Array ausgeben
     echo "<br>Abstand gefiltert= ".$sta[26]."cm<br>"; // 26.Element ist hier bei einem IPswitch-SG.1 der Abstand eines SB.cm-Moduls
    ?>
Miniaturansicht angehängter Grafiken
csvhtml.jpg  
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Auslesen einer csv.html

  Alt 5. Jan 2015, 12:54
Einfach mit verwendeter Netzwerkbibliothek Laden:

z.B. Indy csv := idHTTP1.Get( 'http://192.168.2.10/csv.html');
Markus Kinzler
  Mit Zitat antworten Zitat
Paulman

Registriert seit: 11. Dez 2012
15 Beiträge
 
#3

AW: Auslesen einer csv.html

  Alt 5. Jan 2015, 22:16
Hi Markus,

vielen Dank für den Tipp, hat schon mal prima funktioniert.
Das Ergebnis ist allerdings, dass der komplette Inhalt als String geladen wird (siehe Bild)
Nun habe ich aber das Problem die entsprechend wichtigen Daten herauszufiltern.

Ich habe den String zum Array umgewandelt, bekomme aber je nach Abfrage nur das jeweilige Zeichen des ausgewählten Arrays.
Wie deklariere ich das Array um die einzelnen Werte des body (Kommagetrennt) zu erhalten?
Miniaturansicht angehängter Grafiken
result.jpg  
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Auslesen einer csv.html

  Alt 5. Jan 2015, 22:28
Ich hätte hier keine HTML-Datei erwartet.
Wir müssen erst mal die Tags loswerden.

Delphi-Quellcode:
var
  p, p2: PAnsiChar;
  s, csv: string;
  sl: TStrings;
begin
  s := idHTTP1.Get( 'http://192.168.2.10/csv.html');
  p := Pos( '<body>', s)+7;
  p2 := PosEx( '</body>', s, p);
  csv := Copy( s, p, p2-p);
  sl := TStringList.Create;
  sl.StrictDelimiter := True;
  sl.CommText := csv;
  ..
  Caption := sl[2];
  ..
  sl.Free;
  ...
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#5

AW: Auslesen einer csv.html

  Alt 6. Jan 2015, 04:30
In Diesem Fall funktioniert dessen Beispiel-PHP aber auch nicht.
http://php.net/manual/de/function.strip-tags.php (solche Funktionien gibt es nicht nur in PHP)

http://192.168.2.10/csv
http://192.168.2.10/csv.txt
http://192.168.2.10/csv.csv

Sowas geht nicht?



Wende dich mal an den Hersteller, denn wenn da wirklich HTML raus kommt, dann ist das definitiv ein Bug.
Wobei es ja eigentlich HTML heißt und somit stimmt.

Entweder es gibt noch einen anderen Weg, das als "richtiges" CSV rauszubekommen und/oder seine Demos sind schrott.
So ist die Ausgabe erstmal (ohne Vorverarbeitung/Filterung) nicht benutzbar.
$2B or not $2B
  Mit Zitat antworten Zitat
Paulman

Registriert seit: 11. Dez 2012
15 Beiträge
 
#6

AW: Auslesen einer csv.html

  Alt 6. Jan 2015, 11:06
Vielen Dank für den Code.

StrictDelimiter kennt mein Delphi 7 nicht, es geht aber auch ganz ohne. Wozu ist diese Anweisung?
Übrigens musste ich noch etwas ändern, p, p2: PAnsiChar in integer, da sonst inkompatible Typen,
und commtext ist sicherlich commatext?
Auf jedem Fall war die Antwort schon mal sehr hilfreich, damit komme ich jetzt klar.

Übrigens hier mal die Infoseite des Herstellers: http://www.sms-guard.org/dfuaips.htm

Wenn der IPswitch Internetzugang hat kann man auch für wenig Geld deren Server nutzen. Der Switch schreibt dann eigenständig in die Datenbank.
Ein Projekt wäre dann sicherlich auch den Netzwerkverkehr mitzulesen und eine eigene Lösung zu basteln, das geht mir aber jetzt eh zu weit.

Nochmals Dank und einen schönen Tag!
Paulman
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Auslesen einer csv.html

  Alt 6. Jan 2015, 11:35
Der Strictdelimiter sorgt dafür, dass nur angegebene Trenner verwendet wird (Komma bei CommaText); so führen z.B. auch im Text enthaltene Leerzeichen zur Trennung.
Markus Kinzler
  Mit Zitat antworten Zitat
Paulman

Registriert seit: 11. Dez 2012
15 Beiträge
 
#8

AW: Auslesen einer csv.html

  Alt 6. Jan 2015, 11:38
Alles klar, danke!
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#9

AW: Auslesen einer csv.html

  Alt 6. Jan 2015, 11:45
Auf jedem Fall war die Antwort schon mal sehr hilfreich, damit komme ich jetzt klar.
Ein Problem, das ich seit damals, als ich mich das erste Mal damit befaßt hatte, nicht vergessen habe: Die CSV-Datei muß korrekt sein. Das heißt, wenn die CSV-Datei in einer Spalte weniger Felder hat als erwartet, kommt es unweigerlich zu einem Access-Error, da die abgefragte – letzte – Spalte nicht existiert. Man kann das abfangen, indem man vor dem Abfragen der Delimiter-Stringlist deren Count-Eigenschaft prüft. Dann weiß man schonmal, ob auch alle erwarteten Felder enthalten sind.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:44 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz