Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Zeichenkette bei '#' teilen
linesk - Di 18.05.10 19:54
Titel: Zeichenkette bei '#' teilen
Es handelt sich um Registierung eines Filmes bei einer telefonischen Filmausleihe, die eingegebenen Daten sollen umgewandelt und gut verständlich in einer Listbox ausgegeben werden.
Und zwar soll die Eingabe z.B.so aussehen:
2584#2568#335#1500#12032010
Dabei stellt die erste Nummer eine 4-8 stellige Telefonnummer dar, die zweite ein Passwort, die dritte eine 1-4 stellige filmnummer, die vierte die Uhrzeit und die letzte das Datum dar.
Ich hab das bereits mit Explode versucht allerdings geht das nicht wirklich =(.
Zumal komischer Weise das Programm sich auch nicht starten lässt, mir aber auch keine Fehler angezeigt werden. Es handelt sich um Delphi 2010.
Kann mir bitte jemand weiter helfen?
Narses - Di 18.05.10 19:57
Moin und :welcome: im Forum!
Wie sieht denn dein Code aus? ;)
cu
Narses
linesk - Di 18.05.10 20:02
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| procedure TForm1.b_registrierenClick(Sender: TObject); var s:String; Position,tele,passwort:Integer; begin s:=FLOATTOINT(e_eingabe.text); Position:=Pos('#',s); tele:=Copy(s,0,Position-1); passwort:=Copy(s,Position+1,Length(s)); lb_ausgabe.items.Add('Telefonnummer:'+FLOATTOSTRF(tele,ffnumber,8,4));
end; |
Also ich hab das erstmal probiert, normalerweise zeigt mir das ja dann an was nicht stimmt und ich komm dann auf das richtige. Aber das Programm hat irgendwie gar keine Meinung dazu =(
Moderiert von
Narses: Delphi-Tags hinzugefügt
Narses - Di 18.05.10 20:11
Moin!
Diese Zeile:
linesk hat folgendes geschrieben : |
Delphi-Quelltext 1:
| s:=FLOATTOINT(e_eingabe.text); | |
kann unmöglich richtig sein. Selbst wenn es FloatToInt() gäbe (mein Delphi kennt´s nicht :nixweiss:) sollte der Ergebnistyp wohl Integer sein, und das kann man keinem String zuweisen.
linesk hat folgendes geschrieben : |
| Also ich hab das erstmal probiert, normalerweise zeigt mir das ja dann an was nicht stimmt und ich komm dann auf das richtige. |
Hier muss dir der Compiler eine Meldung schmeißen, dass kann nicht klappen.
linesk hat folgendes geschrieben : |
| Aber das Programm hat irgendwie gar keine Meinung dazu =( |
Das ist nicht schlimm, meine Programme meinen auch immer nix... 8) :D
cu
Narses
linesk - Di 18.05.10 20:18
Naja genaugenommen
Ich weiß, ich hatte es auch vorher anders bzw mit integer, aber weil es nicht ging hab ich probiert.
Hab einfach das kopiert was gerade da stand.
Narses - Di 18.05.10 20:25
Moin!
linesk hat folgendes geschrieben : |
| normalerweise zeigt mir das ja dann an was nicht stimmt |
linesk hat folgendes geschrieben : |
Naja genaugenommen
Ich weiß, ich hatte es auch vorher anders |
Hm :? halten wir also zunächstmal fest, dass du nicht das schreibst, was du wirklich gemacht hast und/oder der Compiler dazu gesagt hat. Klingt nicht besonders schlau, dieses Verhalten, oder? :|
Probier das mal so: :idea:
Delphi-Quelltext
1: 2: 3: 4: 5:
| procedure TForm1.b_registrierenClick(Sender: TObject); begin lb_ausgabe.Items.Delimiter := '#'; lb_ausgabe.Items.DelimitedText := e_eingabe.Text; end; |
Tut das das, was du haben willst?
cu
Narses
linesk - Di 18.05.10 20:31
War ja nur das Float falsch ;) sonst wars genauso
ich würde Dir ja gern sagen was es macht, aber es macht nix. Das lässt sich einfach nicht ausführen *grml*
Hidden - Di 18.05.10 21:14
Hi :)
Also du führst die .exe aus/compillierst, und es erscheint nicht einmal ein Fenster? Und das, obwohl der Compiler dir keine weiteren Hinweise gibt?
Dann sieh' doch einmal im Task-Manager nach, ob das Programm unter den Tasks aufgeführt wird. Vielleicht haben wir hier noch ein ganz anderes Problem :think:
lg,
linesk - Di 18.05.10 21:27
Ich glaub das Programm will mich verarschen.
Ich hab jetzt erstmal neu angefangen und jetzt lässt es mich auch starten, ka was bei dem anderen das Problem war/ist.
Ich probier jetzt mal die Methoden aus.
---
Moderiert von
Narses: Beiträge zusammengefasst---
Narses hat folgendes geschrieben : |
Delphi-Quelltext 1: 2: 3: 4: 5:
| procedure TForm1.b_registrierenClick(Sender: TObject); begin lb_ausgabe.Items.Delimiter := '#'; lb_ausgabe.Items.DelimitedText := e_eingabe.Text; end; | Tut das das, was du haben willst? |
Also es tut schonmal das in die listbox einordnen ja, das will ich schonmal.
allerdings soll das ganze am end wie ein Kassenbon aussehen
quasi:
Telefonnummer: 3695
Passwort: 2589
Filmnummer:12
Uhrzeit: 15:00
Datum: 23.05.2010
elundril - Di 18.05.10 21:34
hmm und was hindert dich daran mit einer schleife jedes item in der Listbox durchzugehen und jeweils deinen gewünschten Text davor zu setzen?
lg elundril
linesk - Di 18.05.10 21:38
dumme frage: aber wie komm ich jetzt wieder an die einzellnen items rann? die sind ja quasi nur umgeordnet und nicht genau bestimmt
ALF - Di 18.05.10 22:33
Hi, mal ne andere Frage.
Wie so machst Du die Eingabe nicht mit 5 Editfelder? Ersparst Dir damit die Eingabe mit '#' ,dürfte auch übersichtlicher sein und kannst dann, bei der Übergabe in das ListFeld, noch die Zuordnung machen.
So wie Du es haben willst :wink:
z.B.
Delphi-Quelltext
1: 2: 3:
| lb_ausgabe.Items.add := 'Telefonnummer: ' + Edit1.text; lb_ausgabe.Items.add := 'Passwort: ' + Edit2.text; |
Gruss Alf
Hidden - Di 18.05.10 23:25
linesk hat folgendes geschrieben : |
| Ich glaub das Programm will mich verarschen. |
Das wird's sein :P
linesk hat folgendes geschrieben : |
allerdings soll das ganze am end wie ein Kassenbon aussehen
Telefonnummer: 3695
Passwort: 2589
Filmnummer:12
Uhrzeit: 15:00
Datum: 23.05.2010 |
Würde ich mit Labels machen, damit der User auch mit unausgefüllten Feldern schon sieht, was dort hineinkommen wird.
linesk hat folgendes geschrieben : |
| dumme frage: aber wie komm ich jetzt wieder an die einzellnen items rann? die sind ja quasi nur umgeordnet und nicht genau bestimmt |
Die Methode mit Listbox(dafür steht
lb_ausgabe doch, oder?) und Delimiter: '#' ist einfach und schnell; zur Weiterverarbeitung aber nicht so gut geeignet.
Die jeweilige Zeile auslesen kannst du vermutlich über lb_ausgabe.Items[i], wobei i=0,1,..,N die i-te Zeile ist, und entweder eine Integervariable(Items[i]) oder ein Zahlenwert(Items[3], Items[25], ..) sein kann. Du könntest jetzt in einem zweiten Schritt die Beschriftungen und Nummern in einen String packen, und neu einschreiben.
Besser dazu geeignet, ist die
direktere Methode:
Du hast den String
S(z.B.
='2584#2568#335#1500#12032010'), und kannst mit
Copy(S, StartIndex, AnzahlZeichen) einen Teilstring herauskopieren.
Pos('#', S) liefert dir die Position des ersten Vorkommens von
'#' in
S überhaupt, sowie
PosEx('#', S, 23) die Position des ersten Vorkommens ab dem 23. Zeichen.
Mit
Pos und
PosEx(genauerees zu den Funktionen findest du in der Delphi-Hilfe:F1) bekommst du die Stellen in
S, an denen sich ein
'#' befindet. mit
Copy kannst du diese Texte herausschneiden, und beliebig verbauen(ich wäre ja für Editfelder, auf read-only, damit der Text herauskopiert werden kann).
ALF hat folgendes geschrieben : |
Wie so machst Du die Eingabe nicht mit 5 Editfelder? Ersparst Dir damit die Eingabe mit '#' ,dürfte auch übersichtlicher sein und kannst dann, bei der Übergabe in das ListFeld, noch die Zuordnung machen.
So wie Du es haben willst :wink: |
Vermute mal, der String kommt über das Internet/sonstwie elektronisch rein. Ansonsten full ack.
lg,
linesk - Mi 19.05.10 17:21
Danke klappt soweit alles, hab mir für die Methode mit lb_ausgabe.Items[n] entschieden.
Muss jetzt nur noch die Uhrzeit und das Datum logisch dartstellen, aber das dürfte ich so hinbekommen mit POS.
Hidden hat folgendes geschrieben : |
ALF hat folgendes geschrieben : | Wie so machst Du die Eingabe nicht mit 5 Editfelder? Ersparst Dir damit die Eingabe mit '#' ,dürfte auch übersichtlicher sein und kannst dann, bei der Übergabe in das ListFeld, noch die Zuordnung machen.
So wie Du es haben willst :wink: | Vermute mal, der String kommt über das Internet/sonstwie elektronisch rein. Ansonsten full ack. |
Jap laut Aufgabenstellung ist die Eingabe telefonisch. Die Idee mit den Editfeldern hat ich auch, wollt mein Lehrer aber so nicht, leider. ;)
Moderiert von
Narses: Zitat kenntlich gemacht.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!