Autor Beitrag
BlauBeer
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Fr 08.10.10 10:38 
in der Schule lernen wir gerade Delphi (Borland Delphi 5.0 (build 5.6.2)), da ich ausschließlich Linux benutze verwende ich Lazarus 0.9.29

wir sollen an einem einfachen Beispiel demonstrieren, dass wir die Grundlagen von Stringverarbeitung verstanden haben - theoretisch müsste es funktionieren, bis auf ein paar Stellen:

ausblenden volle Höhe 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:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
...

procedure TForm1.cmdInsClick(Sender: TObject);
var str,strIns: String;
var s: Integer;
begin
  str:=txtWortein.Text;
  strIns:=txtInsert.Text;
  If ((str<>''And (strIns<>''))Then
      begin
          s:=StrToInt(txtStelle.Text);                                            //Programmabsturz wenn s keine Zahl ist!!!
          If (0<s) And (s<(length(str)+1)) Then
              ShowMessage('Der neue Text: '+Insert(strIns,str,length(str)))       //Falscher Typ (untyped expected AnsiString)???
          Else
              ShowMessage('Fehlerhafte Stelle!')
      end
  Else
      ShowMessage('Keine Eingabe oder kein einzufügender Text!');
end;

...
                                                                                                                                 
procedure TForm1.cmdDelClick(Sender: TObject);                                                                                   
var str: String;                                                                                                                 
var s,l: Integer;                                                                                                                
begin                                                                                                                            
  str:=txtWortein.Text;                                                                                                          
  If (str<>'')Then                                                                                                               
      begin                                                                                                                      
          s:=StrToInt(txtStelle.Text);                                            //Programmabsturz wenn s keine Zahl ist!!!     
          If (0<s) And (s<(length(str)+1)) Then                                                                                  
             begin                                                                                                               
                 l:=StrToInt(txtAnzahl.Text);                                     //Programmabsturz wenn l keine Zahl ist!!!     
                 If (0<l) And (l<length(str)+1-s) Then                                                                           
                    ShowMessage('Der neue Text: '+Delete(str,s,l+s))              //Falscher Typ (untyped expected AnsiString)???
                 Else                                                                                                            
                     ShowMessage('Fehlerhafte Länge!')                                                                           
             end                                                                                                                 
          Else                                                                                                                   
              ShowMessage('Fehlerhafte Stelle!')                                                                                 
      end                                                                                                                        
  Else                                                                                                                           
      ShowMessage('Keine Eingabe!');                                                                                             
end;

...

Die Fehlermeldung (Zeilen angepasst):
ausblenden Delphi-Quelltext
1:
2:
3:
unit1.pas(13,45) Error: Incompatible types: got "untyped" expected "AnsiString"
unit1.pas(35,51) Error: Incompatible types: got "untyped" expected "AnsiString"
unit1.pas(277) Fatal: There were 2 errors compiling module, stopping


Zuletzt bearbeitet von BlauBeer am Sa 09.10.10 18:06, insgesamt 1-mal bearbeitet
MaxWurzel
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 77
Erhaltene Danke: 10



BeitragVerfasst: Fr 08.10.10 10:50 
procedure Insert(Source: string; var S: string; Index: Integer); hat keinen Rückgabewert. Versuch mal folgendes:
ausblenden Delphi-Quelltext
1:
2:
Insert(strIns,str,s);
ShowMessage('Der neue Text: '+str);
ALF
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1085
Erhaltene Danke: 53

WinXP, Win7, Win10
Delphi 7 Enterprise, XE
BeitragVerfasst: Fr 08.10.10 10:51 
Hi und :welcome:
Schau mal was es darüber schon gibt nur Zahlen zulassen in einem Editfeld
Sieht komisch aus?
ausblenden Delphi-Quelltext
1:
If (0<s) And (s<(length(str)+1)) Then					

aber Stringverarbeitung, hat nicht nur was mit Zahleneingabe zu tun. Oder habe ich Deine Hausaufgabe falsch verstanden?

Gruss Alf

_________________
Wenn jeder alles kann oder wüsste und keiner hätt' ne Frage mehr, omg, währe dieses Forum leer!
Bergmann89
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1742
Erhaltene Danke: 72

Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
BeitragVerfasst: Fr 08.10.10 19:03 
Hey,

eine Anwendung, die abstützt, oder mit Fehlern um sich schmeißt ist nicht so schön. Speziell für dein Programm gibt es in Delphi 3 einfache Methoden die Fehler zu umgehen:
1. Lösung: Fehler abfangen und ordentliche Meldung ausgeben:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
try
  s := StrToInt(Edit1.Text);
except
  ShowMessage('Sie müssen eine Zahl eingeben!');
end;


2. Lösung: Fehler ignorieren:
ausblenden Delphi-Quelltext
1:
  s := StrToIntDef(Edit1.Text, 0);					


3. und besste Lösung: voher prüfen und dementsprechend handeln:
ausblenden Delphi-Quelltext
1:
2:
  if not TryStrToInt(Edit1.Text, s) then
    ShowMessage('Sie müssen eine Zahl eingeben!');


MfG Bergmann.

_________________
Ich weiß nicht viel, lern aber dafür umso schneller^^
BlauBeer Threadstarter
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Sa 09.10.10 10:48 
vielen Dank, es funktioniert :D