Title: Δημιουργία μεταβλητών αρχείων στη C++ Post by: marauber on March 12, 2008, 17:21:55 pm Καλησπέρα παίδες. Θέλω να δημιουργήσω αρχεία με ονόματα που προκύπτουν από κάποιες μεταβλητές, πχ testi όπου i=1 ή ί=2, ώστε να δημιουργηθούν τα αρχεία test1 και test2.
Έχω στο μυαλό μου κάτι του στυλ: for (int i=1;i<4;i++) { ofstream teststream("test"+i); teststream<<"testing"; } αλλά τα αρχεία δε δημιουργούνται με τα ονόματα που αναμένω (δημιουργούνται τα est, st και t κόβοντας χαρακτήρες από το test). Καμία ιδέα; Και αν καταφέρω αυτό, να βρω τρόπο να προσθέτω strings στο όνομα του αρχείου κατά βούληση με βάση λογικές πράξεις. Title: Re: Δημιουργία μεταβλητών αρχείων στη C++ Post by: Aurelius on March 12, 2008, 17:36:08 pm Ναι γιατι με αυτο που κανει ειναι σαν να του λες να δωσει το ονομα απο το 1, 2, 3 ... χαρακτηρα του string που ειναι στην ουσια πινακας. Αυτο που πρεπει να κανεις ειναι το εξης:
Μετατρεπεις το i πρωτα σε char με τις συναρτησεις itoa ή atoi και μετα ενωνεις τα 2 strings. Δηλ. for (int i=1;i<4;i++) { ofstream teststream((string)("test"+itoa(i))); teststream<<"testing"; } Λογικα ετσι θα δουλεψει. Title: Re: Δημιουργία μεταβλητών αρχείων στη C++ Post by: marauber on March 12, 2008, 18:04:21 pm Μου βγάζει σφάλμα στην itoa, `itoa' was not declared in this scope, παρόλο που έκανα #include <cstdlib>. Επίσης δοκίμασα και το εξής:
string b; b="Test2"; ofstream teststream((string)("test"+b)); teststream<<"testing"; το οποίο πάλι δε δουλεύει "error: no matching function for call to `std::basic_ofstream<char, std::char_traits<char> >::basic_ofstream(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)' /usr/lib/gcc/x86_64-redhat-linux/3.4.6/../../../../include/c++/3.4.6/iosfwd:93: note: candidates are: std::basic_ofstream<char, std::char_traits<char> >::basic_ofstream(const std::basic_ofstream<char, std::char_traits<char> >&) " Title: Re: Δημιουργία μεταβλητών αρχείων στη C++ Post by: Aurelius on March 12, 2008, 18:23:47 pm Δοκιμασε
char ch[10]; int i = 1234; sprintf( ch,"%d", i); απο http://www.codeguru.com/forum/archive/index.php/t-179488.html Γενικα google int to char c++ Title: deleted Post by: BOBoMASTORAS on March 12, 2008, 18:43:52 pm deleted
Title: Re: Δημιουργία μεταβλητών αρχείων στη C++ Post by: marauber on March 12, 2008, 19:03:15 pm Thanks Bob, δούλεψε. Μόνο μια μικρή λεπτομέρεια:
Πως γίνεται να αδειάσω το stringstream; Γιατί μέσα σε βρόγχο for εκτός από το τρέχον όνομα αρχείου βγάζει και τα προηγούμενα που είχαν μπει σε αυτό #include <iostream> #include <fstream> #include <sstream> using namespace std; int main( int argc, char * argv[ ] ) { int i; stringstream filename; for (i=i;i<4;i++) { filename<<"test"<<i; ofstream teststream(filename.str().c_str()); teststream<<"testing"; } return 0; } Πολύ σπάσιμο πάντως που η ofstream.open δε δέχεται σαν είσοδο string. Title: deleted Post by: BOBoMASTORAS on March 12, 2008, 19:05:54 pm deleted
Title: Re: Δημιουργία μεταβλητών αρχείων στη C++ Post by: marauber on March 12, 2008, 19:15:10 pm Thanks, βρήκα το filename.str(string()); και δουλεύει. Λογικά και τo δικό σου. Στο http://www.thescripts.com/forum/thread60377.html το βρήκα, το cplusplus δεν είχε κάτι.
Title: Re: Δημιουργία μεταβλητών αρχείων στη C++ Post by: Καμένος on March 14, 2008, 12:52:04 pm Επίσης στον πρώτο κώδικα μπορείς να βάλεις στη θέση του i το (i+48). Αυτό γιατί αν προσθέσεις σε string το i θα το πάρει ώς char. Αν το i=0 προσθέτει τον χαρακτήρα που έχει ASCII το 0..
Title: Re: Δημιουργία μεταβλητών αρχείων στη C++ Post by: Aurelius on March 14, 2008, 13:33:37 pm Δοκιμασε char ch[10]; int i = 1234; sprintf( ch,"%d", i); απο http://www.codeguru.com/forum/archive/index.php/t-179488.html Γενικα google int to char c++ Παντως αυτο το δοκιμασα και δουλεψε. Title: Re: Δημιουργία μεταβλητών αρχείων στη C++ Post by: marauber on March 14, 2008, 18:22:50 pm Ευχαριστώ άπαντες, αλλά τελικά με βόλεψε πολύ το stringstream και δεν το αλλάζω τώρα :P
|