Avatar billede 4bendix Nybegynder
17. april 2004 - 20:26 Der er 56 kommentarer og
2 løsninger

Opfatter "Enter" som ny token!

Hej eksperter.
Jeg opretter en tekstfil udfra et textarea!
Mit problem består i at når jeg indlæser den opfatter den Enter tast i tekstfeltet som en ny token - jeg bruger stringTokenizer!
Hvordan kan jeg undgå at det bliver opfattet som en nu token?
Avatar billede arne_v Ekspert
17. april 2004 - 20:31 #1
Har du prøvet at tilføje linie skift til token seperators ?

... = new StringTokenizer(filecontent, " \r\n");
Avatar billede 4bendix Nybegynder
17. april 2004 - 20:56 #2
Hvordan mener du?
Den ser sådan ud nu :StringTokenizer st = new StringTokenizer(line, "|");
Avatar billede 4bendix Nybegynder
17. april 2004 - 20:57 #3
Enter tastene ligger i .txt filen som små "kasser"
Avatar billede arne_v Ekspert
17. april 2004 - 20:59 #4
StringTokenizer st = new StringTokenizer(line, "|\r\n");
Avatar billede arne_v Ekspert
17. april 2004 - 20:59 #5
Forudsat altså at der skal deles ved de små "kasser".

Ellers skal der nok replaces.
Avatar billede 4bendix Nybegynder
17. april 2004 - 21:02 #6
Hehe ja men det var lige det - der skulle ikke deles...
Har du et forslag?
Avatar billede arne_v Ekspert
17. april 2004 - 21:04 #7
Forudsat Java 1.4:

StringTokenizer st = new StringTokenizer(line.replaceAll("\r","").replaceAll("\n",""), "|");
Avatar billede 4bendix Nybegynder
17. april 2004 - 21:08 #8
Ja replaceAll("\n") er lige den jeg skal bruge, men hvordan kan jeg replace den der firkant(Entertast i .txt) med \n?Jeg kan jo ikke rigtig skrive den...
Avatar billede 4bendix Nybegynder
17. april 2004 - 21:09 #9
\r?
Avatar billede arne_v Ekspert
17. april 2004 - 21:10 #10
Den der lille firkant er uden tvivl en \r eller \n - det er derfor
jeg foreslår at du erstatter dem med ingenting.
Avatar billede _carsten Nybegynder
17. april 2004 - 21:11 #11
Hvis jeg ikke tager meget fejl, er de såkaldte "kasser" en "null byte"

Den skulle du kunne erstatte på følgende måde

replaceAll("\0", "\n");
Avatar billede 4bendix Nybegynder
17. april 2004 - 21:13 #12
Ser nu sådan ud: StringTokenizer st = new StringTokenizer(line.replaceAll("\0","\n"), "|"); - man virker stadig ikke.. Nogen ideer?
Avatar billede arne_v Ekspert
17. april 2004 - 21:14 #13
Har du prøvet mit 21:04:45 forslag ?
Avatar billede arne_v Ekspert
17. april 2004 - 21:15 #14
Evt. udvidet til:

StringTokenizer st = new StringTokenizer(line.replaceAll("\r","").replaceAll("\n","").replaceAll("\0",""), "|");
Avatar billede 4bendix Nybegynder
17. april 2004 - 21:17 #15
Ja jeg har nu prøvet begge ting - men uden held!
Avatar billede 4bendix Nybegynder
17. april 2004 - 21:18 #16
Hvis det kan lade sig gøre ønsker jeg stadig linieskift
Avatar billede _carsten Nybegynder
17. april 2004 - 21:20 #17
Har du prøvet at udskrive "line" inden du putter den ind i StringTokenizer ?
Og hvad er så resultatet ?
Avatar billede 4bendix Nybegynder
17. april 2004 - 21:21 #18
Ja der stopper linien ved "Enter" - så der ved en linie med 5 Enter tast kun kommer den første del med - jeg får derfor en fejl.
Avatar billede _carsten Nybegynder
17. april 2004 - 21:23 #19
Prøv at bruge line.replaceAll("\0", "\n"); og udskriv - resultat ?

Og vi vil da meget gerne se den fejl !
Avatar billede 4bendix Nybegynder
17. april 2004 - 21:28 #20
Jeg får en NoSuchElementException, når jeg prøvet at tage next på den. Jeg kan se i debuggeren at der kun ligger værdien indtil Enter tastet. Jeg adder til LinkedList, men det har vel ingen betydning?
Avatar billede _carsten Nybegynder
17. april 2004 - 21:32 #21
Du skal udskrive linien med det samme du har læst den, altså inden den kommer under yderligere behandling, som det ser ud indtil videre ligger fejlen jo helt klart i din LinkedList og ikke i din StringTokenizer.
Avatar billede 4bendix Nybegynder
17. april 2004 - 21:34 #22
BufferedReader inStream                 
                = new BufferedReader (new FileReader("c:\\liste.txt"));
            String line = inStream.readLine();
Sådan ser den ud - i line står der kun tekst til første "kasse" og ikke videre - den fanger fint "|";

.txt ser ud som følger :
dk| eng| besk| dk2| eng2| besk2|ff|ff|ff|ddk|eeng|1
2
3
|1|2|3|

Mellem 1+2+3 der ikke er "|" imellem er der "kasser"
Avatar billede 4bendix Nybegynder
17. april 2004 - 21:35 #23
så sop = dk| eng| besk| dk2| eng2| besk2|ff|ff|ff|ddk|eeng|1
Avatar billede _carsten Nybegynder
17. april 2004 - 21:40 #24
Nu stiller jeg nok et dumt spørgsmål, men læser du kun første linie eller har du
din inStream.readLine(); i en while eller lignende ?
Avatar billede 4bendix Nybegynder
17. april 2004 - 21:41 #25
Det hele ligger som det er lige nu på en linie;
Avatar billede _carsten Nybegynder
17. april 2004 - 21:43 #26
while ( (line = inStream.readLine()) != null) {
    // Gør noget ved den linie der lige er læst ind
}
Avatar billede _carsten Nybegynder
17. april 2004 - 21:47 #27
BufferedReader inStream = new BufferedReader (new FileReader("c:\\liste.txt"));
String line = inStream.readLine();
StringTokenizer st;

while ( (line = inStream.readLine()) != null) {
    st = new StringTokenizer(line.replaceAll("\0",""), "|");
    // Gør noget ved de tokens
}
Avatar billede _carsten Nybegynder
17. april 2004 - 21:48 #28
Hvis du ikke gør som ovenstående, læser du kun første linie og mere sker der ikke !
Avatar billede _carsten Nybegynder
17. april 2004 - 21:50 #29
Sådan:  String line = "";

IKKE:  String line = inStream.readLine();
Avatar billede 4bendix Nybegynder
17. april 2004 - 21:57 #30
hmm ja men det står på samme linie - "\0" virker ikke rigtig på de "kasser" - !
Avatar billede _carsten Nybegynder
17. april 2004 - 22:08 #31
Nå - det forstår jeg ikke, så prøv at kopiere de kasser ind i replaceAll istedet for \0

line.replaceAll("",""), "|");
Avatar billede 4bendix Nybegynder
17. april 2004 - 22:21 #32
Nu er jeg på helt bar bund - for når jeg gør således
String line = "sss s";
line.replaceAll("s","g");
            System.out.println("Line: "+line);
Får jeg sop = sss s; ???
Hvad gør jeg forkert?
Avatar billede 4bendix Nybegynder
17. april 2004 - 22:22 #33
Argh line = line.replaceAll("s","g");
self! - Prøver lige
Avatar billede arne_v Ekspert
17. april 2004 - 22:22 #34
String er immutable

line = line.replaceAll("s","g");
Avatar billede 4bendix Nybegynder
17. april 2004 - 22:34 #35
Oki det ser således ud:

  public void read() {

        try {
            BufferedReader inStream = new BufferedReader (new FileReader("c:\\liste.txt"));
            String line = inStream.readLine();
            System.out.println("Line: "+line);
            while ((line!= null)){ 
              line = line.replaceAll("\0", "\n");
              StringTokenizer st = new StringTokenizer(line, "|");             
                while(st.hasMoreElements()){             
                  String dk = st.nextToken();
                  String eng = st.nextToken();
                  String besk = st.nextToken();
                  System.out.println("dk = "+dk+" Eng = "+eng +"Besk = "+besk);                       
                  listclass.addWord(new Words(dk, eng, besk)); 
              }
              line = inStream.readLine();                     
              }
              inStream.close();   
              } catch (FileNotFoundException e) {e.printStackTrace();} catch(IOException e){e.printStackTrace();}
    }
-----------------
I Liste.txt ligger der: dk|eng|besk|1|2|3□3□3|
-----------------
Sop = Line: dk|eng|besk|1|2|3

Hvordan ser det ud?
Avatar billede 4bendix Nybegynder
17. april 2004 - 22:35 #36
□ = 
Avatar billede 4bendix Nybegynder
17. april 2004 - 22:36 #37
Altså Liste.txt : dk|eng|besk|1|2|333|
Avatar billede _carsten Nybegynder
17. april 2004 - 22:42 #38
Øhhhh - jeg ved ikke med Arne, men jeg er ikke helt med. Går det godt eller skidt ???
Avatar billede 4bendix Nybegynder
17. april 2004 - 22:46 #39
Hehe nej det er nok også mig der har lidt svært ved at formulere mig - udnskyld.
Men når jeg læser min tekstfil ind for jeg kun læst ind til første "",  dvs. at
System.out.println("Line: "+line); er så kun: dk|eng|besk|1|2|3, isteder for som .txt filen som er: dk|eng|besk|1|2|333|
Avatar billede 4bendix Nybegynder
17. april 2004 - 22:46 #40
Siger det dig/jer noget?
Avatar billede _carsten Nybegynder
17. april 2004 - 22:56 #41
Jeg har lige prøvet her, og
        line.replaceAll("\0","");
        fjerner ikke kassen, men det gør

        line.replaceAll("","");

Så line.replaceAll("",""); burde altså være løsningen her
Avatar billede _carsten Nybegynder
17. april 2004 - 23:05 #42
Hov - det er jo soleklart at du kun 3-tallet med som det sidste, din
line = line.replaceAll("\0", "\n"); skal du ændre til
line = line.replaceAll("\0", "");

Prøv lige det !
Avatar billede 4bendix Nybegynder
17. april 2004 - 23:10 #43
Jeg bliver ved med at få fejl når jeg Copy/Paster  - hvordan kan det være ?
Kan jeg gøre det på andre måder?
Avatar billede 4bendix Nybegynder
17. april 2004 - 23:11 #44
Det prøver jeg!
Avatar billede arne_v Ekspert
17. april 2004 - 23:12 #45
Find ud af hvad den numeriske kode er og lave det som "\u00f8" (som er et lille ø).
Avatar billede 4bendix Nybegynder
17. april 2004 - 23:13 #46
Virkede ikke - jeg skal jo stadig beholde et linieskift hvis det er muligt..
Kan jeg så ikke skrive line = line.replaceAll("\0", "\n"); ???
Avatar billede 4bendix Nybegynder
17. april 2004 - 23:13 #47
arne hvor finde jeg ud af det henne?
Avatar billede arne_v Ekspert
17. april 2004 - 23:15 #48
Du skriver den ud.

(int)line.charAt(7)

udskriver koden for det ottende tegn.

(så skal det bare lige konverteres til hex)
Avatar billede _carsten Nybegynder
17. april 2004 - 23:18 #49
Ja - jeg ved sanrt ikke rigtig, kæden er ved at hoppe for mig !
Hvis "kassen" er et linieskift, SKAL 3-tallet jo være det sidste.
Men inden jeg slukker computeren, bliver jeg nødt til at smide en bombe, JTextComponent som JTextArea arver fra, har 2 metoder som gør det muligt for et JTextArea at læse/skrive fra/til en fil.

read(Reader in, Object desc) læser fra fil til JTextArea
write(Writer out) skriver fra JTextArea til fil

Sådan kan du indlæse en fil's indhold til et JTextArea
import java.io.*; 
    try{
            Reader in = new BufferedReader(new FileReader("c:\\liste.txt"));
           
            mitJTextArea.read(in, mitJTextArea);
        }
        catch(java.io.FileNotFoundException f){
            f.printStackTrace();
        }
        catch(java.io.IOException i){
            i.printStackTrace();
        }
    }


Sådan kan du skrive et JTextArea's indhold til en fil

    try{
            Writer out = new BufferedWriter(new FileWriter("c:\\liste.txt"));
           
            mitJTextArea.write(out);
        }
        catch(java.io.FileNotFoundException f){
            f.printStackTrace();
        }
        catch(java.io.IOException i){
            i.printStackTrace();
        }
    }

Kigger forbi i morgen.
Avatar billede 4bendix Nybegynder
17. april 2004 - 23:28 #50
Jeg slutter også for i dag - jeg bliver ikke meget klogere i dag kan jeg godt mærke -- Hvis i gider vender jeg tilbare i morgen eftermiddag - tak for hjælp indtil videre.
Avatar billede 4bendix Nybegynder
18. april 2004 - 22:49 #51
Det bliver først mandag - har ikke tid før.... Håber at i hænger på ..?
Avatar billede 4bendix Nybegynder
24. april 2004 - 17:19 #52
Så virker det - i havde ret - tak for hjælpen. En der poster et svar ?
Avatar billede arne_v Ekspert
24. april 2004 - 17:22 #53
Hvordan kom løsningen til at se ud ?
Avatar billede 4bendix Nybegynder
24. april 2004 - 23:30 #54
Det der var i det var at der lå 3 String værdier adskilt af "|" Så jeg fandt ud af at den smarteste måde var at gøre således:

            while((line = inStream.readLine()) !=null){
              line2 += line+"\n";
             
            }
              StringTokenizer st = new StringTokenizer(line2, "|"); 
                while(st.hasMoreTokens()){
                if(st.countTokens()==1){
                  besk += st.nextToken();
                }else{
                  dk = st.nextToken();
                  eng = st.nextToken();
                  besk = st.nextToken();
                }

idet det eneste sted "kasserne" kun kan forkomme er i besk.

line.replaceAll("\0", "\n");  Virkede også !
Avatar billede arne_v Ekspert
24. april 2004 - 23:44 #55
Så må det vist være Carsten som skal have pointene.
Avatar billede _carsten Nybegynder
24. april 2004 - 23:56 #56
Tjaa - tjoo - noget dele sjov var nok det helt rigtige.

Så mon ikke vi skal have listet et svar ud af Arne ?
Avatar billede arne_v Ekspert
24. april 2004 - 23:59 #57
OK (selvom jeg ikke rigtigt syntes at jeg har peget i den rigtige retning)
Avatar billede 4bendix Nybegynder
25. april 2004 - 09:44 #58
Tak gutter ;)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester