Απορία στη c για αρχεία .txt

Συζητήσεις για την γλώσσα C και C++

Συντονιστές: WebDev Moderators, Super-Moderators

Απάντηση
rifleman
Δημοσιεύσεις: 15
Εγγραφή: 14 Δεκ 2010 20:30

Απορία στη c για αρχεία .txt

Δημοσίευση από rifleman » 12 Μαρ 2011 00:17

Καλησπέρα, έχω δύο απορίες πάνω στην c και στα αρχεία .txt.

Πρώτη απορία μου είναι αν υπάρχει κάποιος τρόπος να φτιάξω ένα δείκτη ο οποίος να δείχνει μέσα σε αρχείο .txt? Έτσι ώστε να μπορώ να διαβάζω χαρακτήρες από κάποιο αρχείο και όταν συναντήσω ένα χαρακτήρα, τότε να μπορώ να πηγαίνω πίσω ξέρω εγώ 3ς θέσεις για να πάρω εκείνο το στοιχείο(χαρακτήρα). Για να καταλάβετε καλύτερα δείτε τον παρακάτω κώδικα μου:

Κώδικας: Επιλογή όλων

#include <stdio.h>
#include <stdlib.h>

#define N1 50000

main&#40;&#41;
&#123;
      FILE *fp1;
      char ch1&#91;N1&#93;;
      int i=0,j=0,k=0;
      
      
      fp1=fopen&#40;"details.txt","r"&#41;;
      if &#40;fp1==NULL&#41; exit&#40;2&#41;;
      
      while &#40;ch1&#91;i&#93;!=EOF&#41;
      &#123;
            ch1&#91;i&#93;=fgetc&#40;fp1&#41;;
            i++;
      &#125;
      k=i;
      fclose&#40;fp1&#41;;
      
      FILE *fp2;
      
      fp2=fopen&#40;"extract.txt","w"&#41;;
      if &#40;fp2==NULL&#41; exit&#40;2&#41;;
      
      
      for &#40;i=0;i<=k;i++&#41;
      &#123;
          if &#40;ch1&#91;i&#93;=='|'&#41;
          &#123;
                          
                for &#40;j=-3;j<=3;j++&#41;
                &#123;
                    fputc&#40;ch1&#91;i+j&#93;,fp2&#41;;
                &#125;     
          &#125;
      &#125;
      fclose&#40;fp2&#41;;
      system&#40;"pause"&#41;;
&#125;
Θέλω να διαβάζω χαρακτήρες από ένα κείμενο και κάθε φορά που θα φτάνω στον χαρακτήρα | τότε να αποθηκεύω τους τρεις προηγούμενους χαρακτήρες, το | και τους τρεις επόμενους έτσι όπως είναι στη σειρά. (χωρίς να γνωρίζω την θέση του | μέσα στο κείμενο).
Για να το κάνω αυτό εγώ φτιάχνω έναν μεγάλο πίνακα και αφού αποθηκεύω όλους τους χαρακτήρες από το αρχείο σε αυτόν μετά πολύ απλά κάνω αυτό που θέλω αφού μπορώ τώρα να πάρω στοιχεία από όποια θέση του πίνακα θέλω.


και το άλλο που ήθελα να ρωτήσω είναι πως μπορώ να αποθηκεύω το αρχείο μου extract.txt όπου θέλω εγώ στο σκληρό, πχ στην διεύθυνση C:\Documents and Settings\user\Τα έγγραφά μου και όχι μέσα στο φάκελο που βρίσκεται το πρόγραμμα.

Άβαταρ μέλους
xultimatex
Honorary Member
Δημοσιεύσεις: 2505
Εγγραφή: 26 Ιούλ 2003 13:02
Τοποθεσία: Ξάνθη
Επικοινωνία:

Απορία στη c για αρχεία .txt

Δημοσίευση από xultimatex » 12 Μαρ 2011 17:38

Δοκίμασε να το κάνεις με fscanf(). Δηλαδή κάπως έτσι:

Κώδικας: Επιλογή όλων

 #include <stdio.h>
#include <stdlib.h>

main&#40;&#41;
&#123;
      FILE *fp1;
      FILE *fp2;
      char s1&#91;3&#93;, s2&#91;3&#93;;
     
     
      fp1=fopen&#40;"details.txt","r"&#41;;
      fp2=fopen&#40;"extract.txt","w"&#41;;
      if &#40;fp1==NULL&#41; exit&#40;2&#41;;
     
      while &#40;fscanf&#40;fp1,"%3c|%3c",s1,s2&#41;!=EOF&#41;
      &#123;
            fprintf&#40;fp2,"%s|%s",s1,s2&#41;;
      &#125;
      fclose&#40;fp1&#41;;
      fclose&#40;fp2&#41;;
      system&#40;"pause"&#41;;
&#125;
Δεν το έχω δοκιμάσει για συντατκτικά λάθη γιαυτό μπορεί να βρεις κανένα. Αλλά πιστεύω σαν ιδέα θα δουλέυει έτσι...
:arrow: Αν προσπαθείς πολύ για να πετύχεις κάτι, ίσως το κάνεις με λάθος τρόπο...

Άβαταρ μέλους
dva_dev
Script Master
Δημοσιεύσεις: 3790
Εγγραφή: 16 Σεπ 2005 01:32
Επικοινωνία:

Απορία στη c για αρχεία .txt

Δημοσίευση από dva_dev » 12 Μαρ 2011 20:50

rifleman έγραψε:Καλησπέρα, έχω δύο απορίες πάνω στην c και στα αρχεία .txt.

Πρώτη απορία μου είναι αν υπάρχει κάποιος τρόπος να φτιάξω ένα δείκτη ο οποίος να δείχνει μέσα σε αρχείο .txt? Έτσι ώστε να μπορώ να διαβάζω χαρακτήρες από κάποιο αρχείο και όταν συναντήσω ένα χαρακτήρα, τότε να μπορώ να πηγαίνω πίσω ξέρω εγώ 3ς θέσεις για να πάρω εκείνο το στοιχείο(χαρακτήρα).
Δες την fseek
rifleman έγραψε:και το άλλο που ήθελα να ρωτήσω είναι πως μπορώ να αποθηκεύω το αρχείο μου extract.txt όπου θέλω εγώ στο σκληρό, πχ στην διεύθυνση C:\Documents and Settings\user\Τα έγγραφά μου και όχι μέσα στο φάκελο που βρίσκεται το πρόγραμμα.
Δώσε στο όνομα του αρχείου ολόκληρο το path που θέλεις.

Κώδικας: Επιλογή όλων

fp2=fopen&#40;"C&#58;\\Documents and Settings\\User\\Τα έγγραφά μου\\extract.txt","w"&#41;;

rifleman
Δημοσιεύσεις: 15
Εγγραφή: 14 Δεκ 2010 20:30

Απορία στη c για αρχεία .txt

Δημοσίευση από rifleman » 12 Μαρ 2011 22:40

xultimatex έγραψε:Δοκίμασε να το κάνεις με fscanf(). Δηλαδή κάπως έτσι:

Κώδικας: Επιλογή όλων

 #include <stdio.h>
#include <stdlib.h>

main&#40;&#41;
&#123;
      FILE *fp1;
      FILE *fp2;
      char s1&#91;3&#93;, s2&#91;3&#93;;
     
     
      fp1=fopen&#40;"details.txt","r"&#41;;
      fp2=fopen&#40;"extract.txt","w"&#41;;
      if &#40;fp1==NULL&#41; exit&#40;2&#41;;
     
      while &#40;fscanf&#40;fp1,"%3c|%3c",s1,s2&#41;!=EOF&#41;
      &#123;
            fprintf&#40;fp2,"%s|%s",s1,s2&#41;;
      &#125;
      fclose&#40;fp1&#41;;
      fclose&#40;fp2&#41;;
      system&#40;"pause"&#41;;
&#125;
Δεν το έχω δοκιμάσει για συντατκτικά λάθη γιαυτό μπορεί να βρεις κανένα. Αλλά πιστεύω σαν ιδέα θα δουλέυει έτσι...
Αυτό κοίταξε το λίγο γιατί δεν δουλεύει σωστά, μου βγάζει διάφορα σκουπίδια πριν και μετά από τα |, και όχι τους 3 προηγούμενους και τους τρεις επόμενους χαρακτήρες.

dva_dev έγραψε: Δες την fseek
Την είδα αλλά δεν κατάλαβα πως θα αλλάξω τη θέση του SEEK_CUR. Μπορείς να με βοηθήσεις λίγο?
dva_dev έγραψε:
rifleman έγραψε:και το άλλο που ήθελα να ρωτήσω είναι πως μπορώ να αποθηκεύω το αρχείο μου extract.txt όπου θέλω εγώ στο σκληρό, πχ στην διεύθυνση C:\Documents and Settings\user\Τα έγγραφά μου και όχι μέσα στο φάκελο που βρίσκεται το πρόγραμμα.
Δώσε στο όνομα του αρχείου ολόκληρο το path που θέλεις.

Κώδικας: Επιλογή όλων

fp2=fopen&#40;"C&#58;\\Documents and Settings\\User\\Τα έγγραφά μου\\extract.txt","w"&#41;;
Αυτό δουλεύει μια χαρά, ευχαριστώ για την απάντηση! Αλλά να σε ρωτήσω και κάτι, μπορώ να στείλω το αρχείο μέσο δικτύου σε άλλον υπολογιστή με αυτόν τον τρόπο? πχ στην διεύθυνση: \\Winxpso\c\Documents

rifleman
Δημοσιεύσεις: 15
Εγγραφή: 14 Δεκ 2010 20:30

Απορία στη c για αρχεία .txt

Δημοσίευση από rifleman » 12 Μαρ 2011 22:57

rifleman έγραψε:
dva_dev έγραψε: Δες την fseek
Την είδα αλλά δεν κατάλαβα πως θα αλλάξω τη θέση του SEEK_CUR. Μπορείς να με βοηθήσεις λίγο?
Εντάξει, το βρήκα, χεχε. Ευχαριστώ πολύ!

Κώδικας: Επιλογή όλων

#include <stdio.h>
#include <stdlib.h>

main&#40;&#41;
&#123;
      FILE *fp1;
      FILE *fp2;
      int j=0;
      char ch;
     
     
      fp1=fopen&#40;"details.txt","r"&#41;;
      fp2=fopen&#40;"extract.txt","w"&#41;;
      if &#40;fp1==NULL&#41; exit&#40;2&#41;;

      while &#40;ch!=EOF&#41;
      &#123;
            ch=fgetc&#40;fp1&#41;;
            if &#40;ch=='|'&#41;
            &#123;
                 fseek&#40;fp1 , -4 , SEEK_CUR &#41;;       
                 for &#40;j=-3;j<=3;j++&#41;
                 &#123;
                       ch=fgetc&#40;fp1&#41;;
                       fputc&#40;ch,fp2&#41;;
                       
                 &#125;
                 fputc&#40;'\n',fp2&#41;;
            &#125;
      &#125;
      fclose&#40;fp1&#41;;
      fclose&#40;fp2&#41;;
      system&#40;"pause"&#41;;
&#125;

Απάντηση

Επιστροφή στο “C, C++”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 0 επισκέπτες