AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Buchstaben Kette in Klammern erkennen
Thema durchsuchen
Ansicht
Themen-Optionen

Buchstaben Kette in Klammern erkennen

Ein Thema von Trafel21 · begonnen am 31. Jan 2019 · letzter Beitrag vom 31. Jan 2019
Antwort Antwort
Moombas
(Gast)

n/a Beiträge
 
#1

AW: Buchstaben Kette in Klammern erkennen

  Alt 31. Jan 2019, 11:29
sry, dachte das dies über die normale Programmierung ging also Daten aus Datenbank holen, verarbeiten und wieder rein schieben und nicht direkt über den DB Zugriff.

Sonst hätte man es ja recht simpel so lösen können:
Delphi-Quellcode:
procedure XYZ();
var
 i, j : integer;
 IString : string;
 inhalt : string;
begin
  IString := '0361-333333 (Martin) (030)-432432 (Stefan)';
  for i := 1 to length(IString) do //für die länge des ganzen Strings nach der Klammer suchen
  begin
    if (IString[i] = '(') and (IString[i-1] <> '^') then //Wenn die Klammer gefunden wurde und diese nicht schon ersetzt wurde weiter machen
    begin
      inhalt := ''; //Inhalt zurücksetzen
      j := i + 1; //Nach der ( Inhalt auslesen
      while IString[j] <> ')do // ) wurde gefunden
      begin
        inhalt := inhalt + IString[j]; //Inhalt der Klammer auslesen
        inc(j);
      end; // Inhalt der gefundenen Klammern steht fest
      try
        strtoint(inhalt); //Kann der Inhalt in eine Zahl umgewandelt werden?
      except //Nein? Dann ist es ein String und ersetze ( durch ^(
        IString := stringreplace(IString, '('+inhalt+')', '^('+inhalt+')', []);
      end;
    end;
  end;
  Showmessage(IString); // Ergebnis: 0361-333333 ^(Martin) (030)-432432 ^(Stefan)
end;

Geändert von Moombas (31. Jan 2019 um 12:21 Uhr) Grund: Kommentiert
  Mit Zitat antworten Zitat
Trafel21

Registriert seit: 16. Nov 2018
69 Beiträge
 
#2

AW: Buchstaben Kette in Klammern erkennen

  Alt 31. Jan 2019, 12:29
Danke für deine Hilfe und deinen Aufwand Moombas, leider bin ich im SQL unterwegs und schreibe eine Procedur. In SQL gibt es keine for schleifen, was ich ziemlich behämmert finde.

Eine ähnlcihe logik hatte ich zusammengebaut.

Code:
I=0;
NUMBER_C = '';
NUMBERS = '';
    while (:I<CHAR_LENGTH(:IN_NUMBERS)) do // String durchgehen
    begin
      I=:I+1;
      NUMBER_C = SUBSTRING(:IN_NUMBERS FROM :I FOR 1);
     
      if (NUMBER_C SIMILAR TO '(') then // Wenn ( gefunden
      begin
        NUMBERS = :NUMBER_C; -- ( auslesen
        I=:I+1;

        while (:I<CHAR_LENGTH(:IN_NUMBERS)) do // weitere while schleife für Buchstaben
        begin
          IF (:NUMBER_C SIMILAR TO '[[:ALPHA:]äöüÄÖÜß]') THEN // Wenn Zeichen ein Buchstabe ist...
          begin
            NUMBERS = NUMBERS || :NUMBER_C; // Nach der ( Buchstabeninhalt auslesen

            IF (:NUMBER_C SIMILAR TO '`') THEN // Wenn ) gefunden
            begin
              NUMBERS = NUMBERS || :NUMBER_C; -- ) auslesen

              IN_NUMBERS = REPLACE(:IN_NUMBERS,NUMBERS,NUMBERS||'^'); // zur Trennung ^ setzen
            end
          end
          else
          begin
          break; /* break aus der while, keine Buchstabe */
          end
        I=:I+1;
        end
      end
    end
Hier funktioniert nur das if (NUMBER_C SIMILAR TO '(') nicht. Es kommt ein Fehler "Invalid SIMILAR TO pattern".

Ziemlich verzweifelnd.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

AW: Buchstaben Kette in Klammern erkennen

  Alt 31. Jan 2019, 12:39
Zitat:
In SQL gibt es keine for schleifen, was ich ziemlich behämmert finde.
In PSQL schon (SP, Trigger, execution block)
Markus Kinzler
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.602 Beiträge
 
Delphi 7 Professional
 
#4

AW: Buchstaben Kette in Klammern erkennen

  Alt 31. Jan 2019, 13:01
Hier funktioniert nur das if (NUMBER_C SIMILAR TO '(') nicht. Es kommt ein Fehler "Invalid SIMILAR TO pattern".

Ziemlich verzweifelnd.
bei den anderen Ifs schreibst Du if (:NUMBER_C SIMILAR TO Fehlt da nur ein Doppelpunkt?
  Mit Zitat antworten Zitat
Trafel21

Registriert seit: 16. Nov 2018
69 Beiträge
 
#5

AW: Buchstaben Kette in Klammern erkennen

  Alt 31. Jan 2019, 13:19
Hier funktioniert nur das if (NUMBER_C SIMILAR TO '(') nicht. Es kommt ein Fehler "Invalid SIMILAR TO pattern".

Ziemlich verzweifelnd.
bei den anderen Ifs schreibst Du if (:NUMBER_C SIMILAR TO Fehlt da nur ein Doppelpunkt?
Ob oder ohne spielt in diesem Fall leider keine Rolle.



Code:
    IN_NUMBERS = REPLACE(:IN_NUMBERS,'(','°');
    IN_NUMBERS = REPLACE(:IN_NUMBERS,')','`');

    I=0;
    NUMBER_C = NULL;
    NUMBERS = NULL;
    while (:I<CHAR_LENGTH(:IN_NUMBERS)) do
    begin
      I= :I+1;
      NUMBER_C = SUBSTRING(:IN_NUMBERS FROM :I FOR 1);

      --EXCEPTION EXCEPT_LEER NUMBER_C;
      if (:NUMBER_C SIMILAR TO '°') then
      begin
        NUMBERS = :NUMBER_C; -- ( auslesen
        I=:I+1;
        --EXCEPTION EXCEPT_LEER NUMBERS;
        while (:I<CHAR_LENGTH(:IN_NUMBERS)) do
        begin
          NUMBER_C = SUBSTRING(:IN_NUMBERS FROM :I FOR 1);

          IF (:NUMBER_C SIMILAR TO '[[:ALPHA:]]') THEN
          begin
            NUMBERS = NUMBERS || :NUMBER_C; -- Nach der ( Buchstabeninhalt auslesen
          end
          else IF (:NUMBER_C SIMILAR TO '`') THEN
          begin
              NUMBERS = NUMBERS || :NUMBER_C; -- ) auslesen
              IN_NUMBERS = REPLACE(:IN_NUMBERS,NUMBERS,NUMBERS||'^'); -- zur Trennung ^ setzen
              break;
          end

        I=:I+1;
        end
      end
    end
Ich hab die Klammern einfach mit anderen Zeichen replaced. Jetzt funktioniert es zumindestens schon einmal zur Hälfte, die 1. Buchstabenfolge wird ein ^ angehangen. Die 2. Wird leider nicht gefunden. Wie verhält sich den ein Break in 2 While's mit einer If ab frage?

Code:
while (x)
begin
   while (y)
   begin
    if (z) then break;
   end
end
Spring ich aus beiden heraus? oder nur aus der while y ?
  Mit Zitat antworten Zitat
Moombas
(Gast)

n/a Beiträge
 
#6

AW: Buchstaben Kette in Klammern erkennen

  Alt 31. Jan 2019, 13:41
Zitat:
Google sagt für "SQL Break": BREAK beendet die aktuelle WHILE-Schleife. Wenn die aktuelle WHILE-Schleife mit einer anderen verschachtelt ist, beendet BREAK nur die aktuelle Schleife, und die Steuerung wird für die nächste Anweisung in der äußeren Schleife erteilt.
Und aus dem reinen Verständnis hätte ich dies auch so verstanden.
  Mit Zitat antworten Zitat
Antwort Antwort


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 00:53 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