AGB  ·  Datenschutz  ·  Impressum  







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

C nach Delphi

Ein Thema von stOrM · begonnen am 8. Dez 2008 · letzter Beitrag vom 8. Dez 2008
Antwort Antwort
Benutzerbild von stOrM
stOrM

Registriert seit: 7. Jun 2003
Ort: Mülheim an der Ruhr
434 Beiträge
 
Delphi 10.3 Rio
 
#1

C nach Delphi

  Alt 8. Dez 2008, 15:06
Hallo,
ich hab eine für mich sehr nützliche Sache gefunden in einem C Quelltext, diese hätte ich super gerne in Delphi, nur das übersteigt meine Fähigkeiten bei weitem.

Könnte jemand das ganze vielleict nach Delphi übersetzen das wär mehr als genial!

Code:


int match_pattern(const char *text, const char *search, int case_sensitive, int strict)
{
  if (search && *search)
  {
  #ifdef __GNUC__
    const char *stack[strlen(text) + 2];
  #else
    const char** stack= g_malloc(sizeof(char*) * ((unsigned int) strlen(text) + 2));
  #endif
    int stackp= 0;
    const char *search_begin= search;
    const char *tend= text+g_utf8_strlen(text, (gssize)strlen(text));
    const char *send= search+g_utf8_strlen(text, (gssize)strlen(search));

    gunichar (*normcase)(gunichar)= case_sensitive ? dummy : g_unichar_toupper;

    while (*search && *text)
    {
      switch (*search)
      {
       case '*':
        search= g_utf8_next_char(search);
        if (*search != '?')
        {
          gunichar norm_search= normcase(*search);
          stack[stackp++]= search;
          while (*text && normcase(g_utf8_get_char_validated(text, (gssize)(tend - text))) != norm_search)
            text= g_utf8_next_char(text);
          break;
        }

       case '?':
        search= g_utf8_next_char(search);
        text= g_utf8_next_char(text);
        break;
     
       default:
        if (normcase(g_utf8_get_char_validated(text, (gssize)(tend-search))) != normcase(g_utf8_get_char_validated(search, (gssize)(send-search))))
        {
          if (stackp==0)
          {
            return 0;
          }
          else
          {
            // backtrack
            search= stack[--stackp];
            while (*text && *search && normcase(g_utf8_get_char_validated(text, (gssize)(tend-text))) != normcase(g_utf8_get_char_validated(search, (gssize)(send-search))))
              text= g_utf8_next_char(text);
          }
        }
        else
        {
          search= g_utf8_next_char(search);
          text= g_utf8_next_char(text);
        }
        break;
      }
    }

  #ifndef __GNUC__
    g_free(stack);
  #endif

    if (strict)
    {
      if (!*search)
      {
        if (search > search_begin && g_utf8_prev_char(search) && *g_utf8_prev_char(search) == '*')
          return 1;
        return *text ? 0 : 1;
      }
      else
        return 0;
    }
    else
    {
      // If both search string and text string are at end then we found a match.
      if (!*search && !*text)
        return 1;
      else
      {
        // If the search string still contains characters then text was exhausted already.
        // In this case we match only if search contains one or more '*'.
        if (!*search)
          return 0;
        else
        {
          while (*search == '*')
            ++search;
          return !*search;
        };
      };
    };
  }
  else
    return -1;
}
Naja sofern das halt überhaupt möglich ist...

Vielen Dank
s!
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

Re: C nach Delphi

  Alt 8. Dez 2008, 15:08
Wo liegen deine Probleme im Speziellen?
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von stOrM
stOrM

Registriert seit: 7. Jun 2003
Ort: Mülheim an der Ruhr
434 Beiträge
 
Delphi 10.3 Rio
 
#3

Re: C nach Delphi

  Alt 8. Dez 2008, 15:15
Im speziellen das ich überhaupt kein C kann respektive mich noch nie damit auseinander gesetzt hab ich kanns kaum lesen ums mal so auszudrücken
  Mit Zitat antworten Zitat
messie

Registriert seit: 2. Mär 2005
Ort: Göttingen
1.592 Beiträge
 
Delphi 2009 Professional
 
#4

Re: C nach Delphi

  Alt 8. Dez 2008, 15:18
Vielleicht beschreibst Du einfach, was Du von der Funktion erwartest. Scheint mir eine etwas aufgebohrte StringCompare-Routine zu sein.
Das ist in Delphi mit ein paar Zeilen getan, den ganzen Müll mit dem Stack brauchst Du nicht.

Grüße, Messie
  Mit Zitat antworten Zitat
Benutzerbild von stOrM
stOrM

Registriert seit: 7. Jun 2003
Ort: Mülheim an der Ruhr
434 Beiträge
 
Delphi 10.3 Rio
 
#5

Re: C nach Delphi

  Alt 8. Dez 2008, 15:19
Zitat von messie:
Vielleicht beschreibst Du einfach, was Du von der Funktion erwartest. Scheint mir eine etwas aufgebohrte StringCompare-Routine zu sein.
Das ist in Delphi mit ein paar Zeilen getan, den ganzen Müll mit dem Stack brauchst Du nicht.

Grüße, Messie
Also mit VST wo ich gerne dann sowas einsetzen würde:

DLTree.FullyVisible[Node] := match_pattern(Text, FSearchString, 0, 1) <> 0;
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

Re: C nach Delphi

  Alt 8. Dez 2008, 15:26
das beschreibt aber nicht was die Funktioen machen soll!
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von stOrM
stOrM

Registriert seit: 7. Jun 2003
Ort: Mülheim an der Ruhr
434 Beiträge
 
Delphi 10.3 Rio
 
#7

Re: C nach Delphi

  Alt 8. Dez 2008, 15:28
Zitat von mkinzler:
das beschreibt aber nicht was die Funktioen machen soll!
Hmm die Nodes im Tree auf visible setzen wenn der Text mit dem SearchText übereinstimmt, wenn nicht werden die halt auch nicht angezeigt...
Das läuft ungefähr so ab: In einem TEdit, tippst du den Text ein der gesucht werden soll, dabei wird erstaml alles im Tree auf visible = false gesetzt, also alle nodes... Nun wird halt beim eintippen des Suchwortes der vergleich gemacht und die Nodes dann wieder auf visible gesetzt, sofern der Nodes.Text mit dem Suchtext übereinstimmt, der rest bleibt halt unsichtbar...
Problem ist aber so wie ich die Funktion da lese, das jeder eingetippte Buchstabe mit dem Nodes.Text verglichen wird und nicht nur das gesammte Wort?
  Mit Zitat antworten Zitat
messie

Registriert seit: 2. Mär 2005
Ort: Göttingen
1.592 Beiträge
 
Delphi 2009 Professional
 
#8

Re: C nach Delphi

  Alt 8. Dez 2008, 15:28
Zitat von mkinzler:
das beschreibt aber nicht was die Funktioen machen soll!
Stimmt.

Schau' mal hier rein, vielleicht ist das das, was Du suchst.

Grüße, Messie
  Mit Zitat antworten Zitat
Benutzerbild von stOrM
stOrM

Registriert seit: 7. Jun 2003
Ort: Mülheim an der Ruhr
434 Beiträge
 
Delphi 10.3 Rio
 
#9

Re: C nach Delphi

  Alt 8. Dez 2008, 15:39
Zitat von messie:
Zitat von mkinzler:
das beschreibt aber nicht was die Funktioen machen soll!
Stimmt.

Schau' mal hier rein, vielleicht ist das das, was Du suchst.

Grüße, Messie
Vielen Dank funzt super!
Gruß
Marc
  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 18:04 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