Προς το περιεχόμενο

Εμφανιση δεδομενων αρχειου στην οθόνη!


chrislem

Προτεινόμενες αναρτήσεις

Δημοσ.

Πως μπορώ να διαβάσω και να εμφανίσω τα δεδομένα ενός αρχείου στην οθόνη? Γράφω σε C της Borland και ας υποθέσουμε ότι έχω ένα αρχείο cars.txt. Αν είναι εύκολο να γραφτεί ο ακριβές κώδικας.

Ευχαριστώ!

Δημοσ.

Θα σου δώσω την αρχή, και θα συνεχισεις μονος σου

>
FILE *f;
char ch;

f = fopen("C:\cars.txt", "r");

fscanf(f, "%c", &ch);

fclose(f);

printf("%c", ch);

το fscanf διαβαζει τον 1ο χαρακτηρα. Αν το εκτελεσεις ν φορες, θα διαβασει καθε φορα τον ν χαρακτηρα...

Δημοσ.
Πως μπορώ να διαβάσω και να εμφανίσω τα δεδομένα ενός αρχείου στην οθόνη? Γράφω σε C της Borland και ας υποθέσουμε ότι έχω ένα αρχείο cars.txt. Αν είναι εύκολο να γραφτεί ο ακριβές κώδικας.

Ευχαριστώ!

 

Η επόμενη ρουτίνα κάνει αυτό που θέλεις δηλαδή διαβάζει ένα αρχείο κειμένου και μάλιστα διαβάζει το αρχείο μέχρι το τέλος σε ένα buffer χωρίς να χρειάζεται να επέμβουμε γραμμή γραμμή με την fgets ή χαρακτήρα χαρακτήρα με την fgetc. Αυτό που επιστρέφει η συνάρτηση είναι ένα buffer που περιέχει τα περιεχόμενα του κειμένου οπότε και μπορεί να χρησιμοποιηθεί για οτιδήποτε χρειαστείς στη συνέχεια. Η ρουτίνα στην λειτουργία της θυμίζει την αντίστοιχη ReadToEnd της STL.

 

>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sys/stat.h>

char *ReadToEnd(const char *filename)
{
   if(!filename)
   {
       fprintf(stderr,"NULL filename:%s.\n", strerror(errno));
       return NULL;
   }
   else
   {
	int R = 0;
       /* File Ptr. */
       FILE *fptr = NULL;
       /* Enviroment Path. */
       char *envPathBuf = NULL;
       char *Path = NULL;
       /* Path Length */
       int PathLen = FILENAME_MAX + strlen(filename) + 2;
       /* Define a stat based structure. */
       struct stat buf; memset(&buf, 0, sizeof(struct stat));
       if((fptr = fopen(filename, "rt")) == NULL)
       {
           fprintf(stderr,"Fopen Error:%s\n", strerror(errno));
           return NULL;
       }
       if((envPathBuf = calloc(FILENAME_MAX, sizeof(char))) == NULL)
       {
           free(fptr);
           fprintf(stderr,"Calloc Error:%s\n", strerror(errno));
           return NULL;
       }
       if((envPathBuf = getcwd(envPathBuf, FILENAME_MAX)) == NULL)
       {
           free(fptr);
           fprintf(stderr,"Getcwd Error:%s\n", strerror(errno));
           return NULL;
       }
       /* bugfix: No calloc for Path */
       if((Path = calloc(FILENAME_MAX + strlen(filename) + 2, sizeof(char))) == NULL)
        {
           free(fptr);
           free(envPathBuf);
           perror("ReadToEnd: calloc(Path)");
           return NULL;
        }

       /* Save the full path+filename. */
       sprintf(Path, "%s\\%s", envPathBuf, filename);
       free(envPathBuf); envPathBuf = NULL;
       if(stat(Path, &buf) < 0)
       {
           fprintf(stderr,"Stat Error:%s\n", strerror(errno));
           return NULL;
       }
       else
       {
           char *FileBuffer = NULL;
           free(Path); Path = NULL;
           if((FileBuffer = calloc(buf.st_size+1, sizeof(char))) == NULL)
           {
               fprintf(stderr,"Calloc Error:%s\n", strerror(errno));
               return NULL;
           }
           else
           {
			if((R = fread(FileBuffer,sizeof(char), buf.st_size, fptr)) < 0)
               {
                   free(FileBuffer);
                   fprintf(stderr,"Fread Error:%s\n", strerror(errno));
                   return NULL;
               }
               /* Close file, free memory used and return. */
               fclose(fptr);
               free(envPathBuf); envPathBuf = NULL;
               /* Terminate Buffer. */
               FileBuffer[buf.st_size] = '\0';
               return FileBuffer;
           }
       }
   }
}

int main(int argc, char **argv[])
{
char *Contents = ReadToEnd("file.txt");
printf("File Contents:%s\n", Contents);
free(Contents);
printf("Hit enter to continue...\n");
getchar();
return 0;
}

Δημοσ.

Παιδιά δυστυχως δεν μπόρεσα να καταλαβώ και να το υλοποιήσω! Για να σας δώσω να καταλάβετε έχω ένα αρχείο το οποίο μέσα περιέχει σε κάθε γραμμή Όνομα, Επίθετο, ID και Ιδιότητα! Θέλω ο χρήστης να μπορέι να βλέπει τα περιεχόμενα του αρχείου, να διαλέγει έναν χρήστη με πατώντας τον αριθμό του (ID) και είτε να τον διαγράφει εντελώς από το αρχείο είτε να μπορεί να τον επεξεργαστεί! Σώστε με γιατί είναι μεγάλη ανάγκη! Σας ευχαριστώ προκαταβολικά για την βοήθεια και τον χρόνο σας!

Δημοσ.

Όρισε τις δομές που χρειάζεσαι, όρισε πόσες από αυτές θα χρειαστείς στο πρόγραμμα σου, μπορείς να το κάνεις στατικά πχ με έναν αριθμό Ν ή δυναμικά. Προτίμησε στατικά και ας τρως μνήμη που μπορεί να μην την χρησιμοποιείς. Φτιάξε συναρτήσεις που να διαβάζουν από το αρχείο στην μνήμη και να γεμίζουν τις δομές σου, πχ:

 

>
fscanf(file,"%N-1s %N-1s %ld %N-1s", Person[i].name, Person[i].surname, Person[i].id, Person[i].property);

 

Με τον παραπάνω τρόπο γεμίζεις το i-στο μέλος του πίνακα δομών σου με δεδομένα από το αρχείο που έχουν την μορφή:

Baggelis Papapanagiwtou 12457 Mixanikos

 

Η δομή σου θα είναι της μορφής:

 

>
struct Person{
char name[N];
char surname[N];
double id;
char property[N];
};

 

'Οπου Ν βάλε ένα μέγεθος σε bytes αρκετά μεγάλο για να χωρέσει τα στοιχεία από το αρχείο. Πχ Ν = 32. 'Ετσι θα έχεις 31 εργάσιμους χαρακτήρες. Επίσης να σου θυμήσω κάτι.

 

Ξεκίνα να χτίζεις και να θυμάσαι ότι η Ρώμη δεν χτίστηκε σε μία μέρα και όσοι θέλησαν να πάνε σε αυτήν πήγαν ρωτώντας.

Δημοσ.

Μπόρεσα να εμφανίσω τα δεδομένα στην οθόνη! ouff. Τώρα θέλω να αναζητήσω έναν αριθμό μέσα στo αρχείο (Το id) και μέτα να σβήσω όλη την γραμμή που περιέχει αυτόν τον αριθμό.Δηλαδή να κάνω αναζήτηση μέσα στο αρχείο και διαγραφή γραμμής! Μπορεί να με βοηθήσει κάποιος. Sorry guys που σας κουράζω απλά πρέπει να το έχβ τελειώσει μέχρι αύριο και σημέρα προβλέπω no sleep!

Δημοσ.
Μπόρεσα να εμφανίσω τα δεδομένα στην οθόνη! ouff. Τώρα θέλω να αναζητήσω έναν αριθμό μέσα στo αρχείο (Το id) και μέτα να σβήσω όλη την γραμμή που περιέχει αυτόν τον αριθμό.Δηλαδή να κάνω αναζήτηση μέσα στο αρχείο και διαγραφή γραμμής! Μπορεί να με βοηθήσει κάποιος. Sorry guys που σας κουράζω απλά πρέπει να το έχβ τελειώσει μέχρι αύριο και σημέρα προβλέπω no sleep!

 

Πάμε καλά, απλά βρες ποιο record είναι δηλαδή το ( i ) με bsearch στον πίνακα δομών σου ή κάνοντας μία απλή σειριακή αναζήτηση το οποίο έχει μέσα το id και για αυτό το ( i ) να μην γράφεις την δομή στο αρχείο. Μην πας να σβήσεις την γραμμή από το αρχείο είναι hard core.

 

:-)

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...