Datei einlesen und sortiert ausgeben

damdidu

Grünschnabel
Hallo,

das Programm soll eine Datei einlesen und dann sortiert nach Zeit wieder ausgeben(die Einzelenen Einträge)
bisher ist es soweit, aber mir fällt einfach nicht ein wie ich die nun sortieren könnte:
C++:
#include <stdio.h>
#include <stdlib.h>


int main(int argc, char *argv[])

{

  FILE *fs;

  char buf[10000];

  fs=fopen("ard.csv","r");

  size_t sz;



  if(fs==NULL)

   {

   perror("fopen");

   exit(1);

   }

  while(!feof(fs))

  {

  sz = fread((void *)buf,10000,1,fs);

  buf[10000] = '\0';

  printf("%s",buf);

  }

printf("\n");

fclose(fs);

}

Danke schon mal!
 
Zuletzt bearbeitet von einem Moderator:
Hi

zuerst muss noch an deinem Einlesen gearbeitet werden.
zB. ist buf[10000]='\0'; falsch, weil 10000 Stück char nur von 0 bis 9999 gehen.
Außerdem ist fread nicht sinnvoll für zeilenweises Einlesen (siehe zB. fgets)
und zum Sortieren reicht es nicht,immer nur eine Zeile gleichzeitig im Programm zu haben.

Falls die Datei nicht zu riesig ist können alle Zeilen eingelesen werden,
zB. in ein zweidimensionales Array. Da man vorher nicht weiß, wie viel Zeilen die Datei hat,
sollte das ganze auch noch mit malloc/realloc/free angelegt werden, statt eine fixe Größe zu geben.

Und weil jede Zeile ja nicht nur eine "Zeile" von Text ist, sondern mehrere Werte (wie zB. die Zeit einer davon ist)
könnte man für diese Struktur ein struct machen und beim Einlesen die Werte gleich aufteilen.
Also in ein Array aus structs, wobei jedes der structs Zeit etc. innen getrennt hat.

...Erstmal genug Stichworte :)
Da ich deinen Wissensstand nicht kenn lass ich dich das erst mal verdauen.
Etwas Google und Ausprobieren, dann hast du vermutlich wieder Fragen dazu.
 
Hi,
danke schon mal.
Aber genau da hab ich derzeit des Problem:
Und weil jede Zeile ja nicht nur eine "Zeile" von Text ist, sondern mehrere Werte (wie zB. die Zeit einer davon ist)
könnte man für diese Struktur ein struct machen und beim Einlesen die Werte gleich aufteilen.
Also in ein Array aus structs, wobei jedes der structs Zeit etc. innen getrennt hat.

.

Ich komm grad nicht drauf wie ich das in diesem Code so wirlich realisieren kann.
 
Ich habe mal den Code etwas geändert und was anderes versucht, dabei enstehen beim compilen aber diverse Fehlermeldungen, vielleicht weiß ja einer von euch was die genau auslösen:
C:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

struct sendung {
time_t sendezeit;
char *titel;
};

struct sendung sendungen[][] = {
#include "ard.csv"
};

void sort(struct sendung* daten, int N);

int main()
{

int N = sizeof(sendungen)/sizeof(sendungen[0][0]); // Berechnung der Anzahl der Einträge.
int i;

sort(sendungen, N);

printf("Content-Type: text/html\n");
printf("\n");
printf("<html>\n");
printf("<head><title>Fernsehprogramm</title></head>\n");
printf("<body>\n");
printf("<table>\n");
printf("<tr><th>Termin</th><th>Ereignis</th></tr>\n");

for(i=0; i<N; i++)
{
printf("<tr><td>%s</td><td>%s</td></tr>\n",
ctime(&sendungen[I][I].sendezeit), sendungen[I][I].titel);
}

printf("</table>\n");
printf("</body>\n");
printf("</html>\n");

return 0;
}

void sort(struct sendung* a, int N)
{
int i, i_klein, w_klein;
char *w2_klein;

for(i=1; i<N; i++)
{
w_klein=a[I].sendezeit;
w2_klein=a[I].titel;
for (i_klein=i; a[i_klein-1].sendezeit >
w_klein&&i_klein > 0; i_klein--)
{
a[i_klein].sendezeit = a[i_klein-1].sendezeit;
a[i_klein].titel = a[i_klein-1].titel;
}
a[i_klein].sendezeit=w_klein;
a[i_klein].titel=w2_klein;
}
}
Dazu diese Fehlermeldungen:
fehler.png
 
Du kannst nicht einfach deine CSV-Datei mittels eines Include-Statements einbinden.
Eine Include-Direktive fügt 1 zu 1 den Dateiinhalt ein, sprich CSV-Daten in eine C++-Datei. Natürlich führt das zu Syntax-Fehlern!

Sheel meinte, dass du ein Struct für deine Daten erstellen sollst. Beispielsweise wenn ich eine CSV-Datei habe, in der in jeder Zeile ein Name und ein Alter stünden, würde ein struct so ausschauen:
C++:
struct Dataset {
  char *name;
  unsigned int age;
}
Das ist nur eine Struktur, um für jede Zeile die Daten zu speichern.

Edit Die Daten einzulesen ist eine ganz andere Geschichte. Google mal "read csv c++" "read csv c", dazu sollte sich was finden.
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück