Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   String prüfen durch eine if anweisung und dann kopieren (https://www.delphipraxis.net/170398-string-pruefen-durch-eine-if-anweisung-und-dann-kopieren.html)

Alterauge 15. Sep 2012 09:27

String prüfen durch eine if anweisung und dann kopieren
 
so geht es nicht !

Delphi-Quellcode:
procedure TForm1.AdvGlowButton6Click(Sender: TObject);
 var
  s, d, e : String;

begin
//MessageDlg('Einsatznummer Leitstelle'+#10#13+'wirklich ändern ?', mtConfirmation, mbYesNo, 0) = mrYes then begin
if (s = MyTable2.FieldByName('Meldung').Text) and (d = '**') then begin
MyTable2.Edit;
  s := MyTable2.FieldByName('Meldung').Text;
  d := '**';
  Delete(s, 1, Pos(d, s) - 1 + Length(d));
  while Pos(#10, s) > 0 do Delete(s, Pos(#10, s), 1);
  while Pos(#13, s) > 0 do Delete(s, Pos(#13, s), 1);
  s := Trim(s);
  MyTable2.FieldByName('E.-Nr:').Text := Copy(MyTable2.FieldByName('Meldung').Text, Length (MyTable2.FieldByName('Meldung').Text+(s))-9, 10)+(s);
MyTable2.Post;
DBedit1.ReadOnly:=false;
end else begin
if d = '*' then begin
MyTable2.Edit;
 s := MyTable2.FieldByName('Meldung').Text;
  d := '*';
  Delete(s, 1, Pos(d, s) - 1 + Length(d));
  while Pos(#10, s) > 0 do Delete(s, Pos(#10, s), 1);
  while Pos(#13, s) > 0 do Delete(s, Pos(#13, s), 1);
  s := Trim(s);
  MyTable2.FieldByName('E.-Nr:').Text := Copy(MyTable2.FieldByName('Meldung').Text, Length (MyTable2.FieldByName('Meldung').Text+(s))-9, 10)+(s);
MyTable2.Post;
DBedit1.ReadOnly:=false;
end;
end;
end;
ohne eine if anweisung geht es!

Delphi-Quellcode:
MyTable2.Edit;
  s := MyTable2.FieldByName('Meldung').Text;
  d := '**';
  Delete(s, 1, Pos(d, s) - 1 + Length(d));
  while Pos(#10, s) > 0 do Delete(s, Pos(#10, s), 1);
  while Pos(#13, s) > 0 do Delete(s, Pos(#13, s), 1);
  s := Trim(s);
  MyTable2.FieldByName('E.-Nr:').Text := Copy(MyTable2.FieldByName('Meldung').Text, Length (MyTable2.FieldByName('Meldung').Text+(s))-9, 10)+(s);
MyTable2.Post;
DBedit1.ReadOnly:=false;
was muss ich ändern?

DeddyH 15. Sep 2012 09:53

AW: String prüfen durch eine if anweisung und dann kopieren
 
Welchen Wert hat denn s, wenn Du ihn vergleichst? Ich kann da nirgends eine Zuweisung erkennen.

[edit] Das könnte man auch schön mit dem Debugger prüfen, das Ding ist kein Hexenwerk, das darf man ruhig benutzen. [/edit]

lbccaleb 15. Sep 2012 09:58

AW: String prüfen durch eine if anweisung und dann kopieren
 
Zitat:

Zitat von Alterauge (Beitrag 1182958)
so geht es nicht !

Delphi-Quellcode:
...
if (s = MyTable2.FieldByName('Meldung').Text) and (d = '**') then begin
...
was muss ich ändern?

Weder s noch d beinhalten Daten...

Bjoerk 15. Sep 2012 10:04

AW: String prüfen durch eine if anweisung und dann kopieren
 
Delphi-Quellcode:
  S:=
  D:=
  if (s = MyTable2.FieldByName('Meldung').Text) and (d = '**') then
  begin
    ShowMessage(S + sLineBreak + D);
    ..

Alterauge 15. Sep 2012 10:13

AW: String prüfen durch eine if anweisung und dann kopieren
 
Also hier ein Beispiel 1 für das Feld 'Meldung'!

Feuerwehr Einsatz * Testhausen * Testdorfstrasse 15 **12346789

Beispiel 2 für das Feld 'Meldung' !

Feuerwehr Einsatz * Testhausen * Testdorfstrasse 15 * bei Meier *12346789

Ich möchte einfach nur die Einsatznummer 123456789 übernehmen!
Delphi-Quellcode:
procedure TForm1.AdvGlowButton6Click(Sender: TObject);
 var
  s, d: String;
begin
MyTable2.Edit;
 s := MyTable2.FieldByName('Meldung').Text;
 d := '**';
  Delete(s, 1, Pos(d, s) - 1 + Length(d));
  while Pos(#10, s) > 0 do Delete(s, Pos(#10, s), 1);
  while Pos(#13, s) > 0 do Delete(s, Pos(#13, s), 1);
  s := Trim(s);
  MyTable2.FieldByName('E.-Nr:').Text := Copy(MyTable2.FieldByName('Meldung').Text, Length (MyTable2.FieldByName('Meldung').Text+(s))-9, 10)+(s);
MyTable2.Post;
DBedit1.ReadOnly:=false;
So geht es mit '**' aber es soll auch bei einem '*' gehen!
Also eine if Anweisung oder?

mkinzler 15. Sep 2012 10:26

AW: String prüfen durch eine if anweisung und dann kopieren
 
Warum so kompliziert?
Was soll das Löschen von '**' wenn es gar nicht Teil des Stringes ist?
Warum While-Schleifen um Zeichen zu Ersetzen, welche nicht Teil des Strings sind?
Warum trennst du den String nicht anhand vorhandener Delimitern?

Bummi 15. Sep 2012 10:28

AW: String prüfen durch eine if anweisung und dann kopieren
 
while pos('*',s) do ......

oder gleich von hinter reinlaufen ....

DeddyH 15. Sep 2012 10:28

AW: String prüfen durch eine if anweisung und dann kopieren
 
Wäre es nicht besser, die DB zu normalisieren anstatt hier wilde Stringoperationen durchzuführen? Für mich sieht das so aus, als würden mehrere Werte in einem Feld gespeichert, das verletzt die 1. Normalform.

mkinzler 15. Sep 2012 10:51

AW: String prüfen durch eine if anweisung und dann kopieren
 
Er weiss sicherlich überhaput nicht, wovon wir Reden, und noch Schlimmer, er scheint ihn auch nicht zu Jucken!
In seinem diversen Fragen hat man ihm viele Fehler verbessert, Verbesserungsvorschläge gemacht und Tipps gegeben.
Aber er hat keinen der Verbesserungsvorschläge umgesetzt noch beherzigt er unsere Tipps!
Im fehlt Grundlagenwissen in sämtlichen Bereichen und er sieht auch keinen Sinn darin, sich dieses notwendige Wissen zu beschaffen!

Alterauge 15. Sep 2012 11:40

AW: String prüfen durch eine if anweisung und dann kopieren
 
herr mkinzler, wieso haben sie eigentlich immer so eine negative einstellung?

natürlich versuche ich alles zu verstehen!
nehme auch eure vorschläge an!

aber geben sie mir die zeit , diese dinge umzusetzen, zu testen und
natürlich zu verstehen!

kann nicht immer sofort antworten! dann teste ich gerade was!

danke

Alterauge 15. Sep 2012 12:56

AW: String prüfen durch eine if anweisung und dann kopieren
 
Hallo,

habe ein wenig über Trim gelsen,
da nicht immer alle zehen Zeichen copiert werden! (ich denke, da sind leer Zeichen im Spiel!)

Habe zur Zeit diesen Code, wie gesagt zur 90% copiert er 10 Zeichen!
Wie muß ich den Code umstellen?
Delphi-Quellcode:
procedure TForm1.AdvGlowButton3Click(Sender: TObject);
begin
MyTable2.Edit;
  MyTable2.FieldByName('E.-Nr:').Text := Copy(MyTable2.FieldByName('Meldung').Text, Length (MyTable2.FieldByName('Meldung').Text)-9, 10);
   MyTable2.Post;
end;

Furtbichler 15. Sep 2012 13:00

AW: String prüfen durch eine if anweisung und dann kopieren
 
Ich erinnere
Zitat:

Zitat von Alterauge (Beitrag 1182979)
Ich möchte einfach nur die Einsatznummer 123456789 übernehmen!

Die Antworten:
Zitat:

Zitat von mkinzler (Beitrag 1182983)
Warum so kompliziert?

Zitat:

Zitat von DeddyH (Beitrag 1182985)
Wäre es nicht besser, die DB zu normalisieren ...das verletzt die 1. Normalform.

Get noch, ist auf jeden Fall freundlich.
Aber die Krönung:
Zitat:

Zitat von mkinzler (Beitrag 1182987)
Er weiss sicherlich überhaput nicht, wovon wir Reden, und noch Schlimmer, er scheint ihn auch nicht zu Jucken!

So ihr Profis: Auf der einen Seite trötet ihr von Nettiquette und wie man Forenbeiträge beantworten sollte bzw. regt euch auf, wenn man euren hohen Erwartungen nicht gerecht wird und auf der anderen Seite beantwortet ihr nicht einmal eine sehr einfache Frage oder geht einfach auf das Problem ein. Stattdessen zeigt ihr mit dem Finger auf vermeindliche Fehler oder mäkelt am bisherigen Lösungsweg herum und verwechselt Anfängerprobleme mit Kritikresistenz.

Toll, das ihr die volle Ahnung habt und toll, das ihr bei jeder Frage antwortet. Vielleicht wäre hier zur Abwechslung Klasse besser als Masse.

Das Problem lautet (wer lesen kann, ist klar im Vorteil)
Zitat:

Ich möchte einfach nur die Einsatznummer 123456789 übernehmen!
Sie lautet nicht "Wie verbessere ich meine DB-Struktur" und auch nicht "Was mache ich falsch". Klar, es wurde Code gepostet, aber dann geht wenigstens direkt und konstruktiv darauf ein.

Die imho direkte, höfliche und jegliche Kritik vermeidende Antwort würde lauten (Tataa):
Um die Einsatznummer zu übernehmen, könntest Du, von hinten beginnend, nach dem Trenner suchen und dann alles rechts davon herauskopieren, etwa so:
Delphi-Quellcode:
// Wenn der String 'abcXX123' ist und der Trenner='XX', dann liefert die
// Funktion als Resultat '123' und der String ist hinterher 'abc'
Function LetzterTeilstring(Var DerString : String; Trenner : String) : String;
Var
  i, trennerLaenge : Integer;
Begin
  trennerLaenge := Length(Trenner);
  i := Length(DerString) - trennerLaenge;
  While (i>trennerLaenge) And (Copy (DerString,i-trennerLaenge, trennerLaenge)<>Trenner) do dec(i);
  // i zeigt nun auf das 1.Zeichen des letzten
  if (i<=trennerLaenge) then begin
    result := TeilString;
    DerString := '';
    end
  else begin
    result := Copy(DerString,i,maxint);
    TeilString := Copy(DerString,1,i-trennerLaenge-1);
  end
end;
(Ungetestet)

Ein Moderator sollte im Übrigen moderieren und sich nicht über die etwaige Kritikresistenz anderer öffentlich äußern (speziell Nicht-Profis gegenüber), obwohl letzteres auch für Normalsterbliche gilt. Für direkte Kritik gibt es die 'PN'. Das hätte Niveau. (Und: "Ja", die eigene Nase, ich weiß).

Vielleicht denken die Angesprochen einmal über das Prädikat: "Arroganz" bzw. "Überheblichkeit" nach. Ich tue das jedenfalls, da ich diesbezüglich hier und da gerüffelt wurde.

@AlterAuge: Dein neuer Code funktioniert nicht, wenn die Einsatznummer einmal nicht 10 Zeichen beträgt.

Auch wenn ich die Art der Kritik von DeddyH (dem man aber eigentlich nichts vorwerfen kann) nicht zielführend finde, hat er in jedem Fall recht: Das mit der Datenbankstruktur ist nicht robust. Versuche mal, diese '*' Geschichte durch einzelne Eingabefelder zu lösen. Oder sind das Daten, die schon so vorhanden sind?

Alterauge 15. Sep 2012 13:43

AW: String prüfen durch eine if anweisung und dann kopieren
 
Hallo,
erstmal viellen Dank, für Deine Aufmerksamkeit!

Ich bekomme den Text, so geliefert bzw.übermittelt!
Der Text befindet sich dann in einem Memo!

Als Beispiel:
Feuerwehr Einsatz*Testhausen*Testdorfstraße66*Feuer1*bei Müller*123456789 // hier mit Name (Müller)*
oder es ist auch möglich!
Feuerwehr Einsatz*Testhausen*Testdorfstraße66*Feuer1**123456 789 // hier ohne Namen **

So die Einsatznummer hat immer zehn Zeichen! Aber ich vermute, dass hin und wieder mal, hinter der Einsatznummer sich leer Zeichen befinden!

Das zweite Problem ist der Trenner mit '*'! Dieser Trenner kommt öfters vor!
Beim Trenner '**' würde es gehen!



Danke!

Helmi 15. Sep 2012 14:25

AW: String prüfen durch eine if anweisung und dann kopieren
 
wie wärs damit:

Delphi-Quellcode:
var
  SL: TStringList;
begin
  SL := TStringList.Create;

  try
    SL.StrictDelimiter := true;
    SL.Delimiter      := '*';

    SL.DelimitedText := 'Feuerwehr Einsatz*Testhausen*Testdorfstraße66*Feuer1*bei Müller*123456789'; // hier mit Name (Müller)*

    //geht auch ohne Namen
    //Feuerwehr Einsatz*Testhausen*Testdorfstraße66*Feuer1**123456 789 // hier ohne Namen **

    ShowMessage(SL.Strings[Pred(SL.Count)]);
  finally
    FreeAndNil(SL);
  end;
end;
In der SL stehen dann die einzelnen Bereiche je als eigene Zeile und die letzte Zeile ist die Nummer

Alterauge 15. Sep 2012 14:37

AW: String prüfen durch eine if anweisung und dann kopieren
 
Helmi,

Du wirst es nicht glauben!
Es geht!

Danke!:lol::lol::lol::lol:

Helmi 15. Sep 2012 14:41

AW: String prüfen durch eine if anweisung und dann kopieren
 
Zitat:

Zitat von Alterauge (Beitrag 1183022)
Du wirst es nicht glauben!
Es geht!

Danke!:lol::lol::lol::lol:

Ich weiss! :mrgreen:
Gern geschehen

Ich nutz die StringList gerne mal als Trenner - erspart man sich viel String-Arbeit

DeddyH 15. Sep 2012 16:27

AW: String prüfen durch eine if anweisung und dann kopieren
 
@Furtbichler: wenn jemand schreibt, dass er einen stinkenden Fisch im Kühlschrank hat, diesen deshalb in eine Plastiktüte einpacken will und daher fragt, welche Sorte Plastiktüten besonders geeignet ist, dann kann man ihm entweder eine Marke empfehlen oder ihm stattdessen vorschlagen, den Fisch gegen einen frischen auszutauschen. Ich würde immer die 2. Variante wählen, ob Du das nun zielführend findest oder nicht :roll:

haentschman 15. Sep 2012 16:32

AW: String prüfen durch eine if anweisung und dann kopieren
 
@DeddyH: Erfahrungswerte ??? :lol:

EWeiss 15. Sep 2012 16:46

AW: String prüfen durch eine if anweisung und dann kopieren
 
Zitat:

Vielleicht denken die Angesprochen einmal über das Prädikat: "Arroganz" bzw. "Überheblichkeit" nach. Ich tue das jedenfalls, da ich diesbezüglich hier und da gerüffelt wurde.
Ah jo also doch noch nicht so Alt um dazu zu lernen ;) (IRONIE) wie auch immer.

gruss

mkinzler 16. Sep 2012 15:35

AW: String prüfen durch eine if anweisung und dann kopieren
 
Zitat:

Zitat von Alterauge (Beitrag 1182993)
herr mkinzler, wieso haben sie eigentlich immer so eine negative einstellung?

Das macht das Leben halt aus einem.
Zitat:

natürlich versuche ich alles zu verstehen!
nehme auch eure vorschläge an!
Und deshalb hast du auch die einfachsten Dinge, die man dir gesagt hat noch nicht umgesetzt?

Aber du hast Recht, ich hätte mich einfach zurückziehen sollen, wie viele andere, die versucht haben dir zu Helfen, anstatt hier meinen Frust, über mich selbst, der die Hoffnung gehabt hat, das du deinen Versprechungen, dich mit unseren Antworten und Tipps zu beschäftigen uach Taten folgen.

Zitat:

Zitat von http://www.delphipraxis.net/members/66845-furtbichler.html
So ihr Profis: Auf der einen Seite trötet ihr von Nettiquette und wie man Forenbeiträge beantworten sollte bzw. regt euch auf, wenn man euren hohen Erwartungen nicht gerecht wird und auf der anderen Seite beantwortet ihr nicht einmal eine sehr einfache Frage oder geht einfach auf das Problem ein. Stattdessen zeigt ihr mit dem Finger auf vermeindliche Fehler oder mäkelt am bisherigen Lösungsweg herum und verwechselt Anfängerprobleme mit Kritikresistenz.

Es geht hier nicht nur um die Frage, sondern auch darum, wie er auf Tipps von anderen (nicht) reagiert hat.

http://www.delphipraxis.net/170361-i...t-aendern.html

Zitat:

Toll, das ihr die volle Ahnung habt und toll, das ihr bei jeder Frage antwortet. Vielleicht wäre hier zur Abwechslung Klasse besser als Masse.
Na dann hätte ich ja noch nie eine Antwort Posten können.
Zitat:

Ein Moderator sollte im Übrigen moderieren und sich nicht über die etwaige Kritikresistenz anderer öffentlich äußern (speziell Nicht-Profis gegenüber)
Ja ein Moderator hat seine Aufgaben zu erfüllen und darf keine eigene Meinung haben; muss immer höflich sein und hat die Schauze zu halten.

Bummi 16. Sep 2012 17:11

AW: String prüfen durch eine if anweisung und dann kopieren
 
@mkinzler
Zitat:

Ja ein Moderator hat seine Aufgaben zu erfüllen und darf keine eigene Meinung haben; muss immer höflich sein und hat die Schauze zu halten.
Sch.... Job :cry:

Helmi 25. Sep 2012 14:01

AW: String prüfen durch eine if anweisung und dann kopieren
 
Zitat:

Zitat von Helmi (Beitrag 1183018)
wie wärs damit:

Delphi-Quellcode:
var
  SL: TStringList;
begin
  SL := TStringList.Create;

  try
    SL.StrictDelimiter := true;
    SL.Delimiter      := '*';

    SL.DelimitedText := 'Feuerwehr Einsatz*Testhausen*Testdorfstraße66*Feuer1*bei Müller*123456789'; // hier mit Name (Müller)*

    //geht auch ohne Namen
    //Feuerwehr Einsatz*Testhausen*Testdorfstraße66*Feuer1**123456 789 // hier ohne Namen **

    ShowMessage(SL.Strings[Pred(SL.Count)]);
  finally
    FreeAndNil(SL);
  end;
end;
In der SL stehen dann die einzelnen Bereiche je als eigene Zeile und die letzte Zeile ist die Nummer


Ich möcht noch eine Variante zeigen:
Delphi-Quellcode:
var
  i: Integer;
  S: String;

begin
  S := 'Feuerwehr Einsatz*Testhausen*Testdorfstraße66*Feuer1**123456 789';

  //oder:
  //S := 'Feuerwehr Einsatz*Testhausen*Testdorfstraße66*Feuer1*bei Müller*123456789';

  i := LastDelimiter('*', S);

  ShowMessage(copy(S, i + 1, length(S)));
end;
Die Idee mit
Delphi-Quellcode:
LastDelimiter
hab ich aus der SysUtils-Function
Delphi-Quellcode:
ExtractFilePath


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:39 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz