go to post Julius Kavay · Sep 30, 2022 The documentation of the %ToJSON() method is correct and yes, you can do do obj.%ToJSON() merely, this works only "on devices without protocol" like terminal, (sequential) file, etc. Everywhere, wehere the data bytes goes direct to the target. WebSocket isn't such a device. There is a "header part", with information fields like the command, masking, the length of the data, etc. You have two possibilities, a) you ask WRC for a "WriteStream()" method or b) you handle the whole WebSocket by hand (is not impossible) or c) you change your application logic and send the those messages in chunks.
go to post Julius Kavay · Sep 29, 2022 OK, somehow I miss the question. Do you need the VT100 escape sequences (see here, Table 3-6) or something else?
go to post Julius Kavay · Sep 29, 2022 You try to store a whole stream in one property of an persistent class, that won't work! But the solution is already there, see this article
go to post Julius Kavay · Sep 29, 2022 Yes, it would kill set $p(data,"x",2E6+1)="" set dynArr=[].%Push(data).%Push(data).%Push(data) set stream=##class(%Stream.GlobalCharacter).%New() do dynArr.%ToJSON(stream) try { set x=dynArr.%ToJSON() } catch e { write e.Name,! } write stream.Size,! write $length(data),! The output is <MAXSTRING> 6000010 2000000 As Steven Hobbs wrote, the limit is only set by the size of the (virtual) memory.
go to post Julius Kavay · Sep 28, 2022 It depends on two things,a) the (user) interface, your user uses and (telnet, web, an application, etc)b) where your inputs are handled (on server, on users device)
go to post Julius Kavay · Sep 28, 2022 The only important thing is, do they accept data with the arbitrary length. It's not of importance for you, how their API the incomming data handles: as string, as longstring, as stream, as array of bytes, etc.
go to post Julius Kavay · Sep 27, 2022 So one has a DEFAULT length of 50 and the other 3641144. But I thought more of the difference HOW MANY characters can they hold.
go to post Julius Kavay · Sep 27, 2022 Just a dumb question, what is the very difference between %VarString and %String regarding the storable string length? As far as I know, both have a length limit of 3641144 characters.
go to post Julius Kavay · Sep 27, 2022 I have nothing in common with HealtShare... but a property (Property rsXML As %String), like you mentioned, can hold up to 3.6E6 chars. If your data are longer then 3641144 characters then you definitely need to use streams (and if you intend to Base64 encode the data, then your data will be 33% longer)! You need to change the above property to something like Property rsXML As %GlobalBinaryStream; BUT this means, you have to adapt all your programs, methods, etc. where this property is in use! That won't be a joy rather a pain
go to post Julius Kavay · Sep 19, 2022 Hmm, ... will be difficult, but I give it a try ClassMethod DNA(dna) As %String { q $tr(dna,"CGAT","GCTA") }
go to post Julius Kavay · Sep 19, 2022 The spirit of the time... we have to save water, energy, etc. Maybe we should save bytes too... // instead of this line if (($zabs($a($e(s1,cnt)) - $a($e(s2,cnt))) '= 32)) { return 0 } // try this one return:$zabs($a(s1,cnt)-$a(s2,cnt))-32 0
go to post Julius Kavay · Sep 19, 2022 That's is easy for the ASCII character set... (you didn't give any restrictions) ClassMethod CheckOpposite(s1,s2) As %Boolean { q $zb(s1," ",6)=s2 }
go to post Julius Kavay · Sep 15, 2022 what you need is a SIMPLE compare of two strings Set Ret=RSet.Execute() set currentTS = $zdt($h,3) // get onece the current timestamp While RSet.Next() { Set routeGuid="" Set nextScheduled=RSet.GetData(9) //I $ZDATETIME($h,3,1)>nextScheduled S ^badis("datetime",Id)=$ZDATETIME($h,3,1)_"|"_nextScheduled if currentTS ] nextScheduled S ^badis("datetime",Id)=currentTS_"|"_nextScheduled } In words: if currentTS follows (i.e. greater) nextScheduled - that's all.
go to post Julius Kavay · Sep 14, 2022 If you can't find the methods Vitaliy mentioned because (for example) your Cache version is too old, you can always reinvent the wheel and write your own encoder/decoder method. Where is the problem? This snippet could be a starting point Parameter Base64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; ClassMethod Base64Enc(x) { s f=-$l(x)#3, x=x_$e($c(0,0),1,f), y=..#Base64, z="" zt:$ziswide(x) "WIDE" f i=1:3:$l(x) s a=$a(x,i)*256+$a(x,i+1)*256+$a(x,i+2), c=262144 f j=1:1:4 s z=z_$e(y,a\c+1), a=a#c, c=c\64 s:f z=$e(z,1,$l(z)-f)_$e("==",1,f) q z }
go to post Julius Kavay · Sep 14, 2022 I assume, you want to change ALL ..#WhiteSpace chars to the delimiter, used by $piece() s $P(replace,",",$L(..#WhiteSpace) + 1)=""
go to post Julius Kavay · Sep 13, 2022 Some comments... (1) you can generate a string with the necessary commas, (2) also, the variable "l" is unnecessary and (3) after assigning to "m" the length of the first word, start the for-loop with the next (second) word... According to problem description, the string will never be empty, so an early "q 0" is also not necessary and for the case, this happens, the first piece of the string will have a length of 0. Parameter WhiteSpace = {$C(9,10,13,32,160)}; ClassMethod Short(t) As %Integer { s t=$zstrip($TR(t,..#WhiteSpace,$tr($j("",$l(..#WhiteSpace))," ",",")),"<=>",",") s m=$L($P(t,",")) f i=2:1:$L(t,",") {s n=$L($P(t,",",i)) s:n<m m=n} q m }
go to post Julius Kavay · Sep 13, 2022 In case, it's not a typo, tell me the secret of how to "shave symbols"
go to post Julius Kavay · Sep 13, 2022 You count the alpha-only words, "Let's, 21inc, ..." would't pass the check. So I changed your code to ClassMethod findShort(s) As %Integer { s s=" "_s_" " f i=1:1 { ret:s?@(".e1"" """_i_"anp1"" "".e") i } } I hope, it's OK...
go to post Julius Kavay · Sep 13, 2022 In case, the shortest word is longer then 200 chars, than the result will be wrong. Instead of using a constant (200) s l=$L(t,","),m=200 f i=1:1:l {s n=$L($P(t,",",i)) s:((n>0)&&(n<m)) m=n} use a more generic approach s l=$L(t,","),m=$L($P(t,",")) f i=2:1:l {s n=$L($P(t,",",i)) s:((n>0)&&(n<m)) m=n} Also, removing the unnecessary delimiters (commas) simplifies the code too ClassMethod Short(t) As %Integer { s t=$zstrip($TR(t,$C(9,10,13,32,160),",,,,,"),"<=>",",") s m=$L($P(t,",")) f i=2:1:$l(t,",") {s n=$L($P(t,",",i)) s:n<m m=n} q m }