1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- #!/usr/bin/ruby
- #
- ## https://rosettacode.org/wiki/Read_a_configuration_file
- #
- var fullname = (var favouritefruit = "");
- var needspeeling = (var seedsremoved = false);
- var otherfamily = [];
- DATA.each { |line|
- var(key, value) = line.strip.split(/\h+/, 2)...;
- given(key) {
- when (nil) { }
- when (/^([#;]|\h*$)/) { }
- when ("FULLNAME") { fullname = value }
- when ("FAVOURITEFRUIT") { favouritefruit = value }
- when ("NEEDSPEELING") { needspeeling = true }
- when ("SEEDSREMOVED") { seedsremoved = true }
- when ("OTHERFAMILY") { otherfamily = value.split(',')»strip»() }
- default { say "#{key}: unknown key" }
- }
- }
- say "fullname = #{fullname}";
- say "favouritefruit = #{favouritefruit}";
- say "needspeeling = #{needspeeling}";
- say "seedsremoved = #{seedsremoved}";
- otherfamily.each_kv {|i, name|
- say "otherfamily(#{i+1}) = #{name}";
- };
- assert_eq(fullname, 'Foo Barber');
- assert_eq(favouritefruit, 'banana');
- assert_eq(needspeeling, true);
- assert_eq(seedsremoved, false);
- assert_eq(otherfamily[0], 'Rhu Barber');
- assert_eq(otherfamily[1], 'Harry Barber');
- __DATA__
- # This is a configuration file in standard configuration file format
- #
- # Lines beginning with a hash or a semicolon are ignored by the application
- # program. Blank lines are also ignored by the application program.
- # This is the fullname parameter
- FULLNAME Foo Barber
- # This is a favourite fruit
- FAVOURITEFRUIT banana
- # This is a boolean that should be set
- NEEDSPEELING
- # This boolean is commented out
- ; SEEDSREMOVED
- # Configuration option names are not case sensitive, but configuration parameter
- # data is case sensitive and may be preserved by the application program.
- # An optional equals sign can be used to separate configuration parameter data
- # from the option name. This is dropped by the parser.
- # A configuration option may take multiple parameters separated by commas.
- # Leading and trailing whitespace around parameter names and parameter data fields
- # are ignored by the application program.
- OTHERFAMILY Rhu Barber, Harry Barber
|