0
$\begingroup$

I have 101 files with data that I want to import into Mathematica. All the file names are numbered as follows datafile.20.0000.out, datafile.20.1000.out, datafile.20.2000.out and so on. I used the solution posted here Importing multiple files using a for-loop

However, the problem I am facing is the zeros at the end. I tried using

z = Table[i, {i, 20, 30, 0.1}]

Data = 
  Table[
    Import["C:\\Dropbox\\Sims\\datafile." <> 
      ToString[NumberForm[z[[j]], {6, 4}]] <> ".out", "Data"], 
    {j, 20, 30, 0.1}]

But I'm getting error messages.

I would like to retrieve date of each file by Data[[20]], Data[[20.1]] and so on.

$\endgroup$
4
  • 1
    $\begingroup$ what is the first file name? is it datafile.20.0000.out? so what is the last file full name? is it datafile.20.1010.out ? You can't have an index that is not discrete. So index 20.1 will not work. $\endgroup$
    – Nasser
    Oct 9, 2014 at 4:35
  • 1
    $\begingroup$ Just for starters, Data[[20.1]] is invalid syntax, list indices must be integers. $\endgroup$
    – m_goldberg
    Oct 9, 2014 at 4:37
  • $\begingroup$ Yes, the first one is datafile.20.0000 and the last one is datafile.30.0000. Yeah I made a mistake with the index. I suppose Data[[1]], Data[[2]] and so on storing datafile.20.0000, datafile.20.1000 and so on respectively. $\endgroup$
    – HuShu
    Oct 9, 2014 at 5:04
  • $\begingroup$ What error messages are you getting? $\endgroup$
    – Ymareth
    Oct 9, 2014 at 7:51

3 Answers 3

2
$\begingroup$

A little integer and string hacking generates all and only the names required.

Data = Table[s = ToString[j]; 
  Import["C:\\Dropbox\\Sims\\datafile." <> StringTake[s, 2] <> "." <> 
  StringDrop[s, 2] <> ".out", "Data"], {j, 200000, 300000, 1000}]
$\endgroup$
5
$\begingroup$

You can use FileNames to get list of .out files

data = Import[#, "Data"] &/@ FileNames["datafile.*.out", "C:\\Dropbox\\Sims\\", 1]
$\endgroup$
0
1
$\begingroup$

You could also use:

data= Import["c:\\dropbox\\sims\\datafile.20." 
<> IntegerString[#, 10, 4] <> ".out" ]& /@ Range[1000]
$\endgroup$

Your Answer

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

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