![]() |
Spaltenweise auf TStringList zugreifen
Hallo,
ich habe ein StringList, die wie eine Tabelle aufgebaut ist (oben der Header und dann die Werte pro Spalte). Nun möchte ich pro Spalte eine Berechnung durchführen. Wie gehe ich da am besten spaltenweise vor? (Die einzelnen Werte in einer Zeile sind durch #9 getrennt. |
Re: Spaltenweise auf TStringList zugreifen
Je nachdem wie oft du da etwas berechnen willst. Wenn es nur einmal oder so passiert, dann kannst du die einzelnen Spalten einer Zeile mit Hilfe einer weiteren TStringList auslesen und schreiben. Dafür gibt es Delimiter und DelimitedText zum Beispiel.
Wenn das immer wieder passieren soll, solltest du die Daten einmal auslesen in eine richtige Tabelle, z.B. ein zweidimensionales Array, dort damit arbeiten und dann wieder ggf. in die TStringList legen. |
Re: Spaltenweise auf TStringList zugreifen
Also ich muss immer wieder (alle par Sekunden) etwas berechnen. Wie lese ich die Daten denn in eine "richtige" Tabelle?
|
Re: Spaltenweise auf TStringList zugreifen
Woher kommen denn die Daten? Legst du die selbst in dieses (suboptimale) Format oder hast du darauf keinen Einfluss?
Ja, wie du es machst, wie gesagt, nimm für jede Zeile eine TStringList, weise Delimiter und DelimitedText zu, dann hast du die Spalten. Diese packst du jetzt in ein zweidimensionales Array. Dessen Größe musst du natürlich vorher mit SetLength anpassen. Das ist sicher nicht die schnellste Herangehensweise, aber solange die Datenmengen nicht zu groß sind akzeptabel. |
Re: Spaltenweise auf TStringList zugreifen
Darauf habe ich keinen Einfluss. Wieso "suboptimal"?
Zitat:
|
Re: Spaltenweise auf TStringList zugreifen
Doch in der 2. Stringliste werden die Werte anhand des Trenners zu Spalten
|
Re: Spaltenweise auf TStringList zugreifen
Ach so,ich probiere es gleich mal aus.
|
Re: Spaltenweise auf TStringList zugreifen
Zitat:
Zitat:
Delphi-Quellcode:
Jetzt hast du in der TStringList drin:
MyList.Delimiter := #9;
MyList.DelimitedText = 'a'#9'b'#9'c';
Code:
Du kannst also direkt auf die Spalteninhalte zugreifen.
a
b c |
Re: Spaltenweise auf TStringList zugreifen
Zur Sicherheit würde ich noch
Delphi-Quellcode:
setzen um sicherzustellen, dass nicht weitere Trenner verwendet werden ( Leerzeichen usw.)
MyList.StrictDelimiter := True;
|
Re: Spaltenweise auf TStringList zugreifen
Ich lade also die vorhandene StringList in eine neue?
Delphi-Quellcode:
Nun will ich ab Zeile 0 bis count-1 der vorhandenen Datei die Zeilen als spalten in die ZwischenSpeicher StringList speichern.
ZwischenSpeicher.LoadFromFile(VorhandeneDatei);
Delphi-Quellcode:
Nun noch in die neue Datei laden
ZwSpeicher.Delimiter := #9;
for i := 1 to Sek.Count-1 do ZwSpeicher.DelimitedText := Sek.Strings[i];
Delphi-Quellcode:
Aber irgendwas scheint da nicht zu stimmen. Ich habe nur die erste Zeile als Spalte.Und mehr kommt da nicht
ZwSpeicher.SaveToFile(TestDatei);
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:26 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz