Home > Software engineering >  2nd object in array ignored (godot)
2nd object in array ignored (godot)

Time:11-24

I have a .csv file holding scores. This is what it looks like:

"name",10

The .csv is parsed with this function:

func _ready():
    var file = File.new()
    file.open("user://scores.csv", file.READ)
    while !file.eof_reached():
        line = file.get_csv_line()
        text = text   "%s: %s" % [line[0], line[1]]   "\n" ## Invalid get index: '1' (on base: PoolStringArray)

CodePudding user response:

The file must be ending in a new line. As a result, you get two lines while reading it. The first one has what you expect ([name, 10]), the second one is empty, causing an error when you try to index it.

When I tested this, the last line does not come as an empty array, but as an array with a single empty string. Looking around, this behavior has been there for a while. However, I found no bug reports or proposals, I wonder if there is a reason, or this was just overlooked.

You can check the number of columns you got. For example, the code below would skip any lines with not enough fields for your case:

    if line.size() < 2:
        continue

And this code will specifically target the extra line:

    if file.eof_reached() and line.size() == 1 and line[0] == "":
        break
  • Related