2

I am generating a table with 4 columns, wheras only the columns 3 and 4 have the same length.

alloutput = 
 TableForm[
  Table[{10^(j), 
    Table[{N[10^(i)], 
      Table[{l, 
        N[ArcTan[BesselJ[l, y'[l/j]]]] /. 
         With[{epsilon = 10^(-10), mphi = 10^(i), end = 10^3}, 
          First@NDSolve[{y''[
                x] + (0.001^2 + 1/(x)*Exp[-mphi*x/(10^(j)*0.01)] - 
                  l (l + 1)/(x^2))*y[x] == 0, y[epsilon] == 1, 
             y'[epsilon] == (l + 1)/(epsilon)}, 
            y, {x, epsilon, end}]]}, {l, 0, 5, 1}]}, {i, 0, 1, 
      1}]}, {j, 2, 3, 1}]]

Now the aim is to export the obtained data in a certain way. Namely to create for each new value in the first column (10^j) a new folder. In this very folder the data from column 3 and 4 should be written seperatly into a data file corresponding to the right value of column 2 (10^i).

Since this might be a bit confusing, I want to give an example:

The values of column 1 are in this example 100 and 1000. So I would like to create the folders with name folder100 and folder1000. In each of both folders then should be generated data files with the name of the value of column 2 (i.e. file1 and file10). Now finally in these data files I would like to write the corresponding values of the columns 3 and 4 in table form.

I guess one has to use CreateDirectory and ToString but I dont get it right.

user64494
  • 26,149
  • 4
  • 27
  • 56
stef
  • 321
  • 2
  • 10

1 Answers1

4

I think this does what you want.

exportToFolder[{dir_, data : {{_, _?MatrixQ} ..}}] :=
  With[{path = "folder" <> ToString @ dir},
    CreateDirectory @ path;
    Export[FileNameJoin[{path, ToString @ #}], #2, "Table"] & @@@ data;
  ]

Make sure you first remove the TableForm wrapper from your data:

rawoutput = First @ alloutput;

Then your export may be performed with:

Scan[exportToFolder, rawoutput]
Mr.Wizard
  • 271,378
  • 34
  • 587
  • 1,371
  • Thats a very nice idea! However, how can the files be named like file1.dat, file10.dat instead of 1.,10. ? – stef Jul 07 '16 at 11:31
  • 1
    okay got it, just replaced ToString @ # with "file" <> ToString@# – stef Jul 07 '16 at 14:33
  • 1
    @stef Glad I could help, and yes, that's the way I would do it. Let me know if you have any problems with this. Also perhaps see: (20412) – Mr.Wizard Jul 07 '16 at 20:44