Update a configuration file: Difference between revisions
Content added Content deleted
MaiconSoft (talk | contribs) (Added Delphi example) |
(Added Wren) |
||
Line 4,005: | Line 4,005: | ||
{{Out}} |
{{Out}} |
||
<pre> |
|||
# This is a configuration file in standard configuration file format |
|||
# |
|||
# Lines begininning with a hash or a semicolon are ignored by the application |
|||
# program. Blank lines are also ignored by the application program. |
|||
# The first word on each non comment line is the configuration option. |
|||
# Remaining words or numbers on the line are configuration parameter |
|||
# data fields. |
|||
# Note that configuration option names are not case sensitive. However, |
|||
# configuration parameter data is case sensitive and the lettercase must |
|||
# be preserved. |
|||
# This is a favourite fruit |
|||
FAVOURITEFRUIT banana |
|||
# This is a boolean that should be set |
|||
; NEEDSPEELING |
|||
# This boolean is commented out |
|||
SEEDSREMOVED |
|||
# How many bananas we have |
|||
NUMBEROFBANANAS 1024 |
|||
NUMBEROFSTRAWBERRIES 62000 |
|||
</pre> |
|||
=={{header|Wren}}== |
|||
{{trans|Kotlin}} |
|||
{{libheader|Wren-ioutil}} |
|||
{{libheader|Wren-dynamic}} |
|||
{{libheader|Wren-fmt}} |
|||
<lang ecmascript>import "io" for File |
|||
import "/ioutil" for FileUtil |
|||
import "/dynamic" for Tuple |
|||
import "/str" for Str |
|||
var fields = ["favouriteFruit", "needsPeeling", "seedsRemoved", "numberOfBananas", "numberOfStrawberries"] |
|||
var ConfigData = Tuple.create("ConfigData", fields) |
|||
var updateConfigFile = Fn.new { |fileName, cData| |
|||
var lines = File.read(fileName).trimEnd().split(FileUtil.lineBreak) |
|||
var tempFileName = "temp_%(fileName)" |
|||
var out = File.create(tempFileName) |
|||
var hadFruit = false |
|||
var hadPeeling = false |
|||
var hadSeeds = false |
|||
var hadBananas = false |
|||
var hadStrawberries = false |
|||
for (line in lines) { |
|||
var cont = false |
|||
if (line.isEmpty || line[0] == "#") { |
|||
out.writeBytes(line + "\n") |
|||
cont = true |
|||
} |
|||
if (!cont) { |
|||
var ln = Str.upper(line.trimStart(";").trim()) |
|||
if (!ln.isEmpty) { |
|||
if (ln.take(14).join() == "FAVOURITEFRUIT") { |
|||
if (!hadFruit) { |
|||
hadFruit = true |
|||
out.writeBytes("FAVOURITEFRUIT %(cData.favouriteFruit)\n") |
|||
} |
|||
} else if (ln.take(12).join() == "NEEDSPEELING") { |
|||
if (!hadPeeling) { |
|||
hadPeeling = true |
|||
if (cData.needsPeeling) { |
|||
out.writeBytes("NEEDSPEELING\n") |
|||
} else { |
|||
out.writeBytes("; NEEDSPEELING\n") |
|||
} |
|||
} |
|||
} else if (ln.take(12).join() == "SEEDSREMOVED") { |
|||
if (!hadSeeds) { |
|||
hadSeeds = true |
|||
if (cData.seedsRemoved) { |
|||
out.writeBytes("SEEDSREMOVED\n") |
|||
} else { |
|||
out.writeBytes("; SEEDSREMOVED\n") |
|||
} |
|||
} |
|||
} else if (ln.take(15).join() == "NUMBEROFBANANAS") { |
|||
if (!hadBananas) { |
|||
hadBananas = true |
|||
out.writeBytes("NUMBEROFBANANAS %(cData.numberOfBananas)\n") |
|||
} |
|||
} else if (ln.take(20).join() == "NUMBEROFSTRAWBERRIES") { |
|||
if (!hadStrawberries) { |
|||
hadStrawberries = true |
|||
out.writeBytes("NUMBEROFSTRAWBERRIES %(cData.numberOfStrawberries)\n") |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
if (!hadFruit) { |
|||
out.writeBytes("FAVOURITEFRUIT %(cData.favouriteFruit)\n") |
|||
} |
|||
if (!hadPeeling) { |
|||
if (cData.needsPeeling) { |
|||
out.writeBytes("NEEDSPEELING\n") |
|||
} else { |
|||
out.writeBytes("; NEEDSPEELING\n") |
|||
} |
|||
} |
|||
if (!hadSeeds) { |
|||
if (cData.seedsRemoved) { |
|||
out.writeBytes("SEEDSREMOVED\n") |
|||
} else { |
|||
out.writeBytes("; SEEDSREMOVED\n") |
|||
} |
|||
} |
|||
if (!hadBananas) { |
|||
out.writeBytes("NUMBEROFBANANAS %(cData.numberOfBananas)\n") |
|||
} |
|||
if (!hadStrawberries) { |
|||
out.writeBytes("NUMBEROFSTRAWBERRIES %(cData.numberOfStrawberries)\n") |
|||
} |
|||
out.close() |
|||
FileUtil.move(tempFileName, fileName, true) |
|||
} |
|||
var fileName = "config.txt" |
|||
var cData = ConfigData.new("banana", false, true, 1024, 62000) |
|||
updateConfigFile.call(fileName, cData)</lang> |
|||
{{out}} |
|||
<pre> |
<pre> |
||
# This is a configuration file in standard configuration file format |
# This is a configuration file in standard configuration file format |