list / text files and numbers - beginner
Ok,
I have been experimenting a little more. I have many questions but will try to keep things straight to the necessary.
My goal is to be able to import text files with numbers and plot them in various ways, similarly to what I was used to do with OpenDX.
Moving data into Max is very different from what I am used to do, so few issues came out:
-1- how to eliminate white lines / blank end lines from a list? I am trying to be error safe so checking all files may be an issue and I would prefer Max to do this. Do I need to use Javascript?
-2- I am using 'thresh' to create a list from 'text'. How to I change the max size of 256? interestingly 'average' sees the full text, is this a bug?
-3- when I have 'text'e dumping the data I get the 'set' word for each line. I found that using 'route set' takes that away. But why? And if I use 'prepend set' the print does not happen.
Could anybody with more experience help? Much appreciated :-)
See below the simple map.
Thanks
G>
A few thoughts:
-1- how to eliminate white lines / blank end lines from a list? I am trying to be error safe so checking all files may be an issue and I would prefer Max to do this. Do I need to use Javascript?
No, you can put the line through [zl len] and if it's 0, there's nothing there, so skip it (or do whatever you want when you encounter a blank line). The [zl] help file has a ton of modes which will help you down the road I'm sure, so take some time to see what you can do with lists...a LOT, and IMO, often much easier to use than code-based approaches.
-2- I am using ‘thresh’ to create a list from ‘text’. How to I change the max size of 256? interestingly ‘average’ sees the full text, is this a bug?
I don't know about using [thresh], can't you just use the "line" message to [text]? If there are multiple values per line, look to [zl slice] or [unpack] (if you know how many there will be); if you want to group items from several lines into a list, use [zl group]. Again, the [zl] help file is your friend, and you can up the default size with a number argument: [zl 4096 group].
-3- when I have ‘text’e dumping the data I get the ‘set’ word for each line. I found that using ‘route set’ takes that away. But why? And if I use ‘prepend set’ the print does not happen.
The "set" coming from [text] is intentional, as it makes putting the lines into objects like message boxes easier (legacy message boxes had no right inlet and you needed to have "set" before the message to set them). [route set] is expected behavior, you use [route] to match the index of a list (or the first symbol in a message, as in this case) and get rid of it. The new [routepass] will keep the value at the head of the list/symbol, but still route it to the respective outlet.
Hope these help a bit!
Definitely helpful, thanks!
I find difficult to learn Max as there is not a manual but a massive amount of tutorial, but none is really doing what I would like to, so it is a very hard job :-)
zl is really an interesting tool and I am getting there.
I have tried the 'zl group' approach but with no success...
see here:
Anyway, without the full map may be difficult to see what is the purpose of this.
See enclosed for reference.
I have been trying few things today and it looks ok as a start.
The chart is working 50%. The red dot (when you press start you read the data) follows the data, but for some weird reason is not overlapping to the line. Not sure why... may need to investigate more for this. Not a big deal for now.
The sound part is very basic as a fried of mine will develop that more later.
Once more thanks,
G>
A couple tweaks, with comments. Especially look to [trigger] or [t], one of the most important Max objects to ensure proper order of operations (especially if doing open-ended processes like dumping [text] which could take a few moments). Also check how [zl group] is used.
Should work, but depends on what's in your text file: does each line just have numbers? How many? etc. If there are non-numbers as well, this might cause issues. Best to clean the data beforehand for easier parsing, though there are ways to use [route] to channel overall data types:
[route int float list]
for example...this could clean up "mixed" data. ints, floats, and lists (which are lists of numbers and/or symbols that must START with a number) will get routed; the rightmost outlet will dump anything else, which in this case would be any symbols. That way you could get rid of any non-numbers in your data, if you have them.
Anybody with some suggestion?
Note that the list going to a matrix is full...
but going to a selector is not.
is this a bug?
Thanks
G
Pretty much there. Here are some ways to tweak the output list. You just needed the length argument for your [zl] objects and a bit of reordering.
Ok,
I think I know where the issue is.
see here:
The problem is with zl.mth or zl.nth.
But why?
Thanks
G
Ok,
after looking at the problem a friend of mine explained the solution.
The solution is that ALL zl commands require to set the maximum number of elements.
So for example if I use 'zl 4096 group' and I connect it to 'zl len' the value will be wrong.
It is important that all zl are 4096. So as per James example.
Thanks to James for his help, this was a great learning exercise.
G
Glad to help. The [zl] length argument has bitten me before as well, because it works up to 256 without an argument (default length). So in some cases I had a variable length list, and it would work sometimes but not others...it would only process the first 256, which sometimes was tricky to track down... ;)