World: r3wp
[Core] Discuss core issues
older newer | first last |
Sunanda 11-May-2010 [16541] | Oops that SORT line should be sort/compare s func [a b] [return a/3 < b/3] |
Maxim 11-May-2010 [16542] | thanks... I was a bit lazy there ;-) |
amacleod 11-May-2010 [16543] | so something like this will give me a sort on multi indexes? sort/compare s func [a b] [return a/4 < b/4 return a2 < b/2] |
Maxim 11-May-2010 [16544x4] | btw return is never required at the end of a func .. and slows down rebol A LOT in tight loops. |
amacleod... your example would stop at first compare (you're returning right away) | |
try this instead: sort/compare s func [a b] [ either a/4 = b/4 [ a2 < b/2 ][ a/4 < b/4 ] ] | |
but not exactly sure of results... | |
Sunanda 11-May-2010 [16548] | For safe stable, sorting return -1, 0, +1 rather than true or false: http://www.rebol.com/docs/changes-2-5.html#section-72 |
amacleod 11-May-2010 [16549x2] | I do not know if that is what I want...i'm looking to prioritize each compare giving each a "weight" |
example" sorting a list of first and last names first on last then on first in case of same last names | |
Sunanda 11-May-2010 [16551] | The basic compare function then (assuming you are sorting a block of objects) is: func [a b] [if a/surname = b/surname [return a/firstname < b/firstname] return a/surname < b/surname]] |
amacleod 11-May-2010 [16552] | so if I'm comparing 5 or 6 fields I would nest to if statements 5 deep? |
Sunanda 11-May-2010 [16553] | Basically, yes.....You may find a neat way of refactoring....Or JOINing keyfields so you can do a single compare....but that is the basic principle. |
amacleod 11-May-2010 [16554] | thanks all |
Maxim 11-May-2010 [16555] | late but here is an equivalent working example: names: [ ["zz" "bb"] ["cc" "zz"] ["aa" "aa"]["bb" "ee"] ["zz" "tt"] ["cc" "aa"] ["aa" "yy"]["bb" "aa"] ] sort/compare names func [a b][ either a/1 = b/1 [a/2 < b/2][a/1 < b/1] ] probe names == [ ["aa" "aa"] ["aa" "yy"] ["bb" "aa"] ["bb" "ee"] ["cc" "aa"] ["cc" "zz"] ["zz" "bb"] ["zz" "tt"] ] |
amacleod 11-May-2010 [16556] | that limits it to comparisons on two fields...right? |
Maxim 11-May-2010 [16557x2] | yep... as sunanda said, you need to chain the compares. there might be a way of using ANY/ALL functions too, but it can be tricky ... though usually yields less code. |
yields = requires | |
Sunanda 11-May-2010 [16559] | Something like this will sort on all fields sort/compare s func [a b] [for n 1 length? a 1 [if a/:n < b/:n [return -1] if a/:n > b/:n [return +1]] return 0] |
Maxim 11-May-2010 [16560x2] | refining sunanda's example, sorting on selected fields sort/compare s func [a b] [ repeat n [2 4] [ if a/:n < b/:n [return -1] if a/:n > b/:n [return +1] ] return 0 ] I just indented it to make it a bit easier to break up |
note, the order of the fields given is the order in which they are weighted | |
Sunanda 11-May-2010 [16562] | Thanks, Maxim -- that's nice. |
Maxim 11-May-2010 [16563] | I wouldn't have thought of your idea, so I thought *yours* was really nifty :-) |
amacleod 11-May-2010 [16564] | That awsome...thanks guys |
Izkata 11-May-2010 [16565x2] | I've used 'case statements for multiple levels of sorting, like that |
...although I can't seem to find where right now | |
amacleod 13-May-2010 [16567] | can you use get-modes over ftp? |
Graham 13-May-2010 [16568] | try it .. |
amacleod 13-May-2010 [16569x2] | i get errors |
>> nodes: get-modes port 'file-modes ** Script Error: Invalid argument: file-modes ** Where: halt-view ** Near: system/words/get-modes port/sub-port modes | |
BrianH 13-May-2010 [16571] | You might not be able to get file-modes. Try some of the other modes. |
Graham 13-May-2010 [16572] | You might be able to modify my ftp protocol for R3 to add the SITE command so that you can do CHMOD if that's the aim |
BrianH 13-May-2010 [16573] | modify my ftp protocol for R2. R3 doesn't have anything like GET-MODES yet, though something is planned. |
Graham 13-May-2010 [16574x2] | or you could modify the ftp protocol for r2 to display all the file modes sent back by the LIST commands |
I think my r3 protocol does currently display all the file attributes | |
BrianH 13-May-2010 [16576x2] | That might be tricky though, because different FTP servers format that information differently. A large portion of the source for FileZilla or other FTP clients that have GUIs for file listings is different parsers for the file listings of different FTP server software. |
But we have PARSE, so it doesn't have to be that bad :) | |
Maxim 13-May-2010 [16578] | IIRC mozilla's ftp server code is like 1MB of source code. |
Graham 13-May-2010 [16579] | practically speaking though if you only have the one ftp server .. you only have to do it once |
Maxim 13-May-2010 [16580] | ftp server.... should read ftp server specific |
Graham 13-May-2010 [16581] | the r2 formatting code is a page of parse rules |
BrianH 13-May-2010 [16582] | Practically speaking, there are probably over a hundred different FTP server platforms, and the R2 parsing code only supports (hopefully) most of them. |
Graham 13-May-2010 [16583] | So, if you're not looking for a generalized solution.. then it's quite doable. |
Maxim 13-May-2010 [16584] | I've had issues where paths misaligned between list, read and write ops ! |
BrianH 13-May-2010 [16585] | It would have been great if the output format of the FTP commands had been part of the FTP spec. C'est la vie. |
Maxim 13-May-2010 [16586] | one of the problem is the ftp RFC which changed too many times and some older servers which forked between those changes. |
BrianH 13-May-2010 [16587] | Plus the stuff not covered by any of the RFCs at all, like file listing formats. There are Windows FTP servers that format their listings like DOS DIR listings, Unix servers that actually call ls, etc. |
Maxim 13-May-2010 [16588] | yep |
amacleod 13-May-2010 [16589] | I wanted to get modification-date on file for sycing...any other popular methods for this type of thing? |
BrianH 13-May-2010 [16590] | 'net-modes ? |
older newer | first last |