Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » CSV in int Array lesen - Zeilenumbruch bei ,

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 <
000
13.07.2004, 08:23 Uhr
Cali



Hallo liebes Forum,

dies hier ist mein erstes Posting und ich bin auch ganz neu bei der C Sprache. Vorher habe ich gesucht, ob ich zu dieser Frage im Netz oder hier im Forum etwas finde. Es gibt mit Sicherheit dazu schon etwas, nur konnte ich es nicht finden.

Dies liegt sicherlich auch daran, das ich nicht richtig weiss wonach ich suchen soll. Auf jeden Fall bitte nicht hauen für diese Frage bitte

Folgendes Problem habe ich:
- Zahlen aus einem CSV File in ein Integer Array lesen

Das CSV File sieht so aus;
1,
0,
1,
...,

Folgendes habe ich verwendet;

C++:
void read_old_usuage_to_array()
{
    k = 0;
    FILE *fpoint;
    fpoint = fopen("usuage.csv", "r");
    
    while ((li=getw(fpoint)) != EOF)
    {
      usuage_array[k] = li;
    }

      k++;
}


Das Problem ist, das ich nicht weiss wie ich an die nächste Array Position gehen soll, wenn dort ein Komma ist. Das macht er nämlich nicht. Obiges geht wenn der File so vorliegt:
101

Das macht er ja aber leider nicht

Bei einlesen in ein String Array habe ich das so geschafft:

C++:
{
    k = 0;
    FILE *fpoint;
    fpoint = fopen("userlist.csv", "r");
    
    while ((ch=fgetc(fpoint)) != EOF)
    {
      if (ch != ',')
      {
      userlist_array[k][0] = ch;
      }
      else if (ch == ',')
      {
      userlist_array[k][0] = '\n';
      }
      k++;
    }
}


Wie ich dasselbe aber in ein Integer Array schaffe, das er bei Komma zum nächsten Element geht, das erschliesst sich mir gar nicht.


Ich wäre für jeden Tip dankbar und schonmal im voraus Entschuldigung, wenn dies ein dummes Posting ist, oder ich es durch bessere Suche hätte selbst finden können *ganz tief duck*


Viele Grüße und Danke,

Robert
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
13.07.2004, 09:20 Uhr
Pablo
Supertux
(Operator)


Wie/Wo hast du usuage_array deklariert? Ich glaube, wenn die Datei zu groß ist, dann gibt es keinen Platz mehr. Deine Lösung wäre realloc.
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
13.07.2004, 09:33 Uhr
~mike
Gast


Hi!
Lies die Daten einfach in einen Buffer ein. Wenn du auf ein "," stößt - Daten ins array schreiben (einfach mit atoi umwandeln).

mfg
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
13.07.2004, 10:59 Uhr
freshman



der Vollständigkeit halber: anstatt atoi zu nutzen kannst du auch so verfahren:
Bsp.:

C++:
char c='1';//in c steht Ascii-Code der Ziffer 1 (dezimal 49)
int i = c - '0';
//bedeutet: (Ascii-Code der Ziffer 1) - (Ascii-Code der Ziffer 0) = 50 - 49 = 1



Funktioniert stabil, da die Ziffern 0 bis 9 im Ascii-Code immer hintereinander liegen.
--
freshman.say("Wer nicht an Wunder glaubt ist kein Realist!\a");
while(1)freshman.ask(sillyQuestion);

Dieser Post wurde am 13.07.2004 um 11:00 Uhr von freshman editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
13.07.2004, 11:50 Uhr
virtual
Sexiest Bit alive
(Operator)


Könnte man als Grundlage nehemen:

C++:
#include <stdio.h>

#define MAX_ZAHLEN 100

int main()
{
    int zahlen[MAX_ZAHLEN];
    int i,n = 0;

    FILE* in = fopen("data", "r");
    if (NULL == in)
    {
        fprintf(stderr, "Kann datei nicht öffnen.\n");
        exit(1);
    }

    for(n=0; !feof(in) && n<MAX_ZAHLEN; ++n)
    {
        while (!feof(in) &&
               1 != fscanf(in, "%d,", zahlen+n) &&
               1 != fscanf(in, "%d", zahlen+n))
        {
            fgetc(in);
            if (!feof(in))
            {
                fprintf(stderr, "Formatfehler, ignoriere nächstes Zeichen!\n");
            }
        }
    }
    --n; // N wurde einen zu weiter gezählt!
    for(i=0; i<n; ++i)
    {
        fprintf(stderr, "Zahl %d: %d\n", i+1, zahlen[ i]);
    }

    fclose(in);
}


--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)

Dieser Post wurde am 13.07.2004 um 11:50 Uhr von virtual editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
13.07.2004, 13:00 Uhr
RedEagle



Was ist den ein CVS-File??
--
MFG RedEagle
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
13.07.2004, 13:56 Uhr
virtual
Sexiest Bit alive
(Operator)


@ReadEagle:
Wenn Du nach dem Begriff googelst, dann achte darauf, wie du es bustabierst: CSV und CVS sind unterschiedliche Dinge...
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
13.07.2004, 18:40 Uhr
RedEagle




--
MFG RedEagle
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
14.07.2004, 06:12 Uhr
Cali



Danke an alle für die Antworten !
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ 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: