3
$\begingroup$

Given is a list with x, y, z coordinates:

{{100, 94, -1.112}, {100.05, 94, -1.112}, {100.1, 94, -0.982}, ..., {100, 94.25, -1.112}, {100.05, 94.25, -0.855}, {100.1, 94.25, -0.728}, ..., {139.95, 114.75, 1.184},{140, 114.75, 1.184}}

I want to split this list into files with y = constant, y should moreover form the name of the new file (see the code below) and only the (x, z) values should be written into the file.

Getting the name for the first file I use this code:

liste = ReadList[inffile, {Number, Number, Number}];
y = liste[[All, 2]];
fil = IntegerString[IntegerPart[First[y]*100], 10, 5];
newfile = ToString[fil] <> ".dat";
wfile = OpenWrite[newfile, FormatType -> TraditionalForm];

Which is the best way to extract now all (x,y,z) with the same y (y = 94) from this list, to write all of them into the new file, and to continue with the next new file with the next y-value (y = 94.25)? Thanks a lot

$\endgroup$

1 Answer 1

8
$\begingroup$

GatherBy is a very convenient function you should look into (Performing operations on subgroups of data).

data = {{100, 94, -1.112}, {100.05, 94, -1.112}, {100.1, 
   94, -0.982}, {100, 94.25, -1.112}, {100.05, 94.25, -0.855}, {100.1,
   94.25, -0.728}, {139.95, 114.75, 1.184}, {140, 114.75, 1.184}};

Here you group all the cases that have the identical second value:

groups = GatherBy[data, #[[2]] &];

And, then you can just select each group:

groups[[1]]
(* {{100, 94, -1.112}, {100.05, 94, -1.112}, {100.1, 94, -0.982}} *)

To export x,z values into different files named after y value:

Table[Export[IntegerString[IntegerPart[groups[[i, 1, 2]]*100], 10, 5] <> ".dat", 
  groups[[i, All, {1, 3}]], "TSV"], {i, Length[groups]}]

or, more concisely, as suggested by Verde:

Export[IntegerString[IntegerPart[#[[1, 2]]*100], 10, 5] <> 
    ".dat", #[[All, {1, 3}]], "TSV"] & /@ groups
$\endgroup$
3
  • $\begingroup$ Export["Group" <> ToString[#[[1, 2]]] <> ".txt", #[[All, {1, 3}]], "TSV"] & /@ groups $\endgroup$ Commented Aug 7, 2012 at 16:53
  • $\begingroup$ Hi VLC, thanks a lot!!! Also for the link. This is exactly what I was looking for. I did so much crazy programming in the last hours... $\endgroup$ Commented Aug 7, 2012 at 16:57
  • $\begingroup$ @Verde good point. $\endgroup$ Commented Aug 7, 2012 at 17:04

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.