Autor Beitrag
dbcf
Gast
Erhaltene Danke: 1



BeitragVerfasst: 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:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 23



BeitragVerfasst: Do 13.03.03 18:55 
Wenn du mit strings arbeiten willst wuerde ich dir zu ner Stringlist raten(TStrings) koennte so gehen:

ausblenden 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
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 73



BeitragVerfasst: Do 13.03.03 19:11 
Hi

hier was zu deinen assoziativen Arrays !!! es geht !!
so kann man es erzeugen und darauf zugreifen !!

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 238

Debian Woody, Win 2000, Win XP
D7 Ent, Kylix 3
BeitragVerfasst: Do 13.03.03 20:08 
Versuchs mal mit ReadLn statt Read. Ich denke, das sollte eher deinen Wünschen entsprechen..
Tower
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 99



BeitragVerfasst: Fr 14.03.03 09:48 
Zur dritten Frage: Nein, falsche Annahme. "Trim" heißt das Zauberwort.
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: 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:
ausblenden volle Höhe 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:
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Veteran
Beiträge: 9839
Erhaltene Danke: 45

Windows 8.1
Delphi XE4
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1173
Erhaltene Danke: 14


RAD Studio XE2
BeitragVerfasst: Fr 14.03.03 18:38 
Luckie hat folgendes geschrieben:
Also, zur 2. Frage:
ausblenden 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



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1173
Erhaltene Danke: 14


RAD Studio XE2
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 295



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

ausblenden 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



BeitragVerfasst: 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. :wink:
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!