Tablice w rubby

czesc, jestem poczatkującym i potrzebuje pomocy przy rozłozeniu pola na tablice

header:

EPS_BEARER_ID-BEARER_QCI-ARP_PL-ARP_PCI-ARP_PVI-GBR_UL-GBR_DL-BEARER_CAUSE-DEFAULT_BEARER_ID

sa to nasze dane wejsciowe:
5-7-undefined-undefined-undefined-undefined-undefined-#0(bearer successful)-5|7-5-undefined-undefined-undefined-undefined-undefined-#0(bearer successful)-7

Nasz nagłówek czyli nazwy pól z pierwszej tablicy dla której dane powinny być zmatchowane.
Bloki danych są oddzielone znakiem ‘|’, maksymalnie takich bloków w jednym dokumencie moze byc 11.

chciałbym osiągnąć: (tak aby pola były indeksowane)

eps_bearer_id_1 = 5
bearer_qci_1 = 7
ARP_PL_1 = 2
ARP_PCI_1 = disabled
ARP_PVI_1 = enabled
bearer_casue_default_1 = #0(bearer successful)
bearer_i_1 = 5

eps_bearer_id_2 = 5
bearer_qci_2 = 7
ARP_PL_2 = 2
ARP_PCI_2 = disabled
ARP_PVI_2 = enabled
bearer_casue_default_2 = #0(bearer successful)
bearer_i_2 = 5
[…]

Z góry dziękuje za pomoc.

Ruby jak to ruby, można na wiele sposobów rozwiązać dany problem :stuck_out_tongue:
Można spróbować użyć kolejno String#split, Array#zip, Array#to_h
Można się też pokusić o sparsowanie tego jako CSV. Pokombinuj.

zrobiłem tak

ale jest pewien mankament

ruby {
        code => '
        name = ["aaa", "bbb", "ccc", "ddd", "eee"]
        
            f = event.get("bearers")
               if f
                fs = f.split("|")
                fs.each_index{ |x|
                    fss = fs[x].split("-")
                    fss.each_index { |y|
  #name.each jest zle tutaj wywoływane
                        event.set("#{name.each { |item| puts item}}_#{x+1}", fss[y])
					   
                    }
                }
            end
        '
    }

Huh, no sporo rzeczy tutaj jest do poprawy. Pierwsza najważniejsza kwestia jest to metoda puts której nie powinno tutaj być, bo ona po prostu wypisuje na standardowe wyjście wartość, którą tam przekażesz. Natomiast cała konstrukcja name.each { ... } zwróci po prostu oryginalną tablicę. Czyli z Twojego punktu widzenia coś takiego: name.each { |item| puts item} jest równoważne temu: name.
Kolejna sprawa, już nie wpływająca na algorytm ale na czytelność kodu to iteratory: jeśli iterujesz po tablicy to używaj metody each, w której będziesz miał już dostęp bezpośrednio do aktualnego elementu. Ewentualnie each_with_index jeśli przy okazji faktycznie potrzebujesz indeks.