Archiv verlassen und diese Seite im Standarddesign anzeigen : Array aus datei auslesen?
Hallo Leute,
ich soll aus der datei mit folgendem inhalt ein array auslesen:
-------datei-------
20 30
000001000000000000000
000111111110000000000
000000000010000000000
000001000000111100000
000000001000001100000
000000000000100000000
:
:
:
000000000011100000000
-------/datei------
In der ersten Zeile stehen die Grössen die das Array haben soll und anschliessen kommen die datenzeilen.
Wie bringe ich jetzt die daten in mein array?
Kann mir jemand helfen?
Danke
SeCa
anda_skoa
15-02-2003, 13:03
Original geschrieben von SeCa
Kann mir jemand helfen?
Können wir, unter der Vorrausetzung, dass du uns hilfst und sagst, in welche Sprache du das gerne hättest :)
Ciao,
_
Sorry das hatte ich total vergessen.
Hätte es gern in ANSI C
:)
anda_skoa
16-02-2003, 13:30
Der erste Wert, in diesem Fall 20, ist die Anzahl der Werte pro Zeile und der zweite Wert die Anzahl der Zeilen, richtig?
Soll das Resultat eine Array von Zahlen sein, oder ein Array von Zeichen?
Oder anders ausgedrückt, soll zB 0 die Zahl Null oder das Zecihen '0' sein?
Ciao,
_
Also eigentlich bin ich ja eher nicht der Typ, der hier fertige Lösungen präsentiert, aber ich habe mich mit diesem Thema schonmal beschäftigt und habe schon einen fertigen Ansatz:
Das folgende Programm liest die Datei Zeichen- und Zeilenweise aus, und liefert die Daten in einem zweidimensionalen Vektor ab, der nahezu beliebig groß werden kann, da alles auf dem Heap gespeichert wird.
Ich denke das lässt sich eigentlich an alle Anforderungen anpassen. Das einzige, was ich noch nicht so passend finde, ist die Speicherung der Array-Größe in globalen Variablen, das lässt sich aber sicher auch noch elegant lösen.
#include <stdio.h>
#include <stdlib.h>
#include <libgen.h>
#include <string.h>
int x,y;
char **readlines(char *filename,char *name)
{
char **lines;
FILE *fd;
int count = 0;
int line = 0;
char c;
char buffer[256];
if ((fd = fopen(filename,"r")) == NULL) {
fprintf(stderr,"%s : error reading %s\n",basename(name),filename);
exit(-1);
}
fscanf(fd,"%d %d\n",&x, &y);
if ((lines = malloc(y*sizeof(int))) == NULL) {
fprintf(stderr, "%s : memory allocation failed.\n",basename(name));
exit(-1);
}
while ((c = getc(fd)) != EOF) {
buffer[count++] = c;
if (c == '\n') {
buffer[count++] = '\0';
if ((lines[line] = malloc(strlen(buffer)+1)) == NULL) {
fprintf(stderr, "%s : memory allocation failed.\n",basename(name));
exit(-1);
}
strncpy(lines[line],buffer,strlen(buffer)+1);
count = 0;
line++;
}
}
if (line == 0) {
if ((lines[line] = malloc(strlen(buffer)+1)) == NULL) {
fprintf(stderr, "%s : memory allocation failed.\n",basename(name));
exit(-1);
}
strncpy(lines[line],"\0",1);
}
fclose(fd);
return lines;
}
int main(int argc, char **argv)
{
char **my_field;
int i;
if (argc < 2) {
fprintf(stderr,"No filename specified\n");
exit(-1);
}
my_field = readlines(argv[1],"readarray");
for (i = 0;i < y;i++)
fprintf(stdout,"%s",my_field[i]);
for (i = 0;i < y;i++)
free(my_field[i]);
return 0;
}
Viel Spaß beim Basteln ;)
GreetZ
ReSeT
Powered by vBulletin® Version 4.2.5 Copyright ©2025 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.