commit e6a23d29b0e98397210e40824f9f37929eb60c2b
parent 5b24cf0f0de9c6d52fa609cb59e025d2706e2e7e
Author: Anders Damsgaard <anders@adamsgaard.dk>
Date: Sun, 12 Sep 2021 07:16:51 +0200
add missing transpose.c
Diffstat:
A | transpose.c | | | 48 | ++++++++++++++++++++++++++++++++++++++++++++++++ |
1 file changed, 48 insertions(+), 0 deletions(-)
diff --git a/transpose.c b/transpose.c
@@ -0,0 +1,48 @@
+#include <err.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+
+#include "util.h"
+
+int
+main(void)
+{
+ size_t i = 0, j = 0, nf = 0, nr = 0, linesize = 0;
+ char *line = NULL, *data = NULL;
+ double val, **vals = NULL;
+
+ if (pledge("stdio", NULL) == -1)
+ err(2, "pledge");
+
+ vals = calloc(1, sizeof(double *));
+ while (getline(&line, &linesize, stdin) > 0) {
+ if (nr > 0)
+ if (!(vals = xreallocarray(vals, nr + 1, sizeof(double *))))
+ err(1, "reallocarray");
+ if ((nf = allocarr(&vals[nr], line, linesize)) == 0)
+ errx(1, "no fields in input");
+ data = line;
+ for (i = 0; i < nf; i++) {
+ if (!scannextval(&data, &val))
+ errx(1, "could not parse line %ld, field %ld", nr + 1, i + 1);
+ vals[nr][i] = val;
+ }
+ nr++;
+ }
+ for (i = 0; i < nf; i++) {
+ for (j = 0; j < nr; j++) {
+ printf("%g", vals[j][i]);
+ if (j < nr - 1)
+ printf(DELIMSTR);
+ }
+ puts("");
+ }
+
+ free(line);
+ for (i = 0; i < nr; i++)
+ free(vals[i]);
+ free(vals);
+
+ return 0;
+}