yincyun Δημοσ. 17 Σεπτεμβρίου 2012 Δημοσ. 17 Σεπτεμβρίου 2012 δηλαδή το enter που θα πατήσω στο txt πως μεταφράζεται σε κώδικα : > import java.io.BufferedReader; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; public class L9A1 { public static void main(String[] args){ FileReader fr; BufferedReader br; boolean foundSpace = false,foundPaula=false; try{ fr = new FileReader("C:\\javaNetPics\\names.txt"); br = new BufferedReader(fr); while ( br.ready() ) // check if stream is ready to be read { char ch = (char)br.read(); //diabasma xarakthra-xarakthra System.out.print( ch ); if (ch==' '){foundSpace = true;} if (ch=='-'){foundPaula = true;} if(/*εδώ τι βάζω ώστε να ελένξω τη ροή*/){ if(foundSpace==false) {throw new wrongFormatException();} if(foundPaula==false) {throw new wrongFormatException();} foundSpace=false; foundPaula=false; } } br.close(); } catch ( FileNotFoundException e ) { System.out.println( "File not found" ); } catch( IOException e ) { System.out.println( "Read error" ); } catch(wrongFormatException e){ System.out.println(e.toString()); } } } ευχαριστώ όποια βοήθεια!
karabouzouk... Δημοσ. 17 Σεπτεμβρίου 2012 Δημοσ. 17 Σεπτεμβρίου 2012 Το enter έχει σαν χαρακτήρα το "\n" Δηλαδή για να ελέγξεις αν ο χαρακτήρας που μόλις διάβασες είναι αλλαγή γραμμής πρέπει να ελέγξεις αν το ch=='\n'
yincyun Δημοσ. 17 Σεπτεμβρίου 2012 Μέλος Δημοσ. 17 Σεπτεμβρίου 2012 η αλήθεια είναι ότι το δοκίμασα και δεν εκτελούνται ta stats που έχω μέσα στην if. θεώρησα ότι μπορεί να είναι διαφορετική η εντολή.. τι θα μπορούσα να δοκιμάσω ώστε να καταλαβαίνω πότε αλλάζει γραμμή μέσα στο txt..?
moukoublen Δημοσ. 17 Σεπτεμβρίου 2012 Δημοσ. 17 Σεπτεμβρίου 2012 Το new line στα windows είναι 2 χαρακτήρες "\r\n" δηλαδή ο χαρακτήρας '\r' και αμμέσως μετά ο χαρακτήρας '\n'
karabouzouk... Δημοσ. 17 Σεπτεμβρίου 2012 Δημοσ. 17 Σεπτεμβρίου 2012 Εγώ ποτέ δεν τσέκαρα έτσι για αλλαγή γραμμής αλλά έχω καιρό να ασχοληθώ οπότε πάω πάσο...!! Για να τσεκάρει και θα μας πει! Πάντως βρήκα αυτό ψάχνοντας τριγύρω: Windows uses "\n", Mac uses "\r", and Linux uses "\r\n" for newline.
yincyun Δημοσ. 17 Σεπτεμβρίου 2012 Μέλος Δημοσ. 17 Σεπτεμβρίου 2012 Το new line στα windows είναι 2 χαρακτήρες "\r\n" δηλαδή ο χαρακτήρας '\r' και αμμέσως μετά ο χαρακτήρας '\n' δηλαδή πως το γράφω? "\r\n" μου χτυπάει λάθος για στρινγκ -σωστό αφού έχω δηλώσει το ch χαρακτήρα '\r\n' μου χτυπάει αντιστοιχο λάθος με πάνω αλλά εναλλάξ..
karabouzouk... Δημοσ. 17 Σεπτεμβρίου 2012 Δημοσ. 17 Σεπτεμβρίου 2012 Αν ισχύει αυτό που λέει ο moukoublen τότε πρέπει να τα τσεκάρεις σαν δύο ξεχωριστούς χαρακτήρες. Ένας τρόπος είναι κάπως έτσι: > while ( br.ready() ) // check if stream is ready to be read { char ch = (char)br.read(); //diabasma xarakthra-xarakthra System.out.print( ch ); if (ch==' '){foundSpace = true;} if (ch=='-'){foundPaula = true;} if(ch=='\r' && br.read() == '\n'){ if(foundSpace==false) {throw new wrongFormatException();} if(foundPaula==false) {throw new wrongFormatException();} foundSpace=false; foundPaula=false; } } Εύχομαι να μην έχω γράψει μλκια μέσα στην if και να γίνεται στην java αυτό που έκανα! (να μπορώ να διαβάσω και να ελέγξω την ίδια στιγμή τον επόμενο χαρακτήρα) Αν δεν γίνεται μπορείς να ξαναδιαβάσεις χαρακτήρα με τα τον \r να τον αποθηκεύσεις στην ch πάλι και να το ελέγξεις με άλλη μια if.
yincyun Δημοσ. 17 Σεπτεμβρίου 2012 Μέλος Δημοσ. 17 Σεπτεμβρίου 2012 Αν ισχύει αυτό που λέει ο moukoublen τότε πρέπει να τα τσεκάρεις σαν δύο ξεχωριστούς χαρακτήρες. Ένας τρόπος είναι κάπως έτσι: > while ( br.ready() ) // check if stream is ready to be read { char ch = (char)br.read(); //diabasma xarakthra-xarakthra System.out.print( ch ); if (ch==' '){foundSpace = true;} if (ch=='-'){foundPaula = true;} if(ch=='\r' && br.read() == '\n'){ if(foundSpace==false) {throw new wrongFormatException();} if(foundPaula==false) {throw new wrongFormatException();} foundSpace=false; foundPaula=false; } } Εύχομαι να μην έχω γράψει μλκια μέσα στην if και να γίνεται στην java αυτό που έκανα! (να μπορώ να διαβάσω και να ελέγξω την ίδια στιγμή τον επόμενο χαρακτήρα) Αν δεν γίνεται μπορείς να ξαναδιαβάσεις χαρακτήρα με τα τον \r να τον αποθηκεύσεις στην ch πάλι και να το ελέγξεις με άλλη μια if. καμία τύχη..... Ουσιαστικά θέλω στο τέλος κάθε γραμμης να resetαρο τις μεταβλητές... και επίσης θέλω να πετάει και τις εξαιρέσεις. αν δεν βάλω αυτό τον έλεγχο τότε για κάθε γράμμα θα γίνεται ο έλεγχος και αυτό είναι λάθος...
yincyun Δημοσ. 17 Σεπτεμβρίου 2012 Μέλος Δημοσ. 17 Σεπτεμβρίου 2012 Επειδή θεωρώ λάθος να ανοίγω ένα topic και να μη παραθέτω τη λύση του εαν τη βρω : > import java.io.BufferedReader; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.util.ArrayList; public class L9A1 { public static void main(String[] args){ FileReader fr; BufferedReader br; boolean foundSpace = false,foundPaula=false; char[] arr; ArrayList<String> eggrafes = new ArrayList<>(); try{ fr = new FileReader("C:\\javaNetPics\\names.txt"); br = new BufferedReader(fr);String str ; // diabasma grammh-grammh while( (str=br.readLine()) != null){ System.out.println( str ); arr = str.toCharArray(); try{ for(int i=0;i<arr.length;i++){ if (arr[i] == ' '){foundSpace = true;} if (arr[i] == '-'){foundPaula = true;} if (i == arr.length-1){ if(foundSpace==false) {throw new wrongFormatException();} if(foundPaula==false) {throw new wrongFormatException();} foundSpace=false; foundPaula=false; eggrafes.add(str); } } } catch(wrongFormatException e){ System.out.println(e.toString()); } } br.close(); FileWriter newfile = new FileWriter("C:\\javaNetPics\\newfile.txt"); for(int i=0;i<eggrafes.size();i++){ System.out.println(eggrafes.get(i)); String source = eggrafes.get(i); String[] splits1,splits2; splits1 = source.split(" "); splits2 = splits1[1].split("-"); newfile.write(splits1[0]+" | "+splits2[0]+" | "+splits2[1]+"\r\n"); } newfile.close(); } catch ( FileNotFoundException e ) { System.out.println( "File not found" ); } catch( IOException e ) { System.out.println( "Read error" ); } } } πιο σωστά για την αλλαγή της γραμμής να χρησιμοποιειται το null και αν χρειάζεται να γίνει έλεγχος χαρακτήρων να γίνεται μέσα απο το String. Επίσης η εντολή για το netbeans τουλάχιστον που δουλεύω εγώ για αλλαγή γραμμής ειναι \r\n ευχαριστώ για τον κόπο σας οι παραπάνω
djcat Δημοσ. 18 Σεπτεμβρίου 2012 Δημοσ. 18 Σεπτεμβρίου 2012 Επειδή θεωρώ λάθος να ανοίγω ένα topic και να μη παραθέτω τη λύση του εαν τη βρω : πιο σωστά για την αλλαγή της γραμμής να χρησιμοποιειται το null και αν χρειάζεται να γίνει έλεγχος χαρακτήρων να γίνεται μέσα απο το String. Το null δε χρησιμοποιείται για την αλλαγή της γραμμής. Η readline σου διαβάζει την κάθε γραμμή. Το null σου δείχνει πότε τελείωσε όλο το κείμενο σου.
yincyun Δημοσ. 18 Σεπτεμβρίου 2012 Μέλος Δημοσ. 18 Σεπτεμβρίου 2012 Το null δε χρησιμοποιείται για την αλλαγή της γραμμής. Η readline σου διαβάζει την κάθε γραμμή. Το null σου δείχνει πότε τελείωσε όλο το κείμενο σου. Τότε λοιπόν... Ότι είπε ο αποπάνω
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα