|
This channel is intended for people just starting with the Raku Programming Language (raku.org). Logs are available at irclogs.raku.org/raku-beginner/live.html Set by lizmat on 8 June 2022. |
|||
|
00:14
Heptite left
00:53
Manifest0 left
01:37
QhpAptyj9hj0RQwM left
03:29
razetime joined
03:42
Guest47 joined
04:22
Kaipei left
04:32
razetime left
05:22
razetime joined
06:35
razetime left
07:38
Kaipei joined
10:51
QhpAptyj9hj0RQwM joined
10:55
QhpAptyj9hj0RQwM left
10:56
QhpAptyj9hj0RQwM joined
12:10
subben-troska joined
|
|||
| subben-troska | hello I have an issue trying to convert a json line into an hash... | 12:12 | |
| # { id: 152, name: 'Kochstraße', type: 'PT', description: 'station', entries: 3 }, | |||
| for stations.lines -> $station { | |||
| if "id: 3" ~~ m:g/$<key>=\w+':'\s*$<value>=\d+/ { | |||
| my %h = $/.hash; | |||
| } | |||
| } | |||
| sub stationer { | 12:14 | ||
| return return q:to/END/; | |||
| { id: 1, name: 'xxxxöö', type: 'TB1', description: 'surface', entries: 10 }, | |||
| { id: 2, name: 'yyyyåå', type: 'TB3', description: 'semi-surface', entries: 10 }, | |||
| ... | |||
| I can't make the global matching in conjunction with hash to work | 12:15 | ||
| I would like to access like "%h{'name'}", however I can't make it to work.. | 12:18 | ||
| Nemokosch | isn't it a better idea to use a proper library for that? | ||
| subben-troska | my original regex: /(\w+)\:\s*\'?(<[\w\s\-]>+)\'?/ | 12:19 | |
| well.. in java it would be very easy :) | |||
| just using find() on matcher | |||
| I thought it used to be easy in perl5 | 12:20 | ||
| which I stopped using in 2015 | |||
| Nemokosch | I'm not terribly fond of Java regex API but anyways, if there is a better choice, why suffer? | ||
| subben-troska | suffer is living;-) .. aaahhh it shouldn't be hard | 12:21 | |
| its just a consecutive matcher of pairs to turn into a hash | 12:22 | ||
| Nemokosch | perhaps it's not hard but please... if that's the only argument against using JSON::Fast... | ||
| subben-troska | ok! I give up! I will go for your suggestion :) | ||
| I just saw it some 30 mins ago | |||
| lizmat | use JSON::Fast; for station.lines { my %h := from-json($_) } | 12:23 | |
| subben-troska | Just to mention the format wasn't json from the beginning but the data is meant to be inserted in a TS mock application | 12:24 | |
| thanks both of you discord-raku-bot (bot?) and lizmat!! you are my heroes (shouldn't waste too much Christmas-time with Raku-suffering) | 12:26 | ||
| Nemokosch | by the way, I did start up a REPL to check what it returns | 12:27 | |
| lizmat | subben-troska: there's benefit in trying to do stuff yourself from scratch | ||
| subben-troska | great :) | ||
| Nemokosch | perhaps m:g always returns a List of matches? | ||
| lizmat | but the JSON "standard" has all sorts of nooks and crannies, you seriously don't want to get into | ||
| Nemokosch | and turning a one-element List into a Map... won't work out well | 12:28 | |
| lizmat | having spent quite some time on optimising JSON::Fast, I think I'm qualified to say that :-) | ||
| Nemokosch | so if you wanted to m:g on all the lines, then you were pretty close probably | 12:29 | |
| subben-troska | nah... I used to be a perl5-geek digging deep.. now I am like a blank paper | ||
| ok? | |||
| close | |||
| Nemokosch | it's just what you get is a list of matches, not a big match of lists | ||
| subben-troska | uhu? list of matches | 12:30 | |
| Nemokosch | so you could call .hash on individual elements of that list, e.g with map or if you really feel like some cool APL folk, with the hyper meta-operator | 12:31 | |
| subben-troska | REPL.. is it regex perl or regex Raku.. I am always using rubular (by default) | ||
| Nemokosch | what is rubular? 🤣 | 12:32 | |
| sounds like some old east-german truck | |||
| subben-troska | well working at E/// back then in a test team we used that to check regex'es (while it doest work out for raku) | 12:33 | |
| rubular.com | 12:34 | ||
| it's ruby? | |||
| Nemokosch | seems like it is. Yet another language that is slightly getting nostalgic. | 12:35 | |
| subben-troska | "hyper-meta-operator"? | ||
| Nemokosch | hyper is the name, if anything | ||
| subben-troska | well my only tools at the moment is "comma-ct", is there a test regex-online (..well offline) for Raku? | 12:36 | |
| Nemokosch | I never tried this with a heredoc so wish me luck... | 12:37 | |
| m: q:to/END/ ~~ m:g/$<key>=\w+':'\s*$<value>=\d+/; | |||
| { id: 1, name: 'xxxxöö', type: 'TB1', description: 'surface', entries: 10 }, | |||
| { id: 2, name: 'yyyyåå', type: 'TB3', description: 'semi-surface', entries: 10 }, | |||
| { id: 3, name: 'tire', type: 'TB1', description: 'non-surface', entries: 2 }, | |||
| END | |||
| dd $/>>.hash; | |||
| well, I did get a huge output 😄 | 12:38 | ||
| perhaps dd was a bit overkill | |||
| m: q:to/END/ ~~ m:g/$<key>=\w+':'\s*$<value>=\d+/; | |||
| { id: 1, name: 'xxxxöö', type: 'TB1', description: 'surface', entries: 10 }, | |||
| { id: 2, name: 'yyyyåå', type: 'TB3', description: 'semi-surface', entries: 10 }, | |||
| { id: 3, name: 'tire', type: 'TB1', description: 'non-surface', entries: 2 }, | |||
| END | |||
| say $/>>.hash; | |||
| yeah, this is enough | |||
| I don't think the bot output gets posted on IRC but you can run the same thing, there is an evalbot on that end as well | 12:39 | ||
| subben-troska | oki :) | ||
| ..yeah.. ?! .. implementing .. (still slow with the MBP) | 12:44 | ||
| ok, so the problem is that the global matcher creates ONE hash for EACH PAIR instead of ONE hash for EACH SET of pairs? | 12:50 | ||
| (Map.new((key => 「id」, value => 「1」)) Map.new((key => 「entires」, value => 「10」))) | |||
| (Map.new((key => 「id」, value => 「2」)) Map.new((key => 「entires」, value => 「10」))) | |||
| (Map.new((key => 「id」, value => 「3」)) Map.new((key => 「entires」, value => 「6」))) | |||
| (Map.new((key => 「id」, value => 「4」)) Map.new((key => 「entires」, value => 「14」))) | |||
| Nemokosch | what is MBP again? | 12:52 | |
| I don't know, I don't see any problems 🙂 | 12:53 | ||
| subben-troska | MacBook I am a pc/linux guy | ||
| from the very start | |||
| if $station ~~ m:g/$<key>=\w+':'\s*$<value>=\d+/ { | 12:54 | ||
| say $/>>.hash; | |||
| my %h = $/>>.hash; | |||
| say %h{'id'} | |||
| Nemokosch | haha, don't get me started on Apple | ||
| subben-troska | ??? | ||
| but the BATTERY life , the BEAUTIFUL screen .. its the perfect laptop, but my greedy company just let me off with a 14" :( | 12:55 | ||
| I haven't dusted off my hash'ing skills.. but the %h yields 'Any' for 'id' | 12:56 | ||
| (Map.new((key => 「id」, value => 「135」)) Map.new((key => 「gateCount」, value => 「5」))) | |||
| (Any) | |||
|
12:56
QhpAptyj9hj0RQwM left
|
|||
| Nemokosch | I mean, the field name is "key", you yourself chose that | 12:56 | |
| and it's still not a Map but a List of Maps | 12:57 | ||
| subben-troska | oohhhh?!..oh 'key'.. well. aha .. key/value - right named capture | ||
| right got you it's a list of single entry maps | |||
| pity.. | 12:58 | ||
| Nemokosch | > my %h = $/>>.hash; | ||
| this line is still sort of NFSW | |||
| NSFW* | |||
| hey, you *could* do what you actually want to do | 12:59 | ||
| subben-troska | Its not really work its just me turning data to match the mocked data | ||
| of the react app | |||
| Nemokosch | I think this is a good example of habits that drift one towards wrong solutions | ||
| subben-troska | ok, how? a half-liner :-) | 13:00 | |
| Nemokosch | It seems you don't want multiple matches but one big match | ||
| subben-troska | yeah I know I am sucker of cryptic solutions.. but it will not show in the real app | ||
| ... we'll sort of one big match I am getting your point. | 13:01 | ||
| the lists should be merged into a map | |||
| Nemokosch | it doesn't help with the case that you only want to match some arbitrary parts of the objects | 13:02 | |
| subben-troska | I thought that was possible, because I went from PERL5 to Java back in -15 and I thought of the transition and about the possibility to easily use hashes like in JAVA. but I can't remember PL5 | ||
| Its all about matching pairs of k/v into map | 13:03 | ||
| ok! I get your point about arbitrary order.. | |||
| Nemokosch | I mean if you matched the whole thing, the named parts of that one match would be lists alright | 13:04 | |
| but it's like match a little bit, then another little bit etc | |||
| subben-troska | yes a list of unordered entries (which are in order) | ||
| I SHOULD turn into a complete regex matching the order right? | 13:05 | ||
| Nemokosch | not just that. some keys aren't properly matched because their value is not integer | ||
| subben-troska | not a global consecutive one. | ||
| Nemokosch | and therefore there are gaps inherently | ||
| subben-troska | yeah that why I had the optional \'? before and after | ||
| well it was in another regex.. | 13:06 | ||
| if $station ~~ m:global/(\w+)\:\s*\'?(<[\w\s\-]>+)\'?/ { | |||
| ...which isn't working... its a conversion from a previous | 13:07 | ||
| non global context like; if $station ~~ m:global/(name)\:\s*\'?(<[\w\s\-]>+)\'?/ { | |||
| Nemokosch | ' starts a string though, doesn't it | 13:08 | |
| subben-troska | regex's are much harder in PL6 than PL5. We actually had a PL5 course with Mäsak back than (from Edument) | 13:09 | |
| Nemokosch | '?(<[\w\s-]>+)'? is the string `?(<[\w\s-]>+)` optionally | ||
| subben-troska | It was the ' that are optional around the values | 13:10 | |
| Nemokosch | I get that that was what you wanted but I doubt that's what you managed to express | 13:11 | |
|
13:11
jgaz joined
|
|||
| subben-troska | Mmmmm... maybe its been a mess.. | 13:11 | |
| Nemokosch | I'd say the rules are fairly simple. Any character that isn't alphanumeric, must be escaped to be used literally. That's it. | ||
| you can escape it with the backslash or by *putting it into a string literal* | 13:12 | ||
| also, regex literals are whitespace-insensitive so you can write them in a way that doesn't look like a long hieroglyph | 13:13 | ||
| subben-troska | allright.. sounds great.. I would really like to see a (laugh if you want, its on the house ;-) ) "rubular" for perl6.. besides REPL | 13:14 | |
| ok? so no more \s'es then? | |||
| \s*+.. | 13:15 | ||
| Nemokosch | that's not what I meant | ||
| By the way: what are your priorities? To solve a specific task or to get to know more about Raku regexes? | |||
| I mean both is fine but that decides how I try to govern the topic 😛 | 13:16 | ||
| subben-troska | well I would like to dust off perl and more over learn RAKU and how things works out | ||
| Nemokosch | Okay, gotcha | 13:17 | |
| subben-troska | I am doing this undercover, some members of the team knows I am into this RAKU thing ;-) | ||
| Nemokosch | disclaimer: the topic is covered in much greater detail in the docs - docs.raku.org/language/regexes | 13:18 | |
| now, the most important things about writing Raku regexes are: | 13:20 | ||
| - they are constructed with this regex language; prior to bleeding-edge works, a string literal and a regex literal had no connection to each other | |||
| - a regex literal can contain strings and even code blocks and it ignores whitespace | 13:21 | ||
| - alphanumeric characters don't have to be escaped but everything else (including whitespace) has to be | |||
| subben-troska | great @Nemokosch my angry/tired gf just called to get picked up (from work) and I need to warm up my old limping French c4gp car so I have to leave for now.. | 13:22 | |
| but I also got your last point about those two kinds of literals.. | |||
| I am still here reading.. (there were some problems with the car .. lol) | |||
| Nemokosch | for what it's worth, I tend to add everything as a string - except for the regex control characters I want to use in their special meaning | ||
| subben-troska | ok.. in my case do you and for the moment recommend using json::fast?? just to not get further into some misconceptions like you are pointing out to me? | 13:24 | |
| I want to get it right and according to your teaching :-) | |||
| I mean the way it works in RAKU.. correcgiton | 13:25 | ||
| Nemokosch | you seem to be kind of a funny person lol | ||
| subben-troska | I am dynamic | ||
| Nemokosch | but it's okay, new year's eve is close | ||
| subben-troska | yeah it is.. the code is always present to the mind | 13:26 | |
| well I better be going, have a great NY eve, I will try myself ;-) | |||
| Nemokosch | well, if what you want to process is valid JSON, that's probably the safest choice, and frankly it might even turn out to be faster, not sure about the implementation | ||
| subben-troska | I'll have a go after the pickup | 13:27 | |
| Nemokosch | okay okay | ||
| take care | |||
|
13:37
subben-troska left
14:29
Guest47 left
15:42
jgaz left
15:44
razetime joined
15:51
razetime left
15:55
razetime joined
17:58
razetime left
23:10
lizmat joined
|
|||
| I can't vouch for the books but there is the documentation itself | 23:10 | ||
| CodeTortoise | Right. The website has a lot of examples, and the documentation is well done, so I should not have too much trouble finding answers to any questions I have. Raku seems to be anti-idiomatic, or pro-idiosyncratic, so I don't have to worry about style I guess. | 23:13 | |
|
23:53
lizmat_ joined,
jgaz joined
|
|||
| Nemokosch | also, feel free to ask if something is not clear. Mistakes are very much possible when you have a large language with a small crew 😛 | 23:56 | |
|
23:56
lizmat left
|
|||
| CodeTortoise | For sure! I mean, I have been in a kind of beginner's hell sampling languages when I got interested in programming like.. ten years ago. Never pursued it seriously, I mostly just enjoyed reading about different rationales and implementations, but just like learning an instrument, knowing how to make sounds but not how to play songs is terrible. | 23:58 | |