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

fprintf() se C


Godfath3r

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

Δημοσ.

8a h8ela mou peite an yparxei tropos anoigontas ena arxeio .txt paradeigma me thn entolh fopen("file.txt", "a") na grafw me thn fprintf se kapoio shmeio tou arxeio kai oxi mono sto telos (symfwna me to "a").Px an 8elw na grapsw sthn 5h seira 'h an 8elw na grapsw katw apo thn seira pou grafei "arxh".

Euxarsito ek twn proterwn...

Δημοσ.

Xrhsimopoihse ws parametro to r+. To thema einai oti grafeis men alla grafeis panw sta dedomena. Den gnwrizw twra pws mporeis na prostheteis kena. To sigouro einai oti mporeis na to katafeis auto an anoikseis 2 arxeia, to ena gia read kai to allo gia write & na prostheseis na dedomena ekei pou theleis

Δημοσ.

Η παράμετρος r+ είναι για άλλο σκοπό κυρίως. Για να μετακινηθείς μέσα στο αρχείο χρησιμοποίησε την fseek(). H σύνταξη είναι fseek(δείκτης στο αρχείο, byte που θές να μετακινηθείς , σε σχέση με τι).

 

Η δεύτερη παράμετρος μπορεί να αρνητικός ή θετικός ανάλογα με το αν θές να πάς μπρός η πίσω. Η τρίτη παίρνει τρείς δυνατές τιμές. 0 για αρχή του αρχείου, 1 η τρέχων θέση και 2 για το τέλος του αρχείου. μπορείς να χρησιμοποιήσεις και forward() ή rewind() για να πάς στο τέλος ή στην αρχή του αρχείου αντίστοιχα.

 

Τα δεδομένα γίνονται overwrite γι αυτό πρέπει να πάρεις τα μέτρα σου.....

Δημοσ.

o pio aplos tropos einai na diavazeis mia mia seira kai na tin adigrafeis se ena temp file mehri na vreis ti seira pou theleis, meta na grafeis sto temp file afto pou thes na prostheseis kai meta na sinehizeis na adigrafeis mehri to telos tou arheiou..

 

telos, adigrafeis olo to temp file sto original me rewrite kai svineis to temp

Δημοσ.

baxter afto akrivws kanw sto programma mou mono pou den mporw na stamatisw sto shmeio pou 8elw gia na symplhrwsw ta epipleon stoixeia.8a prepei na sygkrinw dyo strings (ena apo thn fgets kai ena pou 8a prepei na orisw egw).An ypo8esoume pws egw 8elw na stamataei h egrafh sto temp arxeio thn stigmh pou vrei timh -list- pws 8a prepei na dhlwsw to string pou 8a sygkrinw me to string ths fgets?paradeigma...

 

arxh keimenou

1h grammh keimeno

2h grammh keimeno

3h grammh -list-

.............................

edw 8elw na pros8esw me mia fprintf

..............................

4h grammh keimeno

telos keimenou

 

An den katalavaineis mporw na para8esw kai kwdika!

Eyxaristw gia to endiaferon...

Δημοσ.

Αν κατάλαβα καλά, θες να ξέρεις σε ποιο offset βρίσκεται το στοιχείο που αναζητείς; εάν ναι, τότε η παρακάτω ρουτίνα μου μπορεί να σου επιστρέψει με βάση το iOffset_Mode, που ορίζεις, το που ξεκινά ή έχει τελειώσει μια σειρά χαρακτήρων (Bytes) στο Stream ενός αρχείου. Σε περίπτωση που το στοιχείο δεν υπάρχει τότε επιστρέφει -1. Η ρουτίνα προϋποθέτει ένα ανοικτό προς ανάγνωση Stream και σέβεται την θέση του Stream offset pointer (δεν κάνει δηλαδή αυτόματα rewind).

 

Προσοχή: Δεν την έχω δοκιμάσει «εξονυχιστικά» ( disclaim :) ) αλλά πιστεύω ότι μπορεί να φάνει χρήσιμη σε κάποιον (με τις κατάλληλες μετατροπές μπορεί να δουλέψει και για memory blocks).

 

>
long    FindText_Offset(FILE *Stream,char *pszString,int iOffset_Mode)
{
 /* Επέστρεψε το Offset του Stream που αρχίζει ή τελειώνει το pszString με βάση
    κάθε φορά την μεταβλητή (διακόπτης) iOffset_Mode.
 */
 int   iCharacter;
 long  lIndex,lMatch_Hit=0,lString_Len=strlen(pszString),lData_Offset=-1L;

 // Διαβάζουμε χαρακτήρα προς χαρακτήρα κάθε στοιχείο του κειμένου
 while((iCharacter=fgetc(Stream))!=EOF)
  {
    // Καθαρισμός των μεταβλητών του συστήματος αναζήτησης
    lMatch_Hit=0L; lData_Offset=-1L;

    /* Εαν βρούμε ένα χαρακτήρα όμοιο με τον πρώτο χαρακτήρα του στοιχείου που
       ψάχνουμε..
    */
    if(iCharacter==pszString[0])
     {
       // ..Ok, πιστοποιήσαμε τον πρώτο χαρακτήρα του προς εύρεση στοιχείου!
       lMatch_Hit++;

       /* ..δοκιμάζουμε να πιστοποιήσουμε και τους υπόλοιπους χαρακτήρες της
          του αναζητούμενου στοιχείου..
       */
       for(lIndex=1L;lIndex<=lString_Len;lIndex++)
        {
          // ..όπ! φτάσαμε στο τέλος του αρχείου!!
          if((iCharacter=fgetc(Stream))==EOF){ break; }

          // ..πόσοι χαρακτήρές ταιριάζουν (σειριακά πάντα);
          if(pszString[lIndex]==iCharacter){ lMatch_Hit++; }
        }

       // Αν οι δυο τιμές είναι όμοιες τότε βρήκαμε το στοιχείο που αναζητούσαμε
       if(lMatch_Hit==lString_Len)
        {
          lData_Offset=ftell(Stream);

          switch(iOffset_Mode)
           {
             case 1: // ..επιστροφή του Offset που αρχίζει το στοιχείο
              lData_Offset-=(lMatch_Hit+1);
             break;
             default:// ..επιστροφή του Offset έχει τελειώσει το στοιχείο
              lData_Offset-=1;
             break;
           }

          break;
        }
     }
  }

return lData_Offset;  
}

 

Καλή τύχη!

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

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

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