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

anasi c arxeio kai pinakas...


asximos76

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

Δημοσ.

kolisa, malon palavosa apopse...

apla exw to arxeio:

 

asd123 A

sdf546 B

23434 B

ewr434 A

 

kai thelw na to diavasw, i prwti stili einai mexri 10 xaraktires kai i deyteri stathera A or B...

 

me fscanf

me fgets

me xrisi tis strtok?????

 

na valw tin prwti stili se pinaka kai ton xaraktira A or B kapoy, malon se ena metriti

Δημοσ.

Για αρχή είναι ANSI και όχι ANASI.

 

Μπορείς να διαβάσεις όλη την γραμμή με fgets και να τις βάλεις όλες σε έναν πίνακα . Εφόσον οι γραμμές έχουν στάνταρ μήκος 12 χαρακτήρες (10 η πρώτη στήλη + 1 το κενό + 1 το A/B) μπορείς απλά να παίρνεις τον τελευταίο χαρακτήρα όποτε τον χρειάζεσαι με line[χ][11], υποθέτοντας ότι χ είναι η εκάστοτε γραμμή και 11 το A/B.

Δημοσ.
kolisa, malon palavosa apopse...

apla exw to arxeio:

 

asd123 A

sdf546 B

23434 B

ewr434 A

 

kai thelw na to diavasw, i prwti stili einai mexri 10 xaraktires kai i deyteri stathera A or B...

 

me fscanf

me fgets

me xrisi tis strtok?????

 

na valw tin prwti stili se pinaka kai ton xaraktira A or B kapoy, malon se ena metriti

 

Έχει γίνει πολλές φορές αυτή η διαδικασία διαβάσματος από αρχείο σε C σε αυτό το φόρουμ. Σε αυτή τη φορά δημιουργούμε δομές που θα περιέχουν ξεχωριστά string για την πρώτη και δεύτερη στήλη με βάση τις προδιαγραφές του ζητούμενου. Έτσι:

 

>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include <errno.h>

/* Struct holding the columns. */
typedef struct _Contents
{
char FirstCol[11];
char SecondCol[2];
int RowId;
}Contents;

/* Read From File into a Content Array. */

Contents* ReadFromFile(const char *szFilename, int *nrContents)
{
if(szFilename)
{
	FILE *f = NULL;
	if((f = fopen(szFilename, "rt")) == NULL)
	{
		fprintf(stderr, "Error can not open:%s\n", szFilename);
		return NULL;
	}
	else
	{
		int nError = 0;
		Contents *FileContents = NULL;
		*nrContents = 0;
		if((FileContents = calloc(1, sizeof(Contents))) == NULL)
		{
			fprintf(stderr,"Memory Error:%s\n", strerror(errno));
			fclose(f);
			return NULL;
		}
		else
		{
			char *token = NULL;
			char FileBuffer[bUFSIZ] = "";
			while(1)
			{
				if((fgets(FileBuffer, sizeof(FileBuffer), f)) == NULL)
					break;
				if(FileBuffer[strlen(FileBuffer)-1] == '\n')
					FileBuffer[strlen(FileBuffer)-1] = '\0';
				token = strtok(FileBuffer, " ");
				if(!token)
				{
					printf("Invalid Line type.\n");
					nError = -1;
					break;
				}
				else
				{
					strncpy(FileContents[*nrContents].FirstCol, token, 10);
					FileContents[*nrContents].FirstCol[10] = '\0';
					FileContents[*nrContents].RowId = *nrContents;
					while(token)
					{
						token = strtok(NULL, " ");
						if(!token)
							break;
						strncpy(FileContents[*nrContents].SecondCol, token, 1);
						FileContents[*nrContents].SecondCol[1] = '\0';
					}
					/* Get more space now. */
					(*nrContents)++;
					FileContents = realloc(FileContents, (*nrContents+1)* sizeof(Contents));
				}
			}
			/* Return the struct. */
			if(!nError)
			{
				fclose(f);
				return FileContents;
			}
		}
	}
}
else
{
	fprintf(stderr,"Invalid Filename.\n");
	return NULL;
}
}

/* Main Code. */
int main(int argc, char *argv[])
{
int nrRecs = 0, Idx;
Contents *FileCont = ReadFromFile("test.txt", &nrRecs);
/* Dump Results. */
printf("FirstColumn\tSecondColumn\n");
for(Idx = 0; Idx < nrRecs; Idx++)
	printf("%s\t\t%s\n", FileCont[idx].FirstCol, FileCont[idx].SecondCol);
free(FileCont);
printf("Hit enter to continue...");
getchar();
return EXIT_SUCCESS;
}

Δημοσ.
Έχει γίνει πολλές φορές αυτή η διαδικασία διαβάσματος από αρχείο σε C σε αυτό το φόρουμ. Σε αυτή τη φορά δημιουργούμε δομές που θα περιέχουν ξεχωριστά string για την πρώτη και δεύτερη στήλη με βάση τις προδιαγραφές του ζητούμενου. Έτσι:

 

>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include <errno.h>

/* Struct holding the columns. */
typedef struct _Contents
{
char FirstCol[11];
char SecondCol[2];
int RowId;
}Contents;

/* Read From File into a Content Array. */

Contents* ReadFromFile(const char *szFilename, int *nrContents)
{
if(szFilename)
{
	FILE *f = NULL;
	if((f = fopen(szFilename, "rt")) == NULL)
	{
		fprintf(stderr, "Error can not open:%s\n", szFilename);
		return NULL;
	}
	else
	{
		int nError = 0;
		Contents *FileContents = NULL;
		*nrContents = 0;
		if((FileContents = calloc(1, sizeof(Contents))) == NULL)
		{
			fprintf(stderr,"Memory Error:%s\n", strerror(errno));
			fclose(f);
			return NULL;
		}
		else
		{
			char *token = NULL;
			char FileBuffer[bUFSIZ] = "";
			while(1)
			{
				if((fgets(FileBuffer, sizeof(FileBuffer), f)) == NULL)
					break;
				if(FileBuffer[strlen(FileBuffer)-1] == '\n')
					FileBuffer[strlen(FileBuffer)-1] = '\0';
				token = strtok(FileBuffer, " ");
				if(!token)
				{
					printf("Invalid Line type.\n");
					nError = -1;
					break;
				}
				else
				{
					strncpy(FileContents[*nrContents].FirstCol, token, 10);
					FileContents[*nrContents].FirstCol[10] = '\0';
					FileContents[*nrContents].RowId = *nrContents;
					while(token)
					{
						token = strtok(NULL, " ");
						if(!token)
							break;
						strncpy(FileContents[*nrContents].SecondCol, token, 1);
						FileContents[*nrContents].SecondCol[1] = '\0';
					}
					/* Get more space now. */
					(*nrContents)++;
					FileContents = realloc(FileContents, (*nrContents+1)* sizeof(Contents));
				}
			}
			/* Return the struct. */
			if(!nError)
			{
				fclose(f);
				return FileContents;
			}
		}
	}
}
else
{
	fprintf(stderr,"Invalid Filename.\n");
	return NULL;
}
}

/* Main Code. */
int main(int argc, char *argv[])
{
int nrRecs = 0, Idx;
Contents *FileCont = ReadFromFile("test.txt", &nrRecs);
/* Dump Results. */
printf("FirstColumn\tSecondColumn\n");
for(Idx = 0; Idx < nrRecs; Idx++)
	printf("%s\t\t%s\n", FileCont[idx].FirstCol, FileCont[idx].SecondCol);
free(FileCont);
printf("Hit enter to continue...");
getchar();
return EXIT_SUCCESS;
}

mporeis ligo parapanw na moy eksigiseis ti kanei, to programma ayto?

 

 

-----Προστέθηκε 27/11/2008 στις 02 : 24 : 17-----

 

 

Vakia thelw apo to arxeio toy opoioy i prwti stili tha mpainei se stack an i deyteri stili einai A kai se Q an i dyteri stili einai B?????????????????

 

 

Έχει γίνει πολλές φορές αυτή η διαδικασία διαβάσματος από αρχείο σε C σε αυτό το φόρουμ. Σε αυτή τη φορά δημιουργούμε δομές που θα περιέχουν ξεχωριστά string για την πρώτη και δεύτερη στήλη με βάση τις προδιαγραφές του ζητούμενου. Έτσι:

 

>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include <errno.h>

/* Struct holding the columns. */
typedef struct _Contents
{
char FirstCol[11];
char SecondCol[2];
int RowId;
}Contents;

/* Read From File into a Content Array. */

Contents* ReadFromFile(const char *szFilename, int *nrContents)
{
if(szFilename)
{
	FILE *f = NULL;
	if((f = fopen(szFilename, "rt")) == NULL)
	{
		fprintf(stderr, "Error can not open:%s\n", szFilename);
		return NULL;
	}
	else
	{
		int nError = 0;
		Contents *FileContents = NULL;
		*nrContents = 0;
		if((FileContents = calloc(1, sizeof(Contents))) == NULL)
		{
			fprintf(stderr,"Memory Error:%s\n", strerror(errno));
			fclose(f);
			return NULL;
		}
		else
		{
			char *token = NULL;
			char FileBuffer[bUFSIZ] = "";
			while(1)
			{
				if((fgets(FileBuffer, sizeof(FileBuffer), f)) == NULL)
					break;
				if(FileBuffer[strlen(FileBuffer)-1] == '\n')
					FileBuffer[strlen(FileBuffer)-1] = '\0';
				token = strtok(FileBuffer, " ");
				if(!token)
				{
					printf("Invalid Line type.\n");
					nError = -1;
					break;
				}
				else
				{
					strncpy(FileContents[*nrContents].FirstCol, token, 10);
					FileContents[*nrContents].FirstCol[10] = '\0';
					FileContents[*nrContents].RowId = *nrContents;
					while(token)
					{
						token = strtok(NULL, " ");
						if(!token)
							break;
						strncpy(FileContents[*nrContents].SecondCol, token, 1);
						FileContents[*nrContents].SecondCol[1] = '\0';
					}
					/* Get more space now. */
					(*nrContents)++;
					FileContents = realloc(FileContents, (*nrContents+1)* sizeof(Contents));
				}
			}
			/* Return the struct. */
			if(!nError)
			{
				fclose(f);
				return FileContents;
			}
		}
	}
}
else
{
	fprintf(stderr,"Invalid Filename.\n");
	return NULL;
}
}

/* Main Code. */
int main(int argc, char *argv[])
{
int nrRecs = 0, Idx;
Contents *FileCont = ReadFromFile("test.txt", &nrRecs);
/* Dump Results. */
printf("FirstColumn\tSecondColumn\n");
for(Idx = 0; Idx < nrRecs; Idx++)
	printf("%s\t\t%s\n", FileCont[idx].FirstCol, FileCont[idx].SecondCol);
free(FileCont);
printf("Hit enter to continue...");
getchar();
return EXIT_SUCCESS;
}

Δημοσ.
Έχει γίνει πολλές φορές αυτή η διαδικασία διαβάσματος από αρχείο σε C σε αυτό το φόρουμ. Σε αυτή τη φορά δημιουργούμε δομές που θα περιέχουν ξεχωριστά string για την πρώτη και δεύτερη στήλη με βάση τις προδιαγραφές του ζητούμενου. Έτσι:

 

>
...
ΕΝΑ ΚΑΡΟ ΚΩΔΙΚΑΣ
...

 

Μα ρε παιδιά, ειλικρινά δε λυπάστε τον χρόνο που σπαταλάτε σε μηνύματα που θα σβηστούν λόγω Greeklish... ;

Δημοσ.
kolisa, malon palavosa apopse...

apla exw to arxeio:

 

asd123 A

sdf546 B

23434 B

ewr434 A

 

kai thelw na to diavasw, i prwti stili einai mexri 10 xaraktires kai i deyteri stathera A or B...

 

me fscanf

me fgets

me xrisi tis strtok?????

 

na valw tin prwti stili se pinaka kai ton xaraktira A or B kapoy, malon se ena metriti

 

Βασικά γράφε στα Ελληνικά γιατί βλέπω να σβήνονται τα πάντα. Κατόπιν όταν θέλουμε κάτι το ζητάμε με το όνομα του. Στο πρώτο σου post που βλέπεις αυτά που λες τώρα για την στοίβα και την ουρά. Υποθέτω ότι το "Q" που έχεις γράψει κάπου αναπαριστά την ουρά. Ωραία για να γίνει αυτό υλοποίησε τις βασικές πράξεις της στοίβας και της ουράς και ανέβασε τον κώδικα. Η όλη φάση με τις δομές δεδομένων είναι ότι μπορούν να είναι γενικές, δηλαδή αν τα πράγματα τα έχεις φτιάξει σωστά με μικρές αλλαγές στον τύπο στοιχείου που αποθηκεύουν, αλλάζουν τα πάντα χωρίς να κάνεις εσύ καμία αλλαγή. Φτιάξε αυτά λοιπόν και ως τύπο στοιχείου που θα αποθηκεύουν βάλε έστω ακέραιο. Τα άλλα θα τα συζητήσουμε, απλά για να τα έχω και εγώ.

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

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

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