Teile aus einen String löschen

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Tsuki-Namida
Beiträge: 633
Registriert: 17.11.2005 13:27
Kontaktdaten:

Beitrag von Tsuki-Namida »

super das klapt :) AND51 danke euchb allen :)
Bild
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

AND macht da auch nix anderes, als von mir vorgeschlagen:
er sucht "Current Song", dann sucht er das nächste "<b>",
und dann schnibbelt er bis zum folgenden "</b>" aus.

ok, er hats vereinfacht, indem er nur die nächsten b-tags sucht.
schon ok, gute arbeit, AND. :wink:
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

Bitte, Magix. Übrigens: Wenn du Pointer und PeekS() verwendest, sollte es schneller als mit Mid() gehen. Nur als Tipp. Ansonsten lass es lieber drin, Mid() ist einfacher als die PeekS() Variante.



Und Kaeru: Rücksichtslos, wie du bist, hättest du <b> und </b> mit weggeschnibbelt. Magix wollte es aber drin behalten.
Nur um dich zu ärgern (Flitzpiepe, grrr!): Ich habe also nicht so gearbeitet, wie von dir vorgeschlagen... :wink:
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

> Rücksichtslos, wie du bist, hättest du <b> und </b> mit weggeschnibbelt. Magix wollte es aber drin behalten.
siehe da... nachdem ich dich drauf hingewiesen habe, hast du noch genauer gelesen als ich... gute arbeit. :mrgreen:

> Ich habe also nicht so gearbeitet, wie von dir vorgeschlagen...
grundsätzlich schon:
der Kernansatz ist, zuerst den eindeutigen string "Current Song" zu suchen,
und von dort aus weiter vorzugehen.
das hast du beibehalten.

das ist auch der vernüftigste ansatz, denn damit kann sich alles vor "Current Song" und nach dem (fettgedruckten) titel beliebig verändern.

also, wieder einmal eine gute gemeinschaftsproduktion von uns beiden.... :lol:
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

> also, wieder einmal eine gute gemeinschaftsproduktion von uns beiden....
Wir wär's, wenn wir ne Bande/Unternehmen/Firma/Gruppe gründen? :lol:
Aber jetzt wo du's sagst: Stimmt, jetzt fällt's mir auch auf, dass wir öfters mal zusammen arbeiten. Weiter so! :lol: :allright:

> siehe da... nachdem ich dich drauf hingewiesen habe, hast du noch genauer gelesen als ich... gute arbeit.
Tjaaa... :mrgreen:

Ich hab doch erst vor 2 Wochen eine neue Brille bekommen, da dachte ich: "Hm... Hab ich wirklich was übersehen oder muss ich die Brille umtauschen gehen?" 8)
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

> Ich hab doch erst vor 2 Wochen eine neue Brille bekommen, da dachte ich: "Hm... Hab ich wirklich was übersehen oder muss ich die Brille umtauschen gehen?"

:lol:
ne, passt scho... danke fürs zum lachen bringen... :D
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

lol gern geschehen... :lol:
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
K.Putt
Beiträge: 122
Registriert: 01.09.2006 00:17

Beitrag von K.Putt »

Was ich empfehlen kann ist auch InnerHTML und OuterHTML voneinander zu trennen, HTML Tags können sich schnell mal ändern.
Normalerweise sucht man ja OuterHTML, dass dann in einen String mit Trennzeichen und dann StringField().
InnerHTML wird natürlich komplizierter, je nachdem, was man sucht, aber man hat zumindestens schon einmal klar getrennt.

Mal ein Beispiel für OuterHTML:
(P.S. das ist natürlich auch Anfängercode, aber es funktioniert)

Code: Alles auswählen


Procedure.s get_outer_html(html$)

trennzeichen$="|"
anz=CountString(html$,"<") 								; zählt die Anzahl der HTML Tags 
outerhtml$=Trim(StringField(html$,1,"<")) 			; liest den ersten, voranstehenden OuterHTML

If outerhtml$>""												; (wenn vorhanden ;-)
	outerhtml$=outerhtml$+trennzeichen$
EndIf 															; 

For i=1 To anz
	text$=StringField(html$,i+1,">") 	; 
	text$=Trim(StringField(text$,1,"<"))
	
	If text$>""
	  outerhtml$=outerhtml$+text$+trennzeichen$    	;Trennzeichen, wenn erwünscht zwischen den einzelnen OuterHTML. 
   EndIf
Next

ProcedureReturn outerhtml$					

EndProcedure
PB 5.x & Win 7 64Bit
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

Was ist denn InnerHTML? Alles, was IN den Tags steht?
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

OuterHTML = HTML rausfiltern
InnerHTML = HTML behalten, alles andere weg
So verstehe ich das.

Hier nun meine Prozedur:

Code: Alles auswählen

Procedure.s GetInnerOrOuterHTML(html$, OuterOrInner.l=0, trennzeichen$="") ; 0=Outer, 1=Inner
	Protected result.s, *pos.Character=@html$, tag.l=OuterOrInner
	While *pos\c
		Select *pos\c
			Case '<'
				tag=1
			Case '>'
				tag=0
				result+trennzeichen$
			Default
				If tag = OuterOrInner
					result+Chr(*pos\c)
				EndIf
		EndSelect
		*pos+SizeOf(Character)
	Wend
	ProcedureReturn result
EndProcedure
Kann beides. Setze 0 ein, um Outer zu erhalten, setze 1 ein, um Inner zu erhalten. Ein Trennzeichen ist auch möglich. Lässt man dies weg, wird auch keines genommen.

Achtung: Man sollte die <PRE> und <TEXTAREA> und alle FORM-Tags (INPUT, BUTTON, etc...) Tags nicht vergessen, diese können Tags enthalten, die aber nicht gefiltert werden dürfen! Aber meines ist sowieso nur eine einfache Prozedur.
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Antworten