StringReplace in dolg string

Vse drugo, kar ne spada v nobeno zgornjo kategorijo.
odisej
Prispevkov: 1363
Pridružen: 09.05.2003 12:58:10

StringReplace in dolg string

Odgovor Napisal/-a odisej » 27.06.2012 12:18:03

Imam en class MojaVariabla. Ta lahko drži tudi vrednost nekega fajla. Recimo da je to jpg, ki je lahko velik 1M. Torej je vrednost variable nek zelo dolg string. Sedaj moram ta string poslati preko Json in writeln, torej moram entre menjati z nečim, pa \ in " z \\ in \". Samo StringReplace na tako ogromnem stringu kar odpove. Ima kdo predlog, kako se stvari lotim?

Miha-R
Prispevkov: 2155
Pridružen: 14.05.2001 21:29:53

Re: StringReplace in dolg string

Odgovor Napisal/-a Miha-R » 27.06.2012 13:03:12

a) pošlješ kot hex,
b) spišeš mini parser, uporabiš stream in bereš/menjaš/pišeš znak za znakom,
c) če že moraš uporabiti string - s Pos poiščeš prvi znak, ki ga želiš zamenjati in potem s Copy kopiraš v nov string

Če se le da, pa se izogni pisanju binarnih podatkov v string.
Vedno sem želel napisati prav tak odgovor.

Lenny
Prispevkov: 500
Pridružen: 18.12.2003 09:55:16

Re: StringReplace in dolg string

Odgovor Napisal/-a Lenny » 27.06.2012 14:14:43

Base64 encode je ena od možnosti. Podatke namnoži na 4/3 kar je bolje kot hexstring. To je kar standardna stvar za prenos poljubnega binarya preko XMLja....

Silver_War
Prispevkov: 664
Pridružen: 01.06.2004 14:50:41

Re: StringReplace in dolg string

Odgovor Napisal/-a Silver_War » 27.06.2012 22:19:26

Ni mi jasno zakaj hočeš celoten file prenašat preko stringa. Namreč kot vidiš ti ni dovoljeno uporabiti vseh snakov v stringu. In tudi če bi ti te znake spremenil v neke dovoljene kako veš, da bo obratni postopek deloval? Namreč možno je da tvoj file že vsebuje dovoljene znake in boš pri obratnem postopku spreminjal tudi te znake.
Sam še nisem delal z Json vendar sem v preteklosti že probeval prenest file v stringu in ti lahko zagotovo rečem no-go, razen mogoče z uporabo Base64 (nisem še delal s tem).
Toda zakaj nebi uporabil kar array števil. Na ta način bi lahko prenašal celoten file Byte po Byte (Byte=0..255).

odisej
Prispevkov: 1363
Pridružen: 09.05.2003 12:58:10

Re: StringReplace in dolg string

Odgovor Napisal/-a odisej » 28.06.2012 09:38:37

Base64 se mi zdi dobra ideja. Ampak še vedno imam isti problem z #13#10. Če gledam od Delphija funkcijo EncodeStream v EncdDecd unitu, potem vsakih 75 znakov da #13#10. Sprašujem se zakaj. Če vse te brišem ven, bo ok?

Lenny
Prispevkov: 500
Pridružen: 18.12.2003 09:55:16

Re: StringReplace in dolg string

Odgovor Napisal/-a Lenny » 28.06.2012 14:29:02

#13#10 ni del vsebine. Pri nekaterih implementacijah encodiranja se da nastaviti prelome poljubno. Mislim da je standardno 70 znakov. Decoder to zanemari.
Če maš pri prenosu probleme zaradi tega pomeči ven pa bo. Ozeroma, če imaš sors ga prilagodiš da prelomov ne bo dajalo notr.

klemenko84
Prispevkov: 3
Pridružen: 28.12.2009 22:49:51

Re: StringReplace in dolg string

Odgovor Napisal/-a klemenko84 » 15.09.2013 18:15:54

Pozdravljeni.

Sem "novinec" v Delphi-ju, zato se za morebitna "zenela" vprašanja že vnaprej opravičujem ;)

Imam 5xEdit Box. V prvem zapišem string Variable1;Variable2;Variable3;Variable4, recimo kot 123;456;789;321. Dolžine teh spremenljivk se lahko spreminja. V tem napisanem primeru so vse tromestne, lahko se zgodi, da je kakšna tudi dvomestna ali petmestna. So pa v stringu ZMERAJ samo 4 spremenljivke.

Zanima me, kako bi iz stringa izluščil te 4 spremenljivke, ki se nahajajo med podpičji in vsako posebej zapisal v svoj EditBox.

Že vnaprej se zahvaljujem vsem za odgovore.

LP, Klemenko84

odisej
Prispevkov: 1363
Pridružen: 09.05.2003 12:58:10

Re: StringReplace in dolg string

Odgovor Napisal/-a odisej » 16.09.2013 09:27:39

Recimo

Koda: Izberi vse

var
  sl: TStringList;
begin
  sl := TStringList.Create;
  try
    sl.Text := StringReplace(tvojString, ';', #13#10, [reReplaceAll]);
    Edit1.Text := sl[0];
    Edit2.Text := sl[1];
    ....
  finally
    sl.Free;
  end;
end;

klemenko84
Prispevkov: 3
Pridružen: 28.12.2009 22:49:51

Re: StringReplace in dolg string

Odgovor Napisal/-a klemenko84 » 16.09.2013 12:41:25

Hvala za tako hiter odgovor.

V primeru da vnesem Vaše zgoraj napisano, mi javi tole:
Slika

Kaj delam narobe? :oops:

mig640
Prispevkov: 59
Pridružen: 03.01.2008 11:36:54

Re: StringReplace in dolg string

Odgovor Napisal/-a mig640 » 16.09.2013 15:31:30

rfReplaceAll in ne reReplaceAll.

Odgovori