Fórum pro uživatele kancelářského balíku OpenOffice | LibreOffice
 

#1 23. 12. 2016 12:20:59

Tomino71
Člen
Registrace: 23. 12. 2016
Příspěvků: 6

Řazení dat nejprve písmena, potom čísla

Dobrý den,
mám data exportovaná z programu ve tvaru XLS. Program třídí data v pořadí nejprve písmena a potom čísla, např.

AKR
FAC
PTG
2101-10
415-555555

Používám pro další zpracování XLS souboru Libre Office 4.4.4.3 a Calc mi tyto údaje třídí jiným způsobem, nejprve čísla a potom písmena.

2101-10
415-555555
AKR
FAC
PTG

Zkoušel jsem to ručně i přes makra, ale nepodařilo se mi nijak nastavit třídění nejprve písmena a potom čísla.
Definovat vlastní seznam třídění nejde, protože se jedná o cca 40.000 řádku s jedinečným kodem, podle kterého potřebuji třídit vždy určitý výběr dat podle jiným parametrů.

Můžete mi prosím někdo poradit ? Děkuji Tom

Offline

#2 23. 12. 2016 13:30:24

neutr
Člen
Registrace: 8. 3. 2007
Příspěvků: 2,262

Re: Řazení dat nejprve písmena, potom čísla

Zde je potřebné vědět že existují 2 základní typy třídění. Je numerické a alfabetické (správný název lexikální). Váš případ je tedy lexikální.
     Při tom záleží na algoritmu. Lexikální třídění je typické zejména tím, že řadí čísla takto : [1,10,11,110,2,20,200 ....]. Tedy správné číselné řazení by bylo 1,2,3..... Ovšem řazení čísel a liter (alfabetických znaků) bývá někdy rozdílné. Na to jste právě narazil.
     Jediným řešením je napsat řadící algoritmus jako makro které bude kopírovat systém Excelu. nevím proč to tak Excel dělá, ale Calc evidentně řadí podle velikosti znaku. Čísla mají menší čísla znaků [CAHAR(No)]nežli písmena. S tím nic neuděláte pokud nebude vytvořeno makro které funguje jako  třídění v Excelu.


      Pokud máte zachováno řazení z Excelu tak se to dá "doznačit" číslem řádku a původní řazení tak zachovat. Ale nyní jde o to co s tím děláte dál. Domnívám se že slučujete několik listů Excelu do jediného Calcu. Potom by stačila úprava - pomocný sloupec odlišující číselné hodnoty od alfanumerických. Následně obě skupiny oddělit seředit podle druhů a zpětně složit do jediného celku.
      To zase chce znát detaily. Neřadí se také čísla opravdu jako čísla, nebo se to děje lexikálně? Lze očekávat také lomítko, nebo vykřičník?


MOJE DOPORUČENÍ - ÚPRAVA VZORCEM :
v A1 testovaná hodnota :
v B1 vzorec :

=IF(AND(CHAR(A1)>47; CHAR(A1)<58)=1;A1;"")

v C1 vyorec :

=IF(B1="";A1;"")

     Takto oddělíte čísla do sloupců pak jednotlivě seřadíte. Následně sloučíte podle potřebné konvence. Dobře si ale prohlédněte zda tam není ještě nějaká anomálie - například řezení s interpunkcí ap.

Editoval neutr (23. 12. 2016 13:33:14)


Pokud je Váš problém vyřešen, označte prosím svůj příspěvek za "VYŘEŠENÝ"
Zlepšíte tak orientaci na fóru při vyhledávání řešení problémů
JAK OZNAČIT TÉMA ZA VYŘEŠENÉ

Offline

#3 23. 12. 2016 15:22:30

Tomino71
Člen
Registrace: 23. 12. 2016
Příspěvků: 6

Re: Řazení dat nejprve písmena, potom čísla

Děkuji za rychlou a obsáhlou odpověď. Interpunkce v řazených datech není, vykřičník také ne, ale pravé lomítko (/) a dvojtečka se uprostřed kodu vyskytují.
Proč to celé musím dělat je to, že exportovaná data jsou sice seřazena správně podle sloupce A, ale skupiny dat řazené podle sloupce B jsou v datech ve špatném pořadí (např. 2,5,1,3,4 ) a dodavatel aplikace, ze které data exportuji, mi nedokáže zatím určit proč to tak je a nejde to změnit. Takže potřebuji data nejprve přeskupit podle sloupce B ( 1,2,3,4,5 ) a potom teprve v rámci skupiny stejných kodu B ( např.2 ) musí být seřazeny data podle kodu A (AKR
FAC, PTG, 2101-10, 415-555555 ).

Offline

#4 23. 12. 2016 16:03:27

neutr
Člen
Registrace: 8. 3. 2007
Příspěvků: 2,262

Re: Řazení dat nejprve písmena, potom čísla

Ty vzorce akceptují jen čísla na začátku výrazu. Jestli tam bude třeba 1Abc tak to zařadí jako číslo. Když jsem uváděl ty ojedinělé znaky tak jsem měl na mysli znaky, které mají menší číslo CHARu nežli čísla.
      To špatné řazení čísel je typické pro lexikální řazení. Pokud byste chtěl řadit čísla číselně (vzestupně - sestupně) tak budete mít problém. Ukazujete čísla 2101-10 a 415-555555. Tam je pomlčka která dělá z čísel text. To by se muselo řešit ještě jinak.
      Pokud by se jednalo jen o tu pomlčku, tak by šlo nahradit pomlčku za čárku (i tečku podle USA konvence). Pak by se čísla seřadila správně takto : 415,555555 a pak teprve 2101,10. Jsou li tam ale ještě jiné znaky tak to musíte řešit na skupiny se stejnou náhradou. Nakonec by se musely nahradit zpět čárky za pomlčky.
      Takovou operaci uděláte snadno. Vyberete úsek pro náhrady zavoláte dialog "Najít a nahradit" zadáte pomlčku a nahradit za čárku. Nakonec doporučuji všechna čísla načíst vzorcem =VALUE(buňka s číslem). Vzorce potom seředit jako čísla. Při tom bych doporučil ty vzorce načíst a hned vložit zpět jen jako "čísla a text". Tím se vytvoří opravdu čísla a lze s tím pracovat.


      Jinou cestou by bylo makro, ale je potřeba také znát všechny různé podoby "čísel". Ačkoliv by to mohlo umět vše jedním vrzem. Objem řazených prvků je také důležitý, ale při jednorázové akci sem tam nějaká sekunda navíc nebude hrát úlohu.

Editoval neutr (23. 12. 2016 16:09:26)


Pokud je Váš problém vyřešen, označte prosím svůj příspěvek za "VYŘEŠENÝ"
Zlepšíte tak orientaci na fóru při vyhledávání řešení problémů
JAK OZNAČIT TÉMA ZA VYŘEŠENÉ

Offline

#5 23. 12. 2016 16:32:45

Tomino71
Člen
Registrace: 23. 12. 2016
Příspěvků: 6

Re: Řazení dat nejprve písmena, potom čísla

Všechny kody sloupce A obsahují buď pomlčku nebo dvojtečku. Každopádně se všemi položkami pracuji jako s textem, nepořetbuji pracovat s čísly.

Offline

#6 23. 12. 2016 18:00:54

neutr
Člen
Registrace: 8. 3. 2007
Příspěvků: 2,262

Re: Řazení dat nejprve písmena, potom čísla

Tak nyní jste mně dostal. Pokud Vám tedy stačí najít čísla na začátku výrazu udělejte rozklad na ty dva sloupce B+C. Načtěte oba slouce B+C do paměti vložte zpět jen jako čísla a text.
     Následně můžete sloupec A smazat a setřídit nejprve sloupec B a pak i sloupec C. Výsledek bude docílem připojením výrazu s číslem na konec sloupce B.


     Nechci po tom pátrat ale co mělo být potom tohle? : Proč to celé musím dělat je to, že exportovaná data jsou sice seřazena správně podle sloupce A, ale skupiny dat řazené podle sloupce B jsou v datech ve špatném pořadí (např. 2,5,1,3,4 ) a dodavatel aplikace, ze které data exportuji, mi nedokáže zatím určit proč to tak je a nejde to změnit. Takže potřebuji data nejprve přeskupit podle sloupce B ( 1,2,3,4,5 ) a potom teprve....
     Pokud je potřeba sloupec B seřadit stejně jako A a paramatrem je číselné řazení 1,2,3... tak fakt nevím co potřebujete. Číselně lze seřadit jen čísla ale ne text. Z čísel je možné zpět udělat textový formát rekurzívním postupem.


Pokud je Váš problém vyřešen, označte prosím svůj příspěvek za "VYŘEŠENÝ"
Zlepšíte tak orientaci na fóru při vyhledávání řešení problémů
JAK OZNAČIT TÉMA ZA VYŘEŠENÉ

Offline

#7 23. 12. 2016 19:33:17

Tomino71
Člen
Registrace: 23. 12. 2016
Příspěvků: 6

Re: Řazení dat nejprve písmena, potom čísla

Posílám malý příklad, snad to z něho bude zřejmé.

Data se exportují po skupinách ( označení skupiny je ve druhém sloupci ), v rámci skupiny jsou data seřazena podle prvního sloupce.

FST 20:20, 10300G
FST 45:20, 10300G
2101-10:20, 10300G
AKR 25:20, 10100A
FST 18/1:20, 10100A
2101-35:10, 10100A
416-200:05, 10100A
FST 21:20, 10200P
FST 22:61, 10200P
2101-20:05, 10200P
415-20:10, 10200P

potřebuji seřadit takto ( nejprve druhý sloupec, potom první sloupec )

AKR 25:20, 10100A
FST 18/1:20, 10100A
2101-35:10, 10100A
416-200:05, 10100A
FST 21:20, 10200P
FST 22:61, 10200P
2101-20:05, 10200P
415-20:10, 10200P
FST 20:20, 10300G
FST 45:20, 10300G
2101-10:20, 10300G

Editoval Tomino71 (23. 12. 2016 19:33:51)

Offline

#8 23. 12. 2016 20:00:18

neutr
Člen
Registrace: 8. 3. 2007
Příspěvků: 2,262

Re: Řazení dat nejprve písmena, potom čísla

Tak se ještě musím zeptat :
To co potřebujete seřadit jsou dva sloupce oddělené čárkou přičemž údaj je jen v jediné buňce?
     Potom je to jen špatně načteno jako text. Mělo by to být načteno jako soubor CSV. Při načítání se musí vybrat importní filtr a upřesnit separátory. Když určíte čárku jako separátor načtou se údaje do dvou buněk. Potom bude například pro AKR 25:20, 10100A v buňce A1 výstup vypadat takto :
buňka A1 = AKR 25:20
buňka B1 = 10100A
     Takže pak už oba sloupce seřadíte podle sloupce B.


     Je možné, že ten vstup je přímo CSV, ale může být i txt. Když by to bylo TXT tak bych doporučil buď :
A - pomocí souborového manažera přejmenovat soubory TXT na CSV, nebo
B - načíst do Calcu a hned list Calcu uložit jako CSV. Když potom Calc zavřete znovu ten soubor CSV otevřete budou místo jednoho slouce sloupce dva.
     Šlo by to udělat i vzorcem, ale to je podle mne víc práce. Když byste chtěl takové řešení - pošlu vzor se vzorci.


Pokud je Váš problém vyřešen, označte prosím svůj příspěvek za "VYŘEŠENÝ"
Zlepšíte tak orientaci na fóru při vyhledávání řešení problémů
JAK OZNAČIT TÉMA ZA VYŘEŠENÉ

Offline

#9 23. 12. 2016 20:30:46

Tomino71
Člen
Registrace: 23. 12. 2016
Příspěvků: 6

Re: Řazení dat nejprve písmena, potom čísla

Já nemám problém s načtením dat. Mám problém s řazením po setřídění, kdy calc zařadí položky začínající číslem před položky začínající písmenem. Zkusil jsem teď předem upravit formát všech buněk listu na text, ze schránky vložit neformátovaný text, otevřel se průvodce jako při importu csv, oddělovač dat čárka. Data jsou rozdělena do 2 sloupců, dám je seřadit , klíč 1 sloupec B, klíč 2 sloupec 1 a výsledkem je že první řádek ukázkových dat po seřazení je 2101-35:10, 10100A a já potřebuji mít první řádek AKR 25:20, 10100A .

Offline

#10 23. 12. 2016 20:53:27

neutr
Člen
Registrace: 8. 3. 2007
Příspěvků: 2,262

Re: Řazení dat nejprve písmena, potom čísla

No potom musíte v tom sloupci A najít čísla podle výše uvedených vzorců a zařadit je za alfabetické znaky. Rozdíl je jen v tom, že ten rozklad uděláte do buňky C+D a E+F.


Pokud je Váš problém vyřešen, označte prosím svůj příspěvek za "VYŘEŠENÝ"
Zlepšíte tak orientaci na fóru při vyhledávání řešení problémů
JAK OZNAČIT TÉMA ZA VYŘEŠENÉ

Offline

#11 23. 12. 2016 21:56:05

Tomino71
Člen
Registrace: 23. 12. 2016
Příspěvků: 6

Re: Řazení dat nejprve písmena, potom čísla

Nezlobte se, ale ty vzorce mi nic neřeší. Údaje v prvním sloupci můžou mít délku až 20 znaků, potřebuji aby byly správně seřazené i v případě odlišnosti až na poslední pozici.
Pokud nelze změnit system třídění zabudovaný v LibreOffice, napadá mě jedině vytvořit makro, které po setřídění celého seznamu podle druhého sloupce bude postupovat po řádcích od začátku seznamu a pokud zjistí, že údaj v prvním sloupci začíná na číselný znak, takový řádek označí a přesune ho za poslední řádek dané skupiny.
Zkusím něco sepsat a napíšu, jestli jsem uspěl.

Offline

Zápatí