4

The following code reads a file and turned each line into array items:

fs.readFile('en.txt', 'utf8', function (err, data) {
  if (err) {
    return console.log(err)
  }

  enStrings = data.split(/[\r\n]+/g)
}

en.txt looks like this:

Line 1
Line 2
Line 3

But I'm puzzled. console.log(enStrings) outputs this:

[ 'Line 1', 'Line 2', 'Line 3', '' ]

Why is that last empty item being added? And how to remove it?

1
  • Since you are splitting by the new line character it is understandable that there would be an empty line marking the end of the file. You may need to explicitly remove the empty line after reading the file. Commented Nov 26, 2015 at 6:53

3 Answers 3

7

This would happen if your text file has a trailing new line character, which is common.

Why not trim before splitting?

enStrings = data.trim().split(/[\r\n]+/g);

Alternately, you could remove just the trailing new line characters before splitting.

enStrings = data.replace(/[\n\r]+$/, '').split(/[\r\n]+/g)

However, if your data is long, you may want to avoid the performance hit of recreating the entire string before splitting. If that is the case, you could use the following to pop it off the end.

if (enStrings.length && !enStrings[enStrings.length-1]) {
    enStrings.pop();
}
Sign up to request clarification or add additional context in comments.

Comments

1

You may use filter:

console.log(enStrings.filter(Boolean));

Empty strings are falsy value so using .filter(Boolean) will only list the truthy value and removes the empty strings from your array.

Comments

0

You can try this:

enStrings = data.split(/[\r\n]+/g);
enStrings.splice($.inArray('', enStrings), 1);

1 Comment

@AlexanderO'Mara I just edit my answer, you can check again

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.