112 lines
4.4 KiB
Plaintext
112 lines
4.4 KiB
Plaintext
MODULE A {
|
|
\\ Process data in json format
|
|
|
|
\\ We can load from external file with Inline "libName"
|
|
\\ or multiple files Inline "file1" && "file2"
|
|
\\ but here we have the library in a module
|
|
Inline Code Lib1
|
|
\\ So now we make a Parser object (a group type in M2000)
|
|
Parser=ParserClass()
|
|
\\ We can display any function, module that is public and known list
|
|
Modules ?
|
|
\\ And this are all known variables (or and objects)
|
|
List !
|
|
Document json$
|
|
\\ We can load from file
|
|
\\ Load.Doc json$, "alfa.json"
|
|
json$={{
|
|
"alfa":-0.11221e+12,
|
|
"array" : [
|
|
-0.67,
|
|
"alfa1",
|
|
[
|
|
10,
|
|
20
|
|
],
|
|
"beta1",
|
|
1.21e12,
|
|
21.12145,
|
|
"ok"
|
|
],
|
|
"delta": false, "epsilon" : true, "Null Value" : null
|
|
}}
|
|
Save.Doc json$, "json2.json" \\ by default in Utf-8 with BOM
|
|
\\ just show multiline text
|
|
\\ Report display lines and stop after 3/4 of console height lines
|
|
\\ just press a key or click mouse button
|
|
Report json$
|
|
\\ so now we get text to a new object
|
|
alfa=Parser.Eval(json$)
|
|
\\ check it
|
|
Print Type$(alfa) ' it is a group
|
|
Print "alfa.type$=";alfa.type$ \\ this is a read only property
|
|
|
|
Report "as one line"
|
|
Report Parser.Ser$(alfa, 0)
|
|
|
|
Report "as multiline"
|
|
Report Parser.Ser$(alfa, 1)
|
|
|
|
Print "Using Print"
|
|
Print Parser.ReadAnyString$(alfa)
|
|
|
|
Print "Value for alfa, id alfa"
|
|
Print Parser.ReadAnyString$(alfa,"alfa")
|
|
Report "as multiline"
|
|
Report Parser.Ser$(Parser.Eval(Parser.ReadAnyString$(alfa,"array", 2)), 1)
|
|
\\ We get a copy of an array as a Group (a group which return an array)
|
|
Alfa3=Parser.Eval(Parser.ReadAnyString$(alfa,"array", 2))
|
|
\\ First value is for actual object, second value is a readonly property of this object
|
|
Print type$(Alfa3), Alfa3.type$
|
|
Dim B()
|
|
\\ Now Alfa3 run Value part and pass a pointer of array
|
|
\\ B() is an array and here take a pointer to Alfa3 array (as value of Alfa3)
|
|
B()=Alfa3
|
|
\\ each() make an iterator for B()
|
|
N=each(B())
|
|
While N {
|
|
\\ Using B() we get values always. but if we have "object" or "array" then Print prints items **
|
|
Print B(N^)
|
|
}
|
|
\\ Print show here nothing because if value is object then "print" just leave a column and continue to next one
|
|
Print B()
|
|
\\ we have to use Group() to get group not value of group (if any).
|
|
\\ Group() works for "named" group, not for stored in an array or an inventory or a stack
|
|
Print Parser.StringValue$(Group(Alfa3), 0)
|
|
Print Parser.StringValue$(Group(Alfa3), 1)
|
|
\\ Now we want to pass a new value
|
|
\\ Interpreter want to match type of expression from left side to right side
|
|
\\ Because Parser.StringValue$ is actual a Group (As property),
|
|
\\ we have a second linked name: Parser.StringValue
|
|
\\ we have to use Parser.StringValue()
|
|
\\ and all values must be groups, as those provided by Parser
|
|
Parser.StringValue(Group(Alfa3), 1)=Parser.Numeric(1234)
|
|
Print Parser.StringValue$(Group(Alfa3), 1)
|
|
Print Parser.StringValue$(Group(Alfa), "array", 2, 0)
|
|
\\ we have to use Parser.StringValue$()
|
|
Parser.StringValue$(Group(Alfa), "array", 2, 0)=Parser.JString$("Changed to String")
|
|
Print Parser.StringValue$(Group(Alfa), "array", 2,0)
|
|
Try ok {
|
|
Print Parser.StringValue$(Group(Alfa), "array", 2)
|
|
}
|
|
If Error or not ok Then Print Error$
|
|
Parser.StringValue.Add = True
|
|
Parser.StringValue$(Group(Alfa), "array", 2, 10)=Parser.JString$("Changed to String 2")
|
|
Parser.StringValue(Group(Alfa), "Last value")=Parser.Boolean(true)
|
|
Report "as multiline"
|
|
Report Parser.Ser$(alfa3, 1)
|
|
Report Parser.Ser$(alfa, 1)
|
|
Parser.StringValue.Add = False
|
|
Parser.StringValue.Del = True
|
|
Parser.StringValue(Group(Alfa), "array", 0)=Parser.Null()
|
|
Parser.StringValue(Group(Alfa), "delta")=Parser.Null()
|
|
Parser.StringValue.Del = False
|
|
For Parser {
|
|
.StringValue(Group(Alfa), "array", 1,5)=.Arr((.Numeric(10), .Jstring$("ok 20"), .Boolean(true)))
|
|
}
|
|
Report Parser.Ser$(alfa, 1)
|
|
|
|
}
|
|
// call A
|
|
A
|