Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi zahl durch ein Zeichen ersetzen ? (https://www.delphipraxis.net/114637-zahl-durch-ein-zeichen-ersetzen.html)

Delphiturbo 28. Mai 2008 15:44


zahl durch ein Zeichen ersetzen ?
 
Hallo

ich möchte das Zeichen 0 durch x und da Zeichen 1 durch n ersetzen
aber nur die letzte 2 Zeichen
ss spielt keine Rolle

Beispiel :
Zahl=000-ss soll Zahl=000-xx
Zahl=001-ss soll Zahl=001-xn
Zahl=011-ss soll Zahl=011-nn

Delphi-Quellcode:
procedure TForm1.UpDown1Click(Sender: TObject; Button: TUDBtnType);
begin
  Edit1.Text := Format('Zahl=' + '%.3d' + '-' + 'ss', [UpDown1.Position]);
end;

procedure TForm1.Edit1Change(Sender: TObject);
var
i: Integer;
zeichen: String;
begin
for i := 6 to 7 do
zeichen:=Edit1.Text[i];
if zeichen = '0' then
zeichen:='x';
if zeichen = '1' then
zeichen:='n';

Edit2.Text:= // das Ergebnis soll in Edit 2 angezeigt werden

end;
end.

DeddyH 28. Mai 2008 15:49

Re: zahl durch ein Zeichen ersetzen ?
 
Erstmal fehlen da begin und end. Und es nützt ja nichts, nur das Zeichen zu ersetzen, wenn Du keine Kopie des Originalstrings anlegst :zwinker:

calculon 28. Mai 2008 15:50

Re: zahl durch ein Zeichen ersetzen ?
 
Zitat:

Zitat von Delphiturbo
Hallo

ich möchte das Zeichen 0 durch x und da Zeichen 1 durch n ersetzen
aber nur die letzte 2 Zeichen
ss spielt keine Rolle

Beispiel :
Zahl=000-ss soll Zahl=000-xx
Zahl=001-ss soll Zahl=001-xn
Zahl=011-ss soll Zahl=011-nn

Kapier' ich nicht. In deinem Beispiel ersetzt du 0 gar nicht durch x und 1 auch nicht durch n, sondern du passt ss ausgehend von den vorherigen Zeichen an.

Sherlock 28. Mai 2008 15:52

Re: zahl durch ein Zeichen ersetzen ?
 
Ich warte noch eine weitergehende Erklärung ab, vor einem Schubs in die richtige Richtung.

*Gespanntbin*

Sherlock

NickelM 28. Mai 2008 16:32

Re: zahl durch ein Zeichen ersetzen ?
 
Ich würde es mal so versuchen :

Delphi-Quellcode:
procedure TForm1.Edit1Change(Sender: TObject);
var
i: Integer;
zeichen: String;
StringVoll : String;
begin
StringVoll := Edit1.Text; // erstmal kompletten string speichern
for i := 6 to 7 do
zeichen:=Edit1.Text[i];
if zeichen = '0' then // zeichen im vollenstring ändern
StringVoll[i] :='x';
if zeichen = '1' then
StringVoll[i] :='n'
end;
Edit2.Text := StringVoll; // dann geänderter string rausgeben;

end;

DeddyH 28. Mai 2008 16:43

Re: zahl durch ein Zeichen ersetzen ?
 
Was soll denn hier herauskommen?
Zitat:

Delphi-Quellcode:
for i := 6 to 7 do
  zeichen:=Edit1.Text[i];

Edit1.Text[7], oder? Wozu dann die Schleife?

NickelM 28. Mai 2008 16:48

Re: zahl durch ein Zeichen ersetzen ?
 
neee bei Edit1.Text[1] z.b. kommt das erste zeichen den strings Text :zwinker:
Wenn man sagt
Delphi-Quellcode:
String := 'Hallo';
Test := String[1]
//vorausgesetzt beide test und string sind string typ kommt folgendes raus
Test := 'H';

DeddyH 28. Mai 2008 16:50

Re: zahl durch ein Zeichen ersetzen ?
 
Nochmal, ohne Blockbildung mit begin und end macht die Schleife keinen Sinn, weil "zeichen" immer wieder überschrieben wird. Jetzt klar, was ich meine?

Delphiturbo 28. Mai 2008 18:52

Re: zahl durch ein Zeichen ersetzen ?
 
Ich habe das Problem gelöst :firejump:
aber mit einem lagen Code
Also ich möchte nur letzte 2 Zeichen durch bestimmte Buchstaben ersetzen :

Vielleicht kann jamand den Code verkürzen :mrgreen:
Delphi-Quellcode:
procedure TForm1.Edit1Change(Sender: TObject);
var
//i : Integer;
feld1, l1,l2,l3,zeichen1,zeichen2: String;
begin
feld1:=Edit1.Text;

//for i:=0 to 10 do
l1 := Feld1[1];
l2 := Feld1[2];
l3 := Feld1[3];

if l2='0' then
    zeichen1:='a';
if l2='1' then
    zeichen1:='b';
if l2='2' then
    zeichen1:='c';
if l2='3' then
    zeichen1:='d';
if l2='4' then
    zeichen1:='e';
if l2='5' then
    zeichen1:='f';
if l2='6' then
    zeichen1:='g';
if l2='7' then
    zeichen1:='h';
if l2='8' then
    zeichen1:='i';
if l2='9' then
    zeichen1:='j';
// zeichen 2
if l3='0' then
    zeichen2:='a';
if l3='1' then
    zeichen2:='b';
if l3='2' then
    zeichen2:='c';
if l3='3' then
    zeichen2:='d';
if l3='4' then
    zeichen2:='e';
if l3='5' then
    zeichen2:='f';
if l3='6' then
    zeichen2:='g';
if l3='7' then
    zeichen2:='h';
if l3='8' then
    zeichen2:='i';
if l3='9' then
    zeichen2:='j';

Edit2.Text:='inf=' +l1+l2+l3 + '-' + zeichen1 +zeichen2;

end;

procedure TForm1.UpDown1Click(Sender: TObject; Button: TUDBtnType);
begin
Edit1.Text := Format('%.3d', [UpDown1.Position]);
end;

end.

DeddyH 28. Mai 2008 18:54

Re: zahl durch ein Zeichen ersetzen ?
 
Ich geb' s auf, nochmal sag ich' s nicht :wall:

Zitat:

Delphi-Quellcode:
for i:=0 to 10 do //*grusel*
l1 := Feld1[1];
l2 := Feld1[2];
l3 := Feld1[3];


Delphiturbo 28. Mai 2008 18:58

Re: zahl durch ein Zeichen ersetzen ?
 
Schleife ist nicht mehr gebraucht
deswegen kommt der Code lang :mrgreen:

DeddyH 28. Mai 2008 19:00

Re: zahl durch ein Zeichen ersetzen ?
 
2 Möglichkeiten:

1. case benutzen
2. ASCII-Tabelle benutzen

grenzgaenger 28. Mai 2008 19:03

Re: zahl durch ein Zeichen ersetzen ?
 
3. möglichkeit, 'ne sprungtabelle verwenden... ;-)

aber die wird wohl zu hoch für dich sein :angel:

DeddyH 28. Mai 2008 19:07

Re: zahl durch ein Zeichen ersetzen ?
 
Delphi-Quellcode:
if (l1 in ['0'..'9']) then
  zeichen := Chr(Ord(l1) + 49);
Nun denk mal drüber nach, was ich hier mache.

[edit] Was ich ja noch gar nicht erwähnt hatte: Lösch mal den Text aus Edit1 und wundere Dich :mrgreen: [/edit]

Delphiturbo 28. Mai 2008 19:42

Re: zahl durch ein Zeichen ersetzen ?
 
Mit deinem Code DadyH bekomme ich hexa Zeichen !
Und wenn das Feld leer ist, bekomme ich Error deswegen
versuche ich nur Zahlen zu übernehmen :

Delphi-Quellcode:
procedure TForm1.Edit1Change(Sender: TObject);
var
i,l1,l2,l3 : Integer; // diesmal l1 bis l3 als Integer
feld1,zeichen1,zeichen2: String;
begin
feld1:=Edit1.Text;

l1 := strToInt(Feld1[1]);
l2 := strToInt(Feld1[2]);
l3 := strToInt(Feld1[3]);

if (l2 in [0..9]) then
  zeichen1 := Chr(Ord(l2) + 49); // gibt nicht die gewünschte Buchstabe
// zeichen 2
...
if (l2) or (l3) <> [0...9] then
    zeichen1:='';
    zeichen2:='';
Edit2.Text:='inf=' +IntToStr(l1) +IntToStr(l2) +IntToStr(l3) + '-' + zeichen1 +zeichen2;
end;
procedure TForm1.UpDown1Click(Sender: TObject; Button: TUDBtnType);
begin
Edit1.Text := Format('%.3d', [UpDown1.Position]);
end;
end.

DeddyH 28. Mai 2008 19:44

Re: zahl durch ein Zeichen ersetzen ?
 
Ob als integer oder nicht, wenn Du das Edit leerst, knallt es. und was sind bitte Hexazeichen?

FAlter 28. Mai 2008 19:46

Re: zahl durch ein Zeichen ersetzen ?
 
Hi,

Zitat:

Zitat von DeddyH
und was sind bitte Hexazeichen?

Zeichen des Hexalsystems, also 0, 1, 2, 3, 4 und 5.

:mrgreen:

Mfg
FAlter

Delphiturbo 29. Mai 2008 10:08

Re: zahl durch ein Zeichen ersetzen ?
 
Ich möchte nun den Wert in Edit1 nicht von null anfangen
sondern weiter zählen
Delphi-Quellcode:
Edit1.Text := Format('%.3d', [UpDown1.Position]);
d.h. wenn ich 555 in edit1 eingebe und klicke auf UpDown1Click dann wird mein Wert gelöscht und fängt er wo er war an !

oder muss ich die UpDown1Click.position in Form1.Oncreate auch was programmieren :gruebel:

Sherlock 29. Mai 2008 10:11

Re: zahl durch ein Zeichen ersetzen ?
 
Gibt es bei Dir die Komponentengruppe Beispiele?
Da gibt es nämlich eine Komponente die heisst SpinEdit. Das nimmt Dir glaube ich die Arbeit ab, die Du Dir da machst.

Sherlock

Delphiturbo 29. Mai 2008 10:20

Re: zahl durch ein Zeichen ersetzen ?
 
Ist es mit Edit.text nicht möglich ?
Nur wenn es möglich ist, kann ich SpinEdit nehmen. Allerdings finde ich in SpinEdit-Eigenschaft in OI keine Möglichkeit um die Pfeilen zu vergrößern !

Sherlock 29. Mai 2008 10:23

Re: zahl durch ein Zeichen ersetzen ?
 
Grafisch vergrößern? Mach das ganze Edit größer. Wenns was feineres werden soll, dann musst du halt nach anderen Komponenten suchen, aber Spinedit nennt man sowas, das macht dann die Suche leichter. ;)

Edit: Falls es um den Wert geht, dann schau Dir mal Increment, MaxValue und MinValue an.

Sherlock

Delphiturbo 29. Mai 2008 10:27

Re: zahl durch ein Zeichen ersetzen ?
 
ich meine die Pfeilen nur

DeddyH 29. Mai 2008 10:29

Re: zahl durch ein Zeichen ersetzen ?
 
Hast Du denn Deinem UpDown auch das Edit zugewiesen?

Delphiturbo 29. Mai 2008 12:57

Re: zahl durch ein Zeichen ersetzen ?
 
ja
aber es ist unterschied
wenn ich eine Format für SpinEdit zuweise, dann funktioniert nicht
und ohne Format läuft !
Delphi-Quellcode:
Edit1.text := Format('%.5d', [UpDown1.Position]); // ok
SpinEdit1.Text := Format('%.5d', [UpDown1.Position]); // nicht !

rollstuhlfahrer 29. Mai 2008 14:06

Re: zahl durch ein Zeichen ersetzen ?
 
Zitat:

Zitat von Delphiturbo
Delphi-Quellcode:
Edit1.text := Format('%.5d', [UpDown1.Position]); // ok
SpinEdit1.Text := Format('%.5d', [UpDown1.Position]); // nicht !

mal so ganz nebenbei: SpinEdit ist nur für Zahlen gedacht und hat somit auch kein .Text sondern wie man über den OI sehen sollte nur ein .Value (Integer). Dem kannst du Zahlen zuweisen. Deine nette Formatierung mit %.5d ist dann aber auch im Eimer, die kannst du aber beim Auslesen wieder herstellen.

rollstuhlfahrer

Delphiturbo 29. Mai 2008 14:13

Re: zahl durch ein Zeichen ersetzen ?
 
wie kann ich beim Auslesen meine 0000 wieder wiederherstellen ?

Die Muhkuh 29. Mai 2008 14:14

Re: zahl durch ein Zeichen ersetzen ?
 
Mit Format? :roll:

Delphiturbo 29. Mai 2008 15:45

Re: zahl durch ein Zeichen ersetzen ?
 
Lösung gefunden sowohl für Edit.Text als auch für den SpinEdit :firejump:
In Edit1.Text muss nicht nun immer von 0 anfangen

Delphi-Quellcode:
procedure TForm1.Edit1Change(Sender: TObject);
begin
UpDown1.Position := StrToInt(Edit1.Text); // das war's. Mehr nicht
// das heisst immer eine neue Position zuweisen (Onchange)
fast aufgegeben :wall:

FAlter 29. Mai 2008 15:49

Re: zahl durch ein Zeichen ersetzen ?
 
Hi,

wenn das Edit mit dem UpDown vernüpft ist, ergibt das eine Endlosschleife:

Edit.Text geändert -> OnChange
OnChange setzt UpDown.Position
UpDown.Position geändert -> Update von Edit.Text
...
Stacküberlauf

Hatte ich schon mal. Seit dem setze ich sowas nicht mehr im OnChange. In diesem Fall bezweifle ich immer noch, dass solch eine Verknüpfung besteht (UpDown.Associate).

Mfg
FAlter

Medium 29. Mai 2008 15:51

Re: zahl durch ein Zeichen ersetzen ?
 
Ich schnall nur gerade absolut nicht, was das mit deiner ursprünglichen Frage zu tun hat. Eventuell wäre es gut, wenn du demnächst etwas allgemeiner dazu schreibst was du überhaupt erreichen willst, weil deine ersten Lösungsansätze meist schon seltsam sind, und die Beschreibungen des Problems nicht wirklich erkennen lassen, wo du mal hin willst. Dann artet es in deinen Threads nicht immer in seitenlanges Gerate aus, und es wäre nur fair den Helfern gegenüber.

DeddyH 29. Mai 2008 15:52

Re: zahl durch ein Zeichen ersetzen ?
 
Zitat:

Zitat von DeddyH
Hast Du denn Deinem UpDown auch das Edit zugewiesen?

Zitat:

Zitat von Delphiturbo
ja

Wundert mich schon ein wenig.

FAlter 29. Mai 2008 15:55

Re: zahl durch ein Zeichen ersetzen ?
 
Hi,

Zitat:

Zitat von DeddyH
Zitat:

Zitat von DeddyH
Hast Du denn Deinem UpDown auch das Edit zugewiesen?

Zitat:

Zitat von Delphiturbo
ja

Wundert mich schon ein wenig.

Ich denke mal, er hat die Frage nicht verstanden. Ansonsten hätte er sich gewundert, dass das Programm eine Ewigkeit hängt, es dann nen Stacküberlauf gibt und es danach nur so von Exceptions hagelt. Siehe mein Post.

Ergo: Die richtige Antwort war nein.

Mfg
FAlter

DeddyH 29. Mai 2008 15:56

Re: zahl durch ein Zeichen ersetzen ?
 
Wenn er die Nachfragen nicht versteht, kann er sie ja hinterfragen, dann kommen trotzdem vermutlich kürzere Threads dabei heraus, weil die Kommunikation einfach besser läuft :wall:

Neutral General 29. Mai 2008 16:01

Re: zahl durch ein Zeichen ersetzen ?
 
Hi,

Keine Ahnung was ihr hier alle macht, aber ihr redet glaube ich alle bisschen aneinander vorbei.

Da ich wohl Ärger bekomme wenn ich dir jetzt den fertigen Code poste (wohl auch mehr oder weniger zu Recht) werde ich dir jetzt sagen wie du vorgehen musst:

:arrow:

Schleife von Length(String) downto Length(String)-1 und dann falls das Zeichen[i] eine 0 ist, Zeichen[i] durch ein x ersetzen, wenns eine 1 ist, durch ein n ersetzen.

Edit: So habe ich jedenfalls die Frage verstanden :roll:

Gruß
Neutral General

Delphiturbo 30. Mai 2008 15:52

Re: zahl durch ein Zeichen ersetzen ?
 
Fast aufgegeben :wall:
Lösung :
S
p
i
n
E
d
i
t
1
.
T
e
x
t

:
=

F
o
r
m
a
t
(
'
%
.
5
d
'
,

[
S
p
i
n
E
d
i
t
1
.
V
a
l
u
e
]
)
;

Die Muhkuh 30. Mai 2008 15:53

Re: zahl durch ein Zeichen ersetzen ?
 
Was soll das denn bitte jetzt? Pack das Ding in Code-Tags und schreib es wieder jeder andere auch. :roll:

SirThornberry 30. Mai 2008 15:57

Re: zahl durch ein Zeichen ersetzen ?
 
Den Grund für das Schließen muss ich wohl nicht äußern - irgendwann ist das Maß voll.

*** GESCHLOSSEN ***


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:26 Uhr.

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