Moderators Spect~ Δημοσ. 14 Δεκεμβρίου 2011 Moderators Δημοσ. 14 Δεκεμβρίου 2011 θελω απο ενα txt που ειναι της μορφης ΟΝΟΜΑ(κενο)ΚΩΔΙΚΟΣ θελω να περνω αρχικα το ονομα να το γραφω στο αρχειο κ μετα τον κωδικο κ να τον γραφω στο αρχειο ωστε στο τελος θα γινει ΟΝΟΜΑ(αλλαγη γραμμης)ΚΩΔΙΚΟΣ αλλα καπου σκαλωνει οταν διαβαζει την γραμμη απο το αρχειο.. καμια βοηθεια?? εδω ειναι ο κωδικας κ ενα τχτ με τους κωδικους-ονοματα >#include <iostream> #include <fstream> using namespace std; int main(){ int i,flag,j,l; string s1,temp; ifstream inputN; ofstream output; inputN.open("codes1.txt"); output.open("url.txt"); while(!inputN.eof()) { inputN >> s1; l = s1.length(); cout << l; flag=0; i=0; while(i<l && flag==0){ j = i+1; if (s1[i]==' ' && (s1[j] >= 'A' && s1[j] <= 'Z') || (s1[j] >= '0' && s1[j] <= '9')){ temp = s1.substr(0,l-j); output << temp << endl; temp = s1.substr(j); output << temp << endl; flag=1; } i++; } } return 0; } το ελυσα το προβλημα μου με τη getline(). οριστε κ ο κωδικας σε περιπτωση που θελει καποιος να τον χρησιμοποιηση το μονο που με προβληματησε ειναι οτι σε μερικα εμφανιζει κ ενα κενο πριν ενω δεν θα επρπε..αν το δει καποιος κ δεν βαριεται κ ανακλυψει γτ το κανει αυτο καλος >#include <iostream> #include <fstream> using namespace std; int main(){ int i,flag,j,l; char s; string s1,temp; ifstream inputN; ofstream output; inputN.open("codes1.txt"); output.open("url.txt"); while(!inputN.eof()) { getline( inputN , s1); l = s1.length(); flag=0; i=0; while(i<l && flag==0){ j = i+1; if (s1[i]==' ' && (s1[j] >= 'A' && s1[j] <= 'Z') || (s1[j] >= '0' && s1[j] <= '9')){ temp = s1.substr(0,i); output << temp << endl; temp = s1.substr(i); output << temp << endl; flag=1; } i++; } } return 0; }
3c0r1z Δημοσ. 14 Δεκεμβρίου 2011 Δημοσ. 14 Δεκεμβρίου 2011 >std::ifstream is("old.txt"); std::ofstream os("new.txt"); std::string nm; std::string cd; while(is >> nm >> cd) os << nm << "\n" << cd << "\n"; Αν κατάλαβα καλά τι θέλεις να κάνεις. Η λύση που έδωσες μου φαίνεται περίπλοκη.
Moderators Spect~ Δημοσ. 14 Δεκεμβρίου 2011 Μέλος Moderators Δημοσ. 14 Δεκεμβρίου 2011 το περιεχομενο του αρχειου ειναι ετσι ASDAD 100043 FAFDAS 20004 FASADAS A30400 κ θελω να γινει ετσι ASDAD 100043 FAFDAS 20004 FASADAS A30400 αλλα δεν ειναι στανταρ τα μεγεθη του ονοματος η του κωδικου ή των κενων αναμεσα τους οποτε περνω μια γραμμη κ κοιταω ποτε εχει κενο κ το επομενο ειναι γραμμα η αριθμος οταν ισχυουν αυτα τα δυο εχω φτασει στον κωδικο οποτε απο την αρχη μεχρι κ μια θεση πριν(δλδ στο κενο)ειναι το ονομα κ απο εκει κ μετα ειναι ο κωδικος οποτε τα βγαζω με τη substr αλλα για καποιο λογο το προβλημα που εχω τωρα ειναι οτι σε καποιες γραμμες ενω τα κανει ολα σωστα αφηνει ενα κενο μπροστα απο τον κωδικο αυτο δεν μπορω να βρω γιατι το κανει. ο δευτερος κωδικας που εδωσα δουλευει κανονικα(με το προβλημα του κενου)
Stavros_Ribo Δημοσ. 15 Δεκεμβρίου 2011 Δημοσ. 15 Δεκεμβρίου 2011 Στον 2ο κώδικα αντί για temp = s1.substr(i); πρέπει: temp = s1.substr(i+1); Με το i εδώ δεν μετράς χαρακτήρες (όπως εδώ: temp = s1.substr(0,i); ) αλλά του λες από την i-οστή θέση έως το τέλος του string. Το i όμως δείχνει το τελευταίο κενό συμπεριλαμβανομένου και αυτού, άρα με το +1 παίρνεις τον επόμενο χαρακτήρα έως το τέλος. Εδώ ουσιαστικά τυπώνεις το όνομα στην αρχή και στη συνέχεια, αν κ τα κενά μεταξύ κωδικού και ονόματος, τυπώνεις κ-1 κενά, αλλάζεις γραμμή και γράφεις τον κωδικό..... Θα μπορούσε να γίνει ώστε να μην τυπώνεις τα κενά (αλλά οκ δεν υπάρχει πρόβλημα).
Moderators Spect~ Δημοσ. 15 Δεκεμβρίου 2011 Μέλος Moderators Δημοσ. 15 Δεκεμβρίου 2011 ναι το ηξερα αυτο με το i και το j απλα πειραματιζομουν να δω τι φταει.. δεν με νοιαζουν τα κενα μετα τα ονοματα γιατι μετα γραφω σε αλλη γραμμη τον κωδικο βρηκα το προβλημα..νομιζω οτι αν αφησεις καποια κενα μετα στα βλεπει σαν κενα tab(\t) κ για αυτο μ εμφανιζε ενα κενο πριν τον κωδικο..διορθωσω λιγο την ιφ κ εβαλα να ελεγχει κ για tab κενα(\t) κ τωρα δουλευουν ολα ρολοι να κ ο κωδικας που δουλευει >#include <iostream> #include <fstream> using namespace std; int main(){ int i,flag,j,l; string s1,temp; ifstream inputN; ofstream output; inputN.open("codes1.txt"); output.open("url.txt"); while(!inputN.eof()) { getline( inputN , s1); l = s1.length(); flag=0; i=0; while(i<l-1 && flag==0){ j = i+1; if ((s1[i]==' ' || s1[i]=='\t') && (s1[j] >= 'A' && s1[j] <= 'Z') || (s1[j] >= '0' && s1[j] <= '9')){ temp = s1.substr(0,i); output << temp << endl; temp = s1.substr(j); output << temp << endl; flag=1; } i++; } } return 0; }
Moderators Spect~ Δημοσ. 15 Δεκεμβρίου 2011 Μέλος Moderators Δημοσ. 15 Δεκεμβρίου 2011 κατι αλλο τωρα.. πως μπορω να χρησιμοποιησω την input.open() με μεταβλητη αντι για ονομα.. δλδ να εχω μια μεταβλητη χ που παιρνει τα ονοματα τον αρχειων ενα ενα κ θελω να παιρνει το ονομα να ανοιγει το αρχειο να κανει οτι ειναι να κανει να το κλεινει κ μετα να ξανατρεχει για αλλη τιμη του loop { input.open(x); ... x=καποιο ονομα; }
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα