AGB  ·  Datenschutz  ·  Impressum  







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

Pos funktion

Ein Thema von Pseudemys Nelsoni · begonnen am 11. Dez 2004 · letzter Beitrag vom 11. Dez 2004
Antwort Antwort
Benutzerbild von Pseudemys Nelsoni
Pseudemys Nelsoni

Registriert seit: 24. Dez 2002
Ort: Hamburg-Harburg
3.551 Beiträge
 
#1

Pos funktion

  Alt 11. Dez 2004, 22:07
hi, ich schreibe gerade gerade eine pos funktion (falls ich die vcl mal nicht mitverwenden möchte)...

ich weiss das es wohl nich die beste möglichkeit ist, aber hauptsache es funktioniert...

Delphi-Quellcode:
function pos(sub, s: string; const cs: boolean = false): integer;
var
  tmp, sublen: string;
  idx: integer;
begin
  result := 0; idx := 0;
  if (sub <> '') and (s <> '') then
    while ((length(s) >= length(sub))) and (result = 0) do
    begin
      sublen := length(sub);
      setstring(tmp, pchar(s), sublen);
      inc(idx);
      if ((cs) and (lstrcmp(pchar(tmp), pchar(sub)) = 0)) or
         ((not cs) and (lstrcmpi(pchar(tmp), pchar(sub)) = 0)) then
      begin
        result := idx;
        exit;
      end;
      //hier "s[1]" löschen
    end;
end;

kann mir jemand sagen wie ich einen bestimmtem teil eines strings lösche (siehe kommentar) ?
Mario
MSN: cyanide@ccode.de
  Mit Zitat antworten Zitat
Benutzerbild von Nikolas
Nikolas

Registriert seit: 28. Jul 2003
1.528 Beiträge
 
Delphi 2005 Personal
 
#2

Re: Pos funktion

  Alt 11. Dez 2004, 22:11
Du könntest den Buchstaben auf ' ' setzen und dann trim benutzen. Oder wenn du den Befehl nicht benutzen willst, könntest du dir ein dyn. array of Char nehmen und dann den zweiten Buchstaben über den ersten schreiben, so dass dann hinten ein Loch entsteht.
Erwarte das Beste und bereite dich auf das Schlimmste vor.
  Mit Zitat antworten Zitat
Benutzerbild von gmarts
gmarts

Registriert seit: 4. Apr 2004
Ort: Templin
290 Beiträge
 
Delphi 6 Enterprise
 
#3

Re: Pos funktion

  Alt 11. Dez 2004, 22:14
Versuche es mal mit:

function AnsiReplaceStr(const AText, AFromText, AToText: string): string;
Zitat:
Beschreibung

Mit AnsiReplaceStr können Sie den String AText analysieren und alle Fundstellen des Strings AFromText durch den String AToText ersetzen. Fundstellen von AFromText werden unter Berücksichtigung der Groß-/Kleinschreibung gesucht. Die Suche erfolgt nicht rekursiv: Wenn die Ersetzung durch AToText zu einer neuen Fundstelle von AFromText führt, wird diese Fundstelle nicht ersetzt.

Für AToText nimmst du einfach einen leeren String.

MfG GM

[Edit]Tja,keine VCL.....Wer lesen kann ist klar im Vorteil :wall: [/Edit]
procedure TForm1.Button1Click(Sender: TObject);
begin
button1.Click;
end;
  Mit Zitat antworten Zitat
Benutzerbild von Pseudemys Nelsoni
Pseudemys Nelsoni

Registriert seit: 24. Dez 2002
Ort: Hamburg-Harburg
3.551 Beiträge
 
#4

Re: Pos funktion

  Alt 11. Dez 2004, 22:19
@toxman, ich könnte den string selbst auch wie ein array verwenden, ich weiss nur nicht genau wie ich das machen soll, ich habe mir das so gedacht

jedes zeichen des strings um eine stelle nach links verschieben, und dann mit setlength...

aber wäre das nicht n bisschen sehr langsam?


@gmarts: keine VCL
Mario
MSN: cyanide@ccode.de
  Mit Zitat antworten Zitat
Benutzerbild von Pseudemys Nelsoni
Pseudemys Nelsoni

Registriert seit: 24. Dez 2002
Ort: Hamburg-Harburg
3.551 Beiträge
 
#5

Re: Pos funktion

  Alt 11. Dez 2004, 22:38
kk, hat sich erledigt, das funktioniert:

Delphi-Quellcode:
function pos(sub, s: string; const cs: boolean = false): integer;
var
  tmp: string;
  idx: integer;
  i, sublen: integer;
begin
  result := 0; idx := 0;
  if (sub <> '') and (s <> '') then
  begin
    while ((length(s) >= length(sub))) and (result = 0) do
    begin
      sublen := length(sub);
      setstring(tmp, pchar(s), sublen);
      inc(idx);
      if ((cs) and (lstrcmp(pchar(tmp), pchar(sub)) = 0)) or
         ((not cs) and (lstrcmpi(pchar(tmp), pchar(sub)) = 0)) then
      begin
        result := idx;
        exit;
      end;
      if length(s) >= 2 then
      begin
        for i := 2 to length(s) do
          s[i-1] := s[i];
        setlength(s, length(s)-1);
      end
      else exit;
    end;
  end;
end;
byebye
Mario
MSN: cyanide@ccode.de
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#6

Re: Pos funktion

  Alt 11. Dez 2004, 23:45
Vorweg: Ich bin überhaupt kein Pointerfachmann und bin mit dem "richtigen" Pos ganz zufrieden.

Ich frage mich nur, warum du ständig die Größe des Strings ändern willst? Das da dürfte doch auch reichen.
Delphi-Quellcode:
function Pos(const aSubString, aString: string;
             const aCaseSensitive : Boolean = False): Integer;
var
   CurrentPosition :Integer;
   pContent, pTempContent :PChar;
   pSearch , pTempSearch :PChar;
begin
   if aCaseSensitive then
   begin
      pContent := PChar(aString);
      pSearch := PChar(aSubString);
   end
   else
   begin
      pContent := PChar(AnsiUpperCase(aString));
      pSearch := PChar(AnsiUpperCase(aSubString));
   end;

   Result := -1;
   CurrentPosition := 1; // EDIT: das "richtige" Pos liefert die Position basierend auf 1 ;)

   while pContent^ <> #0 do
   begin
      if pContent^ = pSearch^ then
      begin
         pTempContent := pContent;
         pTempSearch := pSearch;

         while (pTempSearch^ <> #0) and (pTempSearch^ = pTempContent^) do
         begin
            Inc(pTempContent);
            Inc(pTempSearch);
         end;

         // Suchstring wurde bis zum #0 durchlaufen -> Match
         if pTempSearch^ = #0 then
         begin
            Result := CurrentPosition;
            Break;
         end;
      end;

      Inc(CurrentPosition);
      Inc(pContent);
   end;
end;
  Mit Zitat antworten Zitat
Benutzerbild von Pseudemys Nelsoni
Pseudemys Nelsoni

Registriert seit: 24. Dez 2002
Ort: Hamburg-Harburg
3.551 Beiträge
 
#7

Re: Pos funktion

  Alt 11. Dez 2004, 23:55
danke rober, das muss ich mir mal reinziehen
Mario
MSN: cyanide@ccode.de
  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:13 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