go to post Anna Golitsyna · Aug 26 $STACK, of course. It looks like current line is represented by $st(1,"MCODE"). Did not know about $zname. Thanks!
go to post Anna Golitsyna · Jul 17 I rebuild ^rINDEX using, as recommended, D ##class(%Library.RoutineIndex).RebuildIndex($NAMESPACE). That reduced the number of ^rINDEX entries with an empty Date Modified, the cause of the $RO error. However, this function is partially based on ^ROUTINE which in its turn had bogus entries, all of the type ^ROUTINE("ABC",0,"SIZE")=<some integer>. That’s all these routines contain. I killed these ^ROUTINE nodes and rebuilt ^rINDEX. No empty Date Modified.
go to post Anna Golitsyna · Jul 17 I made a mistake, now corrected: it's Cache, not Ensemble. It does have this function too. I'll post results here.
go to post Anna Golitsyna · Apr 15 I wrote a simple function to find non-printable characters in a routine: findNonAsciis stream = ##class(%FileCharacterStream).%New()s stream.Filename="C:\TestAGbackup_2024-04-15_AG.txt"f { q:stream.AtEnd s line = stream.ReadLine() ; Strip all control characters, including non-processable by XML export, except for tabs and newlines s l2=$ZSTRIP(line,"*C","",$C(9)_$C(10)_$C(13)) w:l2'=line line,!,l2,!} q
go to post Anna Golitsyna · Mar 6 This approach indeed works on a small sample file. Not sure what matters here but I have a 50 MB file created with ^%RO and while FindAt does return position, not sure if a correct one, MoveTo fails to move to it. RO files seem not to have any control characters that might have disrupted FindAt somehow.
go to post Anna Golitsyna · Feb 28 Enrico, I meant how to programmatically reproduce information on the System > Configuration > Namespaces page in Management Portal. In other words, how to extract default databases listed under Routines on this page.
go to post Anna Golitsyna · Jan 22 Everybody, thanks for reading and Robert and Sarah for replying. Yes, GetGlobalSizeBySubscript returns Allocated Size only Changing the third GetGlobalSizeBySubscript argument to an empty one does not make a difference in returned Size. GetGlobalSize and ^%GSIZE return Used Size which is still different but not dramatically. I also found an bug in my code. The lengthy InterSystems instructions to the GetGlobalSizeBySubscript code mention: ""Size - Maximum number of MB to count...Be careful to RESET this for multiple calls to the method". I'd say such a Size definition is counterintuitive but at least I got totalSize=1321.57, very close to the result from GetGlobalSize from GetGlobalSizeBySubscript(path,global,global,.Size). Final code with results is: partialGlobalsSize(dir,global)S sub="",path="C:\Cachesys\mgr\"_dir_"\",searchGlobal="^"_global,Alloc=0,Size=0S x=##Class(%GlobalEdit).GetGlobalSize(path, global,.Alloc,.Size)W global,",",Alloc,",",Size,! ; Alloc=1312,725 here, Size=725S Size=0S x=##Class(%GlobalEdit).GetGlobalSizeBySubscript(path,global,"",.Size)W global,",",Size,! ; 1311.9 hereS totalSize=0F { /// Size - Maximum number of MB to count. If the size of the global exceeds this value, /// calculation stops, and an error is returned. If undefined or set to 0, then the entire range is counted. /// Be careful to RESET this for multiple calls to the method S Size=0 ; Resetting! S sub=$O(@searchGlobal@(sub)) Q:sub="" ;$D(@("^MSCG("_t_")")) S x=##Class(%GlobalEdit).GetGlobalSizeBySubscript(path,global_"("""_sub_""")","",.Size) S totalSize=totalSize+Size}W global,",",totalSize,! ; 1321.57 hereQ
go to post Anna Golitsyna · Jan 22 Thanks, Sarah. Changing the third argument to an empty one does not make a difference. Yes, the Used/Allocated difference is clear.
go to post Anna Golitsyna · Jan 22 Thanks, Robert. A couple of additional questions. Would you say the Used Size from GetGlobalSize (Size argument from code above; 725 MB) is more correct or the %GSIZE result is more correct (760 MB)? What's your take on GetGlobalSizeBySubscript when called for all first level subscripts yielding a magnitude lesser number in total, 8.56 MB? Could it be it returns only contents of purely ^GLOBAL(sub1) and not returning contents of ^GLOBAL(sub1,sub2)? BTW, I saw in the debugger that GetGlobalSizeBySubscript calls %GSIZE internally.
go to post Anna Golitsyna · Oct 4, 2023 I was so focused on subscripts that I forgot about indirection :-) . Thanks!
go to post Anna Golitsyna · Sep 13, 2023 That was it, invalid characters in a test method string. Thanks, @Pravin Barton and @Alexander.Woodhead!
go to post Anna Golitsyna · May 16, 2023 @Brett Saviano @Evgeny Shvarov You listed VSCode plusses, thanks. How about what Studio does that VSCode plus free plugins still do not? One of our programmers complained about debugging as of July 2022. Is it on par now?
go to post Anna Golitsyna · May 15, 2023 I'll watch it, thanks, Raj. I have to say though that I really prefer searchable text that can be visually scanned diagonally in 5 minutes as opposed to watching a 45-minute video. Oh well...
go to post Anna Golitsyna · May 15, 2023 Thanks, @Brett Saviano . I'd like to assess what are plusses and minuses of migrating first.
go to post Anna Golitsyna · May 15, 2023 Is there a recent and detailed article comparing VSCode plugin and the latest Studio? Something like this is what Studio still does better and this is what plugin does better.
go to post Anna Golitsyna · May 10, 2023 That's the code I ended up with. Thanks for your help, everybody! ; str is parsed into two arrays, words and separators (spaces and punctuation) ; Trim leading and trailing spaces here if needed S L=$L(str),(currWord,currSep)="",cnt=0 F i=1:1:L { S currChar=$E(str,i,i) I $MATCH(currChar,"\w") { S currWord=currWord_currChar I currSep'="" { S sepAr(cnt)=currSep,currSep="" }} ELSE { S currSep=currSep_currChar I currWord'="" { S cnt=cnt+1,wordAr(cnt)=currWord,currWord="" } } }