Zdravím,
prosím o radu. Mám kvantum hodnot, které dále upravuji v PowerQuery v Excelu. Zasekl jsem se v bodě, kdy potřebuji použít nachystané PQ na různé zdroje, kde se liší hodnoty signálů a já potřebuji použít jen část řetězce a nemůžu se odpíchnout od počtu písmen zleva ani zprava - příp. Text.Middle nelze použít.
Příklad:
IO.DIS._CD0xxxxx_SWLH1.SigHW
D_CE0yyyyy.CE0yyyyy_SD
Jde mi o osekání nepotřebných řetězců, aby výsledek vypadal takto:
CD0xxxxx_SWLH1
CE0yyyyy_SD
Díky za každou radu.
Část řetězce Vyřešeno
- ITCrowd
- Tvůrce článků
-
Guru Level 13.5
- Příspěvky: 23625
- Registrován: březen 10
- Pohlaví:
- Stav:
Offline
Re: Část řetězce
Můžeš použít vba (vbs).
Kód vypadá takto:
Chceš-li vědět, jak to funguje můžeš ten kód zkopírovat do notepadu a uložit s příponou .vbs. A stačí poklepat. Výsledek pak vypadá takto:
Jak si analogicky změnit druhou podmínku, na to jistě už přijdeš sám.
Kód vypadá takto:
Kód: Vybrat vše
vstup = "IO.DIS._CD0xxxxx_SWLH1.SigHW"
tst = "CD0"
k = Len(vstup)
k = k - 3
For i = 1 To k
If Mid(vstup, i, 3) = tst Then vystup = Mid(vstup, i, 14)
Next
WScript.Echo vystup
Chceš-li vědět, jak to funguje můžeš ten kód zkopírovat do notepadu a uložit s příponou .vbs. A stačí poklepat. Výsledek pak vypadá takto:
Jak si analogicky změnit druhou podmínku, na to jistě už přijdeš sám.
Zkusili jste to vypnout a zapnout? Problémy řeším pouze v tématech. Do SZ mi proto píšete zbytečně.
Základní diagnostika WiFi Jak na diagnostiku sítě Router jako switch Proč je nesmysl chtít router s velkým dosahem Vybíráme router
Základní diagnostika WiFi Jak na diagnostiku sítě Router jako switch Proč je nesmysl chtít router s velkým dosahem Vybíráme router
Re: Část řetězce
Použite najväčšiu pýchu PQ a to je, že vysekávací vzorec si vie vytvoriť samo, na základe príkladových hodnôt. Kde to nájdete je na obrázku a riešenie takto vytvoreného vzorca prikladám.
- Přílohy
-
- Book1.xlsx
- (103.28 KiB) Staženo 57 x
-
- Bez názvu.png (80.17 KiB) Zobrazeno 5531 x
Re: Část řetězce
Napsal jsi co nejde. Pak jsi přidal 2 příklady.
Pokud to jsou všechny hledané signály, pak hledej řetězec. Pokud je toho více, tak napiš, jak poznáš, který kousek textu je ten pravý.
Pokud to jsou všechny hledané signály, pak hledej řetězec. Pokud je toho více, tak napiš, jak poznáš, který kousek textu je ten pravý.
Re: Část řetězce
Název signálu má pevnou strukturu: 8 znaků + podtržítko + označení signálu, které se liší.
Prefix bývá odlišný, suffix bývá odlišný.
Prefix bývá odlišný, suffix bývá odlišný.
Re: Část řetězce
Může se stát, že prefix ani suffix signál neobsahuje vůbec a je čistý.
MePexG, částečně funguje, díky za něj! Nedaří se mi však sloupec vytvořit tak, abych mohl zdroj libovolně měnit. Musím mít pro každý zdroj sólo přednastavený sloupec. Narazil jsem i na zdroj, kdy mají některé hodnoty prefix i suffix a některé jsou čisté, tzn., že osekáním prefixu a suffixu konkrétních hodnot oddělovačem se mi pokrátí i čisté hodnoty, protože je v obou stejný oddělovač.
MePexG, částečně funguje, díky za něj! Nedaří se mi však sloupec vytvořit tak, abych mohl zdroj libovolně měnit. Musím mít pro každý zdroj sólo přednastavený sloupec. Narazil jsem i na zdroj, kdy mají některé hodnoty prefix i suffix a některé jsou čisté, tzn., že osekáním prefixu a suffixu konkrétních hodnot oddělovačem se mi pokrátí i čisté hodnoty, protože je v obou stejný oddělovač.
Re: Část řetězce
Stačí do príkladového stĺpca písať požadované hodnoty od tade, kde nevyhovujú požiadavkám šedé vypočítané hodnoty a vzorec sa postupne dopĺňa tak aby vyhovel všetkým Vašim potrebám. Zakaždým po zadaní hodnoty, stačí kontrolovať ďalšie šedé hodnoty a až keď je to OK, potvrdiť pridanie stĺpca.
Re: Část řetězce Vyřešeno
Zkus funkci:
ještě dotaz, který z parametru extrahuje jméno (může se hodit)
Případné další testy si dopiš.
Kód: Vybrat vše
fnNajdiSignal
let
Zdroj = (Signal as text) => let
fnSignal = ( _ ) =>
let
xx = Splitter.SplitTextByDelimiter("_")( _ ),
vysledek = List.Accumulate(xx, [stav = 0, sig = null],
(state, _ ) =>
let
Delka = Text.Length(_),
stav =
if state[stav] = 0 and Delka = 8 then 1
else if state[stav] = 1 and Delka > 0 then 2
else if state[stav] = 2 then 2
else 0,
sig =
if state[stav] = 0 and Delka = 8 then _
else if state[stav] = 1 and Delka > 0 then state[sig] & "_" & _
else if state[stav] = 2 then state[sig]
else null
in [stav = stav, sig = sig]
),
jmeno = if vysledek[stav] = 2 then vysledek[sig] else null
in jmeno,
kousky = Splitter.SplitTextByDelimiter(".")(Signal),
AsiSignal = List.Select(kousky, each Text.Contains(_, "_")),
seznam = List.RemoveNulls(List.Transform(AsiSignal, fnSignal)),
jmenoSignalu = seznam{0}
in
jmenoSignalu
in
Zdroj
ještě dotaz, který z parametru extrahuje jméno (může se hodit)
Kód: Vybrat vše
let
fnSignal = ( _ ) =>
let
xx = Splitter.SplitTextByDelimiter("_")( _ ),
vysledek = List.Accumulate(xx, [stav = 0, sig = null],
(state, _ ) =>
let
Delka = Text.Length(_),
stav =
if state[stav] = 0 and Delka = 8 then 1
else if state[stav] = 1 and Delka > 0 then 2
else if state[stav] = 2 then 2
else 0,
sig =
if state[stav] = 0 and Delka = 8 then _
else if state[stav] = 1 and Delka > 0 then state[sig] & "_" & _
else if state[stav] = 2 then state[sig]
else null
in [stav = stav, sig = sig]
),
jmeno = if vysledek[stav] = 2 then vysledek[sig] else null
in jmeno,
kousky = Splitter.SplitTextByDelimiter(".")(Signal),
AsiSignal = List.Select(kousky, each Text.Contains(_, "_")),
seznam = List.RemoveNulls(List.Transform(AsiSignal, fnSignal)),
jmenoSignalu = seznam{0}
in
jmenoSignalu
Případné další testy si dopiš.
Re: Část řetězce
Super, funguje to. Díky moc!
-
- Mohlo by vás zajímat
- Odpovědi
- Zobrazení
- Poslední příspěvek
-
-
JavaScript - načtení web stranky do řetězce.
od L.L » 16 bře 2024 10:23 » v Programování a tvorba webu - 4
- 4256
-
od L.L
Zobrazit poslední příspěvek
20 bře 2024 07:29
-
-
-
Otravna reklama zabirajici cast obrazovky Příloha(y)
od petr22 » 20 zář 2023 14:05 » v PC-HELP - připomínky k fóru - 29
- 14727
-
od Ltb
Zobrazit poslední příspěvek
07 říj 2023 00:11
-
Kdo je online
Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 2 hosti