Autor Beitrag
Fairys
Hält's aus hier
Beiträge: 4



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19312
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 18.06.11 17:46 
Hallo und :welcome:

Die normale Lösung wäre Pos und Copy usw. zu benutzen.

Die einfache Lösung mit etwas Overhead:
ausblenden 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;

    // und hier hast du in SplitValues jetzt die Liste der Einträge in der Zeile drin

  finally
    SplitValues.Free;
  end;
end;
Fairys Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 632
Erhaltene Danke: 121

Win 7 32-bit
Delphi 2006/XE
BeitragVerfasst: Sa 18.06.11 19:09 
Hat die Textdatei einen festen Spaltenaufbau?
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19312
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 18.06.11 20:19 
user profile iconFairys hat folgendes geschrieben Zum zitierten Posting springen:
Leider nutzt meine Schule (und ich) Delphi 7, ich glaube daran liegt es?
Es kommt die Fehlermeldung: "Undefinierter Bezeichner: 'StrictDelimiter'"
Richtig, das gibt es erst seit Delphi 2005 oder Delphi 2006.

Für solche Fälle wäre es sinnvoll in deine Profileinstellungen zu schreiben welche Delphiversion du benutzt, dann hätte ich das gar nicht erst vorgeschlagen. ;-)

user profile iconFairys hat folgendes geschrieben Zum zitierten Posting springen:
Wenn jemand noch ne bessere hat, gerne *g*
Selbst machen. ;-)

Mit Pos bekommst du die Position des jeweils nächsten Trennzeichens, mit Copy kannst du den Wert davor herauskopieren und mit Delete den bearbeiteten Teil des Strings löschen. Das wiederholst du bis dein String leer ist, fertig. ;-)
Gerd Kayser
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 632
Erhaltene Danke: 121

Win 7 32-bit
Delphi 2006/XE
BeitragVerfasst: Sa 18.06.11 20:29 
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
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 Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: 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


ausblenden volle Höhe Delphi-Quelltext
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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6393
Erhaltene Danke: 147

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: Do 23.06.11 16:38 
Wegen Unsinn wieder gelöscht
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19312
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Do 23.06.11 16:48 
user profile iconFairys hat folgendes geschrieben Zum zitierten Posting springen:
ausblenden 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... :roll:
(Und nebenbei ist die Quelltext"formatierung"... :puke:)
Fairys Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19312
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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/