Kein Problem!WernerZ hat geschrieben:Du gehst die Zeichenliste durch und ersetzt alle Vorkommen im String - das ist vielleicht bei ganz kleinen Strings etwas langsamer, aber bei großen ganz wesentlich flotter.
Gute Sache......nochmals danke, das hat mir sehr geholfen!
Schnelles URLEncode mit WinAPI
PB 4.30
Code: Alles auswählen
Macro Happy
;-)
EndMacro
Happy Endjpd hat geschrieben:Hi WernerZ,
so wie ich sehe hast du schon eine lösung für dein problem,
ich habe trotzdem das mit api umgesetzt.
hier ein beispiel von VB portiert!
Ciao
jpd
Super, danke - das ist natürlich schon sehr interessant, die API-Umsetzung der Geschichte zu sehen. Ich werd's auf jeden Fall ausprobieren, weil es bei mir durch die Größe der gePOSTeten Strings schon auf jede Optimierung ankommt - auf jeden Fall sehe ich jetzt meinen Pointer-Denkfehler.
Am langsamen uralt-Kundenrechner wurden aus ehemals 20 Minuten mit dem obigen PB-Programm heiße 15 Sekunden, das ist schon gravierend und lässt sich mit der API wohl noch ein bisschen steigern, nehme ich an.
WernerZ
PS: Ein Problem sehe ich gerade bei der API-Funktion: wie es scheint, ist die max. Länge der übergebenen Strings möglicherweise sehr begrenzt. Ob sie doch mit meinen 250kB-Strings klarkommt, bleibt auszutesten.
Hi WernerZ,
so wie ich sehe ist die limitierung auf
#INTERNET_MAX_URL_LENGTH = 2084
gesetzt,
also wird diese routine für dein vorhaben nicht weiterhelfen
vielleicht währe es möglich das der string in blöcke dieser rutine übergeben wird und dann wieder zusammengefühgt....
ob es dann schnell genug ist...
Ciao
jpd
so wie ich sehe ist die limitierung auf
#INTERNET_MAX_URL_LENGTH = 2084
gesetzt,
also wird diese routine für dein vorhaben nicht weiterhelfen
vielleicht währe es möglich das der string in blöcke dieser rutine übergeben wird und dann wieder zusammengefühgt....
ob es dann schnell genug ist...
Ciao
jpd
PB 5.10 Windows 7 x64
Stimmt, die Grenze ist ziemlich niedrig angesetzt.
Allerdings ist die Routine von AND51 gerade bei langen Strings ausgesprochen schnell und für meine Zwecke gut geeignet, da ist die API gar nicht notwendig.
Interessant war's für mich trotzdem, um die Parameterübergabe zu sehen. Das könnte in anderen Fällen sehr nützlich sein.
Allerdings ist die Routine von AND51 gerade bei langen Strings ausgesprochen schnell und für meine Zwecke gut geeignet, da ist die API gar nicht notwendig.
Interessant war's für mich trotzdem, um die Parameterübergabe zu sehen. Das könnte in anderen Fällen sehr nützlich sein.
> Allerdings ist die Routine von AND51 gerade bei langen Strings ausgesprochen schnell
Sie ginge noch schneller. Haben SuchString$ und ErsatzString$ die gleiche Länge, dann kann man zusätzlich den Parameter am Ende auf 2 stellen, wodurch die In-Place Ersetzung vorgenommen wird. So nennt die Hilfe sie.
Der Trick: Haben die beiden genannten Strings die gleiche Länge kann man sie im Speicher bequem überschreiben anstatt SuchString$ auszuschneiden und ErsatzString$ einzufügen.
Das ist hier leider nicht möglich, denn wenn ich das Zeichen é durch %E9 ersetze, sieht man schon, dass beide Strings nicht die gleiche Länge haben.
Aber das nur als Tipp, damit du diese Prozedur noch weiter tunen kannst und das auch bei zukünftigen Einsätzen von ReplaceString() weißt.
Sie ginge noch schneller. Haben SuchString$ und ErsatzString$ die gleiche Länge, dann kann man zusätzlich den Parameter am Ende auf 2 stellen, wodurch die In-Place Ersetzung vorgenommen wird. So nennt die Hilfe sie.
Der Trick: Haben die beiden genannten Strings die gleiche Länge kann man sie im Speicher bequem überschreiben anstatt SuchString$ auszuschneiden und ErsatzString$ einzufügen.
Das ist hier leider nicht möglich, denn wenn ich das Zeichen é durch %E9 ersetze, sieht man schon, dass beide Strings nicht die gleiche Länge haben.
Aber das nur als Tipp, damit du diese Prozedur noch weiter tunen kannst und das auch bei zukünftigen Einsätzen von ReplaceString() weißt.
PB 4.30
Code: Alles auswählen
Macro Happy
;-)
EndMacro
Happy End