# Writing a CSV File

(Difference between revisions)

Several of the CoppeliaSim simulation scenes require a plain-text comma-separated values (CSV) file as input. A CSV file may represent the trajectory of a robot, where each row contains the configuration of the robot at an instant in time, with a fixed time between each row. If the robot has n joints, then each row has n numbers separated by commas. For example, five rows of a CSV file for a six-joint robot might look like this:

```2.950000, -1.570000, 0.000000, 0.000000, 0.000000, 0.000000
2.987484, -1.540050, 0.019967, 0.019992, 0.012495, 0.009996
3.024875, -1.510399, 0.039734, 0.039933, 0.024958, 0.019967
3.062079, -1.481344, 0.059104, 0.059775, 0.037360, 0.029888
3.099002, -1.453174, 0.077884, 0.079468, 0.049667, 0.039734
```

where each number is a joint angle in radians.

Below are code snippets in Python, MATLAB, and Mathematica that you can modify to create your own CSV files.

This page contains information on getting started quickly with Coppelia. This page contains a number of scenes that accept CSV file inputs for visualization of robot trajectories.

### Python

```import numpy as np

# Generate random 3x4 matrix of floats y, 3x1 vector of ints d
y = np.random.rand(3, 4)
d = np.random.randint(-100, 100, 3)

# Open a file for output
# Overwrite
f = open("output.csv", "w")
# Append
#f = open("output.csv", "a")

# For loop running 3 times to print each csv row
for i in range(len(d)):
output = " %10.6f, %10.6f, %10.6f, %10.6f, %d\n" % (y[i,0], y[i,1], y[i,2], y[i,3], d[i])
f.write(output)

# close file
f.close()

```

The code below is a somewhat simpler version.

```import numpy as np

# Generate random 3x4 matrix of floats y, 3x1 vector of ints d
y = np.random.rand(3, 4)
d = np.random.randint(-100, 100, 3)

# Set number precision
y = np.round(y, 6)

# Overwrite csv file
np.savetxt("output.csv", np.asarray(np.c_[y, d]), delimiter = ",")

```

### MATLAB

```% Generate random 3x4 matrix of floats y, 3x1 vector of ints d
y = rand(3, 4);
d = randi([-100, 100], 3, 1);

% Open a file for output
% Overwrite
f = fopen('output.csv', 'w');
% Append
%f = fopen('output.csv', 'a');

% For loop running 3 times to print each csv row
for i = 1: length(d)
fprintf(f, ' %10.6f, %10.6f, %10.6f, %10.6f, %d\n', y(i, :), d(i));
end

% Close file
fclose(f);

```

The code below is a somewhat simpler version.

```% Generate random 3x4 matrix of floats y, 3x1 vector of ints d
y = rand(3, 4);
d = randi([-100, 100], 3, 1);

% Set number precision
y = round(y, 6);

% Overwrite csv file
csvwrite('output.csv', [y, d]);

```

### Mathematica

```(* Generate random 3x4 matrix of floats y,3x1 vector of ints d *)

y = RandomReal[1, {3, 4}];
d = RandomInteger[{-100, 100}, {3, 1}];

(* Open a file for output *)
(* Overwrite *)

f = OpenWrite[FileNameJoin[{NotebookDirectory[], "output.csv"}]];
(* Append *)
(* \
f=OpenAppend[FileNameJoin[{NotebookDirectory[],"output.csv"}]]; *)

(* For loop running 3 times to print each csv row *)

Do[WriteString[f,
ExportString[{Flatten[{SetAccuracy[y[[i, ;;]], 6], d[[i]]}]},
"CSV"]], {i, Length[d]}];

(* Close file *)
Close[f];

```

The code below is a somewhat simpler version.

```(* Generate random 3x4 matrix of floats y,3x1 vector of ints d *)

y = RandomReal[1, {3, 4}];
d = RandomInteger[{-100, 100}, {3, 1}];

(* Set number precision *)
y = SetAccuracy[y, 6];

(* Overwrite csv file *)

Export[FileNameJoin[{NotebookDirectory[], "output.csv"}],
ArrayFlatten[{{y, d}}], "CSV"];

```