Autor |
Beitrag |
dbcf
Gast
Erhaltene Danke: 1
|
Verfasst: Do 13.03.03 18:43
Moin,
vor über einem halben Jahr hat das schon mal jemand gefragt, aber die Antwort dazu ist inakzeptabel: Gibt es in Delphi assoziative Arrays? Spricht man ein Array normalerweise mit array[12] an, so geht das mit ass. Arrays mit array['feldname']. Also gibt es das? Wenn ja, warum will das bei mir nicht?
Zweite Frage: Bei PHP gibt es mindestens zwei Funktionen (explode und split, wer sich das Manual von PHP dazu mal antuen möchte...), mit denen man einen String an bestimmten Stellen aufsplitten kann und die Teilstücke in einem Array gespeichert werden. Gibt es das etwa auch nicht bei Delphi?
Dritte Frage: Bei PHP gibt es (was gibt es da nicht...) eine Funktion, die Leerzeichen, Zeilenumbrüche (\r und \n z.B.) und andere Dinge am Anfang und am Ende eines Strings entfernt. Gehe ich recht in der Annahme, dass Delphi wieder passen muss?
Erstes Problem: Ich hab mir aus der Hilfe von diesem Progrämmchen einen bisschen Code, zum auslesen von Dateien kopiert und eben jenen ein wenig gekürzt. Das sieht dann so aus:
Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| var fh: textfile; var ch: string; { ...einige Zeilen später... } assignfile(fh, 'test.dat'); reset(fh); while not eof(fh) do read(fh, ch); closefile(fh); |
Er bleibt in einer Endlosschleife hängen. Wieso ist mir nicht klar. Die Datei gibt es selbstverständlich und ist mit 08/15-Text gefüllt.
So, das war's erstmal von mir hier. Wäre fein, wenn die Fragen nicht ewig offen bleiben.
Danke.
|
|
naleh
      
Beiträge: 23
|
Verfasst: Do 13.03.03 18:55
Wenn du mit strings arbeiten willst wuerde ich dir zu ner Stringlist raten(TStrings) koennte so gehen:
Quelltext 1: 2: 3: 4: 5:
| var sl: TStrings; i: integer; begin sl:= TStringList.create; sl.LoadFromFile('test.txt'); |
und zum anzeigen in einem memo
Quelltext 1: 2:
| memo1.clear; for i := 0 to sl.count-1 do memo1.lines.add(sl[i]); |
hab das aber nicht getestet
MfG naleh
|
|
alex_id
      
Beiträge: 73
|
Verfasst: Do 13.03.03 19:11
Hi
hier was zu deinen assoziativen Arrays !!! es geht !!
so kann man es erzeugen und darauf zugreifen !!
Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| procedure TForm1.Button1Click(Sender: TObject); var Feld: TStrings; begin Feld := TStringList.Create; Feld.Add(Format('%s=%s', ['alex', '01.01.2000'])); ShowMessage(Feld.Values['alex']) // zeigt den Geburtstag an Feld.Free; end; |
ich hoffe es hilft !!
Alex
|
|
mars
      
Beiträge: 238
Debian Woody, Win 2000, Win XP
D7 Ent, Kylix 3
|
Verfasst: Do 13.03.03 20:08
Versuchs mal mit ReadLn statt Read. Ich denke, das sollte eher deinen Wünschen entsprechen..
|
|
Tower
      
Beiträge: 99
|
Verfasst: Fr 14.03.03 09:48
Zur dritten Frage: Nein, falsche Annahme. "Trim" heißt das Zauberwort.
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Fr 14.03.03 10:05
1. Bitte für jede Frage ein Thread.
2. Wo ist der Bezug deiner Fragen zu der Sparte wo du postes?
1. Frage: Hat das was mit Dateien zu tun? Nein.
2. Frage: Hat das was mit Dateien zu tun? Nein.
3. Frage: Hat das was mit Dateien zu tun? Nein.
4. Der Code, ja, der hat was mit der Sparte zu tun.
Also, zur 2. Frage:
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: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45:
| {----------------------------------------------------------------------------- Procedure : Explode Purpose : Seperates a CSV-line Arguments : const Separator, S: string; Limit: Integer = 0 Result : TStringDynArray -----------------------------------------------------------------------------} type TStringDynArray = array of string;
function Explode(const Separator, S: string; Limit: Integer = 0): TStringDynArray; var SepLen: Integer; F, P: PChar; ALen, Index: Integer; begin SetLength(Result, 0); if (S = '') or (Limit < 0) then Exit; if Separator = '' then begin SetLength(Result, 1); Result[0] := S; Exit; end; SepLen := Length(Separator); ALen := Limit; SetLength(Result, ALen);
Index := 0; P := PChar(S); while P^ <> #0 do begin F := P; P := StrPos(P, PChar(Separator)); if (P = nil) or ((Limit > 0) and (Index = Limit - 1)) then P := StrEnd(F); if Index >= ALen then begin Inc(ALen, 5); // mehrere auf einmal um schneller arbeiten zu können SetLength(Result, ALen); end; SetString(Result[Index], F, P - F); Inc(Index); if P^ <> #0 then Inc(P, SepLen); end; if Index < ALen then SetLength(Result, Index); // wirkliche Länge festlegen end; |
Zur 3. Frage: trim, StringReplace.
Zum Code: Versuch es mal mit ReadLn
|
|
Tino
      

Beiträge: 9839
Erhaltene Danke: 45
Windows 8.1
Delphi XE4
|
Verfasst: Fr 14.03.03 10:25
Hallo und willkommen hier im Forum,
bitte beachte in Zukunft die Richtlinien. Speziell folgender Absatz:
Richtlinien hat folgendes geschrieben: | 1.2 Posten in die richtige Sparte
Das Delphi-Forum ist - wie du sicherlich schon bemerkt hast - in verschiedene Sparten unterteilt, wobei sich mehrere direkt mit der Behandlung programmiertechnischer Probleme befassen. Es ist aufgrund der Anzahl von Fragen notwendig, diese in die richtige Sparte zu posten, damit kein Chaos entsteht und jedem Mitglied gezielt geholfen werden kann. |
Danke Dir!
Gruß
TINO
|
|
AndyB
      
Beiträge: 1173
Erhaltene Danke: 14
RAD Studio XE2
|
Verfasst: Fr 14.03.03 18:38
Luckie hat folgendes geschrieben: | Also, zur 2. Frage:
Quelltext 1: 2: 3: 4: 5: 6:
| {----------------------------------------------------------------------------- Procedure : Explode Purpose : Seperates a CSV-line Arguments : const Separator, S: string; Limit: Integer = 0 Result : TStringDynArray -----------------------------------------------------------------------------} | |
Der Quellcode kommt mir so bekannt vor.
_________________ Ist Zeit wirklich Geld?
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Fr 14.03.03 21:53
Jupp. Und? Ich habe niegrgens behauptet der Code wär von mir. Da jbg auch keinen Autor genannt hat, kann nich auch nicht sagen, ob es von ihm ist.
|
|
AndyB
      
Beiträge: 1173
Erhaltene Danke: 14
RAD Studio XE2
|
Verfasst: Sa 15.03.03 01:34
Luckie hat folgendes geschrieben: | Jupp. Und? |
War nicht böse gemeint.
Zitat: | Da jbg auch keinen Autor genannt hat, kann nich auch nicht sagen, ob es von ihm ist. |
Er ist von mir.
Gruß
jbg
_________________ Ist Zeit wirklich Geld?
|
|
hitstec
      
Beiträge: 295
|
Verfasst: Sa 15.03.03 03:00
Titel: Eine ein einbißchen einfachere Variante
Ich darf mich selbst zitieren:
www.swissdelphicente...showcode.php?id=1488
Hier ein Auszug:
Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| type ArrOfStr = array of string;
function explode(sPart, sInput: string): ArrOfStr; begin while Pos(sPart, sInput) <> 0 do begin SetLength(Result, Length(Result) + 1); Result[Length(Result) - 1] := Copy(sInput, 0,Pos(sPart, sInput) - 1); Delete(sInput, 1,Pos(sPart, sInput)); end; SetLength(Result, Length(Result) + 1); Result[Length(Result) - 1] := sInput; end; |
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Sa 15.03.03 04:59
AndyB hat folgendes geschrieben: | Luckie hat folgendes geschrieben: | Jupp. Und? |
War nicht böse gemeint.
|
Habe ich auch nicht so verstanden.
Zitat: |
Zitat: | Da jbg auch keinen Autor genannt hat, kann nich auch nicht sagen, ob es von ihm ist. |
Er ist von mir.
Gruß
jbg |
Aha, also jbg und AndyB sind ein und die gleiche Person. Wenn du mir sagst, was du für einen Namen da stehen haben willst, dann wirst du mit deinem Namen namentlich in meiner AdressSB im Code erwähnt, wenn du es wünscht. Wenn es dein realer Name sein soll, schick mir eine PN.
|
|
Ist die Frage beantwortet? Das Problem gelöst?
Dann klicke hier, um das Thema entsprechend zu markieren!
|
|