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

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

  • Moderators
Δημοσ.

θελω απο ενα 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;
}

Δημοσ.

>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
Δημοσ.

το περιεχομενο του αρχειου ειναι ετσι

ASDAD 100043

FAFDAS 20004

FASADAS A30400

κ θελω να γινει ετσι

ASDAD

100043

FAFDAS

20004

FASADAS

A30400

 

αλλα δεν ειναι στανταρ τα μεγεθη του ονοματος η του κωδικου ή των κενων αναμεσα τους

οποτε περνω μια γραμμη κ κοιταω ποτε εχει κενο κ το επομενο ειναι γραμμα η αριθμος

οταν ισχυουν αυτα τα δυο εχω φτασει στον κωδικο

οποτε απο την αρχη μεχρι κ μια θεση πριν(δλδ στο κενο)ειναι το ονομα κ απο εκει κ μετα ειναι ο κωδικος

οποτε τα βγαζω με τη substr

αλλα για καποιο λογο το προβλημα που εχω τωρα ειναι οτι σε καποιες γραμμες ενω τα κανει ολα σωστα

αφηνει ενα κενο μπροστα απο τον κωδικο αυτο δεν μπορω να βρω γιατι το κανει.

ο δευτερος κωδικας που εδωσα δουλευει κανονικα(με το προβλημα του κενου)

Δημοσ.

Στον 2ο κώδικα αντί για temp = s1.substr(i);

πρέπει: temp = s1.substr(i+1);

Με το i εδώ δεν μετράς χαρακτήρες (όπως εδώ: temp = s1.substr(0,i); ) αλλά του λες από την i-οστή θέση έως το τέλος του string. Το i όμως δείχνει το τελευταίο κενό συμπεριλαμβανομένου και αυτού, άρα με το +1 παίρνεις τον επόμενο χαρακτήρα έως το τέλος. Εδώ ουσιαστικά τυπώνεις το όνομα στην αρχή και στη συνέχεια, αν κ τα κενά μεταξύ κωδικού και ονόματος, τυπώνεις κ-1 κενά, αλλάζεις γραμμή και γράφεις τον κωδικό..... Θα μπορούσε να γίνει ώστε να μην τυπώνεις τα κενά (αλλά οκ δεν υπάρχει πρόβλημα).

  • Moderators
Δημοσ.

ναι το ηξερα αυτο με το 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
Δημοσ.

κατι αλλο τωρα..

πως μπορω να χρησιμοποιησω την input.open()

με μεταβλητη αντι για ονομα..

δλδ να εχω μια μεταβλητη χ που παιρνει τα ονοματα τον αρχειων ενα ενα

κ θελω να παιρνει το ονομα

να ανοιγει το αρχειο να κανει οτι ειναι να κανει να το κλεινει

κ μετα να ξανατρεχει για αλλη τιμη του

 

loop {

input.open(x);

...

x=καποιο ονομα;

}

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...