🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.java
4 messages
4 total messages Started by Jacek Laskowski Mon, 25 Aug 1997 11:32
Stream- i StringTokenizer
#888
Author: Jacek Laskowski
Date: Mon, 25 Aug 1997 11:32
34 lines
1945 bytes
Witajcie!
Mam taki problem:
Otoz chcialbym wczytujac dane z InputStream, moc od ktoregos momentu,
powiedzmy po wczytaniu 100 bajtow, "parses it into "tokens" " (jakos
brak mi w tej chwili dobrego tlumaczenia:)). I tu jest problem nie wiem
jak zmusic StreamTokenizer do pracy.
Chcialbym miec tokeny zakonczone znakiem ASCII 30, wiec wykorzystujac
StringTokenizer :
[...]
// nieistotne jest jakie to jest wejscie - dodane pogladowo:)
InputStream in = new InputStream();

byte[] bufor = new byte[1024];
in.read(bufor);

// delim - nie mozna by tego jakos prosciej ???
String delim = new StringBuffer().append((char) 30).toString();
StringTokenizer st = new StringTokenizer(new String(bufor), delim,
false);
while (st.hasMoreTokens()){
  // dalej standardowo... 
}

Wydaje mi sie, ze kraze kolo problemu, zamiast sie porzadnie za niego
zabrac:)
Chcialbym miec mozliwosc zrobienia podobnej rzeczy, ale za pomoca
StreamTokenizer.
Jesli ma ktos jakis pomysl - prosze o odpowiedz.
Pozdrawiam,
JL.
----------------------------------------------------------------
Jacek Laskowski             |
J.Laskowski@bu.uni.torun.pl | nick: rwxr--r-- #tlug #plug
jacekl@bsb.com.pl           | 87-100 TORUÑ, ul.Gagarina 27/203
Re: Stream- i StringTokenizer
#889
Author: pki
Date: Tue, 26 Aug 1997 21:07
107 lines
3258 bytes
Witaj

On Mon, 25 Aug 1997 13:32:21 +0200, Jacek Laskowski
<J.Laskowski@bu.uni.torun.pl> wrote:

>Witajcie!
>Mam taki problem:
>Otoz chcialbym wczytujac dane z InputStream, moc od ktoregos momentu,
>powiedzmy po wczytaniu 100 bajtow, "parses it into "tokens" " (jakos
>brak mi w tej chwili dobrego tlumaczenia:)). I tu jest problem nie wiem
>jak zmusic StreamTokenizer do pracy.
>Chcialbym miec tokeny zakonczone znakiem ASCII 30, wiec wykorzystujac
>StringTokenizer :
>[...]
>// nieistotne jest jakie to jest wejscie - dodane pogladowo:)
>InputStream in = new InputStream();
>
>byte[] bufor = new byte[1024];
>in.read(bufor);
>
>// delim - nie mozna by tego jakos prosciej ???
>String delim = new StringBuffer().append((char) 30).toString();

^^^ mozna - patrz zalaczony program

>StringTokenizer st = new StringTokenizer(new String(bufor), delim,
>false);

^^^ tak nie warto - wystarczy
StringTokenizer st = new StringTokenizer(new String(bufor), delim);

^^^ gdybys chcial aby ogranicznik byl zwracany jako token, to wtedy
trzeci parametr trzeba ustawic na true

>while (st.hasMoreTokens()){
>  // dalej standardowo... 
>}
>
>Wydaje mi sie, ze kraze kolo problemu, zamiast sie porzadnie za niego
>zabrac:)
>Chcialbym miec mozliwosc zrobienia podobnej rzeczy, ale za pomoca
>StreamTokenizer.
>Jesli ma ktos jakis pomysl - prosze o odpowiedz.
>Pozdrawiam,
>JL.
>----------------------------------------------------------------
>Jacek Laskowski             |
>J.Laskowski@bu.uni.torun.pl | nick: rwxr--r-- #tlug #plug
>jacekl@bsb.com.pl           | 87-100 TORUÑ, ul.Gagarina 27/203


Przyklad:

Zalaczony program czyta linie z standardowego wejscia i wypisuje na
standardowe wyjscie (w kolejnych liniach) czesci napisu wystepujace
pomiedzy znakami "0"

Przyklad wywolania (w sesji dosowej):

echo 12034056 | jre -cp . t1

Wyjscie:

12
34
56

Jesli w programie byloby:
            StringTokenizer st = new StringTokenizer(new
String(bufor), "0", true);

to wyjscie byloby:
12
0
34
0
56

Mam nadzieje, ze pomoglem choc troche.

Pozdrawiam

Piotrek


/////////////////////////////////////////////////

import java.io.IOException;
import java.util.StringTokenizer;

public class t1 {

    public static void main(String args[]) {
        byte[] bufor = new byte[1024];
        try {
            System.in.read(bufor);
            StringTokenizer st = new StringTokenizer(new
String(bufor), "0");
            while (st.hasMoreTokens()) {
                System.out.println(st.nextToken());
            }
        } catch (IOException e) {
            return;
        }

    }
}
Re: Stream- i StringTokenizer
#891
Author: pki
Date: Wed, 27 Aug 1997 07:27
75 lines
2669 bytes
Witaj po raz kolejny

On Mon, 25 Aug 1997 13:32:21 +0200, Jacek Laskowski
<J.Laskowski@bu.uni.torun.pl> wrote:

>Chcialbym miec mozliwosc zrobienia podobnej rzeczy, ale za pomoca
>StreamTokenizer.

Nie doczytalem tej linii.

Praca ze StreamTokenizer-em jest troche bardziej skomplikowana.

Jaki juz wszystkie proby zawioda, to trzeba przeczytac w dokumentacji
:-)  a nastepnie ustawic tablice sterujace.

Gdybys mial jakies watpliwosci, to zalaczam dzialajacy program, ktory
robi podbne rzeczy jak poprzedni ale przy uzyciu StreamTokenizer-a
(czyta calosc standardowego wejscia - nie tylkoi pierwsza linie)


//////////////////////////////////////////////////////////


import java.io.IOException;
import java.io.StreamTokenizer;

public class t1 {

    public static void main(String args[]) {
        boolean done = false;
        try {
            StreamTokenizer st = new StreamTokenizer(System.in);
            // zerowanie tablic sterujacych - wszystkie znaki sa typu
"ordinary"
            st.resetSyntax();
            // wszystkie znaki za wujatkiem "0" sluza do budowania
tokenow typu slowo
            // (bo moga byc jeszcze tokeny typu liczba)
            st.wordChars(0,'0'-1);
            st.wordChars('1',0xff);
            // znak '0' jest separatorem
            st.whitespaceChars('0','0');
            // no i do roboty ...
            while (!done) {
                switch (st.nextToken()) {
                    case  StreamTokenizer.TT_EOF :
                        // koniec pliku
                        done = true;
                        break;
                    case  StreamTokenizer.TT_WORD :
                        System.out.println(st.sval);
                        break;
                }
            }
        } catch (IOException e) {
            return;
        }

    }
}


//////////////////////////////////////////////////////////


Jesli pli t1.txt zawiera jedna linie: 1 + 2034056078090

i program wywolamy: jre -cp . t1 <t1.txt

to wyjscie bedzie takie:
1 + 2
34
56
78
9
Re: Stream- i StringTokenizer
#890
Author: Jacek Laskowski
Date: Sun, 31 Aug 1997 19:59
22 lines
1556 bytes
Witaj(cie)!
pki@rubikon.net.pl wrote:
> >// delim - nie mozna by tego jakos prosciej ???
> >String delim = new StringBuffer().append((char) 30).toString();
> 
> ^^^ mozna - patrz zalaczony program
>      StringTokenizer st = new StringTokenizer(new String(bufor), "0");
To jest OK - pod warunkiem gdybym wczesniej nie zadeklarowal
private final int FT = 30;
co w tym przypadku wymaga uzycia:
StringTokenizer st = 
       new StringTokenizer(new String(bufor), String.valueOf(FT));
lub
StringTokenizer st = 
       new StringTokenizer(new String(bufor), Integer.toString(FT));
ale to dopiero pozniej do mnie dotarlo:)))
Pozdrawiam,
JL.
--------------------------------------------------------------
Jacek Laskowski             |            
J.Laskowski@bu.uni.torun.pl | nick rwxr--r-- #tlug #plug
jacekl@bsb.com.pl           | 87-100 TORUN, ul.Gagarina 27/203
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads