Look for the signal in your life, not the noise.
Canon R6 | RF 24-70 f/2.8 L | 50 f/1.8 STM | 430EX II
Sigma 85 f/1.4 Art | 100-400 Contemporary
Zeiss Distagon 21 f/2.8
[ Voor 4% gewijzigd door 12_0_13 op 16-02-2006 10:20 ]
Verwijderd
char = cVerwijderd schreef op donderdag 16 februari 2006 @ 10:42:
Hang er een beetje vanaf wat je wil. Geef eens alle mogelijke combinaties met char en integer?
int = i
ciiiiiiiiiciii string
is bijvoorbeeld een combinatie
Look for the signal in your life, not the noise.
Canon R6 | RF 24-70 f/2.8 L | 50 f/1.8 STM | 430EX II
Sigma 85 f/1.4 Art | 100-400 Contemporary
Zeiss Distagon 21 f/2.8
Je maakt eerst een grammatica van je taal die je als input wil hebben, en deze grammatica breid je uit met statements, om dingen te doen met stukken die je geparst hebt. Dit kan heel simpel zijn (bijv rekenmachine) of erg ingewikkeld (bijv. eenvoudige postscript interpreter)
Erg leuke materie iig, maar misschien voor jouw probleem ietsje aan de zware kant, alhoewel als het wat ingewikkelder wordt het je meestal veel tijd bespaart
Ik ben ook die generator aan het proberen. Ik ben alleen benieuwd of de parser die hij genereert ook een beetje snel is12_0_13 schreef op donderdag 16 februari 2006 @ 10:56:
Het makkelijkste is echt om een parser generator te gebruiken hoor.
Je maakt eerst een grammatica van je taal die je als input wil hebben, en deze grammatica breid je uit met statements, om dingen te doen met stukken die je geparst hebt. Dit kan heel simpel zijn (bijv rekenmachine) of erg ingewikkeld (bijv. eenvoudige postscript interpreter)
Erg leuke materie iig, maar misschien voor jouw probleem ietsje aan de zware kant, alhoewel als het wat ingewikkelder wordt het je meestal veel tijd bespaart
Look for the signal in your life, not the noise.
Canon R6 | RF 24-70 f/2.8 L | 50 f/1.8 STM | 430EX II
Sigma 85 f/1.4 Art | 100-400 Contemporary
Zeiss Distagon 21 f/2.8
Deze kan herkennen of een token een "word" (string) of een "number" (double) is.
My Dwarf Fortress ASCII Reward: ~~@~~####,.".D",.B""
Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.
Kan je daarmee dan ook beperkingen aan de ascii-codes, string lengtes, integer waarden maken?VyperX schreef op donderdag 16 februari 2006 @ 12:10:
Als je het tekst bestand alleen wil tokenizen, dan kan je misschien beter kijken naar StreamTokenizer.
Deze kan herkennen of een token een "word" (string) of een "number" (double) is.
Volgens mij is het parsen, er staat namelijk een heleboel ascii meuk tussen de relevante data. En de structuur van de data moet geparsed worden..oisyn schreef op donderdag 16 februari 2006 @ 12:13:
Je wilt niet parsen, je wilt lexical analysen. Aan een parser generator heb je dan ook niets, wel aan een lexer generator (kan ook met de eerdergenoemde antlr overigens)
Of ik moet de definitie compleet mis hebben
Look for the signal in your life, not the noise.
Canon R6 | RF 24-70 f/2.8 L | 50 f/1.8 STM | 430EX II
Sigma 85 f/1.4 Art | 100-400 Contemporary
Zeiss Distagon 21 f/2.8
Een Parser (Syntax analyse) kan deze tokens analyseren, volgens een bepaalde grammatica.
Meestal moet je wat afdwingen over het formaat van je input, het moet bijvoorbeeld voldoen aan bepaalde regels (bijv. altijd eerst een regelnummer, dan de tekst). Dan zit je al snel aan parsers
Zoiets vermoedde ik al. Ik moet inderdaad ID's uitlezen, uit een integer het categorienummer halen en een de string die erbij hoort tussen de ascii tekentjes uithalen. Parsen12_0_13 schreef op donderdag 16 februari 2006 @ 13:30:
Een Lexer (Lexicale analyse) zet een stroom input om naar een stroom tokens, eigenlijk zoals TS aangaf in zijn voorbeeld.
Een Parser (Syntax analyse) kan deze tokens analyseren, volgens een bepaalde grammatica.
Meestal moet je wat afdwingen over het formaat van je input, het moet bijvoorbeeld voldoen aan bepaalde regels (bijv. altijd eerst een regelnummer, dan de tekst). Dan zit je al snel aan parsers
Nu vraag ik mij af of dat wel mogelijk is met de StreamTokenizer, hij ziet er erg beperkt uit.
Misschien is het dan handiger om wat tijd te investeren in antlr.
Look for the signal in your life, not the noise.
Canon R6 | RF 24-70 f/2.8 L | 50 f/1.8 STM | 430EX II
Sigma 85 f/1.4 Art | 100-400 Contemporary
Zeiss Distagon 21 f/2.8
“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”
Nee, het is toch echt scannen, je hebt alleen een token stream nodig. Je hebt geen geneste structuren en als ik het zo hoor doet de volgorde van de tokens er weinig toe (een string gevolgd door een int hoef je niet anders te interpreteren dan een int gevolgd door een string)Gonadan schreef op donderdag 16 februari 2006 @ 13:42:
[...]
Zoiets vermoedde ik al. Ik moet inderdaad ID's uitlezen, uit een integer het categorienummer halen en een de string die erbij hoort tussen de ascii tekentjes uithalen. Parsen
En een StreamTokenizer doet precies dat
Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.
Een id kan bestaan uit bijvoorbeeld charintintintintintcharintint maar ook intintintintintint.intintchar.intint.oisyn schreef op donderdag 16 februari 2006 @ 14:32:
[...]
Nee, het is toch echt scannen, je hebt alleen een token stream nodig. Je hebt geen geneste structuren en als ik het zo hoor doet de volgorde van de tokens er weinig toe (een string gevolgd door een int hoef je niet anders te interpreteren dan een int gevolgd door een string)
En een StreamTokenizer doet precies dat
het verschilt
Regular expressions, tsja met PHP had ik het al afgehad. Kan je in java net zo werken met regular expressions? zoals preg_replace enzo? dat hij ook echt zoekt in de string
Gevonden: java.util.regex, nu maar weer even spitten
[ Voor 4% gewijzigd door Gonadan op 16-02-2006 14:47 ]
Look for the signal in your life, not the noise.
Canon R6 | RF 24-70 f/2.8 L | 50 f/1.8 STM | 430EX II
Sigma 85 f/1.4 Art | 100-400 Contemporary
Zeiss Distagon 21 f/2.8
Wat moet er mee gebeuren? Gewoon alle cijfers achter elkaar?Gonadan schreef op donderdag 16 februari 2006 @ 14:40:
[...]
Een id kan bestaan uit bijvoorbeeld charintintintintintcharintint maar ook intintintintintint.intintchar.intint
het verschilt
Maar de tering, wat is dat traag
Kan dat niet sneller? Het is namelijk een bestand van 100MB.
Look for the signal in your life, not the noise.
Canon R6 | RF 24-70 f/2.8 L | 50 f/1.8 STM | 430EX II
Sigma 85 f/1.4 Art | 100-400 Contemporary
Zeiss Distagon 21 f/2.8
Wat moet er nu precies gebeuren? Als je alleen alle cijfertjes achter elkaar wilt hebben, dan kan je dat bijvoorbeeld zo doen:
1
2
3
4
5
6
7
8
9
10
11
| String text = "01234WatTekst56789"; StringBuffer tmp = new StringBuffer(text.length()); for (int i = 0; i < text.length(); i++) { char c = text.charAt(i); if (Character.isDigit(c)) tmp.append(c); } String id = tmp.toString(); System.out.println(id); |
Zo makkelijk is het helaas niet. Ik moet de ID's inlezen, en aan de hand van welk type ID het is moet ik nog andere integers or strings die er achter staan inlezen. Daar moet ik de non-word karakters halen. Regex zou ideaal zijn ware het niet dat hij boktraag is. Ik schrijf dus nu zelf maar een soort regex die een stuk sneller is.Daos schreef op donderdag 16 februari 2006 @ 15:41:
Ik ben zelf geen voorstander van regex.
Wat moet er nu precies gebeuren? Als je alleen alle cijfertjes achter elkaar wilt hebben, dan kan je dat bijvoorbeeld zo doen:
Java:
1...
Look for the signal in your life, not the noise.
Canon R6 | RF 24-70 f/2.8 L | 50 f/1.8 STM | 430EX II
Sigma 85 f/1.4 Art | 100-400 Contemporary
Zeiss Distagon 21 f/2.8
Maar van uitgebreide code?Daos schreef op donderdag 16 februari 2006 @ 15:41:
Ik ben zelf geen voorstander van regex.
Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.
Een discussie hierover liep ook al in een ander topic:
Daos schreef op woensdag 15 februari 2006 @ 12:25:
Het maken van een regular expression gaat misschien sneller dan een paar regels code, maar een regular expression is moeilijk te debuggen of uit te breiden. Dit is vooral een groot probleem als hij niet van jou is of als je hem een tijdje terug hebt gemaakt.
[ Voor 34% gewijzigd door prototype op 16-02-2006 23:00 ]
IDD als je een stukje post en wat je daar precies uit wilt halen dan kunnen we er wat nuttigers over zeggen, want zo is het voor ons ook maar speculeren wat je precies wilt doen.Eelke Spaak schreef op vrijdag 17 februari 2006 @ 08:51:
Misschien is het zinvol als je even een fragmentje uit het in te lezen bestand post.
“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”