Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Zahlen aus Datei in Array speichern

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
04.01.2005, 09:37 Uhr
~Gast
Gast


Hallo,

wie kann ich Zahlen aus einer datei in einem Array speichern?
Der einfachheit halber schreibe ich in der Datei (Textmodus) jede Zahl in eine neue Zeile, so kann ich ja dann mit fgets jeweils immer eine Zeile einlesen.
Ich bekomme es aber nicht hin, dass z.B. die erste Zahl in DatenAusDatei[0] steht, die zweite Zahl in DatenAusDatei[1] usw.
Da fällt mir gerade noch ein, wenn ich vorher nicht weiß wie viele Zahlen ich einlesen will, kann ich den array irgendwie dynamisch machen oder muß ich von anfang an eine möglichst große Zahl eintragen?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
04.01.2005, 11:26 Uhr
(un)wissender
Niveauwart


C oder C++?
Dein Ansatz?
--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
04.01.2005, 11:46 Uhr
~Gast
Gast


Ich programmiere in C.

Mein Ansatz:


C++:
void DatenEinlesen (void)
{
char puffer[5];
char DatenAusDatei[100];
FILE *datei_z;
datei_z = fopen( "DATEN.EIN", "rt" );
fgets(puffer, 5, datei_z);
DatenAusDatei[0] = puffer;
printf("%s\n\n",DatenAusDatei[0]);
}

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
04.01.2005, 12:52 Uhr
Hans
Library Walker
(Operator)


Hi,


Zitat von ~Gast:


C++:
void DatenEinlesen (void)
{
char puffer[5];
char DatenAusDatei[100];
FILE *datei_z;
datei_z = fopen( "DATEN.EIN", "rt" );
fgets(puffer, 5, datei_z);
DatenAusDatei[0] = puffer;
printf("%s\n\n",DatenAusDatei[0]);
}




soweit so schön. Aber wie sieht die Funktion zum speichern aus? Ich vermute nämlich, das da bereits ein Fehler in der Logik steckt.

Hans
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
04.01.2005, 12:55 Uhr
Pablo
Supertux
(Operator)



Zitat:


DatenAusDatei[0] = puffer;




Das geht nicht! puffer ist ein char[] und DatenAusDatei[0] ein char, die Zuweisung ist nicht zulässig
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
04.01.2005, 13:18 Uhr
~Gast
Gast



Zitat von Hans:
Hi,

[quote ~Gast]

C++:
void DatenEinlesen (void)
{
char puffer[5];
char DatenAusDatei[100];
FILE *datei_z;
datei_z = fopen( "DATEN.EIN", "rt" );
fgets(puffer, 5, datei_z);
DatenAusDatei[0] = puffer;
printf("%s\n\n",DatenAusDatei[0]);
}




soweit so schön. Aber wie sieht die Funktion zum speichern aus? Ich vermute nämlich, das da bereits ein Fehler in der Logik steckt.

Hans[/quote]

Hallo Hans,

zum speichern gibt es noch keine Funktion. Ich will erstmal nur Zahlen aus einer Datei einlesen und diese dann im array DatenAusDatei[] speichern. Also in [0] die erste Zahl, in [1] die 2. usw.


Zitat von Pablo:

Das geht nicht! puffer ist ein char[] und DatenAusDatei[0] ein char, die Zuweisung ist nicht zulässig


Ja, es kommt eine Fehlermeldung: cannot convert char* to char.
Ich kann damit aber nichts anfangen.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
04.01.2005, 13:27 Uhr
mike
Pinguinhüpfer
(Operator)


Hi!
Ich hab eines mit konvertireung zu long gebastelt (das ja um Zahlen geht)

C++:
#include <stdio.h>
#include <errno.h>
#include <string.h>

int
main(int argc, char *argv[])
{
   char puff[100];
   FILE *fd;

   if((fd=fopen(argv[1], "r")) == NULL) {
     fprintf(stderr, "FATAL: %s\n", strerror(errno));
     return 1;
   }

   long zahl, *array;
   long linecounter = 0;
   int gr = 10;

   if((array = (long *)malloc((gr+1)*sizeof(long))) == NULL) {
     fprintf(stderr, "DAMN: no mem");
     return 1;
   }

   long *ptr = array, *end = array+gr;

   while(fgets(puff, sizeof(puff), fd)) {
     linecounter += 1;
     errno = 0;
     zahl = strtol(puff, NULL, 10);
     if(errno != 0)
       fprintf(stderr, "SYNTAX: %s (line %ld)\n", strerror(errno), linecounter);
     else {
       *ptr  = zahl;
       if(ptr+1 == end) {
         puts("I need memory ...");
         if((array = (long *)realloc(array, (gr+1)*sizeof(long))) == NULL)
           fprintf(stderr, "FATAL: Out of memory");
         else
           end += gr;
       }
       else
         ptr++;
     }
   }

   /***** TEST *****/
   /* reele Arraygroesse wird ignoriert*/
   int i;
   for(i=0; i<(end-array); i++)
     printf("%d: %ld\n", i, array[i]);

   free(array);
   return 0;
}



mfg
--

Dieser Post wurde am 05.01.2005 um 06:53 Uhr von mike editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
04.01.2005, 15:24 Uhr
Hans
Library Walker
(Operator)



Zitat von ~Gast:

Hallo Hans,

zum speichern gibt es noch keine Funktion. Ich will erstmal nur Zahlen aus einer Datei einlesen und diese dann im array DatenAusDatei[] speichern. Also in [0] die erste Zahl, in [1] die 2. usw.

Du willst am Ende also integer, bzw. ganze Zahlen in dem Array DatenAusDatei[] stehen haben, richtig?
Dann hast Du da schon mal einen Fehler in der Logik. Du musst dann nämlich mit sscanf() oder atoi() oder so was in der Art aus dem string eine Zahl machen. Denn in Puffer stehen die ASCII-Codes der Ziffern, die ja bekanntlich noch nicht die Zahl selber sind.


Zitat:
Ja, es kommt eine Fehlermeldung: cannot convert char* to char.
Ich kann damit aber nichts anfangen.

Das bedeutet, das eine Konvertierung, also eine Umwandlung nicht möglich ist. In diesem Fall: eine Umwandlung eines char-Zeigers in einen char. Ein Zeiger ist meisstens 4 Bytes gross, ein einzelner char nur ein Byte.


C++:
DatenAusDatei[0] = puffer; // <-- Fehler


Entweder so:

C++:
for (i=0; puffer[i]!='\0'; i++)
      DatenAusDatei[i] = puffer[i];

wobei das lediglich die ASCII-Codes kopiert. Also müsste da die Umwandlung mit atoi() o.ä. hin.


C++:
printf("%s\n\n",DatenAusDatei[0]);

Hier muss das [0] von DatenAusDatei weg, sonst gibt es auch 'nen Fehler wenn das Programm läuft.

Hans
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.

Dieser Post wurde am 04.01.2005 um 15:31 Uhr von Hans editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
04.01.2005, 15:28 Uhr
mike
Pinguinhüpfer
(Operator)


Ich möchte noch ne möglichkeit anhängen:
array[0] = strdup(puffer);
Wenn array ein array von char * ist.

mfg
--
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
04.01.2005, 15:35 Uhr
Hans
Library Walker
(Operator)


@mike:

ich glaube, damit verwirrst Du ihn mehr als nötig...
Ich könnte ja auch noch auf meine eigene Konvertierungsroutine hinweisen, aber wer daran interesse hat, soll sie selber suchen

Hans
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: