Page 1 of 1

Αρχεία κεμένου σε Visual C#

Posted: Sat Jun 16, 2007 8:58 pm
by Ισοβίτης
Γεια σας.

Έχω το εξής πρόβλημα, καθότι αρχάριος με τη C#:

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

Παράδειγμα:

Code: Select all

ΚΑΛΗΜΕΡΑ
ΠΛΗΡΟΦΟΡΙΚΗ
ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ
ΒΟΗΘΕΙΑ
Θέλω το πρόγραμμα να διαβάζει μία συγκεκριμένη γραμμή και να αποθηκεύει το περιεχόμενό της σε ένα στρινγκ χαρακτήρων. Π.χ. αν θέλω να διαβάζει την 3η γραμμή, τότε να αποθηκεύει σε στρινγκ τη λέξη "ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ".

Δοκίμασα τον εξής κώδικα, αλλά μάλλον δε δουλεύει, παρότι δεν μου εμφανίζεται λάθος κατά τη μεταγλώττιση:

Code: Select all

StreamReader wf = File.OpenText("Words.txt");   //Άνοιγμα αρχείου λέξεων

int i = 0;  //i είναι ο μετρητής των γραμμών

do
{
    i++;                                    
    wf.ReadLine();           
    if (i == 3)              
           Lexi = wf.ReadLine();  //Lexi είναι η ζητούμενη λέξη  και έχει δηλωθεί ως στρινγκ                             
} while (i < 3);  
               
wf.Close();     //Κλείσιμο αρχείου λέξεων                                       
Όποιος ξέρει ποιος είναι ο κατάλληλος κώδικας με σώζει...

Posted: Sat Jun 16, 2007 9:41 pm
by Erevodifwntas

Code: Select all

StreamReader wf = File.OpenText("Words.txt");   //Άνοιγμα αρχείου λέξεων 

int i = 0;  //i είναι ο μετρητής των γραμμών 

do 
{ 
    i++;                                    
    //wf.ReadLine();            
    if (i == 3)              
           Lexi = wf.ReadLine();  //Lexi είναι η ζητούμενη λέξη  και έχει 
//δηλωθεί ως στρινγκ 
//το else που σε σώζει ;-)
    else
            wf.ReadLine();   δηλωθεί ως στρινγκ                              
} while (i < 3);  
                
wf.Close();     //Κλείσιμο αρχείου λέξεων 
δεν το έχω τρέξει αλλά μου φαίνεται λογικό

Posted: Sat Jun 16, 2007 10:48 pm
by elsupreme
Ωραίος, με πρόλαβες, θα αντιπρότεινα αυτό :

Code: Select all

StreamReader wf = File.OpenText("Words.txt");   //Άνοιγμα αρχείου λέξεων

for(int i=0;i<3;i++)
{                                  
    Lexi = wf.ReadLine(); //Lexi είναι η ζητούμενη λέξη  και έχει δηλωθεί ως στρινγκ                             
}
               
wf.Close();     //Κλείσιμο αρχείου λέξεων  
Αν όπου 3 βάλεις μια μεταβλητή έχεις και έτοιμο function/συνάρτηση.(Αντίστοιχα και για του Erevodifwnta τον κώδικα)

Posted: Sun Jun 17, 2007 12:25 am
by Erevodifwntas
Προσωπικά θα προτιμούσα να τα βάζει όλες τις λέξεις σε έναν πίνακα και μετά να παίρνει τη θέση από τον πίνακα.... (είναι αρκετά πιο γρήγορο από το να διαβάζει από αρχείο... αλλά θέλει περισσότερη μνήμη ;-)

Posted: Sun Jun 17, 2007 3:43 pm
by adam98
Erevodifwntas wrote:Προσωπικά θα προτιμούσα να τα βάζει όλες τις λέξεις σε έναν πίνακα και μετά να παίρνει τη θέση από τον πίνακα.... (είναι αρκετά πιο γρήγορο από το να διαβάζει από αρχείο... αλλά θέλει περισσότερη μνήμη ;-)
Ασε που ανα ειναι πολυ μεγαλο το αρχειο(της ταξης των gigabyte) μπορει να υπαρχει προβλημα στο caching

Posted: Sun Jun 17, 2007 5:54 pm
by Erevodifwntas
adam98 wrote: Ασε που ανα ειναι πολυ μεγαλο το αρχειο(της ταξης των gigabyte) μπορει να υπαρχει προβλημα στο caching
Δε νομίζω ότι μιλάμε για τέτοια μεγέθη, διαφορετικά ο αλγόριθμος του Ισοβίτη θα είχε τεράστια προβλήματα ταχύτητας ;-) (θα είχε νόημα το διάβασμα από αρχεία αν υπήρχε κάποιο Index κ.τ.λπ. που χρησιμοποιούν οι βάσεις δεδομένων (βλ. Βασσάλος)