Just another update
This commit is contained in:
parent
a25938f123
commit
00a190b0a6
6591 changed files with 94363 additions and 23227 deletions
|
|
@ -1,4 +1,7 @@
|
|||
The task is to read a configuration file in standard configuration file, and set variables accordingly. For this task, we have a configuration file as follows:
|
||||
The task is to read a configuration file in standard configuration file,
|
||||
and set variables accordingly.
|
||||
|
||||
For this task, we have a configuration file as follows:
|
||||
|
||||
# This is a configuration file in standard configuration file format
|
||||
#
|
||||
|
|
|
|||
|
|
@ -0,0 +1,2 @@
|
|||
(let [cfg (read-string (slurp "config.edn"))]
|
||||
(clojure.pprint/pprint cfg))
|
||||
|
|
@ -0,0 +1,21 @@
|
|||
ClearAll[CreateVar, ImportConfig];
|
||||
CreateVar[x_, y_String: "True"] := Module[{},
|
||||
If[StringFreeQ[y, ","]
|
||||
,
|
||||
ToExpression[x <> "=" <> y]
|
||||
,
|
||||
ToExpression[x <> "={" <> StringJoin@Riffle[StringSplit[y, ","], ","] <> "}"]
|
||||
]
|
||||
]
|
||||
ImportConfig[configfile_String] := Module[{data},
|
||||
(*data = ImportString[configfile, "List", "Numeric" -> False];*)
|
||||
data=Import[configfile,"List","Numeric"\[Rule]False];
|
||||
|
||||
data = StringTrim /@ data;
|
||||
data = Select[data, # =!= "" &];
|
||||
data = Select[data, ! StringMatchQ[#, "#" | ";" ~~ ___] &];
|
||||
data = If[! StringFreeQ[#, " "], StringSplit[#, " ", 2], {#}] & /@ data;
|
||||
|
||||
CreateVar @@@ data;
|
||||
]
|
||||
ImportConfig[file]
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
(de rdConf (File)
|
||||
(in File
|
||||
(while (read)
|
||||
(set @ (or (pack (clip (line))) T)) ) ) )
|
||||
|
||||
(rdConf "conf.txt")
|
||||
(println FULLNAME FAVOURITEFRUIT NEEDSPEELING SEEDSREMOVED OTHERFAMILY)
|
||||
(bye)
|
||||
|
|
@ -0,0 +1,59 @@
|
|||
type TSettings extends QObject
|
||||
FullName as string
|
||||
FavouriteFruit as string
|
||||
NeedSpelling as integer
|
||||
SeedsRemoved as integer
|
||||
OtherFamily as QStringlist
|
||||
|
||||
Constructor
|
||||
FullName = ""
|
||||
FavouriteFruit = ""
|
||||
NeedSpelling = 0
|
||||
SeedsRemoved = 0
|
||||
OtherFamily.clear
|
||||
end constructor
|
||||
end type
|
||||
|
||||
Dim Settings as TSettings
|
||||
dim ConfigList as QStringList
|
||||
dim x as integer
|
||||
dim StrLine as string
|
||||
dim StrPara as string
|
||||
dim StrData as string
|
||||
|
||||
function Trim$(Expr as string) as string
|
||||
Result = Rtrim$(Ltrim$(Expr))
|
||||
end function
|
||||
|
||||
Sub ConfigOption(PData as string)
|
||||
dim x as integer
|
||||
for x = 1 to tally(PData, ",") +1
|
||||
Settings.OtherFamily.AddItems Trim$(field$(PData, "," ,x))
|
||||
next
|
||||
end sub
|
||||
|
||||
Function ConfigBoolean(PData as string) as integer
|
||||
PData = Trim$(PData)
|
||||
Result = iif(lcase$(PData)="true" or PData="1" or PData="", 1, 0)
|
||||
end function
|
||||
|
||||
sub ReadSettings
|
||||
ConfigList.LoadFromFile("Rosetta.cfg")
|
||||
ConfigList.text = REPLACESUBSTR$(ConfigList.text,"="," ")
|
||||
|
||||
for x = 0 to ConfigList.ItemCount -1
|
||||
StrLine = Trim$(ConfigList.item(x))
|
||||
StrPara = Trim$(field$(StrLine," ",1))
|
||||
StrData = Trim$(lTrim$(StrLine - StrPara))
|
||||
|
||||
Select case UCase$(StrPara)
|
||||
case "FULLNAME" : Settings.FullName = StrData
|
||||
case "FAVOURITEFRUIT" : Settings.FavouriteFruit = StrData
|
||||
case "NEEDSPEELING" : Settings.NeedSpelling = ConfigBoolean(StrData)
|
||||
case "SEEDSREMOVED" : Settings.SeedsRemoved = ConfigBoolean(StrData)
|
||||
case "OTHERFAMILY" : Call ConfigOption(StrData)
|
||||
end select
|
||||
next
|
||||
end sub
|
||||
|
||||
Call ReadSettings
|
||||
|
|
@ -0,0 +1,44 @@
|
|||
readconfig() (
|
||||
# redirect stdin to read from the given filename
|
||||
exec 0<"$1"
|
||||
|
||||
declare -l varname
|
||||
while IFS=$' =\t' read -ra words; do
|
||||
# is it a comment or blank line?
|
||||
if [[ ${#words[@]} -eq 0 || ${words[0]} == ["#;"]* ]]; then
|
||||
continue
|
||||
fi
|
||||
|
||||
# get the variable name
|
||||
varname=${words[0]}
|
||||
|
||||
# split all the other words by comma
|
||||
value="${words[*]:1}"
|
||||
oldIFS=$IFS IFS=,
|
||||
values=( $value )
|
||||
IFS=$oldIFS
|
||||
|
||||
# assign the other words to a "scalar" variable or array
|
||||
case ${#values[@]} in
|
||||
0) printf '%s=true\n' "$varname" ;;
|
||||
1) printf '%s=%q\n' "$varname" "${values[0]}" ;;
|
||||
*) n=0
|
||||
for value in "${values[@]}"; do
|
||||
value=${value# }
|
||||
printf '%s[%d]=%q\n' "$varname" $((n++)) "${value% }"
|
||||
done
|
||||
;;
|
||||
esac
|
||||
done
|
||||
)
|
||||
|
||||
# parse the config file and evaluate the output in the current shell
|
||||
source <( readconfig config.file )
|
||||
|
||||
echo "fullname = $fullname"
|
||||
echo "favouritefruit = $favouritefruit"
|
||||
echo "needspeeling = $needspeeling"
|
||||
echo "seedsremoved = $seedsremoved"
|
||||
for i in "${!otherfamily[@]}"; do
|
||||
echo "otherfamily[$i] = ${otherfamily[i]}"
|
||||
done
|
||||
Loading…
Add table
Add a link
Reference in a new issue