transformacja listy do csv

dane przekazywane są w różny, czasem dość dziwny sposób. ostatnio potrzebowałem danych do migracji w office365 i dane zostały przedstawione jako spis, gdzie jedynym wiążącym elementem była ilość wpisów dla każdego obiektu. coś takiego (example.txt):

jakaś nazwa
parametr: wartość parametru
coś: tutaj jakaś wartość
kolejna linia już bez konkretnego znacznika
a tutaj kolejna wartość

inna nazwa
parametr: inna wartość parametru
coś: coś
kolejna linia już bez konkretnego znacznika
i tu znów wartość

nazwa 3
parametr: parametr 3
coś: tralalala
kolejna linia już bez konkretnego znacznika
blablabla

znów coś
parametr: ciągle coś innego
coś: przykładowy ciąg znaków
kolejna linia już bez konkretnego znacznika
a tutaj kolejna wartość

takich wpisów było prawie 1oo a w efekcie chodziło o stworzenie tabeli, i dokonanie transpozycji:

nazwa parametr coś linia bez znacznika
jakaś nazwa wartość parametru tutaj jakaś wartość a tutaj kolejna wartość
inna nazwa inna wartość parametru coś i tu znów wartość
nazwa 3 parametr 3 tralalala blablabla
znów coś ciągle coś innego przykadowy ciąg znaków a tutaj kolejna wartość

 

jak widać zapis wygenerowany na stronie był dość luźny w stosunq do tego, co chciałbym mieć na końcu. tutaj poradziłem sobie przepisując ręcznie, ale przy dużej ilości wpisów…

wszystkiego nie ma sensu automatyzować, ale podstawowym zadaniem będzie owa transpozycja. w sumie to dwie linijki kodu:

$list=cat .\example.txt
for($i=0;$i -lt $list.Count;$i+=6){$list[$i..($i+5)] -join ';' | out-file example.csv -Append }

pierwsza linijka to po prostu odczytanie zawartości pliq do zmiennej. a cała ‘transpozycja’ to de facto zauważenie, że:

  • każdy obiekt zapisany jest na 5 liniach
  • następnie jest pusta linia oddzielająca
  • kiedy sklei się wszystkie 5 linii średnikami.. to w zasadzie już

cały myk jak ładnie skleić wartości tabeli do stringa? wystarczy wskazać tabelę, i użyć ‘join’. ot – PowerShell. nie trzeba żadnych pętli ani wynalazków, wszystko zrobi za nas (; dodajmy do tego, że substrakt tabeli można uzyskać wskazując konkretne elementy, a jeśli są w zapisie ciągłym to wystarczy użyć ‘..’ . czyli tak:

$array[fromValue..toValue]

inkrementując w pętli $i+=6 – to przeskakiwanie co 6 kolejnych linii.

‘podtabela’ma natomiast podane $i+5 aby ominąć ostatnią, pustą wartość.

…teraz wystarczy otworzyć w excelu i sobie resztę doklikać i uporządkować. voila.

eN.

 

Teams i grupy o365

taka drobna ciekawostka… większość aplikacji o365 opiera się na ‘Office 365 groups‘. ciekawe jest to, że zależnie od aplikacji to nie zawsze jest dokładnie ta sama grupa, a raczej zawartość jest synchronizowana do kopii grupy dla aplikacji. podobnie jak grupa w AD onprem jest synchronizowana do grupy AAD w o365.

efekt jest dość zaskaqjący. jeśli manipuluje się przynależnością do Teamu w Teamsach, z poziomu aplikacji, jako właściciel danego Teamu/grupy, to zamiany są odzwierciedlane natychmiast. ale jeśli dokonuje się manipulacji na grupie od strony office 365 [np. dodanie/usunięcie członka], jako administrator, to zmiany w Teams zostaną zsynchronizowane… w ciągu 24h [SIC!]. jest to trochę dziwne. np. w tym samym czasie SharePoint widział zmianę od razu.

dwa wnioski:

  • lepiej unikać zarządzania administracyjnego – lepiej zostawić to właścicielom Teamów
  • trzeba pamiętać, że ‘sowy nie są tym czym się wydają’

eN.