Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi String alle X Zeichen splitten (https://www.delphipraxis.net/131678-string-alle-x-zeichen-splitten.html)

gangs-taas 28. Mär 2009 19:27


String alle X Zeichen splitten
 
hey,
zualler erst mal Hallo, ich bin neu in diesem forum und programmiere seit gut 1/2 jahren in delphi (wegen dem informatik untericht in der schule)

ich kann leider noch nciht so viel und habe jetzt eine Frage bezüglich von Strings.

ich möchte den String aus einem MemoFeld alle X(also ne Variable) Zeichen trennen.

ich habe durch die suche imemr nur das trennen an bestimmten Zeichen gefunden und frag deswegen noch einmal.

ichh offe ihr könnt mir helfen.

Danke schonmal

ps. ich wusste einfach nicht in welches unterforum meine frage gehört *sorry*

Panthrax 28. Mär 2009 19:33

Re: String alle X Zeichen splitten
 
Willkommen!

Idee: Du könntest das "Trennen an einer bestimmten Stelle" doch wiederholen.

Andere Idee: Multipliziere die Variable, um die Trennstellen zu erhalten, und nimm ab dort die nächsten X Zeichen.

Die Routine Copy könnte Dir helfen.

gangs-taas 28. Mär 2009 20:56

Re: String alle X Zeichen splitten
 
hey,
daNKE erstmal für die antwort
könntest du mir genauer sagen wie du das meisnt ?
ich versteh es nämlich immernoch nicht ^^
lg ^^

Panthrax 28. Mär 2009 21:24

Re: String alle X Zeichen splitten
 
Ein Ansatz, im Blindflug getippt:
Delphi-Quellcode:
program Demo;

{$AppType Console}

uses
  SysUtils, Classes;

type
  EOutOfBounds = class(Exception);

function SplitStr(var Str: String; const X: Integer): String;
begin
  if (X < 1) or (X > Length(Str)) then
    raise EOutOfBounds.CreateFmt('SplitStr: X nicht in [%d..%d].',[1,Length(Str)]);
  Result:=Copy(Str,1,X);
  Str:=Copy(Str,X+1,Length(Str)-X);
end;

procedure SplitStrAll(Str: String; const X: Integer; const StringList: TStringList);
begin
  StringList.Clear;
  while Length(Str) > X do
    StringList.Add(SplitStr(Str,X));
  if Lengh(Str) > 0 then
    StringList.Add(Str);
end;

procedure WriteStringList(const StringList: TStringList);
var
  Index: Integer;
begin
  with StringList do
    for Index:= 0 to Count-1 do
      WriteLn(Items[Index]);
end;

var
  Str: String;
  StringList: TStringList;
begin
  Str:='0123456789';
  StringList:=TStringList.Create;
  try
    SplitStrAll(Str,3,StringList):
    WriteStringList(StringList);
  finally
    StringList.Free;
  end;
  WriteLn('Enter drücken...');
  ReadLn;
end.
Eventuell sind noch einige Tippfehler drin...

Viel Spaß beim Lernen!

jaenicke 28. Mär 2009 21:34

Re: String alle X Zeichen splitten
 
Ein Blick in die Library erspart oft einige Tipparbeit...
http://www.delphipraxis.net/internal...t.php?p=186130
http://www.delphipraxis.net/internal...t.php?p=484581
http://www.delphipraxis.net/internal...ct.php?p=27344
3 fertige Lösungen... :roll:

Panthrax 28. Mär 2009 22:13

Re: String alle X Zeichen splitten
 
Hm, irgendwie machen diese drei Lösungen etwas anderes...

Und im wesentlichen kommt es doch nur auf das Teilen und die Wiederholung an:
Delphi-Quellcode:
// Teilen, SplitStr
  Result:=Copy(Str,1,X);
  Str:=Copy(Str,X+1,Length(Str)-X);
// Wiederholung, SplitStrAll
  while Length(Str) > X do
  { ... }
Jetzt hab ich's ja doch verraten... Naja, der Umbau gehört ja dann doch zur Demonstration dazu...

jaenicke 28. Mär 2009 22:44

Re: String alle X Zeichen splitten
 
:oops: Ups, ich sollte schlafen gehen, ich hab das nicht richtig verstanden, Sorry.

DP-Maintenance 29. Mär 2009 06:43

DP-Maintenance
 
Dieses Thema wurde von "Sharky" von "Datenbanken" nach "Sonstige Fragen zu Delphi" verschoben.
Könnte auch nach Object-Pascal. Aber in keinem Fall in die Datenbanksparte ;-)

gangs-taas 29. Mär 2009 07:58

Re: String alle X Zeichen splitten
 
hey
erstaml vielen dank für die verschiebung und die schnelle hilft.

ich bin wohl doch noch viel zu schlecht für sowas -.-

also ich wollte den Text eines Memo-Feldes verschleiern.

d.h. ich wollte 'A' durch z.b. 4 Zahlen ersetzten.

nun müsste ich das hinterher aber auch wieder rückgängig machen könen ...
und das schaff ich nicht ....


ich danke ich bin vllt doch noch zu schlecht für sowas und würde mich über eine hilfe sehr freuen, ansonsten lernen ich lieber erst noch merh ....

lg^^

Meflin 29. Mär 2009 11:30

Re: String alle X Zeichen splitten
 
Moin,

das was du vorhast, geht auch einfacher! Wie ersetzt du denn das A durch die 4 Zahlen? Dazu muss es ja irgendwie eine Zuordnungstabelle als
A <-> 1234
B <-> 2567
oder was auch immer geben. Dann kannst du auf deinen String ein simples StringReplace(str, 'A', '1234', [rfReplaceAll]) anwenden, um den Text zu "verschlüsseln".

Nun, um ihn wieder zu entschlüsseln... machst du halt genau das Umgekehrte, nämlich StringReplace(str, '1234', 'A', [rfReplaceAll]). Und schwupp hast du wieder das Original ;)

http://www.delphibasics.co.uk/RTL.as...=StringReplace

gangs-taas 29. Mär 2009 20:17

Re: String alle X Zeichen splitten
 
hey
danke für den ansetz

hab da nur ne frage zu

was ist wenn ich z.b.
a durch 1234 ersetz
und b durch 4567
und c durch 5678

und wenn ich das in eine lange reihe mach (also ehemal einen text) 1234567 ...

woher weiß das programm dann ob die eine 4 jetzt zum a oder zum b gehlrt ? ect. ???

jaenicke 29. Mär 2009 20:53

Re: String alle X Zeichen splitten
 
Solange alle Ersetzungen für je ein Zeichen genauso lang sind, ist das ja kein Problem. Immer 4 Zeichen gehörten zu einem Zeichen.

Florian H 29. Mär 2009 21:45

Re: String alle X Zeichen splitten
 
Zitat:

Zitat von jaenicke
Solange alle Ersetzungen für je ein Zeichen genauso lang sind, ist das ja kein Problem. Immer 4 Zeichen gehörten zu einem Zeichen.

Bei dem von Sakura geposteten Code wird aber die Zusatzinformation "immer 4 Zeichen" nicht benutzt, also ist es doch ein Problem.

Panthrax 29. Mär 2009 23:56

Re: String alle X Zeichen splitten
 
Man könnte ja die Information hinzunehmen, dass jeder Code 4 Zeichen lang ist. Also entsprechend in der Wiederholung 4 Zeichen abspalten und zurückwandeln, fertig. Oder man bedient sich z.B. der Fano-Bedingung, d.h. jeder Code ist präfixfrei, und durchläuft zeichenweise den kodierten Text. Da es ein Lernprojekt ist, bei dem es nicht um den Code an sich geht, würde ich die Zusatzinformation "4 Zeichen lang" nehmen.

gangs-taas 30. Mär 2009 09:30

Re: String alle X Zeichen splitten
 
und wie sieht dann dein code aus ?
wo baust du das ein ?

gangs-taas 3. Apr 2009 08:49

Re: String alle X Zeichen splitten
 
keine antwort ?

hoika 3. Apr 2009 09:23

Re: String alle X Zeichen splitten
 
Hallo,

wenn jedes Zeichen durch 4 andere ersetzt wurde,
nimmst du dir den String und trennst immer 4 Zeichen ab per Copy.

Bsp:
a=1234
b=5678

abb sieht also so aus
String2:= '123456785678'

Jetzt per

Delphi-Quellcode:
sTemp:= Copy(String2, 1, 4); -> 1234 -> ergibt a
String2:= Copy(String2, 5, Length(String2)-4);   String2 ist jetzt noch 56785678

sTemp:= Copy(String2, 1, 4); -> 5678 -> ergibt 5
String2:= Copy(String2, 5, Length(String2)-4);   String2 ist jetzt noch 5678

usw.

solange bis String2 leer ist.


Das ganze kommt in eine Schleife.

Nach 1/2 Jahren Informatik sollte das machbar sein.

Ansatz:

Delphi-Quellcode:
while String2<>'' do
begin
  sTemp:= Copy(String2, 1, 4); -> 1234 -> ergibt a

  String2:= Copy(String2, 5, Length(String2)-4);   String2 ist jetzt noch 56785678

  usw.
end;

Du könntest auch was fertiges benutzen (RLE z.B.)


Heiko

gangs-taas 3. Apr 2009 14:17

Re: String alle X Zeichen splitten
 
vielen dank


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:05 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz