XML in Stringgrid übertragen
-
- Beiträge: 67
- Registriert: So 17. Okt 2021, 17:18
- OS, Lazarus, FPC: Windows 7
- CPU-Target: X86
- Wohnort: Allgäu
XML in Stringgrid übertragen
tut mir leid, dass ich schon wieder frage, aber mir fehlen wesentliche Grundlagen. Mir wurde schon geholfen, eine XML-Datei in ein Memo einzulesen, aber mit dem Inhalt eines Memo kann ich nicht ordentlich arbeiten. Deshalb möchte ich jetzt die XML-Datei in ein Stringgrid einlesen. Die XML-Datei hat die folgende Struktur :
<?xml version="1.0" encoding="UTF-8"?>
...
<Cube>
<Cube time='2021-12-10'>
<Cube currency='USD' rate='1.1273'/>
<Cube currency='JPY' rate='128.20'/>
usw.
Wenn meine Fragen als lästig empfunden werden, können sie auch gelöscht werden.
<?xml version="1.0" encoding="UTF-8"?>
...
<Cube>
<Cube time='2021-12-10'>
<Cube currency='USD' rate='1.1273'/>
<Cube currency='JPY' rate='128.20'/>
usw.
Wenn meine Fragen als lästig empfunden werden, können sie auch gelöscht werden.
Re: XML in Stringgrid übertragen
Gelöscht wird hier (fast) nichts.
Du stellst immer sehr allgemeine Fragen, so dass man gar nicht versteht, wo dein Problem eigentlich liegt.
Das mit dem XML wurde dir doch gezeigt.
Verstehst du jetzt nicht, wie man einen StringGrid befüllt?
Wo genau hakt es?
Möchtest du das überhaupt alles lernen, oder möchtest du nur das Resultat haben, wie so ein Fertiggericht?

Du stellst immer sehr allgemeine Fragen, so dass man gar nicht versteht, wo dein Problem eigentlich liegt.
Das mit dem XML wurde dir doch gezeigt.
Verstehst du jetzt nicht, wie man einen StringGrid befüllt?
Wo genau hakt es?
Möchtest du das überhaupt alles lernen, oder möchtest du nur das Resultat haben, wie so ein Fertiggericht?

-
- Beiträge: 67
- Registriert: So 17. Okt 2021, 17:18
- OS, Lazarus, FPC: Windows 7
- CPU-Target: X86
- Wohnort: Allgäu
Re: XML in Stringgrid übertragen
die Sache mit dem XML einlesen, habe ich schon einigermaßen verstanden, und ein Memo mit den Daten zu befüllen, ist schon schwierig genug, aber jetzt will ich ja auch noch ein Stringgrid Zeile für Zeile ansprechen. Ich habe noch nie mit einem Stringgrid gearbeitet, mit XML-Dateien auch noch nie. In meinem Alter scheint mir auch mein Denkvermögen langsam nachzulassen. Trotzdem macht mir das Programmieren mit Lazarus unheimlich viel Spaß. Mir ist schon klar, dass ich Eure Zeit hier über Gebühr beanspruche.
Re: XML in Stringgrid übertragen
StringGrid Inhalte kann man über die Eigenschaft "Cells" verändern:
Code: Alles auswählen
StringGrid1.RowCount:=20; //Anzahl Zeilen
StringGrid1.ColCount:=5; //Default
StringGrid1.FixedRows:=1; //Default
StringGrid1.FixedCols:=1; //Default
StringGrid1.Cells[1,0]:='Demo'; //Fixed
StringGrid1.Cells[1,1]:='1,1';
StringGrid1.Cells[1,2]:='1,2';
StringGrid1.Cells[2,1]:='2,1';
StringGrid1.Cells[1,19]:='1,19';
-
- Beiträge: 67
- Registriert: So 17. Okt 2021, 17:18
- OS, Lazarus, FPC: Windows 7
- CPU-Target: X86
- Wohnort: Allgäu
Re: XML in Stringgrid übertragen
vielen Dank. Das hat schon viel geholfen. Auf den ersten Blick scheint das auch gut zu funktionieren.
-
- Beiträge: 67
- Registriert: So 17. Okt 2021, 17:18
- OS, Lazarus, FPC: Windows 7
- CPU-Target: X86
- Wohnort: Allgäu
Re: XML in Stringgrid übertragen
ich habe das jetzt so geschrieben:
with Doc.DocumentElement.FindNode('Cube').FirstChild.ChildNodes do
begin
StringGridEZB.Clear;
StringGridEZB.RowCount:=count+1;
for i := 0 to (Count) do
begin
StringGridEZB.Cells[1,(i+1)] := Item.Attributes.GetNamedItem('currency').NodeValue;
StringGridEZB.Cells[2,(i+1)] := Item.Attributes.GetNamedItem('rate').NodeValue;
end;
end;
aber der Compiler meldet eine SIGSEV-Verletzung. Im Programm sind die richtigen Werte eingetragen, aber auch das Programm meldet eine Zugriffsverletzung. Was könnte der Grund sein?
with Doc.DocumentElement.FindNode('Cube').FirstChild.ChildNodes do
begin
StringGridEZB.Clear;
StringGridEZB.RowCount:=count+1;
for i := 0 to (Count) do
begin
StringGridEZB.Cells[1,(i+1)] := Item.Attributes.GetNamedItem('currency').NodeValue;
StringGridEZB.Cells[2,(i+1)] := Item.Attributes.GetNamedItem('rate').NodeValue;
end;
end;
aber der Compiler meldet eine SIGSEV-Verletzung. Im Programm sind die richtigen Werte eingetragen, aber auch das Programm meldet eine Zugriffsverletzung. Was könnte der Grund sein?
Re: XML in Stringgrid übertragen
Überlege mal.
Reicht das, wenn du bei 1 (bzw. i+1) anfängst?
So müsste es gehen:
Code: Alles auswählen
StringGridEZB.RowCount:=count+1;
So müsste es gehen:
Code: Alles auswählen
StringGridEZB.RowCount:=count+2;
Re: XML in Stringgrid übertragen
Ich meine eher, das Problem ist das Verständnis der 0-basierten Indices: Wenn "count" die Anzahl von irgendwelchen Elementen bedeutet und die Elemente mit i von 0 beginnend durchnummeriert werden, dann hat das letzte Element den index count-1. Beispiel zum Nachzählen: count = 3, also drei Elemente und die haben die Indices 0, 1, 2, aber nicht mehr 3, denn dann wären es 4! Daher: eine 0-basierte for-Schleife, die count Elemente durchläuft, endet immer mit count-1, also:
Den Code würde ich daher umschreiben zu
Hinweis:
Du solltest Code-Passage immer mit [ code ]...[ /code ] Tags einschließen (ohne die Leerzeichen, oder den Code markieren und in der Bearbeitungszeile den Button "</>" klicken). Damit wird zum einen der Code für uns lesbarer und die Forumsoftware interpretiert Indices [ i ] nicht mehr als Beginn von Kursiv-Formatierung ("italic").
Code: Alles auswählen
var
i: Integer;
begin
for i := 0 to count-1 do
..
Code: Alles auswählen
with Doc.DocumentElement.FindNode('Cube').FirstChild.ChildNodes do
begin
StringGridEZB.Clear;
StringGridEZB.RowCount:=count+1;
for i := 0 to Count-1 do // <--- hier geändert
begin
StringGridEZB.Cells[1,(i+1)] := Item[i].Attributes.GetNamedItem('currency').NodeValue;
StringGridEZB.Cells[2,(i+1)] := Item[i].Attributes.GetNamedItem('rate').NodeValue;
end;
end;
Du solltest Code-Passage immer mit [ code ]...[ /code ] Tags einschließen (ohne die Leerzeichen, oder den Code markieren und in der Bearbeitungszeile den Button "</>" klicken). Damit wird zum einen der Code für uns lesbarer und die Forumsoftware interpretiert Indices [ i ] nicht mehr als Beginn von Kursiv-Formatierung ("italic").
Re: XML in Stringgrid übertragen
Vor allem möchte ich mich entschuldigen, dass ich mit diesem "with" Schwachsinn hier viewtopic.php?p=124936#p124936 begonnen habe.
"WITH" ist giftig., weil es den Code schwer entzifferbar macht und unnötige, mühsam zu debuggende Fehler hervorruft.
Ich schäme mich dafür, dir einen Code mit "with" gezeigt zu haben. Sorry!
"WITH" ist giftig., weil es den Code schwer entzifferbar macht und unnötige, mühsam zu debuggende Fehler hervorruft.
Ich schäme mich dafür, dir einen Code mit "with" gezeigt zu haben. Sorry!
