ntenis Δημοσ. 9 Οκτωβρίου 2007 Share Δημοσ. 9 Οκτωβρίου 2007 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 Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
Directx Δημοσ. 9 Οκτωβρίου 2007 Share Δημοσ. 9 Οκτωβρίου 2007 Αν κατάλαβα καλάς, θέλεις να φορτώνεις ένα αρχείο κείμενου, να διαβάζεις τις λέξεις του, να τις ταξινομείς με αλφαβητική σειρά και ύστερα να τις εκτυπώνεις κάθετα κάθε μια από αυτές; ΠΧ. > 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 στο αρχείο (πχ. λέξεις, αριθμούς, συνδυασμούς των δυο, σημεία στίξεως κτλ.) Πάντως εύκολα μπορεί να ρυθμισθεί να απορρίπτει περιπτώσεις εισόδου που κρίνονται ακατάλληλες, πχ. αριθμούς, σημεία στίξης κτλ. Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
ntenis Δημοσ. 9 Οκτωβρίου 2007 Μέλος Share Δημοσ. 9 Οκτωβρίου 2007 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.. Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
Directx Δημοσ. 9 Οκτωβρίου 2007 Share Δημοσ. 9 Οκτωβρίου 2007 Σωστά, πρόκειται για Warning καθώς ξέχασα το type-casting, δοκίμασε να το κάνεις: >_TWord *ptrWord = (_TWord*)&pszBuffer[nWord*sizeof(_TWord)]; Το αρχείο το περνάς ως παράμετρο στο πρόγραμμα, πχ. test.exe file-name. Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
ntenis Δημοσ. 9 Οκτωβρίου 2007 Μέλος Share Δημοσ. 9 Οκτωβρίου 2007 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?? Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
Directx Δημοσ. 10 Οκτωβρίου 2007 Share Δημοσ. 10 Οκτωβρίου 2007 Απλά, όπως σου είπα, δίνεις το όνομα του αρχείου που θες να ανοίξεις ως παράμετρο του προγράμματος που έχεις κάνει compile. Έστω ότι το πρόγραμμα το έκανες compile ως test.exe, τότε από την κονσόλα ή από την γλώσσα προγραμματισμού σου (ψάξε τις ρυθμίσεις της), δίνεις ως παράμετρο το αρχείο κειμένου που θέλεις να ανοίξεις. Για παράδειγμα, αν θες το αρχείο file1.txt δίνεις στην κονσόλα την εντολή test file1.txt Aν το αρχείο file1.txt βρίσκεται σε κάποιον άλλο κατάλογο ή μονάδα από εκεί που είναι το πρόγραμμα μας δίνεις την πλήρη διαδρομή, πχ. test c:\goodies\file1.txt (αν το αρχείο κειμένου βρίσκεται στον κατάλογο goodies της μονάδας C) κτλ. Δυστυχώς, δεν μπορώ να γίνω πιο αναλυτικός επ' αυτού.. Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
ntenis Δημοσ. 10 Οκτωβρίου 2007 Μέλος Share Δημοσ. 10 Οκτωβρίου 2007 thx paraaaaaaaaaaa polu....:) ok mporei na se eksasa ligaki alla me voi8ises arketa mporo na po... thx k pali.. Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
Directx Δημοσ. 10 Οκτωβρίου 2007 Share Δημοσ. 10 Οκτωβρίου 2007 Καλή συνέχεια Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.