Advertisement
whitequark

Untitled

Apr 7th, 2011
204
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.92 KB | None | 0 0
  1. #include <stdio.h>
  2.  
  3. int main(int argz, char** argv) {
  4.   FILE *eingang, *ausgang;
  5.   int format, N, M, i, j;
  6.  
  7.   if(argz != 6 || (strcmp(argv[3], "d") && strcmp(argv[3], "f"))) {
  8.     fprintf(stderr, "Verbrauch: %s eingang.dat ausgang.dat [d|f] N M\n", argv[0]);
  9.     fprintf(stderr, "  Dieses Programm liest binäre Daten wie floats oder doubles aus\n");
  10.     fprintf(stderr, "  einer Datei und gibt sie in Textform.\n");
  11.     fprintf(stderr, "  Der Eingang sollte im binären Format vorliegen.\n");
  12.     fprintf(stderr, "  Letzte Argument gibt Format: 'd' für double, und 'f' für float.\n");
  13.     fprintf(stderr, "  N und M sind Dimensionen eines Arrays.\n");
  14.     return 1;
  15.   }
  16.  
  17.   if((eingang = fopen(argv[1], "r")) == NULL) {
  18.     fprintf(stderr, "Kann Eingabedatei nicht öffnen.\n");
  19.     goto ausfahrt;
  20.   }
  21.  
  22.   if((ausgang = fopen(argv[2], "w")) == NULL) {
  23.     fprintf(stderr, "Kann nicht geöffnet werden Ausgabedatei.\n");
  24.     goto schliessen_eingang;
  25.   }
  26.  
  27.   format = strcmp(argv[3], "d"); /* 0 ist double, 1 ist float */
  28.   N = atoi(argv[4]), M = atoi(argv[5]);
  29.  
  30.   if(format == 0) {
  31.     double* datum = (double*) malloc(sizeof(double) * M * N);
  32.     fread(datum, sizeof(double), M * N, eingang);
  33.  
  34.     for(i = 0; i < M; i++) {
  35.       for(j = 0; j < N; j++) {
  36.         fprintf(ausgang, "%f", datum[j + i * N]);
  37.         fprintf(ausgang, (j == N - 1) ? "\n" : "\t");
  38.       }
  39.     }
  40.   } else {
  41.     float* datum = (float*) malloc(sizeof(float) * M * N);
  42.     fread(datum, sizeof(float), M * N, eingang);
  43.  
  44.     for(i = 0; i < M; i++) {
  45.       for(j = 0; j < N; j++) {
  46.         /*
  47.          * Ein float Argument für eine Funktion wie variadische
  48.          * fprintf wird automatisch befördert double.
  49.          */
  50.         fprintf(ausgang, "%f", datum[j + i * N]);
  51.         fprintf(ausgang, (j == N - 1) ? "\n" : "\t");
  52.       }
  53.     }
  54.   }
  55.  
  56.   fclose(ausgang);
  57. schliessen_eingang:
  58.   fclose(eingang);
  59. ausfahrt:
  60.  
  61.   return 0;
  62. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement