Autor Beitrag
Barret
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 156
Erhaltene Danke: 1

Win XP
D7 Ent
BeitragVerfasst: Mo 31.01.05 09:47 
Hi!
Ich hab ein Programm in dem ich eine Daei auslese und dan sortiert ausgeben lassen will. Speichern tu ich mit "CommaText". Das heist, wenn in dem String ein Leerzeichen enthalten ist schreibt er den mit Anführungszeichen in meine Stringlist. Und alle String ohne Lerrzeichen bementsprechend ohne Anführungszeichen. Nach dem Auslesen sortiere ich die StringList und lass Sie dan wiederum mit "CommaText" ausgeben (in einem StringGrid). Problem an der Sache is nur, dass er nur die Strings mit Anführungszeichen ausgibt. Das Problem kommt mit dem Sort, wenn ich die List ohne "Sort" ausgebe stehen alle Strings drinnen.

Hat jemand von euch eine Idee??

Kleinere Anmerkungen und Funktionen findet ihr hir www.delphi-forum.de/...n+Problem_35772.html
Ich dachte erst das es ein Fehler im Code is (im Link beschrieben), aber es hängt defenitiv mit dem "Sort" zusammen.

_________________
Wir könnten ja, wenn wir wollten aber wir wollen ja nicht.
It´s not a bug, it´s a feature.
IngoD7
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 629


D7
BeitragVerfasst: Mo 31.01.05 11:03 
Das ist nicht so wirklich verständlich.

Ein Programm liest Daten ein (nicht aus), um sie z.B. zu sortieren und weiter zu verarbeiten.

Was genau meinst du mit Sort?

Poste den relevanten Code hier im Thread. Zumindest ich hangel mich nur sehr selten durch Links, um Informationen über Probleme anderer Leute zu sammeln.

Poste am besten auch eine kleine Beispieldatei (ein paar Zeilen), bei der das Problem auftritt.
Barret Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 156
Erhaltene Danke: 1

Win XP
D7 Ent
BeitragVerfasst: Mo 31.01.05 11:24 
Mit "SORT" meine ich die Funktion einer StringList (StringList.Sort;).
Die Datei siht so aus:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
425
1
Abidschan
Adana
Addis Abeba
Adelaide
Agra
"Belo Horizonte"


der Code um die Datei einzulesen:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
      StringList.LoadFromFile(ExtractFilePath(Application.ExeName) + '\Options\City.opt');

      StringGrid.RowCount := (StrToInt(StringList[0]) + 1);
      StringGrid.ColCount := StrToInt(StringList[1]);

      StringList.Sort;

      StringGrid.Cells[0, 0] := 'Städte';

      for i := 1 to (StringGrid.RowCount - 1) do
        StringGrid.Rows[i].CommaText := StringList[i - 1];


speichern mach ich tu ich so:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
procedure TFFVConfig.BtnCitySaveClick(Sender: TObject);
var StringList : TStringlist;  //Stringlist die in Textdatei schreibt
    i : Integer;

begin
  with StringGrid do
    begin
      StringList := TStringlist.Create;  //erstellen de Stringlist

      StringList.Add(IntToStr(RowCount - 1));  //Spaltenanzahl
      StringList.Add(IntToStr(ColCount));  //Zeilenanzahl

      for i := 1 to (RowCount - 1) do  //Zeilen einzelnt in Stringlist schreiben
        StringList.Add(Rows[i].CommaText);  //Zeilen mit Kommas in Spalten teilen

      StringList.SaveToFile(ExtractFilePath(Application.ExeName) + '\Options\City.opt');  //Stringliste in Datei speichern
      StringList.Free;  //auflösen der Stringlist
    end;
end;


so und beim speichern tritt dan das oben genante problem auf. ich bekomme nur Strings mit Anführungszeichen ausgegeben.



Die einfachte Lösung wär aber ich häng den neuen String der eingetragen wird einfach ran und tausch den ersten aus. Kann man en ersten String der Liste einfach austauschen????
EDIT: geht nich mit dem zufügen, da man die Stings ja auch verändern kann.

Moderiert von user profile iconChristian S.: Delphi-Tags hinzugefügt.

_________________
Wir könnten ja, wenn wir wollten aber wir wollen ja nicht.
It´s not a bug, it´s a feature.
IngoD7
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 629


D7
BeitragVerfasst: Mo 31.01.05 14:27 
Sorry, ist wirklich nicht böse gemeint, aber du schreibst wirr. :roll:

Barret hat folgendes geschrieben:
Die einfachte Lösung wär aber ich häng den neuen String der eingetragen wird einfach ran und tausch den ersten aus.
Niemand hat zuvor von "neuen String eintragen" gesprochen. Woher soll man jetzt wissen, was du meinst?

Aber egal ....

Barret hat folgendes geschrieben:
Die Datei siht so aus:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
425
1
Abidschan
Adana
Addis Abeba
Adelaide
Agra
"Belo Horizonte"


Dein Code, der diese Datei einliest und als CommaText in die StringGrid-Zeilen schreibt, versucht zwei Spalten zu belegen.
Die einzelnen Wörter der Datei (Adana z.B.) landen in der ersten Spalte. Das ist korrekt.
Belo Horizonte landet auch (beide Wörter) in der ersten Spalte, weil es in Anführungszeichen steht. So weit, so gut.
Addis landet in der ersten, Abeba in der zweiten Spalte.

Du hast aber nur eine Spalte! Das macht die 1 in der zweiten Zeile der Datei, welche später im Code die Spaltenanzahl bestimmt.

Es verschwindet damit dein Abeba!

Wenn du das StringGrid jetzt zurückschreibst, wird Abeba ebenfalls weggelassen.

Kannst du das nachvollziehen?

Das ist das, was mir aufgefallen ist. Das ist so programmiert und das Verhalten erscheint entsprechend der Programmierung völlig okay. Das ist auch völlig unabhängig von der Methode Sort. Die ändert nur die Reihenfolge (Sortierung) in der StringList, und zwar korrekt.

Ist das jetzt so von dir gewollt oder entdeckst du schon einen Fehler in deinen Überlegungen?
Barret Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 156
Erhaltene Danke: 1

Win XP
D7 Ent
BeitragVerfasst: Mo 31.01.05 14:38 
@IngoD7: danke für die Erklärung.

Ich hab die for-Schleife zum speichern abgeändert und jetzt funktioniert alles so wie es soll. So siht sie jetzt aus.
ausblenden Delphi-Quelltext
1:
2:
for i := 1 to (RowCount - 1) do
  SL.Add('"' + Cells[0, i] + '"');

_________________
Wir könnten ja, wenn wir wollten aber wir wollen ja nicht.
It´s not a bug, it´s a feature.