Entwickler-Ecke

Dateizugriff - Einzelne Zeichen von TStringList...


Dhakiyah - Mo 29.09.08 10:26
Titel: Einzelne Zeichen von TStringList...
Hallo!
Jetzt habe ich gleich das nächste Problem.

Ich habe also die name.txt Datei.
Dort steht zum Beispiel:
Helmut (tab) Kohl
Angela (tab) Merkel

usw.

Jetzt möchte ich die ersten zwei Buchstaben vom Vornamen und dann den ersten Buchstaben vom Nachnahmen in eine extra *.txt Datei speichern. Und das in Kleinbuchstaben.

Beispiel:
hek
anm

usw.

Gruß


Delete - Mo 29.09.08 10:35

Stichworte: Copy, Pos, AnsiLowerCase. Schau dazu mal in die Hilfe.


jaenicke - Mo 29.09.08 12:31

Ein paar kleine Hinweise:
Mit

Delphi-Quelltext
1:
Pos(#9, StringList[i])                    
bekommst du in der StringList-Zeile i die Position des Tabzeichens.
Mit

Delphi-Quelltext
1:
Copy(StringList[i], StartPosition, 2)                    
bekommst du die zwei Zeichen ab StartPosition aus der Zeile.
Mit

Delphi-Quelltext
1:
LowerCase(Copy(StringList[i], StartPosition, 2))                    
sind die beiden Zeichen klein geschrieben.

Die ersten beiden Zeichen sind am einfachsten, da musst du ja nur von Position 1 aus 2 Zeichen kopieren und mit LowerCase in Kleinbuchstaben umwandeln. Dann holst du dir die Position des Tabzeichens und holst ab dem folgenden Zeichen ein Zeichen. Das ganze packst du wieder in die i-te Zeile der Stringlist, und am Ende speicherst du die wieder mit SaveToFile.


Delete - Mo 29.09.08 12:46

Wenn Du AnsiLowerCase statt LowerCase benutzt, werden auch Umlaute umgewandelt.


Dhakiyah - Mo 29.09.08 13:15
Titel: Hallo...
Die Umlaute habe ich schon ersetzt...

Muss ich die ersten zwei Zeichen in einen anderen String schieben?
So wie ich es gemacht habe geht es nicht...


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 TForm1.Button1Click(Sender: TObject);
var Datei: TStringList;
    i, p: Integer;
    Zeile: string;
    hilf: string;
    zahl: integer;
begin
  Datei := TStringList.Create;
  Datei.LoadFromFile(ExtractFilePath(ParamStr(0))+ 'name.txt');
  for i := 0 to Datei.Count - 1 do
    begin
      Zeile := Datei[i];
      Zeile := Trim (Zeile);
      for p := 1 to Length(Zeile) do
      if Zeile[p] = #9 then Zeile[p] := '.';

      zeile := stringreplace(zeile, 'Ä''Ae', [rfReplaceAll]);
      zeile := stringreplace(zeile, 'ä''ae', [rfReplaceAll]);
      zeile := stringreplace(zeile, 'Ö''Oe', [rfReplaceAll]);
      zeile := stringreplace(zeile, 'ö''oe', [rfReplaceAll]);
      zeile := stringreplace(zeile, 'Ü''Ue', [rfReplaceAll]);
      zeile := stringreplace(zeile, 'ü''ue', [rfReplaceAll]);
      zeile := stringreplace(zeile, 'ß''ss', [rfReplaceAll]);

      hilf := copy(zeile[i],12);

      randomize;
      zahl:= random(succ(9999-1000))+1000;

      Datei[i] := LowerCase(Zeile) + '@mail.de' + #9 + IntToStr(zahl) + hilf;
    end;
  Datei.SaveToFile(ExtractFilePath(ParamStr(0)) + 'name2.txt');
  Datei.Free;
end;


Delete - Mo 29.09.08 13:21

Die Reihenfolge müsste ja so sein:
- String trimmen
- Umlaute wandeln
- die ersten beiden Zeichen des Strings in Variable kopieren
- Tab suchen
- erstes Zeichen hinter dem Tab an Variable anhängen
- Tabs entfernen
- usw.


Delphi-Quelltext
1:
hilf := copy(zeile[i],12);                    

Das ist so Quatsch, sry. Lass mal den Index weg, Du greifst ja hier auf einen String zu.

Delphi-Quelltext
1:
hilf := copy(zeile,12);                    


Dhakiyah - Mo 29.09.08 13:44
Titel: Hallo...

Delphi-Quelltext
1:
hilf := copy(zeile,12) + copy(zeile, 1 + Pos(#9, Zeile[i]), 2);                    


Geht nicht...
Oh man... Das wird nix mehr mit mir und Delphi... :nixweiss:


Delete - Mo 29.09.08 13:48

Versuch mal

Delphi-Quelltext
1:
hilf := copy(zeile,12) + copy(zeile, Succ(Pos(#9, Zeile)), 1);