4

TIZK: How to create multiple images from csv files

Hello people. I have 3 .csv files generated from a soccer match log. The ball.dat file contains the positions of the ball every second. The blue.dat and yellow.dat files contain the players' positions, id and name (also separated every second).

If I separate each file per second, I can generate an isolated image similar to the attached one. However, I wanted it to be generated automatically from the number of seconds (using the balls.dat file as a reference).

I also need to put the player's name on top of each representation of the robot.

Any idea? Follow what I've done so far ...

EDIT: Hello, I understand the filter issue ... but I believe it would have to be something like this

while not eof balls.txt
   draw the field
   draw the ball
   save the second of the ball (1 field)
   for each blue.dat record
      draw players with the same second as the ball (1 field)
   for each yellow.dat record
      draw players with the same second as the ball (1 field)
end while

It is possible?

And very grateful for the help !!!

\documentclass[varwidth]{standalone}
\usepackage{tikzducks,listofitems}
\usetikzlibrary{arrows.meta, calc,backgrounds}
\usepackage{pgfplots}
\pgfplotsset{compat=newest}
\usepackage{geometry}
\usepackage{caption}
\usepackage{subcaption}
\usepackage{lmodern}


\geometry{
 %paperwidth=25cm,
 left=1in,right=1in,top=1in,bottom=1in
}

\pgfplotsset{% https://tex.stackexchange.com/a/75811/121799
    name nodes near coords/.style={
        every node near coord/.append style={
            name=#1-\coordindex,
            alias=#1-last,
        },
    },
    name nodes near coords/.default=coordnode
}

\usepackage{relsize}

\usepackage{filecontents}

%second, time(microsec), x, y
\begin{filecontents}{balls.dat}
1;0.163867;853.202;411.623
2;0.665292;853.205;411.634
3;1.14752;853.253;411.666
4;1.65572;860.782;420.365
5;2.13361;944.19;510.61
\end{filecontents}

%second, time(microsec), id robot, x, y, name robot (G = goalie)
\begin{filecontents}{blue.dat}
1;0.163867;0;59.9436;447.041;G0
1;0.163867;1;1024.84;305.308;L1
1;0.163867;6;1025.1;345.362;L6
1;0.163867;11;1025.39;144.934;L11
1;0.163867;5;1025.41;184.981;L5
1;0.163867;7;857.125;378.16;L7
1;0.163867;10;1024.93;265.435;L10
2;0.665292;0;59.8692;447.08;G0
2;0.665292;6;1024.92;364.446;L6
2;0.665292;10;1012.87;283.053;L10
2;0.665292;5;1042.67;190.815;L5
2;0.665292;11;1044.36;138.297;L11
2;0.665292;7;851.479;387.303;L7
2;0.665292;1;1011.04;324.776;L1
3;1.14752;6;1030.34;432.027;L6
3;1.14752;1;989.862;364.013;L1
3;1.14752;10;986.258;316.301;L10
3;1.14752;11;1087.93;132.348;L11
3;1.14752;5;1084.32;210.705;L5
3;1.14752;7;843.719;402.942;L7
3;1.14752;0;59.9243;447.097;G0
4;1.65572;0;59.7685;447.159;G0
4;1.65572;6;1043.28;502.523;L6
4;1.65572;10;996.377;319.225;L10
4;1.65572;5;1090;224.371;L5
4;1.65572;1;997.526;402.626;L1
4;1.65572;11;1094.68;135.896;L11
4;1.65572;7;846.519;406.466;L7
5;2.13361;10;995.959;339.028;L10
5;2.13361;1;997.691;425.286;L1
5;2.13361;6;1070.78;576.922;L6
5;2.13361;5;1095.77;215.895;L5
5;2.13361;7;870.321;431.887;L7
5;2.13361;11;1062.27;151.637;L11
5;2.13361;0;59.8403;451.457;G0
\end{filecontents}

%second, time(microsec), id robot, x, y, name robot (G = goalie)
\begin{filecontents}{yellow.dat}
1;0.163867;4;129.81;604.7;L4
1;0.163867;1;1061.97;336.491;L1
1;0.163867;2;1072.86;316.706;L2
1;0.163867;11;1105.81;315.586;L11
1;0.163867;9;931.528;421.691;L9
1;0.163867;6;1125.61;315.509;L6
1;0.163867;5;1062.42;435.047;L5
1;0.163867;10;1186.28;458.823;G10
2;0.665292;4;149.446;600.335;L4
2;0.665292;9;931.478;421.653;L9
2;0.665292;2;1062.65;319.062;L2
2;0.665292;6;1130.93;315.62;L6
2;0.665292;1;1055.34;347.775;L1
2;0.665292;11;1111.41;315.564;L11
2;0.665292;5;1062.56;435.184;L5
2;0.665292;10;1187.68;484.545;G10
3;1.14752;9;931.601;421.634;L9
3;1.14752;5;1062.55;435.141;L5
3;1.14752;2;1051.66;330.343;L2
3;1.14752;11;1131.94;314.61;L11
3;1.14752;6;1152.1;315.178;L6
3;1.14752;10;1185.93;500.69;G10
3;1.14752;1;1059.89;381.66;L1
3;1.14752;4;202.01;558.01;L4
4;1.65572;4;256.971;471.213;L4
4;1.65572;11;1131.7;315.357;L11
4;1.65572;2;1031;309.405;L2
4;1.65572;10;1183.94;503.177;G10
4;1.65572;1;1050.97;401.046;L1
4;1.65572;6;1154.76;315.225;L6
4;1.65572;5;1062.53;435.206;L5
4;1.65572;9;931.799;421.595;L9
5;2.13361;9;946.568;435.222;L9
5;2.13361;5;1063.26;450.65;L5
5;2.13361;2;1019.86;284.222;L2
5;2.13361;6;1150.71;314.681;L6
5;2.13361;10;1182.65;506.68;G10
5;2.13361;1;1053.52;432.132;L1
5;2.13361;11;1130.51;315.423;L11
5;2.13361;4;286.898;366.275;L4
\end{filecontents}

\definecolor{field}{RGB}{0,156,0}
\definecolor{pinkr}{RGB}{255,8,127}

\tikzset{
   every node/.style={very thick, inner sep=0, outer sep=0,draw=white}, 
   every path/.style={draw=white, very thick},
}

\newcommand\area[2]{
\begin{scope}[shift={(#1)},transform shape, rotate=#2]
 \node[minimum width=1.2cm,minimum height=2.4cm, anchor=west] (small#2) at (0,0) {};
 \node[minimum width=.244cm, minimum height=1.2cm, anchor=east] (goal#2) at (0,0) {};
 \begin{scope}
    \tikzset{every path/.style={}}
    \end{scope}
 \end{scope}
 }


\newcommand{\Playerb}[1]{
    \ifcase#1
    \xdef\ColorList{green,pinkr,pinkr,pinkr} %0
    \or
    \xdef\ColorList{green,pinkr,pinkr,green} %1
    \or
    \xdef\ColorList{green,pinkr,green,green} %2
    \or
    \xdef\ColorList{green,pinkr,green,pinkr} %3
    \or
    \xdef\ColorList{pinkr,green,pinkr,pinkr} %4
    \or
    \xdef\ColorList{pinkr,green,pinkr,green} %5
    \or
    \xdef\ColorList{pinkr,green,green,green} %6
    \or
    \xdef\ColorList{pinkr,green,green,pinkr} %7
    \or
    \xdef\ColorList{green,green,green,green} %8
    \or
    \xdef\ColorList{pinkr,pinkr,pinkr,pinkr} %9
    \or
    \xdef\ColorList{green,green,pinkr,pinkr} %10
    \or
    \xdef\ColorList{pinkr,pinkr,green,green} %11
    \fi
    \begin{tikzpicture}[scale=0.1]
    \clip (-2.5,-2) rectangle (1.2,2);
    \draw[fill=black] (-1,0) circle (1);
    \draw[fill=blue] (-1,0) circle (0.5) node  {\tiny\sffamily \n};

    \readlist\x{-1,0,-1,-2}
    \readlist\y{-1,0,1,0}

    \foreach \Color [count=\n] in \ColorList
    {

        \draw[fill=\Color] (\x[\n],\y[\n]) circle (0.4);

    }
    \end{tikzpicture}
}

\newcommand{\Playery}[1]{
    \ifcase#1
    \xdef\ColorList{pinkr,pinkr,green,pinkr} %0
    \or
    \xdef\ColorList{pinkr, green,green,pinkr} %1
    \or
    \xdef\ColorList{green,green,green,pinkr} %2
    \or
    \xdef\ColorList{green,pinkr,green,pinkr} %3
    \or
    \xdef\ColorList{pinkr,pinkr,pinkr,green} %4
    \or
    \xdef\ColorList{pinkr,green,pinkr,green} %5
    \or
    \xdef\ColorList{green,green,pinkr,green} %6
    \or
    \xdef\ColorList{green,pinkr,green,green} %7
    \or
    \xdef\ColorList{green,green,green,green} %8
    \or
    \xdef\ColorList{pinkr,pinkr,pinkr,pinkr} %9
    \or
    \xdef\ColorList{pinkr,pinkr,green,green} %10
    \or
    \xdef\ColorList{green,green,pinkr,pinkr} %11
    \fi
    \begin{tikzpicture}[scale=0.1]
    \clip (-2.5,-2) rectangle (1.2,2);
    \draw[fill=orange] (-1,0) circle (1);
    \draw[fill=yellow] (-1,0) circle (0.5) node  {\tiny\sffamily \n};

    \readlist\x{-1,0,-1,-2}
    \readlist\y{-1,0,1,0}

    \foreach \Color [count=\n] in \ColorList
    {

        \draw[fill=\Color] (\x[\n],\y[\n]) circle (0.4);

    }

    \end{tikzpicture}
}



\begin{document}

\pgfplotstablegetrowsof{blue.dat}
\pgfmathsetmacro{\rowsBlue}{\pgfplotsretval-1}  

\pgfplotstablegetrowsof{yellow.dat}
\pgfmathsetmacro{\rowsYellow}{\pgfplotsretval-1}
\pgfmathsetmacro{\rowsYellowGoalie}{\pgfplotsretval}

\pgfplotstablegetrowsof{balls.dat}
\pgfmathsetmacro{\rowsBall}{\pgfplotsretval-1}

\begin{tikzpicture}
    \begin{scope}[on background layer]
    \fill[field] (-1,-1) rectangle (13,10);
    \node[minimum width=12cm, minimum height=9cm] (contour) at (6,4.5) {};

    % Center
    \draw (contour.north) -- (contour.south);
    \draw (contour.center) circle (0.915cm);
    \fill[white] (contour.center) circle (.5mm);

    % Areas
    \area{contour.west}{0}
    \area{contour.east}{180}

    % Corners
    \foreach \corner [count=\xi starting from 0] in {south west, south east, north east, north west}{
        \begin{scope}[rotate around={90*\xi:(contour.\corner)}]
            \draw ([xshift=1mm]contour.\corner) arc (0:90:1mm);
        \end{scope}
    }
    \end{scope}
    \tikzset{ % <- undo the settings needed for the soccer field
    every node/.style={}, 
    every path/.style={},
    }

    \begin{axis}[x=.01cm, y=.01cm, xmin=0,  ymin=0, xmax=1200,ymax=900,nodes near coords,enlargelimits=0.0] 


       \addplot [only marks,mark=*, mark options={color = orange},name nodes near coords=ball,nodes near coords={}] table [header=false, x index=2, y index=3, col sep=semicolon] {balls.dat};

       \addplot [only marks,mark=*, mark options={color = blue},name nodes near coords=b,nodes near coords={}]  table [header=false, x index=3, y index=4, col sep=semicolon] {blue.dat};

       \addplot [only marks,mark=*,mark options={color = yellow}, name nodes near coords=y,nodes near coords={}] table [header=false, x index=3, y index=4, col sep=semicolon]{yellow.dat};

    \end{axis}


    \foreach \n in {0,...,7}
    {
        \node at (b-\n.south){\Playerb{\n}};
    }

    \foreach \n in {0,...,7}
    {
        \node at (y-\n.south){\Playery{\n}};
    }
\end{tikzpicture}
\end{document}

DONE

3

You can loop over the times from balls.dat via

 \pgfplotstableforeachcolumnelement{[index]0}\of\ballstable\as\Time{ ... }

Then you can install a filter that selects one time,

       x filter/.code={\pgfplotstablegetelem{\coordindex}{[index]0}\of{\yellowtable}
       \unless\ifnum\pgfplotsretval=\Time
                    \def\pgfmathresult{}
                    \fi

Other than that you nested tikzpictures, so I made Playerb and Playery pics. However, from your code it is not clear how they are to be used, you had hard-coded loops from 0 to 7. And a few more minor things.

\documentclass[tikz,border=1in]{standalone}
\usetikzlibrary{arrows.meta, calc,backgrounds}
\usepackage{pgfplots}
\pgfplotsset{compat=newest}
\pgfplotsset{% https://tex.stackexchange.com/a/75811/121799
    name nodes near coords/.style={
        every node near coord/.append style={
            name=#1-\coordindex,
            alias=#1-last,
        },
    },
    name nodes near coords/.default=coordnode
}

\usepackage{relsize}

\usepackage{filecontents}

%second, time(microsec), x, y
\begin{filecontents}{balls.dat}
1;0.163867;853.202;411.623
2;0.665292;853.205;411.634
3;1.14752;853.253;411.666
4;1.65572;860.782;420.365
5;2.13361;944.19;510.61
\end{filecontents}

%second, time(microsec), id robot, x, y, name robot (G = goalie)
\begin{filecontents}{blue.dat}
1;0.163867;0;59.9436;447.041;G0
1;0.163867;1;1024.84;305.308;L1
1;0.163867;6;1025.1;345.362;L6
1;0.163867;11;1025.39;144.934;L11
1;0.163867;5;1025.41;184.981;L5
1;0.163867;7;857.125;378.16;L7
1;0.163867;10;1024.93;265.435;L10
2;0.665292;0;59.8692;447.08;G0
2;0.665292;6;1024.92;364.446;L6
2;0.665292;10;1012.87;283.053;L10
2;0.665292;5;1042.67;190.815;L5
2;0.665292;11;1044.36;138.297;L11
2;0.665292;7;851.479;387.303;L7
2;0.665292;1;1011.04;324.776;L1
3;1.14752;6;1030.34;432.027;L6
3;1.14752;1;989.862;364.013;L1
3;1.14752;10;986.258;316.301;L10
3;1.14752;11;1087.93;132.348;L11
3;1.14752;5;1084.32;210.705;L5
3;1.14752;7;843.719;402.942;L7
3;1.14752;0;59.9243;447.097;G0
4;1.65572;0;59.7685;447.159;G0
4;1.65572;6;1043.28;502.523;L6
4;1.65572;10;996.377;319.225;L10
4;1.65572;5;1090;224.371;L5
4;1.65572;1;997.526;402.626;L1
4;1.65572;11;1094.68;135.896;L11
4;1.65572;7;846.519;406.466;L7
5;2.13361;10;995.959;339.028;L10
5;2.13361;1;997.691;425.286;L1
5;2.13361;6;1070.78;576.922;L6
5;2.13361;5;1095.77;215.895;L5
5;2.13361;7;870.321;431.887;L7
5;2.13361;11;1062.27;151.637;L11
5;2.13361;0;59.8403;451.457;G0
\end{filecontents}

%second, time(microsec), id robot, x, y, name robot (G = goalie)
\begin{filecontents}{yellow.dat}
1;0.163867;4;129.81;604.7;L4
1;0.163867;1;1061.97;336.491;L1
1;0.163867;2;1072.86;316.706;L2
1;0.163867;11;1105.81;315.586;L11
1;0.163867;9;931.528;421.691;L9
1;0.163867;6;1125.61;315.509;L6
1;0.163867;5;1062.42;435.047;L5
1;0.163867;10;1186.28;458.823;G10
2;0.665292;4;149.446;600.335;L4
2;0.665292;9;931.478;421.653;L9
2;0.665292;2;1062.65;319.062;L2
2;0.665292;6;1130.93;315.62;L6
2;0.665292;1;1055.34;347.775;L1
2;0.665292;11;1111.41;315.564;L11
2;0.665292;5;1062.56;435.184;L5
2;0.665292;10;1187.68;484.545;G10
3;1.14752;9;931.601;421.634;L9
3;1.14752;5;1062.55;435.141;L5
3;1.14752;2;1051.66;330.343;L2
3;1.14752;11;1131.94;314.61;L11
3;1.14752;6;1152.1;315.178;L6
3;1.14752;10;1185.93;500.69;G10
3;1.14752;1;1059.89;381.66;L1
3;1.14752;4;202.01;558.01;L4
4;1.65572;4;256.971;471.213;L4
4;1.65572;11;1131.7;315.357;L11
4;1.65572;2;1031;309.405;L2
4;1.65572;10;1183.94;503.177;G10
4;1.65572;1;1050.97;401.046;L1
4;1.65572;6;1154.76;315.225;L6
4;1.65572;5;1062.53;435.206;L5
4;1.65572;9;931.799;421.595;L9
5;2.13361;9;946.568;435.222;L9
5;2.13361;5;1063.26;450.65;L5
5;2.13361;2;1019.86;284.222;L2
5;2.13361;6;1150.71;314.681;L6
5;2.13361;10;1182.65;506.68;G10
5;2.13361;1;1053.52;432.132;L1
5;2.13361;11;1130.51;315.423;L11
5;2.13361;4;286.898;366.275;L4
\end{filecontents}

\definecolor{field}{RGB}{0,156,0}
\definecolor{pinkr}{RGB}{255,8,127}

\tikzset{
   every node/.style={very thick, inner sep=0, outer sep=0,draw=white}, 
   every path/.style={draw=white, very thick},
}

\newcommand\area[2]{
\begin{scope}[shift={(#1)},transform shape, rotate=#2]
 \node[minimum width=1.2cm,minimum height=2.4cm, anchor=west] (small#2) at (0,0) {};
 \node[minimum width=.244cm, minimum height=1.2cm, anchor=east] (goal#2) at (0,0) {};
 \begin{scope}
    \tikzset{every path/.style={}}
    \end{scope}
 \end{scope}
 }

\tikzset{pics/Playerb/.style={code={
    \ifcase#1
    \xdef\ColorList{green,pinkr,pinkr,pinkr} %0
    \or
    \xdef\ColorList{green,pinkr,pinkr,green} %1
    \or
    \xdef\ColorList{green,pinkr,green,green} %2
    \or
    \xdef\ColorList{green,pinkr,green,pinkr} %3
    \or
    \xdef\ColorList{pinkr,green,pinkr,pinkr} %4
    \or
    \xdef\ColorList{pinkr,green,pinkr,green} %5
    \or
    \xdef\ColorList{pinkr,green,green,green} %6
    \or
    \xdef\ColorList{pinkr,green,green,pinkr} %7
    \or
    \xdef\ColorList{green,green,green,green} %8
    \or
    \xdef\ColorList{pinkr,pinkr,pinkr,pinkr} %9
    \or
    \xdef\ColorList{green,green,pinkr,pinkr} %10
    \or
    \xdef\ColorList{pinkr,pinkr,green,green} %11
    \fi
    \begin{scope}[scale=0.1]
    \clip (-2.5,-2) rectangle (1.2,2);
    \draw[fill=black] (-1,0) circle (1);
    \draw[fill=blue] (-1,0) circle (0.5) node  {\tiny\sffamily #1};

    \def\listx{-1,0,-1,-2}
    \def\listy{-1,0,1,0}

    \foreach \Color [count=\n starting from 0] in \ColorList
    {

        \draw[fill=\Color] ({{\listx}[\n]},{{\listy}[\n]}) circle[radius=0.4];

    }
    \end{scope}}},
pics/Playery/.style={code={
    \ifcase#1
    \xdef\ColorList{pinkr,pinkr,green,pinkr} %0
    \or
    \xdef\ColorList{pinkr, green,green,pinkr} %1
    \or
    \xdef\ColorList{green,green,green,pinkr} %2
    \or
    \xdef\ColorList{green,pinkr,green,pinkr} %3
    \or
    \xdef\ColorList{pinkr,pinkr,pinkr,green} %4
    \or
    \xdef\ColorList{pinkr,green,pinkr,green} %5
    \or
    \xdef\ColorList{green,green,pinkr,green} %6
    \or
    \xdef\ColorList{green,pinkr,green,green} %7
    \or
    \xdef\ColorList{green,green,green,green} %8
    \or
    \xdef\ColorList{pinkr,pinkr,pinkr,pinkr} %9
    \or
    \xdef\ColorList{pinkr,pinkr,green,green} %10
    \or
    \xdef\ColorList{green,green,pinkr,pinkr} %11
    \fi
    \begin{scope}[scale=0.1]
    \clip (-2.5,-2) rectangle (1.2,2);
    \draw[fill=orange] (-1,0) circle (1);
    \draw[fill=yellow] (-1,0) circle (0.5) node  {\tiny\sffamily #1};

    \def\listx{-1,0,-1,-2}
    \def\listy{-1,0,1,0}

    \foreach \Color [count=\n starting from 0] in \ColorList
    {

        \draw[fill=\Color] ({{\listx}[\n]},{{\listy}[\n]}) circle[radius=0.4];

    }

    \end{scope}
}}}



\begin{document}

\pgfplotstablegetrowsof{blue.dat}
\pgfmathtruncatemacro{\rowsBlue}{\pgfplotsretval-1}  
\pgfplotstableread[col sep=semicolon,header=false]{blue.dat}\bluetable 

\pgfplotstablegetrowsof{yellow.dat}
\pgfmathtruncatemacro{\rowsYellow}{\pgfplotsretval-1}
\pgfmathtruncatemacro{\rowsYellowGoalie}{\pgfplotsretval}
\pgfplotstableread[col sep=semicolon,header=false]{yellow.dat}\yellowtable 

\pgfplotstablegetrowsof{balls.dat}
\pgfmathtruncatemacro{\rowsBall}{\pgfplotsretval-1}
\pgfplotstableread[col sep=semicolon,header=false]{balls.dat}\ballstable 
\pgfplotstableforeachcolumnelement{[index]0}\of\ballstable\as\Time{
\begin{tikzpicture}
    \begin{scope}[on background layer]
    \fill[field] (-1,-1) rectangle (13,10);
    \node[minimum width=12cm, minimum height=9cm] (contour) at (6,4.5) {};

    % Center
    \draw (contour.north) -- (contour.south);
    \draw (contour.center) circle (0.915cm);
    \fill[white] (contour.center) circle (.5mm);

    % Areas
    \area{contour.west}{0}
    \area{contour.east}{180}

    % Corners
    \foreach \corner [count=\xi starting from 0] in {south west, south east, north east, north west}{
        \begin{scope}[rotate around={90*\xi:(contour.\corner)}]
            \draw ([xshift=1mm]contour.\corner) arc (0:90:1mm);
        \end{scope}
    }
    \end{scope}
    \tikzset{ % <- undo the settings needed for the soccer field
    every node/.style={}, 
    every path/.style={},
    }

    \begin{axis}[x=.01cm, y=.01cm, xmin=0,  ymin=0, xmax=1200,ymax=900,nodes
    near coords,enlargelimits=0.0,
   ] 


       \addplot [only marks,mark=*, mark options={color = orange},name nodes
       near coords=ball,nodes near coords={},
       x filter/.code={\pgfplotstablegetelem{\coordindex}{[index]0}\of{\ballstable}
       \unless\ifnum\pgfplotsretval=\Time
                    \def\pgfmathresult{}
                    \fi}] table [header=false, x
       index=2, y index=3, col sep=semicolon] {balls.dat};

       \addplot [only marks,mark=*, mark options={color = blue},name nodes near
       coords=b,nodes near coords={},
       x filter/.code={\pgfplotstablegetelem{\coordindex}{[index]0}\of{\bluetable}
       \unless\ifnum\pgfplotsretval=\Time
                    \def\pgfmathresult{}
                    \fi}]  table [header=false, x index=3, y
       index=4, col sep=semicolon] {blue.dat};

       \addplot [only marks,mark=*,mark options={color = yellow}, name nodes
       near coords=y,nodes near coords={},
       x filter/.code={\pgfplotstablegetelem{\coordindex}{[index]0}\of{\yellowtable}
       \unless\ifnum\pgfplotsretval=\Time
                    \def\pgfmathresult{}
                    \fi}] table [header=false, x index=3, y
       index=4, col sep=semicolon]{yellow.dat};

    \end{axis}
%     \pic at (b-0.south){Playerb={\Time}};
%     \pic at (y-0.south){Playery={\Time}};
\end{tikzpicture}}
\end{document}

enter image description here

  • Hello, I understand the filter issue ..I edited the question to better explain ... – Marcos Laureano Feb 4 at 9:55
  • @MarcosLaureano I changed the code. – Schrödinger's cat Feb 4 at 16:16
  • @Schrodingers Playerb and Playery pics are to draw the robot pattern according to id. I used to make one file (second) at a time and was able to use the ID to identify each robot. In this scheme, I will still break my head to resolve this issue. I was almost getting it done but using the datatool package :). But your solution is much better !! Thank you!!! – Marcos Laureano Feb 4 at 20:17

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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