Skip to content

Commit 87f8e4f

Browse files
committed
Remove redunant commas of tail null values
Certain compilers require null value assignments to end with commas. The `Namelist` writer contains a special rule to append this comma. If `end_comma` is enabled, which always finalizes values with commas, then this would append a second comma, which would transform the record into two null values. This patch prevents the redundant comma if end_commas are enabled. Thanks to Paul Leopardi (@penguian) for reporting.
1 parent 778fb0c commit 87f8e4f

File tree

3 files changed

+20
-1
lines changed

3 files changed

+20
-1
lines changed

f90nml/namelist.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -914,7 +914,8 @@ def _var_strings(self, v_name, v_values, v_idx=None, v_start=None):
914914
val_strs.append(val_line.rstrip())
915915

916916
# Final null values must always precede a comma
917-
if val_strs and (len(v_values) == 0 or v_values[-1] is None):
917+
if (val_strs and (len(v_values) == 0 or v_values[-1] is None)
918+
and not self.end_comma):
918919
# NOTE: val_strs has been rstrip-ed so lead with a space
919920
val_strs[-1] += ' ,'
920921

tests/null_target_end_comma.nml

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
&null_nml
2+
null_value = ,
3+
/
4+
5+
&null_comma_nml
6+
null_comma = ,
7+
/
8+
9+
&null_nocomma_rpt_nml
10+
null_one = ,
11+
null_two = ,
12+
/

tests/test_f90nml.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -597,6 +597,12 @@ def test_null(self):
597597
self.assertEqual(self.null_nml, test_nml)
598598
self.assert_write(test_nml, 'null_target.nml')
599599

600+
def test_null_end_comma(self):
601+
test_nml = f90nml.read('null.nml')
602+
test_nml.end_comma = True
603+
self.assertEqual(self.null_nml, test_nml)
604+
self.assert_write(test_nml, 'null_target_end_comma.nml')
605+
600606
def test_unset(self):
601607
test_nml = f90nml.read('unset.nml')
602608
self.assertEqual(self.unset_nml, test_nml)

0 commit comments

Comments
 (0)