Сканирование всех элементов массива в GAWK возвращает числа вместо значений - PullRequest
0 голосов
/ 19 июня 2009

С учетом следующей функции:

function process_pipes(text)
{
    split(text,recs,"|");
    for (field in recs){
        printf ("|%s|\n", field)
    }
}

Если введено значение: 0987654321 | 57300 | Номер учетной записи ERROR не найден | GDUMARESQ | 0199 | 9 | N | 0 ||

Почему я получаю цифры ниже вместо текста?

|4|
|5|
|6|
|7|
|8|
|9|
|10|
|1|
|2|
|3|

Ответы [ 2 ]

2 голосов
/ 19 июня 2009

split создает массив recs в вашем коде, а recs[1] == 0987654321 и т. Д.

Цикл for (field in recs) генерирует список индексов, а не элементов массива.

Следовательно, вам нужно:

function process_pipes(text)
{
    split(text,recs,"|");
    for (field in recs){
        printf ("|%s|\n", recs[field])
    }
}
2 голосов
/ 19 июня 2009

Потому что

for ... in 

дает вам ключи . Используйте

printf("|%s|\n",recs[field]);

чтобы получить значения.

...