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

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

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

  • 0
ntenis

files kai array

Ερώτηση

geia sas

exo ena provlimataki....exo ena arxeio keimenou k 8elo na to antigrapso se ena allo arxeio alla oi lekseis na emfanizontai ka8ete k se alfavitiki seira...ego skeftika na valo tis lekseis se ena pinaka k na kano ekei taksinomisi..alla de ksero pos ginete...kamia voi8eia???

 

thx

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες

7 απαντήσεις σε αυτή την ερώτηση

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

sugnomi alla eimai psiloasxetos...:S:S:S:S:S:....to proto provlima to elisa....k tora mou leei oti de mporei na anoiksei to arxeio....mipos na me voi8ouses ligaki???pos akrivos prepei na to kano me to file??

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες

Αν κατάλαβα καλάς, θέλεις να φορτώνεις ένα αρχείο κείμενου, να διαβάζεις τις λέξεις του, να τις ταξινομείς με αλφαβητική σειρά και ύστερα να τις εκτυπώνεις κάθετα κάθε μια από αυτές;

 

ΠΧ.

>
THIS IS A TEST

 

=>

 

>
A

I
S

S
I
M
P
L
E

T
E
S
T

T
H
I
S

 

Σωστά; Αν ναι, τότε το παρακάτω πρόγραμμα (σε ANSI-C) κάνει αυτή την δουλεία:

 

>
/*-Load File, Sort Tokens, Print each token vertical example (c) Directx-------*/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#ifdef __BORLANDC__
#pragma hdrstop
#endif

/*---------------------------------------------------------------------------*/
typedef struct
{
char *pszWord;
}_TWord;

/*---------------------------------------------------------------------------*/
int	_QSRT(const void*,const void*);

#ifdef __BORLANDC__
#pragma argsused
#endif
int main(int argc, char* argv[])
{
FILE *Stream = NULL;
int	 nWordIdx = 0,
	 nError = 0,
	 nWord;
char *pszBuffer = NULL,
	  szWord[bUFSIZ] = ""; /* Maximum word length is 512-bytes in CodeGear Turbo C++ */

/* 
 * Open file for read
 */
if((Stream=fopen(argv[1],"rt"))==NULL)
	printf(" Cannot open file %s\n",argv[1]);
else
 {
	/*
	 * Read each token (word or number, punctation char etc..) into pszBuffer
	 */
	while(fscanf(Stream,"%s",szWord)!=EOF)
	 {
		_TWord	ourWord;
		
		if(!strlen(szWord))
			continue;
		nWordIdx++;
			
		ourWord.pszWord = calloc(strlen(szWord)+1,sizeof(char));
		if(ourWord.pszWord==NULL)
		 {
			nError = 1;
			printf(" Memory error #1\n");
			break;
		 }
		strcpy(ourWord.pszWord,szWord);
				 
		pszBuffer = (char*)realloc(pszBuffer,nWordIdx*sizeof(_TWord));
		if(pszBuffer==NULL)
		 {
			nError = 1;
			printf(" Memory error #2\n");
			break;
		 }
		memcpy(&pszBuffer[(nWordIdx-1)*sizeof(_TWord)],
			   &ourWord,sizeof(ourWord));			
	 }
	fclose(Stream);

	if(!nError)					
	 {
		/* Sort tokens .. */
		qsort(pszBuffer,nWordIdx,sizeof(_TWord),_QSRT);			
		/* Print each word vertical .. */
		for(nWord=0;nWord<nWordIdx;nWord++)
		 {
			_TWord *ptrWord = (_TWord*)&pszBuffer[nWord*sizeof(_TWord)];

			static int nCharIdx;
			for(nCharIdx=0;nCharIdx<strlen(ptrWord->pszWord);nCharIdx++)
				printf("%c\n",ptrWord->pszWord[nCharIdx]);
			printf("\n");
		 }
	 }

	/*
	 * Free temporary program resources
	 */
	for(nWord=0;nWord<nWordIdx;nWord++)
	 {
		_TWord *ptrWord = (_TWord*)&pszBuffer[nWord*sizeof(_TWord)];
		free(ptrWord->pszWord);
	 }
	free(pszBuffer);
	pszBuffer = NULL;
 }

printf("\nPress Enter to quit..");
getchar();
return 0;
}
/*---------------------------------------------------------------------------*/
int	_QSRT(const void *vA,const void *vB)
{
/*
 * Sort each word using C strcmp
 */
_TWord	*ptrA = (_TWord*)vA,
		*ptrB = (_TWord*)vB;

return	strcmp(ptrA->pszWord,ptrB->pszWord);
}

 

Είναι γραμμένο σε CodeGear Turbo C++ Explorer και φυσικά μπορεί να περιέχει Bugs.

 

Καλή συνέχεια.

 

Υ.Γ.

Προσοχή, το πρόγραμμα δεν περιορίζεται μόνο σε λέξεις αλλά σε κάθε τι που μπορεί να αναπαρασταθεί ως string στο αρχείο (πχ. λέξεις, αριθμούς, συνδυασμούς των δυο, σημεία στίξεως κτλ.)

 

Πάντως εύκολα μπορεί να ρυθμισθεί να απορρίπτει περιπτώσεις εισόδου που κρίνονται ακατάλληλες, πχ. αριθμούς, σημεία στίξης κτλ.

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες

katarxas euxaristo gia tin apantisi :):)

 

to ekana antigrafi k epikolisi sto programma mou alla mou epistrefei la8i..

1)[Warning] initialization from incompatible pointer type

k otan pao pano me paei sti seira _TWord *ptrWord = &pszBuffer[nWord*sizeof(_TWord)];

 

 

mipos mporeis na voi8iseis ligo???to arxeio.txt apo pou prepei na to fortoso ??

 

thx k pali..

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες

Απλά, όπως σου είπα, δίνεις το όνομα του αρχείου που θες να ανοίξεις ως παράμετρο του προγράμματος που έχεις κάνει compile.

 

Έστω ότι το πρόγραμμα το έκανες compile ως test.exe, τότε από την κονσόλα ή από την γλώσσα προγραμματισμού σου (ψάξε τις ρυθμίσεις της), δίνεις ως παράμετρο το αρχείο κειμένου που θέλεις να ανοίξεις.

 

Για παράδειγμα, αν θες το αρχείο file1.txt δίνεις στην κονσόλα την εντολή test file1.txt

Aν το αρχείο file1.txt βρίσκεται σε κάποιον άλλο κατάλογο ή μονάδα από εκεί που είναι το πρόγραμμα μας δίνεις την πλήρη διαδρομή, πχ. test c:\goodies\file1.txt (αν το αρχείο κειμένου βρίσκεται στον κατάλογο goodies της μονάδας C) κτλ.

 

Δυστυχώς, δεν μπορώ να γίνω πιο αναλυτικός επ' αυτού.. :-(

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες

Σωστά, πρόκειται για Warning καθώς ξέχασα το type-casting, δοκίμασε να το κάνεις:

>_TWord *ptrWord = (_TWord*)&pszBuffer[nWord*sizeof(_TWord)];

 

Το αρχείο το περνάς ως παράμετρο στο πρόγραμμα, πχ. test.exe file-name.

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες
×
×
  • Δημιουργία νέου...