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

Character counter


Giourkas1

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

Δημοσ.

Xairetw insomniacs,

 

Gnwrizete an apo ena keimeno (txt,rtf,doc,otidhpote) mporoume na metrhsoue poses fores emfanizetai o ka8e xarakthras?

An nai, se ti glwssa mporei na ylopoih8ei ena tetoio programmataki?

Δημοσ.

Αν θες να φτιάξεις ένα τέτοιο προγραμματάκι καλύτερα να το κάνεις ή σε C ή σε C++.Εγώ θα προτιμούσα τη C πάντως!

Δημοσ.

μην τα μπλέκετε, άλλο πράγμα το txt άλλο το rtf,doc

 

το rtf/doc δεν γίνεται να το προσπελάσεις με απλή C, έχει απο πίσω ένα μάτσο πράγματα, αυτό που μπορείς να κάνεις είναι να γράψεις ένα πρόγραμμα σε VB που να φορτώνει το αντίστοιχο module για office και να τρέχει την έτοιμη ρουτίνα για character count (τουλάχιστον κάτι τέτοιο το είχα δει να γίνεται στην delphi)

 

για txt αρχείο (αρχείο χαρακτήρων) τα πράγματα είναι πιο εύκολa, το πρόγραμμα μπορεί να γραφτεί με c με απλό τρόπο

 

α) διαβάζεις το μέγεθος του αρχείου και διαιρείς με sizeof(char) . πήρες τον αριθμό των χαρακτήρων

 

β) το ανοίγεις με fopen και με ένα while (! feof ) count ++ μετράς το ίδιο πράγμα (πιο αργά)

 

molis anakalipsa oti efaga ton Win32:Obfuscated-AHA [Trj]

gkantemiko post damn

Δημοσ.

Αν απλά θέλεις να μετράς την εμφάνιση των ASCII χαρακτήρων σε ένα απλό text αρχείο δες τον παρακάτω κώδικα σε C:

 

>
//-Count Characters in C (directx)-------------------------------------------
#include <stdio.h>
#include <alloc.h>

#ifdef __BORLANDC__
  #pragma hdrstop
#endif

//---------------------------------------------------------------------------

#ifdef __BORLANDC__
  #pragma argsused
#endif
int main(int argc, char* argv[])
{
  int *nASCII_Table = 0, nChar, nPauseForResult = 0;
  FILE *Stream = NULL;

  if(argc==1)
   printf(" Please define filename!\n");
  else
   {
     if((Stream=fopen(argv[1],"rb"))==NULL)
      printf(" Cannot open file for read - %s\n",argv[1]);
     else
      {
        if((nASCII_Table=calloc(256,sizeof(int)))!=NULL)
         {
           while((nChar=fgetc(Stream))!=EOF)
            nASCII_Table[nChar]++;

           for(nChar=0;nChar<256;nChar++)
            if(nASCII_Table[nChar])
             {
               nPauseForResult = 1;
               printf(" Char '%c' (0x%.2X - %.3d) appears %.2d times\n",
                      nChar,nChar,nChar,nASCII_Table[nChar]);
             }

           if(nPauseForResult)
            {
              printf("\n Press Enter to quit..");
              fgetc(stdin);
            }
         }
        else
         printf(" Not enough memory for this operation!\n");

        free(nASCII_Table);
        fclose(Stream);
      }
   }

  return 0;
}
//---------------------------------------------------------------------------

 

Ουσιαστικά δημιουργούμε (calloc) έναν πίνακα 255 (0..255 -δηλαδή 256 καθώς στην C μετράμε και το μηδέν) θέσεων, ικανό να κρατήσει ολόκληρο το ASCII table και κάθε φορά που εντοπίζουμε έναν ASCII χαρακτήρα (fgetc), απλά αυξάνουμε την ανάλογη τιμή της θέσης του στον πίνακα μας (nASCII_Table[nChar]++).

 

Τέλος εκτυπώνουμε τα όποια αποτελέσματα μας για κάθε χαρακτήρα που έχει από μια ή περισσότερες εμφανίσεις.

 

Ο κώδικας γράφτηκε σε C/C++ Builder 6.0, δοκιμάσθηκε σε ένα απλό text και φυσικά μπορεί να περιέχει bugs.

 

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

Δημοσ.
>
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char **argv)
{
   FILE* fp = fopen(argv[1], "r");
   if (fp==NULL) return -1;
   fseek(fp, 0L, SEEK_END);
   long length=ftell(fp);
   fclose(fp);
   div_t res = div(length, sizeof(char));
   printf("FILESIZE: %d\n CHARS: %d\n", length, res.quot);
   return 0;
}

Δημοσ.

> txt,rtf,doc,otidhpote

 

Κάθε γλώσσα στον τομέα της. Όταν λες οτιδήποτε, αν εννοείς οτιδήποτε που μπορεί να ανοίξει το word, τότε το πιο εύκολο είναι να το κάνεις σε κάποια παραλλαγή της visual basic (π.χ. VBA). Αυτή έχει άμεση επικοινωνία με το Word.

 

Σε C κτλ θα πρέπει να μπλέξεις με COM objects αν θες να χρησιμοποιήσεις και πάλι το Word. Αν όχι, θα πρέπει να πάρεις κάποια βιβλιοθήκη με > 10.000 γραμμές κώδικα και με αμφίβολα αποτελέσματα.

 

Αν στο ο,τιδήποτε περιλαμβάνονται και άλλοι τύποι αρχείων, π.χ. OpenOffice, τότε καλύτερα να βρεις κώδικα από κάποιο open source utility τύπου google desktop, γιατί θα χρειαστείς > 100.000 γραμμές κώδικα για να διαβάσεις τα περισσότερα σχετικά φορμάτ αρχείων (προσεγγιστικά μιλάω απλά για να δώσω στο περίπου ένα μέγεθος).

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

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

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