I am new to Mathematica, and I find that there may be a lot of ways of doing this. I was wondering which one might be the most general.

I am importing data from .txt files, resulting in a ragged array due to many lines containing parameters and other comments which I want to ignore. I just want to import the numbers, and ignore the comments.

I am using this:

Import["filename.txt", "TSV", "HeaderLines" -> 15]

I have no TrailerLines that I need to skip, however, there are many rows halfway through the data which I would like to remove. These lines all start with #, which makes me think that there is a way to just specify that any line starting with # be skipped.

Thanks a lot in advance to anyone who might be able to help me with this.

  • 1
    $\begingroup$ Duplicate: 21075. Related: 2655, 29384 $\endgroup$
    – Michael E2
    Aug 20 '13 at 14:35
  • $\begingroup$ I'd be tempted to use DefineImportStreamMethod to do this, but it's use becomes more complex: you have to open the stream first with the method, and then use Import. But, Import's ability to use streams is undocumented, so your mileage may vary. $\endgroup$
    – rcollyer
    Aug 20 '13 at 14:38
  • $\begingroup$ Oh. Sorry about the duplicate question. I was not searching correctly I think. And thanks a lot to all for the help. $\endgroup$
    – CSR
    Aug 20 '13 at 14:44
  • $\begingroup$ @CSR I didn't find it at first, either. :) $\endgroup$
    – Michael E2
    Aug 20 '13 at 18:30

You could delete them after Import.

DeleteCases[Import["filename.txt", "Data", "HeaderLines" -> 10], {_String, ___}]

or more precisely

DeleteCases[Import["filename.txt", "Data", "HeaderLines" -> 10],
  {_String?(StringMatchQ[#, "#*"] &), ___}]

Not the answer you're looking for? Browse other questions tagged or ask your own question.