AGB  ·  Datenschutz  ·  Impressum  







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

TStringList: Arbeiten ohne Add-Methode

Ein Thema von malo · begonnen am 6. Jun 2005 · letzter Beitrag vom 7. Jun 2005
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von malo
malo

Registriert seit: 19. Sep 2004
2.115 Beiträge
 
#1

TStringList: Arbeiten ohne Add-Methode

  Alt 6. Jun 2005, 21:03
Hi!

Ich nutze in einem Projekt eine TStringList. Allerdings muss ich einen Text Zeichen für Zeichen durchgehen, um sie dann in die StringListe einzulesen (jedenfalls nach meiner momentanen Planung). Da ich jedoch Probleme hätte, dort mit der Add-Methode zu arbeiten, will ich dort einfach nur auf den nächsten Index der StringListe zugreifen. Meine Frage dazu:

Muss ich dabei für die StringListe Speicher reservieren via SetLength, oder ist das nicht nötig? Oder kann ich vielleicht eine Add-Methode aufrufen, und einen leeren String übergeben, bevor ich den Index bearbeite? (wenn letzteres ohne Probleme funktionieren würde, wär die Sache auch schon erledigt)

Nachtrag: Letztere Methode ist eher eine theoretische Frage, ob es damit keine Schwierigkeiten gibt...
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#2

Re: TStringList: Arbeiten ohne Add-Methode

  Alt 6. Jun 2005, 21:07
Intern werden in einer TStringlist die Zeilen als ein String abgelegt. Die Zeilen sind durch CRLF voneinander getrennt. Du kannst erstens 10000x Add('') aufrufen, oder 100000xCRLF hinereinander in die Property'Text' schreiben, wie's beliebt. Aber ich versteh nicht, was Du gegen 'Add' hast.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Benutzerbild von Pr0g
Pr0g

Registriert seit: 21. Mai 2004
809 Beiträge
 
Delphi 7 Personal
 
#3

Re: TStringList: Arbeiten ohne Add-Methode

  Alt 6. Jun 2005, 21:08
Genau verstanden wo dein Problem ist, habe ich nicht. Aber wenn du einen Text zeichenweise in die StringList packen willst, dann kannst du ihn doch in eine normale Stringvariable packen und diese dann per Add() einfügen, oder was meinst du?

MfG Pr0g
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#4

Re: TStringList: Arbeiten ohne Add-Methode

  Alt 6. Jun 2005, 21:27
Zitat von alzaimar:
Intern werden in einer TStringlist die Zeilen als ein String abgelegt. Die Zeilen sind durch CRLF voneinander getrennt. Du kannst erstens 10000x Add('') aufrufen, oder 100000xCRLF hinereinander in die Property'Text' schreiben, wie's beliebt. Aber ich versteh nicht, was Du gegen 'Add' hast.
Nene du...
Text ist eine Property, die aus den einzelnen Strings zusammengestzt wird.
Ein bestzen von Text bewirkt ein Zerpflücken in einzelne Strings, die wiederrum eingefügt werden.
als Tlist Descendant ist TStringList nix weiter als eine komfortable Kapselung eines PPointerArrays, spezialisiert um Strings zu halten.
100.000-mal Text zu besetzen könnte ziemlich hart auf den Magen des Lesers oder die Performance schlagen. Wohl eher beides.
  Mit Zitat antworten Zitat
Benutzerbild von malo
malo

Registriert seit: 19. Sep 2004
2.115 Beiträge
 
#5

Re: TStringList: Arbeiten ohne Add-Methode

  Alt 6. Jun 2005, 21:30
Naja... das ganze ist so:

Ich habe einen String, der aufgesplittet werden soll. Ich will den in ein 2dimensionales Array reinschreiben, in meinem Fall also ein Array of TStringList (bzw. mit TObjectList gelöst).

Das ganze ist für eine "Mini-Programmiersprache", die ich grade entwickle. Wenn ich beispielsweise folgenden "Code" hab:

[code]a + b = c;
x + y = z;[/delphi]

Dann geh ich per Schleife durch. Das "a" kommt in den ersten Eintrag der Stringlist, das + in den zweiten, das b in den 3. etc. Beim ";" springe ich in die nächste StringListe.

Ich prüfe anhand von verschiedenen Regeln, ob ein neuer eintrag in die Stringliste gemacht wird, oder nicht. Bisher hab ich da immer nur die Index-Variable (die den aktuellen Index der StringListe ausgibt) um 1 erhöht. Meine Frage war jedoch, ob ich in irgendeiner Weise dafür noch Speicher reservieren muss. Normalerweise reserviert Add() imho den Speicher. Aber da ich bisher immer auf Add verzichtet hab (einfach nur die Indexvariable erhöhen war einfacher), weiß ich nicht, ob ich nun den Speicher manuell reservieren muss oder ob das automatisch geht


PS: Kommentare über meine allgemeine Vorgehensweise nicht erbeten. Ich hab jetzt so angefangen und zieh das auch durch
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#6

Re: TStringList: Arbeiten ohne Add-Methode

  Alt 6. Jun 2005, 21:32
Dein Problem kapiere ich beim besten Willen nicht. Ist doch viel lesbarer und simpler einfach immer etwas anzufügen...
  Mit Zitat antworten Zitat
Benutzerbild von malo
malo

Registriert seit: 19. Sep 2004
2.115 Beiträge
 
#7

Re: TStringList: Arbeiten ohne Add-Methode

  Alt 7. Jun 2005, 15:35
Zitat von Robert_G:
Dein Problem kapiere ich beim besten Willen nicht. Ist doch viel lesbarer und simpler einfach immer etwas anzufügen...
Aber nicht, wenn man nur EIN ZEICHEN anhängen muss und dann noch diesen Index der StringListe bearbeiten muss. Ich weiß nämlich nicht, wann ein Teil-String anfängt, sondern nur, wann er endet (da, wo ich die Indexvariable erhöhe).

Liegt ein wenig daran, wie ich das ganze programmiert hab.


Meine Frage wurde jedoch imho noch nicht klar beantwortet. Ich wollte nämlich nur wissen, ob es so in Ordnung ist, wenn ich es auf einem der oben beschriebenen Wege mach (bzw. ob ich Speicher mit Setlength reservieren muss)
  Mit Zitat antworten Zitat
Marphy

Registriert seit: 24. Feb 2005
162 Beiträge
 
Delphi 7 Professional
 
#8

Re: TStringList: Arbeiten ohne Add-Methode

  Alt 7. Jun 2005, 15:54
Hallo Calvin,
ich würde sagen, poste doch mal einen Codeauszug...

Gruß, Marco
Marco
Wo ein Wille ist, ist auch ein Weg. Aber wo ein Weg ist, ist nicht unbedingt auch ein Wille...
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#9

Re: TStringList: Arbeiten ohne Add-Methode

  Alt 7. Jun 2005, 16:02
Zitat:
Meine Frage wurde jedoch imho noch nicht klar beantwortet. Ich wollte nämlich nur wissen, ob es so in Ordnung ist, wenn ich es auf einem der oben beschriebenen Wege mach (bzw. ob ich Speicher mit Setlength reservieren muss)
1. mit Add('') und dann aList[aList.count - 1] := aList[aList.count - 1] + aNewChar gehts.
2. Für SetLength sehe ich keine Möglichkeit.

Warum nicht so:
Delphi-Quellcode:
Procedure LineToStrings (aInput : String; aSrc : TStringList);
Var
  aStart, i, n : Integer;
  aLine : String;

Begin
  aSrc.Clear;
  aStart := 1; // Index auf das erste Zeichen der aktuellen Zeile
  aInput := aInput + ccEOF; // sicherstellen, das auch die LETZTE Zeile erkannt wird.
  For i:=1 To Length (aInput) do
    If aInput[i] in [';', ccEOF] then Begin // Zeilenende erreicht?
      // Die Zeile ist zwischen aStart und i-1
      aLine := Trim (Copy (aInput, aStart, i - aStart));
      If aLine<>'Then aSrc.Add (aLine);
      aStart := i + 1;
      End;
End;
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Benutzerbild von Sanchez
Sanchez

Registriert seit: 24. Apr 2003
Ort: Neumarkt Stmk
892 Beiträge
 
Delphi XE6 Enterprise
 
#10

Re: TStringList: Arbeiten ohne Add-Methode

  Alt 7. Jun 2005, 20:56
Zitat von Robert_G:
...als Tlist Descendant ist TStringList nix weiter als eine komfortable Kapselung eines PPointerArrays,...
TStringList ist ein Nachfahre von TStrings, was wiederum ein Nachfahre von TPersistent ist.
Die Stringliste speichert seinen Inhalt in einem Array von TStringItem, dass sich wie folgt zusammen setzt:

Delphi-Quellcode:
  TStringItem = record
    FString: string;
    FObject: TObject;
  end;
Interessanterweise es sich dabei um einen Pointer auf ein statisches Array von 0 bis MaxInt-Sechzehntel von TStringItem.

Genug kluggeschissen für heute.
Daniel
Testen ist feige!
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 09:13 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