Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Copy() von bis, wie gehts genau? (https://www.delphipraxis.net/127333-copy-von-bis-wie-gehts-genau.html)

SyntaxXx 11. Jan 2009 14:41


Copy() von bis, wie gehts genau?
 
Hi und zwar bin ich gerade an einem neuen projekt.
Es ist eigentlich ganz simpel, doch da ich noch ein anfänger bin, ist diese eine Sache noch ein wenig schwer.

ich habe nun einen text auf einem String gespeichert.
In diesem Text will ich nun etwas bestimmtes raus kopieren.
Das geht wie ich gelesen habe mit der funktion copy().

Jetzt ist nur die Sache, das der text den er kopieren soll immer anders ist.

Das einzige was bleibt ist, das der Text der kopiert werden soll zwischen " steht.
Wie kann ich das jetzt genau sagen, das er alles kopieren soll was zwischen den beiden " steht?

Suchen tue ich die das was ich haben will mit der pos() funktion.


Würde mich über eine Antwort sehr freuen.



EDIT: Am besten wäre es wenn ihr mir sagen könntet, wie ic einen Text kopieren kann, den ich zuvor mit der pos() funktion gesucht habe.

Beispiel:

<input type="text" name="url" size="40" style="font-family: Tahoma; font-size: 8pt" value="http://lix.in/-39f1c3">

</td><td align="right" style="padding-right: 5px"></td>


Das ist der text auf dem String. Dann suche ich mit pos('http://lix.in/', x); auf x liegt der text.
Und dann suche ich noch pos('">

</td><td', x);

Und jetzt soll er genau das kopieren was zwischen den beiden pox() funktionen liegt.

wenns so geht. Ansonsten wie oben beschrieben

mkinzler 11. Jan 2009 14:47

Re: Copy() von bis, wie gehts genau?
 
Du musst zuerst die Position des ersten "" ermittlen, 1 dazuzählen
Dann mit PosEx() das 2. suchen, 1 abziehen.
Differenz zwischen beiden Positionen ermitteln
Delphi-Quellcode:
s2 := Copy( s, <Pos1>, <Differenz>);

Noedel 11. Jan 2009 14:52

Re: Copy() von bis, wie gehts genau?
 
die Antwort hast du schon selbst geliefert.
Die Funktion Copy braucht als Parameter den String, den ersten Buchstaben, den du mit Pos() angibst und die Länge des zu kopierenden Strings.
Da du wieder nach ner Position suchst, musst du einfach herausbekommen wie viele Zeichen zwischen Start und Endzeichen liegen. Also die zweite Position von der ersten abziehen

Delphi-Quellcode:
NeuerString:=Copy(AlterString,Pos1,Pos2-Pos1);

SyntaxXx 11. Jan 2009 15:07

Re: Copy() von bis, wie gehts genau?
 
Nagut, aber ich verstehe es nicht so ganz, da sich ja ein teil meines Strings jedesmal ändert. Ums mal zu erläutern:

ich möchte einen Link verschlüsseln.

So den ersten teil, also das senden des links zu der seite hab ich. jetzt muss ich nur den zurück gegebenen wert wieder inden und ausgeben.

So das ist aber nicht so einfach, da sich die verschlüsslung ja jedesmal ändrt vom Link.
Also jeder Link ist ja anders.

So das heißt ich kann auch in meinem Quelltext nicht einfach nur nach " suchen, da es da ja in meinem text mehrmals gibt.

So hier mal ein teil des Quelltextes:

<td><table border="0" width="100%" cellspacing="0" cellpadding="0"><tr><td valign="top"><input type="text" name="url" size="40" style="font-family: Tahoma; font-size: 8pt" value="http://lix.in/-39f1c3">

</td><td align="right" style="padding-right: 5px"></td>


Das fett geschriebene nöchte ich auslesen.
Nur das was hinter http://lix.in/ stehtm ändert sich immer.
Wie sol ich das denn suchen?

ich könnte natürlih nach http://lix.in/ suchen, hab schon geschaut, das gibts auch nur einmal im gesammten Quelltext. Und dann könnt ich natürlich auch sagen das kopieren + 6 weitere zeichen. Nur irgentwann werdes es bestimmt auch mal mehr als 6 sein, und dann ist mein programm wertlos. Deswegen muss ich das irgentwie anders machen.

mkinzler 11. Jan 2009 15:09

Re: Copy() von bis, wie gehts genau?
 
Vielleicht wären hier reguläre Ausdücke besser geeignet

SyntaxXx 11. Jan 2009 15:10

Re: Copy() von bis, wie gehts genau?
 
Wie meinste den das?

Blackheart 11. Jan 2009 15:21

Re: Copy() von bis, wie gehts genau?
 
Suche nach http://lix.in/ - Position merken - suche weiter bis " neue Position - dazwischen ist die länge des Strings.

SyntaxXx 11. Jan 2009 15:32

Re: Copy() von bis, wie gehts genau?
 
Ich find ees toll das in so kurzer zeit so viele antworten kommen, aber könnt ihr das nicht mal anhand meines Textes machen?

Ich bin jetzt davon ausgegangen das "Weitersuchen" mir der function posex geht. Aber diese function gibt es garnicht.

Noedel 11. Jan 2009 15:32

Re: Copy() von bis, wie gehts genau?
 
in deinem HTML code sind aber mehrere ' " ' eingebaut, bist du sicher, dass du den link so finden kannst?
Ich würde dann nach "www" suchen und dann nach dem nächsten ' " '

mkinzler 11. Jan 2009 15:34

Re: Copy() von bis, wie gehts genau?
 
Welche Delphi-Version setzt du ein?

SyntaxXx 11. Jan 2009 15:36

Re: Copy() von bis, wie gehts genau?
 
Ich hab geschaut http://lix.in/ ist im gesammten Quelltext nur einmal vorhanden.
Wenn ich danach suche findet der auch nur das, aber das mit dem weitersuchen versteh ich nicht. Denn PosEx gibt es garnicht.



Ich nehme mal an das es Delphi 32 ist. Und der Compiler ist von CodeGear RAD Delphi 2009

Blackheart 11. Jan 2009 15:37

Re: Copy() von bis, wie gehts genau?
 
Schau mal dort das sollte dir weiterhelfen.
Stringroutinen

Bbommel 11. Jan 2009 15:39

Re: Copy() von bis, wie gehts genau?
 
Zitat:

Zitat von SyntaxXx
Wie meinste den das?

Reguläre Ausdrücke sind eine Technik, mit der man einen Text nicht nur nach einem bestimmten anderen Text durchsuchen kann, sondern, mit der man diesen Text nach einem bestimmten Muster durchsuchen kann. Du kannst dir zum Beispiel mal den Wikipedia-Artikel zum Thema anschauen oder auch mal Google zu dem Thema anwerfen. Wenn man sich damit mal etwas näher beschäftigt hat, ist das ein ziemlich mächtiges Werkzeug, mit dem man auch dein Problem sehr leicht lösen könnte. Allerdings muss man sich in das Thema auch erstmal etwas einlesen und vor allem "eindenken".

Für deinen Fall dürfte es einfacher sein, mit Pos den ersten Treffer wie von dir selbst vorgeschlagen zu suchen, sich diese Position zu merken und dann mit der Funktion PosEx das abschließende Anführungszeichen zu suchen. Mit einer Kombination aus Pos, PosEx und Copy solltest du dann eigentlich glücklich werden. Falls nicht, frag halt noch mal konkret nach, wo es hakt. :)

Bis denn
Bommel

Bbommel 11. Jan 2009 15:42

Re: Copy() von bis, wie gehts genau?
 
Zitat:

Zitat von SyntaxXx
Wenn ich danach suche findet der auch nur das, aber das mit dem weitersuchen versteh ich nicht. Denn PosEx gibt es garnicht.

Du musst die Unit SysUtils einbinden. PosEx ist bei Delphi 2009 definitiv dabei.

DP-Maintenance 11. Jan 2009 15:50

DP-Maintenance
 
Dieses Thema wurde von "Matze" von "Programmieren allgemein" nach "Sonstige Fragen zu Delphi" verschoben.
Delphi-Frage


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:52 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