Autor |
Beitrag |
Fairys
Hält's aus hier
Beiträge: 4
|
Verfasst: Sa 18.06.11 17:40
Hi,
Ich muss für Informatik (was ich allerdings bereits wieder abgewählt habe weil es mir echt nicht liegt...) etwas programmieren, und hänge leider schon gleich am Anfang  Vielleicht kann mir hier jemand helfen?
Ich hab eine Textdatei. Die erste Zeile lese ich aus mit Readln und übertrage das in einen String.
Jetzt will ich diesen String wieder aufsplitten in verschiedene Variablen, das Trennzeichen ist z.B '&'.
Wie schaff ich das, ohne dass die Leerzeichen auch als Trennzeichen angesehen werden?
Alternativ könnte ich natürlich gleich die Variablen aus der Textdatei gleich auslesen lassen (bis zum Trennzeichen eben).
Hat jemand einen Lösungsvorschlag?
Grüße
|
|
jaenicke
      
Beiträge: 19312
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Sa 18.06.11 17:46
Hallo und
Die normale Lösung wäre Pos und Copy usw. zu benutzen.
Die einfache Lösung mit etwas Overhead: Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| var SplitValues: TStringList; begin SplitValues := TStringList.Create; try SplitValues.Delimiter := '&'; SplitValues.StrictDelimiter := True; SplitValues.DelimitedText := YourCurrentLine;
finally SplitValues.Free; end; end; |
|
|
Fairys 
Hält's aus hier
Beiträge: 4
|
Verfasst: Sa 18.06.11 18:44
Hui, danke für die schnelle Antwort!
Leider nutzt meine Schule (und ich) Delphi 7, ich glaube daran liegt es?
Es kommt die Fehlermeldung: "Undefinierter Bezeichner: 'StrictDelimiter'"
Edit: Hab ne vorrübergehende Lösung, ich setzt die einzelnen Variablen in Anführungszeichen!
Wenn jemand noch ne bessere hat, gerne *g*
|
|
Gerd Kayser
      
Beiträge: 632
Erhaltene Danke: 121
Win 7 32-bit
Delphi 2006/XE
|
Verfasst: Sa 18.06.11 19:09
Hat die Textdatei einen festen Spaltenaufbau?
|
|
jaenicke
      
Beiträge: 19312
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Sa 18.06.11 20:19
|
|
Gerd Kayser
      
Beiträge: 632
Erhaltene Danke: 121
Win 7 32-bit
Delphi 2006/XE
|
Verfasst: Sa 18.06.11 20:29
jaenicke hat folgendes geschrieben : | Mit Pos bekommst du die Position des jeweils nächsten Trennzeichens, [...] |
Bei einem festen Spaltenaufbau wäre sicherlich TFileStream in Verbindung mit Records eine komfortable Variante.
|
|
Fairys 
Hält's aus hier
Beiträge: 4
|
Verfasst: Do 23.06.11 16:31
Also ich bin jetzt einfach bei der Variante mit den Anführungszeichen geblieben, klappt eigentlich super.
Nur jetzt hab ich ein anderes Problem ...
Will in eine Listbox die Zeilen anzeigen lassen, aber es will nicht so ganz
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34:
| procedure TForm2.Button5Click(Sender: TObject); Var F: TextFile; Count2: Integer; nummer, zeile, Y: string; Split: TStringList; begin
ListBox1.Visible := true; ListBox1.Clear;
Count2 := 0; nummer := combobox1.Text;
AssignFile(F, 'frage'+nummer+'.txt'); FileMode := fmOpenRead; Reset(F); Split := TStringList.Create; Split.Delimiter := '&'; Split.DelimitedText := Y;
While not EoF(F) do Begin
Inc(Count2); ReadLn(F, Y); Listbox1.items.add(Split[1]);
End; CloseFile(F);
label2.caption := 'Es sind '+inttostr(Count2)+' Fragen der Schwierigkeitsstufe '+nummer+' vorhanden.';
end; |
Fehlermeldung: Listenindex überschreitet das Maximum (1)
Es hat auf alle Fälle was mit der TStringList zu tun, aber ich weiß nicht genau was :/
|
|
jasocul
      
Beiträge: 6393
Erhaltene Danke: 147
Windows 7 + Windows 10
Sydney Prof + CE
|
Verfasst: Do 23.06.11 16:38
Wegen Unsinn wieder gelöscht
|
|
jaenicke
      
Beiträge: 19312
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Do 23.06.11 16:48
Fairys hat folgendes geschrieben : | Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9:
| Split := TStringList.Create; Split.Delimiter := '&'; Split.DelimitedText := Y;
While not EoF(F) do Begin
Inc(Count2); ReadLn(F, Y); Listbox1.items.add(Split[1]); | |
Im Debugger hättest du sehen können, dass Y leer oder mit Blödsinn gefüllt ist. (Haltepunkt mit F5 setzen und dann Maus über Y halten, wenn das Programm da ankommt.)
Du solltest außerdem eine Compilerwarnung haben, dass Y evtl. nicht initialisiert ist.
Denn du weist Y zuerst an DelimitedText zu und liest es erst danach aus.
Wenn du aber Compilerwarnungen einfach ignorierst...
(Und nebenbei ist die Quelltext"formatierung"...  )
|
|
Fairys 
Hält's aus hier
Beiträge: 4
|
Verfasst: Do 23.06.11 17:12
Danke für deine Hilfe, jetzt funktionierts
Werd mir das mit dem Debugger merken, wusste ich gar nicht.
|
|
jaenicke
      
Beiträge: 19312
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Do 23.06.11 17:15
Was den Debugger angeht, findest du hier noch Anleitungen dazu, denn der kann noch sehr viel mehr.
wiki.delphigl.com/in...p/Tutorial_Debugging
www.delphi-treff.de/...s-delphi-7/debugger/
|
|