AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Warum stürzt es immer ab?

Ein Thema von reyka · begonnen am 2. Dez 2008 · letzter Beitrag vom 3. Dez 2008
Antwort Antwort
Seite 3 von 3     123   
reyka

Registriert seit: 17. Sep 2008
53 Beiträge
 
#21

Re: Warum stürzt es immer ab?

  Alt 2. Dez 2008, 21:08
nein ^^ wo wir wieder da sind Stringlist scheidet aus -> hab Delphi 4, Explode() und Pos() versteh ich nich ... es gibt nirgends eine Idioten/Änfänger-erklärung (Nein, das in der CL versteh ich nich )
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#22

Re: Warum stürzt es immer ab?

  Alt 2. Dez 2008, 21:12
Pos() liefert dir die 1. Position eines Teilstrings innerhalb eines String zurück:

p := Pos( ' ', s); liefert dir die Position des 1. Leerzeichens

PosEx() macht das Ganze mit Offset
Markus Kinzler
  Mit Zitat antworten Zitat
Blackheart

Registriert seit: 4. Mai 2005
846 Beiträge
 
Delphi 7 Enterprise
 
#23

Re: Warum stürzt es immer ab?

  Alt 2. Dez 2008, 21:15
Schau mal hier.
Pos & Copy
Blackheart
  Mit Zitat antworten Zitat
hurzli

Registriert seit: 29. Okt 2004
6 Beiträge
 
Delphi 2007 Professional
 
#24

Re: Warum stürzt es immer ab?

  Alt 2. Dez 2008, 21:15
Leider kann man nur erahnen, was das Beispiel tun soll.
Man hat mir heute auch schon hier geholfen, das wird nun meine gute Tat für heute.

Erst habe ich einmal eine übersichtliche Einrückung verwendet.
Deinen Quellcode kann man (respektive ich und mein Vorredner/-schreiber auch) nicht lesen.
Scheinbar du selbst auch nicht, denn es ist lauter überflüssiges Zeug darin enthalten.
Und die Benennung der Variablen solltest du auch sprechender wählen.
Sonst guckst du in einem Monat wieder auf diese Zeilen und fragst dich, was das um Himmels Willen sein soll.
Kommentare, sprechende Variablennamen und Leerzeichen sind auf Dauer hilfreich!

Zum Code:

Warum nichts passiert ? until s[i] = ''; 1. Der Zähler [i] wird nie erhöht ==> der Klassiker, die Endlosschleife. Das ist eigentlich schon genug. Und 2. s[i] kann NIEMALS '' sein!
Also: wenn die Endlosschleife nicht reicht, setzt man eben noch eine unerfüllbare Abbruchbedingung obendrauf !
(Für die einzeilige, doppelte Endlosschleife sollte man eigentlich einen Preis vergeben )
Genug jetzt!

Wenn ich den Code richtig interpretiert habe, willst du damit alle Ziffern aus einem String in einen anderen übertragen.
[z] konnte ich nicht finden, desshalb habe ich diese Variable als String definiert.
Den String [s] hole ich nicht aus einem Edit-Feld sondern setze ihn für das Beispiel direkt in der Funktion.
Übrig bleibt folgender Code. Ich habe absichtlich die auskommentierten Zeilen drin gelassen, damit du die Fehler sehen kannst.

Delphi-Quellcode:
uses ...., Dialogs, ...;

procedure TForm1.Button1Click(Sender: TObject);

var
   len,{j,}
   i{,x}     : integer;
   s : string;
   z : string;
   iErg : integer;

begin
// j := 0;
// s:=edit1.text;
   s := 'Hallali_123_hallo*45*lala-678?(uiui)-90';
   len := Length( s );
// for i := 0 to l - 1 do
   for i := 1 to len do
      begin
// repeat
            if( s[ i ] in [ '0'..'9' ] ) then
               begin
// SetLength( z, j + 1 ); // ist z ein Array ? Dann SetLength verwenden !
// z[ j ] := z[ j ] + s[ i ]; // <== ????
                  z := z + s[ i ]; // <== meinst du das ?
               end;
// until s[ i ] = '';

// j := j + 1;

      end;

    // Nachdem keine Vorzeichen berücksichtigt werden, kann der Wert NIE kleiner 0 werden.
    // ==> -1 ist das Ergebnis, wenn im String keine Ziffern enthalten waren.
   iErg := StrToIntDef( z, -1 );

   ShowMessage( Format( 'Ergebnis z : [%s], iErg : [%d]', [ z, iErg ] ));

end;
Das sollte es gewesen sein.

Grüßle
hurzli
  Mit Zitat antworten Zitat
reyka

Registriert seit: 17. Sep 2008
53 Beiträge
 
#25

Re: Warum stürzt es immer ab?

  Alt 2. Dez 2008, 21:34
ja gut mit dem Code bekomme ich ALLE zahlen in eine Variable will aber jeden "Zahlen" Block in eine extra Variable speichern deshalb hatte ich auch z als Array festgelegt!

wie sähe das aus?
  Mit Zitat antworten Zitat
oldmax

Registriert seit: 27. Apr 2006
Ort: Gieboldehausen
167 Beiträge
 
#26

Re: Warum stürzt es immer ab?

  Alt 3. Dez 2008, 06:02
Hi
Letzter Vorschlag war ja nicht schlecht, aber eben etwas unvollständig. Im Grundgerüst können wir schon den Code lassen, aber wenn du zusammenhängende Zahlen erkennen und in ein Array schreiben willst, dann solltest du auch mal ganz einfach und unkompliziert daran denken, wie du aus dem Text die Zahlen filterst. Genau das ist mit einem PC nachzubilden...
also:
es existiert ein globales Array Z für die Zahlen.

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  len : Integer;
  i : integer;
  j : Integer;
  s : string;
  ZahlStr : String;
begin
  j := 1; // Zeiger auf 1. Arrayfeld
  s:=edit1.text; // hab ich mal so übernommen
  ZahlStr:=''; // der ist ersmal ganz leer
  len := Length( s ); // nun hab ich die Anzahl der Zeichen im String
  for i := 1 to len do // und damit untersuch ich jedes einzelne Zeichem
  begin
    if( s[ i ] in [ '0'..'9' ] ) then ZahlStr:=ZahlStr+'s[i]; // wenn Zahl dann an den Zahlstr
If (ZahlStr<>
'') and (( S[i]<'0') or ( S]i]>'9') or (i=Len)) then // hier den Wechsel von Zahl auf Char erkennen
begin
Z[j]:=ZahlStr; // und Zahlstr ins Array eintragen
ZahlStr:=
''; // Zahlstr wieder leeren
Inc(j); // Index vom Array erhöhen....
end;
end;
end;
die Abfrage erklär ich mal:
Delphi-Quellcode:
If (ZahlStr<>'') // Zahlstr ist nicht leer, das gilt immer
and
(( S[i]<'0') // Zeichen ist <'0' also unterhalb vom Zahlenbereich
or ( S]i]>'9') // Zeichen ist >'9', also oberhalb vom Zahlenbereich
or (i=Len)) // oder das letzte Zeichen im String, falls der String mit Zahl endet
then
Nun mußt du nur noch sicherstellen, das du entweder nicht mehr als 3 Zahlenn im String hast, oder dein Array entsprechend größer ist. Außerdem, zum Rechnen mußt du die Strings in Zahlen wandeln.....
Gruß oldmax
Noch ist mein Rechner mir zu Diensten.... ansonsten habe ich die Macht ihn zu vernichten !
  Mit Zitat antworten Zitat
reyka

Registriert seit: 17. Sep 2008
53 Beiträge
 
#27

Re: Warum stürzt es immer ab?

  Alt 3. Dez 2008, 15:34
Hat geklappt!! Danke dir sind noch 2 Schreibfehler drin

if( s[ i ] in [ '0'..'9' ] ) then ZahlStr:=ZahlStr+'s[i]; // wenn Zahl dann an den Zahlstr Da muss das Hochkomma vor dem s weg[/delphi]

or ( S]i]>'9') // Zeichen ist >'9', also oberhalb vom Zahlenbereich Dort muss die klammer vor dem i um gedreht werden.


Super Oldmax, danke dir wirklich unglaublich !!
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 3     123   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:38 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz