Liste des Groupes | Revenir à cl awk |
On 14.04.2025 20:20, Kenny McCormack wrote:Yeah, remove that `delete arr`, it's not necessary since `patsplit()` will delete `arr` before populating it and `delete arr` in that location would break the code.In article <vtgtkr$3br8e$1@dont-email.me>,
Ed Morton <mortonspam@gmail.com> wrote:
...data = "R=\"R=r1,R=r2\",R=r2,R=r3,E=e">
nf = patsplit(data, arr, /[RE]=([^,]*|"([^"]|"")*")/)
delete arr
for ( i in arr ) {
sub(/[^=]+=/, "", arr[i])
}
This can't be right, since if the sequence:
delete arr
for (i in arr) ...
can't possibly do anything. I.e., the for statement will be a no-op, since
the array is empty at that point.
`delete arr` is defined by the current POSIX standard (https://pubs.opengroup.org/onlinepubs/9799919799/utilities/awk.html) as equivalent to `for (index in array) delete array[index]` but for years prior to that [almost?] every maintained awk supported `delete arr` anyway.>or any awk:>
>
data = "R=\"R=r1,R=r2\",R=r2,R=r3,E=e"
nf = 0
delete arr
while ( match(data, /[RE]=([^,]*|"([^"]|"")*")/, a) ) {
arr[++nf] = substr(data, RSTART+2, RLENGTH-2)
data = substr(data, RSTART+RLENGTH)
}
I believe "delete arr" (without an index, hence removing the entire array)
is an "extension". I can't quite quote chapter and verse, but I note that
"man mawk" explicitly mentions that mawk supports this syntax, thereby
implying that it isn't "standard". Of course, gawk supports it as well.
`split("", arr)` was the defacto "standard" way to delete an array's content without looping before `delete arr` was adopted by POSIX. In all seriousness if anyone is using an awk that doesn't support `delete arr` then they need to get a new awk as who knows what other features it might be lacking.So, if by "any awk", you mean "strictly standard", then, well, you can seeI seem to recall that a standard way to clear an array could be using
where I am going with this.
split("", arr)
for example. To my taste it looks a bit clumsy, not as nice as using
'delete', but well, whatever one prefers.
Janis
Les messages affichés proviennent d'usenet.