Autor Beitrag
rennkuckuck
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 18


D5.0 Stand, D2005 Personal
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 849



BeitragVerfasst: Do 09.06.05 14:04 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
  if Length(S) > 0 then
    case S[1of
      '0'..'9': ShowMessage('Erstes Zeichen ist eine Zahl');
    end;

_________________
Ciao, Sprint.
retnyg
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2754

SNES, GB, GBA, CPC, A500, 486/66, P4/3.0HT: NintendOS, AmigaOS, DoS
Delphi 5, Delphi 7
BeitragVerfasst: Do 09.06.05 14:04 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
function isFirstLetterZahl(s:string):boolean;
begin
  case s[1of '0'..'9': result := true;
  else result := false;
  end;
end;

edit: hochkomma vergessn :roll:

_________________
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



BeitragVerfasst: Do 09.06.05 14:04 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
const
  foo = 'a456984';
var
  s: String;
begin
  s := foo;
  if s[1in [#48..#57then
    ShowMessage('Ziffer')
  else
    ShowMessage('Buchstabe');
retnyg
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2754

SNES, GB, GBA, CPC, A500, 486/66, P4/3.0HT: NintendOS, AmigaOS, DoS
Delphi 5, Delphi 7
BeitragVerfasst: Do 09.06.05 14:05 
löl :lol:

_________________
es gibt leute, die sind genetisch nicht zum programmieren geschaffen.
in der regel haben diese leute die regel...
delfiphan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2684
Erhaltene Danke: 32



BeitragVerfasst: Do 09.06.05 14:12 
;) Ich fasse also nochmals zusammen:
ausblenden 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:
var
 ALine: String;
begin
  ALine := 'Teststring';

  Assert(Length(ALine)>=1);

// Möglichkeit 1
  Case ALine[1of
   'a'..'z','A'..'Z':
     ShowMessage('Buchstabe!');
   '0'..'9':
     ShowMessage('Zahl!')
   else
     ShowMessage('Error!');
  end;

// Möglichkeit 2
  if ALine[1in Buchstabe then
   ShowMessage('Buchstabe!')
  else if ALine[1in Zahl then
   ShowMessage('Zahl!')
  else
   ShowMessage('Error');
  
// wobei
const
 Buchstabe = ['a'..'z','A'..'Z'];
 Zahl = ['0'..'9'];
rennkuckuck Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 18


D5.0 Stand, D2005 Personal
BeitragVerfasst: Do 09.06.05 15:32 
danke für eure antworten schonmal. :D


ü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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Veteran
Beiträge: 9839
Erhaltene Danke: 45

Windows 8.1
Delphi XE4
BeitragVerfasst: Do 09.06.05 16:07 
Ungefähr so (nicht getestet):
ausblenden 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..#57Then
      Begin
        IstZifferInText := True;
        Break;
      End;
End;
delfiphan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2684
Erhaltene Danke: 32



BeitragVerfasst: 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:
ausblenden 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



BeitragVerfasst: Do 09.06.05 19:42 
user profile icondelfiphan 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2889
Erhaltene Danke: 13

W2000, XP
D6E, BDS2006A, DevExpress
BeitragVerfasst: Do 09.06.05 19:53 
:flehan: 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: :beer:
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2889
Erhaltene Danke: 13

W2000, XP
D6E, BDS2006A, DevExpress
BeitragVerfasst: 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 :nut:
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Do 09.06.05 20:05 
Du auch? Ich habe gerade das Kaninchen meiner Freundin zur Pflege hier. Aber wir werden offtopic. ;)
delfiphan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2684
Erhaltene Danke: 32



BeitragVerfasst: Do 09.06.05 20:16 
user profile iconLuckie 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2754

SNES, GB, GBA, CPC, A500, 486/66, P4/3.0HT: NintendOS, AmigaOS, DoS
Delphi 5, Delphi 7
BeitragVerfasst: Do 09.06.05 22:33 
user profile iconLuckie hat folgendes geschrieben:
Du auch? Ich habe gerade das Kaninchen meiner Freundin zur Pflege hier.

süüüüüsss :mrgreen:

_________________
es gibt leute, die sind genetisch nicht zum programmieren geschaffen.
in der regel haben diese leute die regel...
rennkuckuck Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 18


D5.0 Stand, D2005 Personal
BeitragVerfasst: Fr 10.06.05 09:12 
hallo
delphifan ich habe es mal mit vorlage deines codes probiert.sieht so aus:


ausblenden 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);                 {  schreibe TS in die Datei }
          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: :o

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 :D

Moderiert von user profile iconTino: Code- durch Delphi-Tags ersetzt.
Sprint
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 849



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3169
Erhaltene Danke: 11



BeitragVerfasst: 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

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 612

WIN 2000, WIN XP, Mac OS X
D7 Enterprise, XCode, Eclipse, Ruby On Rails
BeitragVerfasst: Fr 10.06.05 09:39 
user profile iconLuckie hat folgendes geschrieben:
user profile icondelfiphan 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. :wink:

Stefan