| Autor |
Beitrag |
rennkuckuck
      
Beiträge: 18
D5.0 Stand, D2005 Personal
|
Verfasst: Do 09.06.05 14:00
Hallo
habe folgende Frage:
Ich habe eine TXT datei die sieht ungefähr so aus:
R900066053
r900066068
8070084698
4070084699
H123454546
b493484999
nun möchte ich herausfinden ob das erste Zeichen ein Buchstabe oder eine Zahl ist....denn zeilen die am anfang einen buchstabe haben müssen gelöscht werden
kann mir jemand sagen wie das geht?
danke schon mal im vorraus für eure hilfe
|
|
Sprint
      
Beiträge: 849
|
Verfasst: Do 09.06.05 14:04
Delphi-Quelltext 1: 2: 3: 4:
| if Length(S) > 0 then case S[1] of '0'..'9': ShowMessage('Erstes Zeichen ist eine Zahl'); end; |
_________________ Ciao, Sprint.
|
|
retnyg
      
Beiträge: 2754
SNES, GB, GBA, CPC, A500, 486/66, P4/3.0HT: NintendOS, AmigaOS, DoS
Delphi 5, Delphi 7
|
Verfasst: Do 09.06.05 14:04
_________________ es gibt leute, die sind genetisch nicht zum programmieren geschaffen.
in der regel haben diese leute die regel...
Zuletzt bearbeitet von retnyg am Do 09.06.05 14:07, insgesamt 1-mal bearbeitet
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Do 09.06.05 14:04
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| const foo = 'a456984'; var s: String; begin s := foo; if s[1] in [#48..#57] then ShowMessage('Ziffer') else ShowMessage('Buchstabe'); |
|
|
retnyg
      
Beiträge: 2754
SNES, GB, GBA, CPC, A500, 486/66, P4/3.0HT: NintendOS, AmigaOS, DoS
Delphi 5, Delphi 7
|
Verfasst: Do 09.06.05 14:05
löl 
_________________ es gibt leute, die sind genetisch nicht zum programmieren geschaffen.
in der regel haben diese leute die regel...
|
|
delfiphan
      
Beiträge: 2684
Erhaltene Danke: 32
|
Verfasst: Do 09.06.05 14:12
|
|
rennkuckuck 
      
Beiträge: 18
D5.0 Stand, D2005 Personal
|
Verfasst: Do 09.06.05 15:32
danke für eure antworten schonmal.
übrigends habe ich gerade gesehen dass es auch zeilen gibt bei denen buchstaben in der mitte oder am ende sind(diese zeilen müssen auch entfernt werden)also die sache dass es sich nur um den ersten buchstabe dreht ist jetzt auch nicht mehr gültig.....ich muss die ganze zeile überprüfen.
jetzt stehe ich schon wieder auf dem schlauch...könnt ihr gerade nochmal schreiben wie das jetzt geht wenn ich die ganze zeile überprüfen muss....?danke schonmal.
|
|
Tino
      

Beiträge: 9839
Erhaltene Danke: 45
Windows 8.1
Delphi XE4
|
Verfasst: Do 09.06.05 16:07
Ungefähr so (nicht getestet):
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| Function IstZifferInText (aSting: String): Boolean; Var Loop: Integer; Begin IstZifferInText := False;
For Loop := 0 To Length (aString) Do If not aString[Loop] in [#48..#57] Then Begin IstZifferInText := True; Break; End; End; |
|
|
delfiphan
      
Beiträge: 2684
Erhaltene Danke: 32
|
Verfasst: Do 09.06.05 19:37
Strings werden von 1 an indiziert und nicht 0. Ausserdem seh ich nicht ein, wieso man [#48..#57] schreibt, statt ['0'..'9']. Das Zweite ist intuitiver und unabhängig von irgendwelchen Tabellen. Ausserdem fehlt die Klammerung nach dem not (und es hat auch noch einen Schreibfehler in der Variable).
Deswegen nochmals:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| function IsNumeric(const AString: String): Boolean; var I: Integer; begin if Length(AString) = 0 then begin Result := False; exit; end; for I := 1 to Length(AString) do if not (AString[I] in ['0'..'9']) then begin Result := False; exit; end; Result := True; end; |
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Do 09.06.05 19:42
delfiphan hat folgendes geschrieben: | | Strings werden von 1 an indiziert und nicht 0. Ausserdem seh ich nicht ein, wieso man [#48..#57] schreibt, statt ['0'..'9']. Das Zweite ist intuitiver und unabhängig von irgendwelchen Tabellen. |
LOL, you saved my day. Sollte irgendjemad auf die Idee kommen, die ASCII Tabelle zu ändern, kannst du davon ausgehen, dass innerhalb kürzester Zeit der Informationsaustausch per Computer zusammenbricht.
|
|
alzaimar
      
Beiträge: 2889
Erhaltene Danke: 13
W2000, XP
D6E, BDS2006A, DevExpress
|
Verfasst: Do 09.06.05 19:53
 Luckie, aber Du hast nicht *ganz* verstanden, was das Wort "intuitiv" bedeutet. Obwohl die Sache mit den unabhängigen Tabellen schon zum Schmunzeln einlädt. Ich kann mir aber nicht vorstellen, das delphifan davon ausgeht, das die ASCII-Tabelle neu gemsicht wird (lustig wär's allemal). Ich glaube eher, er meinte das auch im übertragenen Sinn.
Immerhin, delphifan's Version lässt sich auch unter Linux fehlerfrei kompilieren. Und auf einer IBM VMS mit EBCDIC. Sofern Delphi dafür endlich verfügbar wird. In diesem Sinne: 
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Do 09.06.05 19:56
Das mit dem 'intuitiv' habe ich schon verstanden. Ich bezog mich auf die Aussage mit der ASCII Tabelle.
|
|
alzaimar
      
Beiträge: 2889
Erhaltene Danke: 13
W2000, XP
D6E, BDS2006A, DevExpress
|
Verfasst: Do 09.06.05 20:02
Is klar. Nich böse sein. Und nicht ernst nehmen. Bin grad Strohwitwer und darf die Kinder alleine versorgen 
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Do 09.06.05 20:05
Du auch? Ich habe gerade das Kaninchen meiner Freundin zur Pflege hier. Aber wir werden offtopic. 
|
|
delfiphan
      
Beiträge: 2684
Erhaltene Danke: 32
|
Verfasst: Do 09.06.05 20:16
Luckie hat folgendes geschrieben: | | LOL, you saved my day. Sollte irgendjemad auf die Idee kommen, die ASCII Tabelle zu ändern, kannst du davon ausgehen, dass innerhalb kürzester Zeit der Informationsaustausch per Computer zusammenbricht. |
Frage mich, wie du jetzt plötzlich auf die ASCII-Tabelle-Verändern Geschichte kommst. Ich sagte bloss, dass ich keinen Grund sehe, es abhängig von etwas zu machen, wenn es nicht nötig ist. Was ich ursprünglich meinte ist: Ist unabhängig von irgendwelchen Tabellen, man muss also nicht nachschauen.
Wenn du mal einen genialen Algorithmus erfinden würdest und den veröffentlichen würdest, würdest du dein Werk wohl auch so unabhängig von irgendwelchen Tabellen und Konventionen machen, wie möglich. Oder sehe ich das falsch?
Wie dem auch sei. Die Diskussion ist eigentlich sowieso überflüssig. War ja nur ein Teil einer Nebenbemerkung.
|
|
retnyg
      
Beiträge: 2754
SNES, GB, GBA, CPC, A500, 486/66, P4/3.0HT: NintendOS, AmigaOS, DoS
Delphi 5, Delphi 7
|
Verfasst: Do 09.06.05 22:33
Luckie hat folgendes geschrieben: | | Du auch? Ich habe gerade das Kaninchen meiner Freundin zur Pflege hier. |
süüüüüsss 
_________________ es gibt leute, die sind genetisch nicht zum programmieren geschaffen.
in der regel haben diese leute die regel...
|
|
rennkuckuck 
      
Beiträge: 18
D5.0 Stand, D2005 Personal
|
Verfasst: Fr 10.06.05 09:12
hallo
delphifan ich habe es mal mit vorlage deines codes probiert.sieht so aus:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| const
Zahl = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'];
var fw: TextFile; TS : String; I: Integer; -------------------
for I := 1 to Length(TS) do if (TS[I] in Zahl) then begin WriteLn(fw, TS); end; |
läuft zwar schön durch aber das ergebnis ist nicht zufriedestellend.
denn was hierbei passiert ist folgendes:
hier ein beispiel:
die eingelesen zeile ist so:
15K6
dann findet er beim ersten und zweiten und beim vierten zeichen ne zahl also schreibt er es auf.beim dritten findet er keine zahl also lässt er es da weg...und das ergebnis sieht dann so aus:
15K6
15K6
15K6
dabei soll diese zeile eigentlich gar nicht drin stehn weil sie ja ein buchstabe enthält.
@luckie schönes kaninchen...habe auch eins
Moderiert von Tino: Code- durch Delphi-Tags ersetzt.
|
|
Sprint
      
Beiträge: 849
|
Verfasst: Fr 10.06.05 09:18
Wenn eine Zahl gefunden worden ist, musst du auch aus deiner for Schleife springen. z.B. mit Break.
_________________ Ciao, Sprint.
|
|
Heiko
      
Beiträge: 3169
Erhaltene Danke: 11
|
Verfasst: Fr 10.06.05 09:35
Warum macht ihr es euch so schwer mit der Überprüfung, ob etwas anderes als Zahlen eingegeben sind oder nicht. Versucht es mal damir
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9:
| var ZwischenInt: Integer; Text: String; begin Text:=15K6; if not StrToInt(Text, ZwischenInt) then begin ShowMessage(Text+' ist keine gültige Integerzahl!') end; end |
Zuletzt bearbeitet von Heiko am Fr 10.06.05 09:40, insgesamt 1-mal bearbeitet
|
|
Stefan.Buchholtz
      
Beiträge: 612
WIN 2000, WIN XP, Mac OS X
D7 Enterprise, XCode, Eclipse, Ruby On Rails
|
Verfasst: Fr 10.06.05 09:39
Luckie hat folgendes geschrieben: | delfiphan hat folgendes geschrieben: | | Strings werden von 1 an indiziert und nicht 0. Ausserdem seh ich nicht ein, wieso man [#48..#57] schreibt, statt ['0'..'9']. Das Zweite ist intuitiver und unabhängig von irgendwelchen Tabellen. |
LOL, you saved my day. Sollte irgendjemad auf die Idee kommen, die ASCII Tabelle zu ändern, kannst du davon ausgehen, dass innerhalb kürzester Zeit der Informationsaustausch per Computer zusammenbricht. |
Auf Portabilität zu achten ist nie verkehrt - und nicht alle Rechnersysteme verwenden ASCII. Die ['0'..'9'] Variante funktioniert auch mit EBDIC oder UTF-16. Das heute geschriebener Code irgendwann mal mit Unicode-Strings arbeiten muss, ist schließlich nicht so abwegig.
Ganz davon abgesehen ist ['0'..'9'] auch noch leichter verständlich - nicht jeder hat die ASCII-Tabelle im Kopf.
Stefan
|
|