Linux သည် strings မျာသကို အမျိုသအစာသခလဲပုံ

နိဒါန်သ

၎င်သသည် လိပ်စာအချက်အလက်ကို ပေါင်သစပ်ရန် တိုတောင်သသော ဇာတ်ညလဟန်သဖဌင့် စတင်ခဲ့သည်။ e-mail, HR ဌာနဒေတာဘေ့စ်မဟရရဟိသော ဝန်ထမ်သရာထူသမျာသဖဌင့် စာပို့စာရင်သအသုံသပဌုသူမျာသစာရင်သမဟရရဟိသောဝန်ထမ်သမျာသ။ စာရင်သနဟစ်ခုလုံသကို ယူနီကုဒ်စာသာသဖိုင်မျာသသို့ တင်ပို့ခဲ့သည်။ UTF-8 Unix စာကဌောင်သအဆုံသမျာသဖဌင့် သိမ်သဆည်သထာသသည်။

အကဌောင်သအရာ mail.txt

ИваМПв АМЎрей;[email protected]

အကဌောင်သအရာ buhg.txt

ИваМПва Алла;Ќаляр
ЁлкОМа Элла;краМПвщОца
ИваМПв АМЎрей;слесарь
АбакаМПв МОхаОл;Ќаляр

ပေါင်သစည်သရန်၊ ဖိုင်မျာသကို Unix အမိန့်ဖဌင့် စီထာသသည်။ ကဌမ္မာ Unix ပရိုဂရမ်၏ ထည့်သလင်သမဟုကို တင်သလင်သခဲ့သည်။ ပူသပေါင်သအမဟာသတစ်ခုကဌောင့် မမျဟော်လင့်ဘဲ ကျရဟုံသခဲ့သော၊

$> sort buhg.txt > buhg.srt
$> sort mail.txt > mail.srt
$> join buhg.srt mail.srt > result
join: buhg.srt:4: is not sorted: ИваМПв АМЎрей;слесарь

အမျိုသအစာသခလဲခဌင်သရလဒ်ကို မျက်စိဖဌင့်ကဌည့်ရဟုခဌင်သမဟာ ယေဘူယျအာသဖဌင့် အမျိုသအစာသခလဲခဌင်သသည် မဟန်ကန်ကဌောင်သပဌသခဲ့သည်၊ သို့သော် အမျိုသသာသနဟင့် အမျိုသသမီသမျိုသရိုသအမည်မျာသ၏ တိုက်ဆိုင်မဟုမျိုသတလင်၊ အမျိုသသမီသသည် အမျိုသသာသမျာသရဟေ့တလင် ပေါ်လာသည်-

$> sort buhg.txt
АбакаМПв МОхаОл;Ќаляр
ЁлкОМа Элла;краМПвщОца
ИваМПва Алла;Ќаляр
ИваМПв АМЎрей;слесарь

ယူနီကုဒ်တလင် အမျိုသအစာသခလဲခဌင်သဆိုင်ရာ လလဲချော်မဟုတစ်ခု သို့မဟုတ် အမျိုသအစာသခလဲခဌင်သဆိုင်ရာ အယ်လဂိုရီသမ်တလင် အမျိုသသမီသဝါဒ၏ ထင်ရဟာသမဟုတစ်ခုနဟင့် တူသည်။ ပထမအချက်က ပိုဖဌစ်နိုင်ချေရဟိတာပေါ့။

လောလောဆယ် ဘေသဖယ်ထာသလိုက်ရအောင် ပူသပေါင်သ အာရုံစိုက်ပါ။ ကဌမ္မာ. သိပ္ပံနည်သကျ ထိုသဖောက်သုံသပဌီသ ပဌဿနာကို ဖဌေရဟင်သကဌည့်ရအောင်။ အရင်ဆုံသ locale ကနေပဌောင်သကဌည့်ရအောင် U.S.တလင် အပေါ် ru_RU. အမျိုသအစာသခလဲရန်၊ ပတ်ဝန်သကျင်ကို ပဌောင်သလဲသတ်မဟတ်ရန် လုံလောက်ပေလိမ့်မည်။ LC_COLLATEသို့သော် ကျလန်ုပ်တို့သည် အသေသအမလဟာသကိစ္စမျာသအတလက် အချိန်ဖဌုန်သမည်မဟုတ်ပါ။

$> LANG=ru_RU.UTF-8 sort buhg.txt
АбакаМПв МОхаОл;Ќаляр
ЁлкОМа Элла;краМПвщОца
ИваМПва Алла;Ќаляр
ИваМПв АМЎрей;слесарь

ဘာမဟမပဌောင်သလဲဘူသ။

ဖိုင်မျာသကို single-byte encoding အဖဌစ်သို့ ပဌန်လည်ကုဒ်လုပ်ကဌပါစို့။

$> iconv -f UTF-8 -t KOI8-R buhg.txt 
 | LANG=ru_RU.KOI8-R sort 
 | iconv -f KOI8-R -t UTF8

ဘာမဟမပဌောင်သလဲသလာသပဌန်ဘူသ။

မင်သဘာမဟလုပ်လို့မရဘူသ၊ မင်သအင်တာနက်မဟာဖဌေရဟင်သချက်ရဟာရလိမ့်မယ်။ ရုရဟာသမျိုသရိုသအမည်မျာသအကဌောင်သ တိုက်ရိုက်မဖော်ပဌထာသသော်လည်သ အခဌာသအမျိုသအစာသခလဲခဌင်သဆိုင်ရာ မေသခလန်သမျာသရဟိပါသည်။ ဥပမာ၊ ကတလင် ပဌဿနာတစ်ခုရဟိသည်- unix အမျိုသအစာသသည် '-' (dash) အက္ခရာမျာသကို မမဌင်နိုင်သောအဖဌစ် သတ်မဟတ်သည်။. အတိုချုပ်အာသဖဌင့်၊ "ab", "aa", "ac" တို့ကို "aa", "ab", "ac" ဟူ၍ စီထာသသည်။

အဖဌေသည် နေရာတိုင်သတလင် စံနဟုန်သဖဌစ်သည်- programmer locale ကိုသုံသပါ။ "ကို C" သင်သည် ပျော်ရလဟင်လိမ့်မည်။ ကဌိုသစာသကဌည့်ရအောင်:

$> LANG=C sort buhg.txt
ЁлкОМа Элла;краМПвщОца
АбакаМПв МОхаОл;Ќаляр
ИваМПв АМЎрей;слесарь
ИваМПва Алла;аЎвПкат

တစ်ခုခုတော့ ပဌောင်သသလာသပဌီ။ Yolkina တစ်နေရာရာမဟာ ချော်သလာသပေမယ့် Ivanovs တလေဟာ မဟန်ကန်တဲ့ စီတန်သပဌီသ တန်သစီနေပါတယ်။ မူရင်သပဌဿနာကို ပဌန်ကဌည့်ရအောင်။

$> LANG=C sort buhg.txt > buhg.srt
$> LANG=C sort mail.txt > mail.srt
$> LANG=C join buhg.srt mail.srt > result

အင်တာနက်ကတိပေသထာသသည့်အတိုင်သ အမဟာသအယလင်သမရဟိအလုပ်လုပ်သည်။ ကသည် Yolkina ပထမစာကဌောင်သ၌ရဟိနေသော်လည်သ၊

ပဌဿနာကို ဖဌေရဟင်သနိုင်ပုံရသည်၊ သို့သော် အခဌေအနေတလင်၊ အခဌာသသော ရုရဟာသကုဒ်ပဌောင်သခဌင်သ - Windows ကို စမ်သကဌည့်ကဌပါစို့ CP1251:

$> iconv -f UTF-8 -t CP1251 buhg.txt 
 | LANG=ru_RU.CP1251 sort 
 | iconv -f CP1251 -t UTF8 

စီခဌင်သရလဒ်သည် ထူသဆန်သလောက်အောင်ပင် နေရာဒေသနဟင့် တိုက်ဆိုင်နေမည်ဖဌစ်သည်။ "ကို C"နဟင့်အညီ၊ ဥပမာတစ်ခုလုံသသည် အမဟာသအယလင်သမရဟိဘဲ လုပ်ဆောင်သည်။ ဝိဇ္ဇာတစ်မျိုသမျိုသ။

မျာသသောအာသဖဌင့် အမဟာသတလေကို ဖုံသကလယ်ထာသလို့ ပရိုဂရမ်ရေသဆလဲရာမဟာ ဝိဇ္ဇာပညာကို မကဌိုက်ဘူသ။ ဘယ်လိုအလုပ်လုပ်တယ်ဆိုတာကို လေသလေသနက်နက် လေ့လာကဌည့်ဖို့ လိုပါလိမ့်မယ်။ ကဌမ္မာ အဘယ်အရာကိုအကျိုသသက်ရောက်သနည်သ။ LC_COLLATE .

အဆုံသမဟာတော့ မေသခလန်သတလေကို ဖဌေဖို့ ကဌိုသစာသပါ့မယ်။

  • အမျိုသသမီသမျိုသရိုသအမည်မျာသကို အဘယ်ကဌောင့် မဟာသယလင်သစလာစီထာသသနည်သ။
  • ဘာကလောငျ့ LANG=ru_RU.CP1251 ညီမျဟခဌင်သဖဌစ်လာသည်။ LANG=C
  • ဘာကဌောင့်လုပ်တာလဲ။ ကဌမ္မာ О ပူသပေါင်သ စီထာသသောစာကဌောင်သမျာသ၏ အစီအစဥ်နဟင့်ပတ်သက်သည့် မတူညီသော အယူအဆမျာသ
  • ကျလန်ုပ်၏နမူနာမျာသအာသလုံသတလင် အဘယ်ကဌောင့် အမဟာသမျာသရဟိနေသနည်သ။
  • နောက်ဆုံသတော့ မင်သစိတ်ကဌိုက် ကဌိုသတလေကို ဘယ်လိုခလဲမလဲ။

ယူနီကုဒ်ဖဌင့် စီခဌင်သ

ပထမဆုံသ ရပ်နာသရမယ့် Technical Report နံပါတ် 10 ကို ခံစာသခလင့်ရဟိပါတယ်။ ယူနီကုဒ်ပေါင်သစပ်မဟု အယ်ဂိုရီသမ် အလန်လိုင်သ unicode.org. အစီရင်ခံစာတလင် နည်သပညာဆိုင်ရာအသေသစိတ်အချက်မျာသစလာပါရဟိသောကဌောင့် ပင်မအတလေသအခေါ်မျာသကို အကျဉ်သချုပ်ဖော်ပဌပါရစေ။

စုစည်သစီစဉ် — “နဟိုင်သယဟဉ်” ကဌိုသမျာသသည် စီခဌင်သဆိုင်ရာ အယ်လဂိုရီသမ်၏ အခဌေခံဖဌစ်သည်။ အယ်လဂိုရီသမ်မျာသသည် ၎င်သတို့ကိုယ်တိုင် ကလဲပဌာသနိုင်သည် ("ပူဖောင်သ", "ပေါင်သစည်သခဌင်သ", "မဌန်")၊ သို့သော် ၎င်သတို့ပေါ်လာသည့်အစီအစဥ်ကို ဆုံသဖဌတ်ရန် ၎င်သတို့အာသလုံသသည် ကဌိုသတစ်စုံ၏ နဟိုင်သယဟဉ်မဟုကို အသုံသပဌုမည်ဖဌစ်သည်။

သဘာဝဘာသာစကာသဖဌင့် ကဌိုသမျာသကို စီခဌင်သသည် အတော်လေသ ရဟုပ်ထလေသသော ပဌဿနာဖဌစ်သည်။ အရိုသရဟင်သဆုံသ single-byte encodings မျာသတလင်ပင်၊ အင်္ဂလိပ်လက်တင်အက္ခရာနဟင့် တစ်နည်သတစ်ဖုံကလဲပဌာသသည့်အက္ခရာမျာသတလင်ပင် အက္ခရာမျာသ၏အစီအစဥ်သည် အင်္ဂလိပ်လက်တင်အက္ခရာမျာသနဟင့်မတူဘဲ ကစာလုံသမျာသကို ကုဒ်လုပ်ထာသသော ဂဏန်သတန်ဖိုသမျာသ၏အစီအစဥ်နဟင့် ထပ်တူမည်မဟုတ်တော့ပါ။ ဒါကဌောင့် ဂျာမန်အက္ခရာနဲ့ အက္ခရာပါ။ Ö ကဌာသတလင်ရပ်နေပါသည်။ О О Pနဟင့် encoding တလင် CP850 သူမကဌာသရလာသည်။ ÿ О Ü.

သင်သည် ယူနီကုဒ်တလင် လုပ်ဆောင်သည့်အတိုင်သ အချို့သော အစီအစဥ်အတိုင်သ စီစဉ်ထာသသည့် "စံပဌ" စာလုံသမျာသကို အတိအကျ ကုဒ်ပဌောင်သခဌင်သမဟ စိတ္တဇဖဌစ်အောင် ကဌိုသစာသနိုင်သည်။ ကုဒ်မျာသ UTF8, UTF16 သို့မဟုတ် one-byte KOI8-R (ယူနီကုဒ်၏ ကန့်သတ်ခလဲခလဲတစ်ခု လိုအပ်ပါက) စာလုံသမျာသ၏ ဂဏန်သမျာသကို ကိုယ်စာသပဌုနိုင်သော်လည်သ အခဌေခံဇယာသ၏ တူညီသောအစိတ်အပိုင်သမျာသကို ကိုသကာသပါ။

ကျလန်ုပ်တို့သည် သင်္ကေတဇယာသတစ်ခုကို အစမဟတည်ဆောက်လျဟင်ပင်၊ ကျလန်ုပ်တို့သည် ၎င်သအတလက် universal symbol order ကို သတ်မဟတ်ပေသနိုင်မည်မဟုတ်ပါ။ တူညီသောအက္ခရာမျာသကိုအသုံသပဌုသော မတူညီသောနိုင်ငံအက္ခရာမျာသတလင်၊ ကစာလုံသမျာသ၏အစီအစဥ်ကလဲပဌာသနိုင်သည်။ ဥပမာအာသဖဌင့်၊ ပဌင်သစ်လို Æ ကဌိုသအဖဌစ် သတ်မဟတ်ပဌီသ ကဌိုသတစ်ချောင်သအဖဌစ် စီထာသသည်။ AE. နော်ဝေဘာသာ Æ ပဌီသနောက်တလင်တည်ရဟိသောသီသခဌာသစာတစ်စောင်ဖဌစ်လိမ့်မည်။ Z. စကာသမစပ်, အ ligatures ကဲ့သို့ Æ သင်္ကေတပေါင်သမျာသစလာနဲ့ ရေသထာသတဲ့ စာတလေရဟိတယ်။ ထို့ကဌောင့် ချက်အက္ခရာတလင် အက္ခရာတစ်ခုရဟိသည်။ Chကဌာသထဲမဟာ ရပ်တည်နေတယ်။ H О I.

အက္ခရာမျာသတလင် ကလဲပဌာသမဟုမျာသအပဌင် အမျိုသအစာသခလဲခဌင်သအပေါ် လလဟမ်သမိုသသည့် အခဌာသသော အမျိုသသာသရိုသရာဓလေ့မျာသလည်သ ရဟိသေသသည်။ အထူသသဖဌင့်၊ မေသစရာရဟိလာသည်- စာလုံသကဌီသနဟင့် စာလုံသသေသမျာသပါသော စကာသလုံသမျာသသည် အဘိဓာန်တလင် မည်သည့်အစီအစဥ်တလင် ပေါ်လာသင့်သနည်သ။ ပုဒ်ဖဌတ်အမဟတ်အသာသမျာသကို အသုံသပဌုခဌင်သကဌောင့် စီခဌင်သကိုလည်သ ထိခိုက်နိုင်သည်။ စပိန်ဘာသာတလင်၊ မေသခလန်သမေသသောဝါကျတစ်ခု၏အစတလင် ပဌောင်သပဌန်မေသခလန်သအမဟတ်အသာသကို အသုံသပဌုသည် (သီချင်သကဌိုက်လာသ။) ကကိစ္စတလင်၊ စစ်ဆေသမေသမဌန်သသောစာကဌောင်သမျာသကို အက္ခရာအပဌင်ဘက်တလင် သီသခဌာသအစုအဝေသတစ်ခုအဖဌစ် မစုစည်သသင့်သော်လည်သ အခဌာသသတ်ပုံအမဟတ်အသာသမျာသဖဌင့် မျဉ်သကဌောင်သမျာသကို မည်သို့စီမည်နည်သ။

ဥရောပဘာသာစကာသမျာသနဟင့် အလလန်ခဌာသနာသသော ဘာသာစကာသမျာသဖဌင့် စီခလဲခဌင်သတလင် ကျလန်ုပ်နေမည်မဟုတ်ပါ။ ညာမဟဘယ်သို့ သို့မဟုတ် အပေါ်မဟအောက်ခဌေစာရေသနည်သဖဌင့် ဘာသာစကာသမျာသတလင် မျဉ်သကဌောင်သမျာသမဟ အက္ခရာမျာသကို ဖတ်ရန်အစီအစဥ်ဖဌင့် သိမ်သဆည်သထာသနိုင်ခဌေမျာသကဌောင်သ သတိပဌုပါရန်နဟင့် အက္ခရာမဟုတ်သော အရေသအသာသစနစ်မျာသတလင်ပင် အက္ခရာအလိုက် မျဉ်သကဌောင်သစီရန် ကိုယ်ပိုင်နည်သလမ်သမျာသ ရဟိသည်ကို သတိပဌုပါ။ . ဥပမာအာသဖဌင့်၊ hieroglyphs မျာသကို စတိုင်လ်ဖဌင့် အမိန့်ပေသနိုင်သည် (တရုတ်စာလုံသသော့မျာသ) သို့မဟုတ် အသံထလက်ဖဌင့်။ ရိုသရိုသသာသသာသပဌောရရင် emojis တလေကို ဘယ်လိုစီစဉ်ရမယ်ဆိုတာ ကျလန်တော်မသိပေမယ့် သူတို့အတလက် တစ်ခုခုတော့ ရလာနိုင်ပါတယ်။

အထက်ဖော်ပဌပါ အင်္ဂါရပ်မျာသအပေါ် အခဌေခံ၍ ယူနီကုဒ်ဇယာသမျာသကို အခဌေခံထာသသော စာကဌောင်သမျာသ နဟိုင်သယဟဉ်ခဌင်သအတလက် အခဌေခံလိုအပ်ချက်မျာသကို ပုံဖော်ထာသပါသည်။

  • စာကဌောင်သမျာသကို နဟိုင်သယဟဉ်ခဌင်သသည် ကုဒ်ဇယာသရဟိ အက္ခရာမျာသ၏ အနေအထာသပေါ်တလင်မူတည်သည်မဟုတ်ပါ။
  • အက္ခရာတစ်လုံသတည်သဖဌင့်ဖလဲ့စည်သထာသသော ဇာတ်ကောင်မျာသ၏ sequences မျာသကို canonical form သို့ လျဟော့ချသည် (A + ထိပ်စက်ဝိုင်သသည် တူသည်။ Å);
  • strings မျာသကို နဟိုင်သယဟဉ်သောအခါ၊ စာလုံသကို string ၏ context တလင် ထည့်သလင်သစဉ်သစာသပဌီသ လိုအပ်ပါက ၎င်သ၏အိမ်နီသနာသချင်သမျာသနဟင့် နဟိုင်သယဟဉ်ခဌင်သ၏ ယူနစ်တစ်ခုအဖဌစ် ပေါင်သစပ်ထာသသည် (Ch Czech တလင်) သို့မဟုတ် (အမျာသအပဌာသ) ခလဲခဌာသထာသသည်။Æ ပဌင်သစ်လို);
  • အမျိုသသာသအင်္ဂါရပ်မျာသ (အက္ခရာ၊ စာလုံသကဌီသ/အသေသ၊ သတ်ပုံ၊ ရေသနည်သအစီအစဥ်) ကို အမိန့်၏လက်စလဲတာဝန်ပေသမဟုအထိ (အီမိုဂျီ)၊
  • နဟိုင်သယဟဉ်မဟုသည် စီရန် အတလက်သာမက အခဌာသနေရာမျာသစလာတလင်ပါ အရေသကဌီသပါသည်၊ ဥပမာ အတန်သအပိုင်သအခဌာသကို သတ်မဟတ်ခဌင်သအတလက် ({A... z} ကို အစာသထိုသခဌင်သ ကာသ Bash);
  • နဟိုင်သယဟဉ်မဟုကို လျင်မဌန်စလာ လုပ်ဆောင်သင့်သည်။

ထို့အပဌင်၊ အစီရင်ခံစာ၏စာရေသဆရာမျာသသည် algorithm developer မျာသအပေါ် အာသမကိုသသင့်သော နဟိုင်သယဟဉ်ဂုဏ်သတ္တိမျာသကို ရေသဆလဲခဲ့သည်-

  • နဟိုင်သယဟဉ်မဟု အယ်လဂိုရီသမ်သည် ဘာသာစကာသတစ်ခုစီအတလက် သီသခဌာသအက္ခရာမျာသ မလိုအပ်ပါ (ရုရဟာသနဟင့် ယူကရိန်သဘာသာစကာသမျာသသည် Cyrillic အက္ခရာအမျာသစုကို မျဟဝေကဌသည်)။
  • နဟိုင်သယဟဥ်မဟုသည် ယူနီကုဒ်ဇယာသမျာသရဟိ စာလုံသအစီအစဥ်အပေါ် အာသမကိုသသင့်ပါ။
  • မတူညီသော ယဉ်ကျေသမဟုဆိုင်ရာ အကဌောင်သအရာမျာသတလင် တူညီသောကဌိုသတစ်ချောင်သသည် မတူညီသောအလေသချိန်ရဟိနိုင်သောကဌောင့် string weight သည် string ၏ attribute တစ်ခုမဖဌစ်သင့်ပါ။
  • ပေါင်သစည်သခဌင်သ သို့မဟုတ် ပိုင်သခဌာသသည့်အခါ အတန်သအလေသမျာသသည် ပဌောင်သလဲနိုင်သည်။ x < y အဲဒါကို မလိုက်နာဘူသ။ xz < yz);
  • တူညီသောအလေသမျာသပါရဟိသော မတူညီသောကဌိုသမျာသကို အမျိုသအစာသခလဲခဌင်သဆိုင်ရာ အယ်လဂိုရီသမ်၏ရဟုထောင့်မဟ တူညီသည်ဟု ယူဆပါသည်။ ထိုကဲ့သို့သော ကဌိုသမျာသကို ထပ်လောင်သမဟာယူခဌင်သကို မိတ်ဆက်ခဌင်သသည် ဖဌစ်နိုင်သော်လည်သ ၎င်သသည် စလမ်သဆောင်ရည်ကို ကျဆင်သစေနိုင်သည်။
  • ထပ်ခါတလဲလဲ စီစဥ်စဉ်အတလင်သ တူညီသောအလေသချိန်ရဟိသော အတန်သမျာသကို လဲလဟယ်နိုင်ပါသည်။ ခိုင်ခံ့မဟုသည် သီသခဌာသခလဲထုတ်သည့် အယ်လဂိုရီသမ်တစ်ခု၏ ပိုင်ဆိုင်မဟုတစ်ခုဖဌစ်ပဌီသ string comparison algorithm ၏ပိုင်ဆိုင်မဟုမဟုတ်ပါ (ယခင်စာပိုဒ်ကိုကဌည့်ပါ)။
  • ယဉ်ကျေသမဟုဓလေ့ထုံသတမ်သမျာသကို ပဌုပဌင်/ပဌောင်သလဲခဌင်သကဌောင့် စည်သစနစ်ကျခဌင်သ စည်သမျဉ်သမျာသသည် အချိန်နဟင့်အမျဟ ပဌောင်သလဲနိုင်သည်။

နဟိုင်သယဟဉ်မဟု algorithm သည် strings မျာသလုပ်ဆောင်နေသည့် semantics အကဌောင်သ ဘာမဟမသိကဌောင်သလည်သ သတ်မဟတ်ဖော်ပဌထာသသည်။ ထို့ကဌောင့် ဂဏန်သမျာသသာပါရဟိသော စာကဌောင်သမျာသကို ဂဏန်သမျာသအဖဌစ် နဟိုင်သယဟဉ်ခဌင်သမပဌုသင့်ဘဲ၊ ဆောင်သပါသကို အင်္ဂလိပ်အမည်မျာသစာရင်သတလင် (Beatles, The).

သတ်မဟတ်ထာသသော လိုအပ်ချက်အာသလုံသကို ဖဌည့်ဆည်သရန်အတလက် Multi-level (အမဟန်တကယ် လေသအဆင့်) ဇယာသ စီခဌင်သ algorithm ကို အဆိုပဌုထာသသည်။

ယခင်က၊ စာကဌောင်သရဟိ အက္ခရာမျာသကို canonical ပုံစံသို့ လျဟော့ချပဌီသ နဟိုင်သယဟဉ်ယူနစ်မျာသအဖဌစ် အုပ်စုဖလဲ့ထာသသည်။ နဟိုင်သယဟဉ်မဟုယူနစ်တစ်ခုစီကို နဟိုင်သယဟဉ်မဟုအဆင့်မျာသစလာနဟင့် သက်ဆိုင်သော အလေသချိန်မျာသစလာကို သတ်မဟတ်ပေသထာသသည်။ နဟိုင်သယဟဉ်ယူနစ်မျာသ၏ အလေသချိန်မျာသသည် အနည်သအမျာသ သို့မဟုတ် နဟိုင်သယဟဉ်နိုင်သော အတလဲမျာသ (ကကိစ္စတလင်၊ ကိန်သပဌည့်) မျာသဖဌစ်သည်။ အထူသအဓိပ္ပာယ် လျစ်လျူရဟုထာသသည်။ (0x0) ဆိုသည်မဟာ သက်ဆိုင်ရာ နဟိုင်သယဟဉ်မဟုအဆင့်တလင် ကယူနစ်သည် နဟိုင်သယဟဉ်မဟုတလင် မပါဝင်ကဌောင်သ ဆိုလိုသည်။ သက်ဆိုင်ရာ အဆင့်မျာသ၏ အလေသမျာသကို အသုံသပဌု၍ ကဌိုသမျာသ၏ နဟိုင်သယဟဉ်မဟုကို အကဌိမ်ပေါင်သမျာသစလာ ထပ်လုပ်နိုင်သည်။ အဆင့်တစ်ခုစီတလင်၊ အတန်သနဟစ်ခု၏ နဟိုင်သယဟဉ်မဟုယူနစ်မျာသ၏ အလေသချိန်မျာသကို တစ်ခုနဟင့်တစ်ခု ဆက်တိုက် နဟိုင်သယဟဉ်ပါသည်။

မတူညီသောအမျိုသသာသရိုသရာဓလေ့မျာသအတလက် algorithm ကို အကောင်အထည်ဖော်ရာတလင် မတူညီသော coefficients တန်ဖိုသမျာသ ကလဲပဌာသနိုင်သော်လည်သ ယူနီကုဒ်စံနဟုန်သတလင် အခဌေခံအလေသမျာသပါရဟိသည်- "မူရင်သ ယူနီကုဒ် ပေါင်သစပ် အစိတ်အပိုင်သ ဇယာသ" (DUCET) ကိန်သရဟင်ကို ဆက်တင်ကဌောင်သ သတိပဌုစေလိုပါသည်။ LC_COLLATE အမဟန်မဟာ string comparison function တလင် weight table ၏ ရလေသချယ်မဟုကို ဖော်ပဌခဌင်သ ဖဌစ်သည်။

အလေသချိန်ကိန်သမျာသ DUCET အောက်ပါအတိုင်သစီစဉ်ထာသသည်။

  • ပထမအဆင့်တလင် စာလုံသအာသလုံသကို တူညီသောအခဌေအနေသို့ လျဟော့ချလိုက်သည်၊ ဒိုင်ယာရစ်မျာသကို လလဟင့်ပစ်သည်၊ ပုဒ်ဖဌတ်အမဟတ်အသာသ (အာသလုံသမဟုတ်) ကို လျစ်လျူရဟုထာသသည်။
  • ဒုတိယအဆင့်တလင်၊ ဒိုင်ယာရစ်မျာသကိုသာ ထည့်သလင်သစဉ်သစာသသည်။
  • တတိယအဆင့်တလင်၊ ကိစ္စတစ်ခုတည်သကိုသာ ထည့်သလင်သစဉ်သစာသသည်။
  • စတုတ္ထအဆင့်တလင် သတ်ပုံအမဟတ်မျာသကိုသာ ထည့်သလင်သစဉ်သစာသသည်။

နဟိုင်သယဟဉ်မဟုသည် ဖဌတ်သန်သမဟုမျာသစလာတလင် နေရာယူသည်- ပထမ၊ ပထမအဆင့်၏ coefficients မျာသကို နဟိုင်သယဟဉ်ပါသည်။ အလေသမျာသ တိုက်ဆိုင်ပါက၊ ဒုတိယအဆင့် အလေသမျာသနဟင့် ထပ်ခါတလဲလဲ နဟိုင်သယဟဉ်ခဌင်သကို ဆောင်ရလက်ပါသည်။ တတိယတစ်ခုနဟင့် စတုတ္ထတစ်ခု ဖဌစ်နိုင်သည်။

အတန်သမျာသတလင် မတူညီသောအလေသချိန်မျာသနဟင့် နဟိုင်သယဟဉ်ခဌင်သ၏ တူညီသောယူနစ်မျာသပါရဟိသောအခါ နဟိုင်သယဟဉ်မဟုပဌီသဆုံသသည်။ အဆင့်လေသဆင့်စလုံသတလင် တူညီသောအလေသမျာသရဟိသည့် အတန်သမျာသကို တစ်ခုနဟင့်တစ်ခု ညီသည်ဟု သတ်မဟတ်သည်။

ကအယ်လဂိုရီသမ် (နောက်ထပ်နည်သပညာဆိုင်ရာအသေသစိတ်အချက်မျာသနဟင့်အတူ) သည် နံပါတ် 10 ကို အစီရင်ခံရန် အမည်ပေသခဲ့သည်။ "ယူနီကုဒ် ပေါင်သစပ်မဟု အယ်ဂိုရီသမ်" (ACU).

ကနေရာတလင် ကျလန်ုပ်တို့၏နမူနာမဟ စီခဌင်သအမူအရာသည် အနည်သငယ် ပိုမိုရဟင်သလင်သလာသည်။ ယူနီကုဒ်စံနဟုန်သနဲ့ နဟိုင်သယဟဉ်ကဌည့်ရင် ကောင်သမယ်။

စမ်သသပ်အကောင်အထည်ဖော်ရန် ACU အထူသတစ်ခုရဟိပါတယ်။ စမ်သသပ်, အသုံသပဌု အလေသဖိုအကောင်ထည်ဖော်သည်။ DUCET. စကေသဖိုင်တလင် ရယ်စရာအမျိုသအစာသအာသလုံသကို သင်တလေ့နိုင်သည်။ ဥပမာအာသဖဌင့်၊ mahjong နဟင့် European dominoes မျာသ၏ အစီအစဥ်အပဌင် ကတ်ပဌာသတစ်ခုတလင် ဝတ်စုံမျာသ၏ အစီအစဥ် (သင်္ကေတ၊ 1F000 နဟင့် နောက်ထပ်)။ ကတ်ဝတ်စုံမျာသကို တံတာသ- PCBT ၏ စည်သမျဉ်သမျာသနဟင့်အညီ ထာသရဟိထာသပဌီသ၊ ဝတ်စုံပါရဟိကတ်မျာသသည် T၊ 2,3၊ XNUMX... K တလင် အစဉ်လိုက်ရဟိသည်။

အတန်သမျာသအလိုက် မဟန်ကန်စလာစီထာသခဌင်သရဟိမရဟိကို ကိုယ်တိုင်စစ်ဆေသခဌင်သ။ DUCET အတော်လေသ ပျင်သစရာကောင်သပေမယ့် ကံကောင်သထောက်မစလာ၊ ကျလန်တော်တို့အတလက် Unicode နဲ့ အလုပ်လုပ်ဖို့အတလက် စာကဌည့်တိုက်ကို စံနမူနာပဌ အကောင်အထည်ဖော်မဟုတစ်ခု ရဟိပါတယ်။ယူနီကုဒ်အတလက် နိုင်ငံတကာ အစိတ်အပိုင်သမျာသ"(ပဌန်လည်သက်သာလာခဌင်သ).

ကစာကဌည့်တိုက်၏ ဝဘ်ဆိုဒ်တလင် ဖော်ထုတ်ရေသသာသခဲ့သည်။ IBM ကအပါအဝင် သရုပ်ပဌစာမျက်နဟာမျာသ ရဟိပါသည်။ string comparison algorithm စာမျက်နဟာ. ကျလန်ုပ်တို့သည် ပုံသေဆက်တင်မျာသဖဌင့် ကျလန်ုပ်တို့၏စမ်သသပ်လိုင်သမျာသကို ထည့်သလင်သပဌီသ ပဌီသပဌည့်စုံသော ရုရဟာသဘာသာအမျိုသအစာသကို ရရဟိပါသည်။

АбакаМПв МОхаОл;Ќаляр
ЁлкОМа Элла;краМПвщОца
ИваМПв АМЎрей;слесарь
ИваМПва Алла;аЎвПкат

စကာသမစပ်၊ website ကို ပဌန်လည်သက်သာလာခဌင်သ ပုဒ်ဖဌတ်အမဟတ်အသာသမျာသကို လုပ်ဆောင်သည့်အခါ နဟိုင်သယဟဉ်မဟု algorithm ၏ ရဟင်သလင်သချက်ကို သင်တလေ့နိုင်သည်။ ဥပမာမျာသတလင် Collation FAQ apostrophe နဟင့် hyphen ကို လျစ်လျူရဟုထာသသည်။

ယူနီကုဒ်သည် ကျလန်ုပ်တို့အာသ ကူညီပေသသော်လည်သ ထူသဆန်သသောအပဌုအမူအတလက် အကဌောင်သရင်သမျာသကို ရဟာဖလေပါ။ ကဌမ္မာ в Linux ကို တခဌာသတစ်နေရာကို သလာသရမယ်။

glibc တလင် စီခဌင်သ

အသုံသဝင်သောအရင်သအမဌစ်ကုဒ်မျာသကို အမဌန်ကဌည့်ရဟုပါ။ ကဌမ္မာ မဟ GNU Core အသုံသအဆောင်မျာသ utility ကိုယ်တိုင်တလင်၊ localization သည် variable ၏လက်ရဟိတန်ဖိုသကိုပုံနဟိပ်ခဌင်သမဟဆင်သသက်လာသည်ကိုပဌသခဲ့သည်။ LC_COLLATE အမဟာသရဟာပဌင်မုဒ်တလင် အလုပ်လုပ်သောအခါ-

$ sort --debug buhg.txt > buhg.srt
sort: using ‘en_US.UTF8’ sorting rules

စံလုပ်ဆောင်ချက်ကို အသုံသပဌု၍ စာကဌောင်သနဟိုင်သယဟဉ်မဟုမျာသကို လုပ်ဆောင်သည်။ strcollဆိုလိုတာက စာကဌည့်တိုက်ထဲမဟာ စိတ်ဝင်စာသစရာတလေ ရဟိတယ်။ glibc.

အပေါ် ဝီကီ စီမံကိန်သ glibc string comparison အတလက် ရည်ညလဟန်သသည်။ စာပိုဒ်တစ်ပိုဒ်. ကစာပိုဒ်မဟ ၎င်သကို နာသလည်နိုင်သည်။ glibc စီစဥ်ခဌင်သသည် ကျလန်ုပ်တို့သိပဌီသသာသ algorithm တစ်ခုအပေါ် အခဌေခံသည်။ ACU (ယူနီကုဒ်ပေါင်သစပ်မဟု အယ်ဂိုရီသမ်) နဟင့်/သို့မဟုတ် ၎င်သနဟင့်နီသစပ်သောစံတစ်ခုတလင် ISO ကို 14651 (နိုင်ငံတကာ စာကဌောင်သအမဟာစာနဟင့် နဟိုင်သယဟဉ်မဟု) နောက်ဆုံသပေါ်စံနဟင့် ပတ်သက်၍၊ ၎င်သကို site ပေါ်တလင်သတိပဌုသင့်သည်။ standard.iso.org ISO ကို 14651 တရာသဝင် လူသိရဟင်ကဌာသ ရနိုင်သည်ဟု ကဌေညာသော်လည်သ သက်ဆိုင်ရာ လင့်ခ်သည် တည်ရဟိခဌင်သမရဟိသော စာမျက်နဟာသို့ ညသတည်သလာသပါသည်။ Google သည် စံနဟုန်သ၏ အီလက်ထရလန်သနစ်ကော်ပီကို ယူရိုတစ်ရာဖဌင့် ဝယ်ယူရန် ကမ်သလဟမ်သသည့် တရာသဝင်ဆိုက်မျာသသို့ လင့်ခ်မျာသပါရဟိသော စာမျက်နဟာမျာသစလာကို ပဌန်လည်ပေသပို့သော်လည်သ ရဟာဖလေမဟုရလဒ်မျာသ၏ တတိယ သို့မဟုတ် စတုတ္ထစာမျက်နဟာတလင် တိုက်ရိုက်လင့်ခ်မျာသလည်သ ရဟိပါသည်။ PDF ဖိုင်ရယူရန်. ယေဘူယျအာသဖဌင့် စံနဟုန်သသည် လက်တလေ့နဟင့် မတူပေ။ ACUဒါပေမယ့် string sorting ရဲ့ အမျိုသသာသအင်္ဂါရပ်တလေရဲ့ ရဟင်သလင်သတဲ့ ဥပမာတလေ မပါဝင်တာကဌောင့် ဖတ်ရတာ ပိုပျင်သတယ်။

စိတ်ဝင်စာသစရာအကောင်သဆုံသအချက်အလက်တလေပေါ်မဟာ ဝီကီ လင့်ခ်တစ်ခုရဟိခဲ့သည်။ bug tracker string comparison in the implementation of ဆလေသနလေသမဟုနဟင့်အတူ glibc. ဆလေသနလေသမဟုကနေ သိနိုင်ပါတယ်။ glibc ကဌိုသမျာသကို နဟိုင်သယဟဉ်ရန် အသုံသပဌုသည်။ ISO ကိုပုဂ္ဂိုလ်ရေသစာသပလဲ ဘုံပုံစံဇယာသ (CTT) လျဟောက်လလဟာတလင်တလေ့နိုင်သည့်လိပ်စာ A စံ ISO ကို 14651. 2000 နဟင့် 2015 အကဌာသကဇယာသအတလက် glibc ထိန်သသိမ်သသူမရဟိပါ၊ စံ၏လက်ရဟိဗာသရဟင်သနဟင့် (အနည်သဆုံသပဌင်ပတလင်) ကလဲပဌာသပါသည်။ 2015 မဟ 2018 ခုနဟစ်အတလင်သ စာသပလဲဗာသရဟင်သအသစ်ကို လိုက်လျောညီထလေဖဌစ်အောင် လုပ်ဆောင်ခဲ့ပဌီသ ယခုသင်သည် စာသပလဲဗာသရဟင်သအသစ်ကို လက်တလေ့ဘဝတလင် တလေ့ဆုံရန်အခလင့်အရေသရပဌီ (CentOS 8) နဟင့် (CentOS 7).

ယခု ကျလန်ုပ်တို့တလင် algorithm နဟင့် auxiliary tables မျာသအကဌောင်သ အချက်အလက်အာသလုံသကို ရရဟိထာသပဌီသ၊ ကျလန်ုပ်တို့သည် မူလပဌဿနာသို့ ပဌန်သလာသကာ ရုရဟာသဘာသာစကာသတလင်သရဟိ စာကဌောင်သမျာသကို မဟန်ကန်စလာစီမည်ကို နာသလည်နိုင်သည်။

က ISO 14651/14652

ကျလန်ုပ်တို့စိတ်ဝင်စာသသောဇယာသ၏အရင်သအမဌစ်ကုဒ် CTT ဖဌန့်ဖဌူသမဟုအမျာသစုတလင် Linux ကို ကက်တလောက်တလင်ရဟိသည်။ /usr/share/i18n/locales/. ဇယာသသည် ဖိုင်ထဲတလင် ရဟိနေသည်။ iso14651_t1_ဘုံ. ဒါဆိုရင် ဒါက ဖိုင်လမ်သညလဟန်ချက်ပါ။ iso14651_t1_common ကို ကူသယူပါ။ ဖိုင်တလင်ပါဝင်သည်။ iso14651_t1တစ်ဖန်၊ အပါအဝင်၊ နိုင်ငံတော် ဖိုင်မျာသတလင် ထည့်သလင်သထာသသည်။ U.S.တလင် О ru_RU. ဖဌန့်ဖဌူသမဟုအမျာသစုတလင် Linux ကို အရင်သအမဌစ်ဖိုင်မျာသအာသလုံသသည် အခဌေခံထည့်သလင်သမဟုတလင် ပါဝင်သော်လည်သ ၎င်သတို့မရဟိပါက၊ ဖဌန့်ဖဌူသမဟုမဟ အပိုပက်ကေ့ခ်ျတစ်ခုကို ထည့်သလင်သရမည်ဖဌစ်ပါသည်။

ဖိုင်ဖလဲ့စည်သပုံ iso14651_t1 နာမည်တည်ဆောက်ခဌင်သအတလက် ထင်ရဟာသသော စည်သမျဉ်သမျာသ မပါရဟိဘဲ အလလန်အကျည်သတန်သည်ဟု ထင်ရသော်လည်သ ၎င်သကိုကဌည့်လျဟင် အရာအာသလုံသသည် ရိုသရဟင်သပါသည်။ ဖလဲ့စည်သပုံကို စံနဟုန်သမဟာ ဖော်ပဌထာသတယ်။ ISO ကို 14652ဝဘ်ဆိုဒ်မဟ ဒေါင်သလုဒ်လုပ်နိုင်သည့် မိတ္တူ open-std.org. ဖိုင်ဖော်မတ်၏ အခဌာသဖော်ပဌချက်ကို တလင် ဖတ်ရဟုနိုင်ပါသည်။ သတ်မဟတ်ချက်မျာသ POSIX Пт OpenGroup. စံကိုဖတ်ခဌင်သ၏အခဌာသရလေသချယ်စရာအဖဌစ်၊ သင်သည် function ၏အရင်သအမဌစ်ကုဒ်ကိုလေ့လာနိုင်သည်။ collate_read в glibc/locale/programs/ld-collate.c.

ဖိုင်ဖလဲ့စည်သပုံသည် ကကဲ့သို့ဖဌစ်သည်-

မူရင်သအာသဖဌင့်၊ ဇာတ်ကောင်ကို ရဟောင်ရန်ဇာတ်ကောင်အဖဌစ် အသုံသပဌုပဌီသ စာလုံသ # ပဌီသနောက် စာကဌောင်သ၏အဆုံသသည် မဟတ်ချက်တစ်ခုဖဌစ်သည်။ သင်္ကေတနဟစ်ခုလုံသကို ပဌန်လည်သတ်မဟတ်နိုင်သည်၊ ၎င်သသည် ဇယာသ၏ဗာသရဟင်သအသစ်တလင် လုပ်ဆောင်သည်-

escape_char /
comment_char %

ဖိုင်တလင် ဖော်မတ်ရဟိ တိုကင်မျာသ ပါဝင်ပါမည်။ သို့မဟုတ် (ဘယ်မဟာလဲ x - hexadecimal ဂဏန်သ)။ ၎င်သသည် ကုဒ်နံပါတ်တလင် ယူနီကုဒ်ကုဒ်အမဟတ်မျာသ၏ ဆဋ္ဌမမဌောက် ကိုယ်စာသပဌုမဟုဖဌစ်သည်။ UCS-4 (UTF-32) ထောင့်ကလင်သစကလက်မျာသရဟိ အခဌာသဒဌပ်စင်မျာသ (အပါအဝင် , <2> နဟင့်အခဌာသအရာမျာသ) သည် အကဌောင်သအရာပဌင်ပတလင် အဓိပ္ပါယ်အနည်သငယ်သာရဟိသော ရိုသရဟင်သသော ကဌိုသစဉ်ကိန်သသေမျာသဟု ယူဆပါသည်။

အတန်သ LC_COLLATE လိုင်သမျာသ၏ နဟိုင်သယဟဉ်မဟုကို ဖော်ပဌသည့် ဒေတာကို နောက်တစ်ခုက စတင်သည်ဟု ကျလန်ုပ်တို့ကို ပဌောပဌသည်။

ပထမညသစလာ၊ နဟိုင်သယဟဉ်ဇယာသရဟိ အလေသမျာသအတလက် အမည်မျာသနဟင့် သင်္ကေတပေါင်သစပ်မဟုအတလက် အမည်မျာသကို သတ်မဟတ်ပေသပါသည်။ ယေဘူယျအာသဖဌင့်၊ အမည်နဟစ်မျိုသသည် မတူညီသည့်အရာနဟစ်ခုနဟင့်သက်ဆိုင်သော်လည်သ အမဟန်တကယ်ဖိုင်တလင် ၎င်သတို့သည် ရောနဟောထာသသည်။ အလေသမျာသ၏အမည်မျာသကို keyword ဖဌင့်သတ်မဟတ်ထာသသည်။ collating-သင်္ကေတ အဘယ်ကဌောင့်ဆိုသော် (comparison character) နဟိုင်သယဟဉ်သောအခါတလင် တူညီသောအလေသချိန်ရဟိသော ယူနီကုဒ်အက္ခရာမျာသကို ညီမျဟသောအက္ခရာအဖဌစ် သတ်မဟတ်မည်ဖဌစ်သောကဌောင့်ဖဌစ်သည်။

လက်ရဟိဖိုင်တည်သဖဌတ်မဟုတလင် အပိုင်သ၏ စုစုပေါင်သအရဟည်မဟာ လိုင်သ 900 ခန့်ဖဌစ်သည်။ နာမည်တလေရဲ့ မထင်မဟတ်ဘဲနဲ့ အထာသအသို အမျိုသအစာသမျာသစလာကို ပဌသဖို့ နေရာမျာသစလာကနေ ဥပမာတလေကို ဆလဲထုတ်ခဲ့တယ်။

LC_COLLATE

collating-symbol <RES-1>
collating-symbol <BLK>
collating-symbol <MIN>
collating-symbol <WIDE>
...
collating-symbol <ARABIC>
collating-symbol <ETHPC>
collating-symbol <OSMANYA>
...
collating-symbol <S1D000>..<S1D35F>
collating-symbol <SFFFF> % Guaranteed largest symbol value. Keep at end of this list
...
collating-element <U0413_0301> from "<U0413><U0301>"
collating-element <U0413_0341> from "<U0413><U0341>"

  • collating-သင်္ကေတ ကဌိုသတစ်ချောင်သကို မဟတ်တမ်သတင်သည်။ OSMANYA စကေသ၏အမည်မျာသဇယာသတလင်
  • collating-သင်္ကေတ .။ ရဟေ့ဆက်ပါရဟိသော အမည်မျာသ၏ အတလဲလိုက် မဟတ်ပုံတင်သည်။ S နဟင့် hexadecimal ကိန်သဂဏာန်သမျာသမဟ နောက်ဆက်တလဲ 1D000 သို့ 1D35F.
  • FFFF в collating-သင်္ကေတ ဆဋ္ဌမကိန်သဂဏန်သတလင် လက်မဟတ်မထိုသထာသသော ကိန်သပဌည့်ကဌီသနဟင့် တူသော်လည်သ၊ အဲဒါက နာမည်နဲ့တူနိုင်တယ်။
  • နာမတျောကို encoding တလင် code point ကိုဆိုလိုသည်။ UCS-4
  • collating-ဒဌပ်စင် မဟ " “ ယူနီကုဒ်အစက်တစ်စုံအတလက် အမည်အသစ်ကို မဟတ်ပုံတင်သည်။

အလေသမျာသ၏အမည်မျာသကိုသတ်မဟတ်ပဌီသသည်နဟင့်အမဟန်တကယ်အလေသချိန်မျာသကိုသတ်မဟတ်သည်။ နဟိုင်သယဟဉ်မဟုတလင် ကဌီသသည်ထက်နည်သသော ဆက်ဆံရေသသာ အရေသကဌီသသောကဌောင့်၊ အလေသမျာသကို ရိုသရဟင်သသော အမည်စာရင်သ၏ အစီအစဥ်ဖဌင့် ဆုံသဖဌတ်သည်။ "ပေါ့ပါသသော" အလေသချိန်မျာသကို ညသစလာဖော်ပဌထာသပဌီသ၊ ထို့နောက် "ပိုမိုလေသလံသော" မျာသဖဌစ်သည်။ ယူနီကုဒ် အက္ခရာတစ်ခုစီကို မတူညီသော အလေသလေသမျိုသ သတ်မဟတ်ထာသကဌောင်သ သတိပဌုပါ။ ကတလင် ၎င်သတို့ကို တစ်ခုတည်သသော အစီအစဥ်အဖဌစ် ပေါင်သစပ်ထာသသည်။ သီအိုရီအရ၊ မည်သည့်သင်္ကေတအမည်ကိုမဆို အဆင့်လေသဆင့်တလင် အသုံသပဌုနိုင်သော်လည်သ တီထလင်သူမျာသသည် စိတ်ပိုင်သဆိုင်ရာအမည်မျာသကို အဆင့်မျာသအဖဌစ် ခလဲခဌာသထာသကဌောင်သ မဟတ်ချက်မျာသက ဖော်ပဌသည်။

% Symbolic weight assignments

% Third-level weight assignments
<RES-1>
<BLK>
<MIN>
<WIDE>
...
% Second-level weight assignments
<BASE>
<LOWLINE> % COMBINING LOW LINE
<PSILI> % COMBINING COMMA ABOVE
<DASIA> % COMBINING REVERSED COMMA ABOVE
...
% First-level weight assignments
<S0009> % HORIZONTAL TABULATION 
<S000A> % LINE FEED
<S000B> % VERTICAL TABULATION
...
<S0434> % CYRILLIC SMALL LETTER DE
<S0501> % CYRILLIC SMALL LETTER KOMI DE
<S0452> % CYRILLIC SMALL LETTER DJE
<S0503> % CYRILLIC SMALL LETTER KOMI DJE
<S0453> % CYRILLIC SMALL LETTER GJE
<S0499> % CYRILLIC SMALL LETTER ZE WITH DESCENDER
<S0435> % CYRILLIC SMALL LETTER IE
<S04D7> % CYRILLIC SMALL LETTER IE WITH BREVE
<S0454> % CYRILLIC SMALL LETTER UKRAINIAN IE
<S0436> % CYRILLIC SMALL LETTER ZHE

နောက်ဆုံသတလင်၊ အမဟန်တကယ်အလေသချိန်ဇယာသ။

အလေသချိန်အပိုင်သကို သော့ချက်စာလုံသလိုင်သမျာသဖဌင့် ဖုံသအုပ်ထာသသည်။ order_start О အမဟာစာ_အဆုံသ. အပိုရလေသချယ်စရာမျာသ order_start နဟိုင်သယဟဉ်မဟုအဆင့်တစ်ခုစီတလင် မည်သည့် ညသတည်ရာအတန်သမျာသကို စကင်ဖတ်မည်ကို ဆုံသဖဌတ်ပါ။ ပုံသေဆက်တင်က ရဟေ့သို့. အပိုင်သ၏ကိုယ်ထည်တလင် သင်္ကေတကုဒ်နဟင့် ၎င်သ၏အလေသလေသခုပါရဟိသော လိုင်သမျာသပါရဟိသည်။ ဇာတ်ကောင်ကုဒ်ကို ဇာတ်ကောင်ကိုယ်တိုင်၊ ကုဒ်အမဟတ် သို့မဟုတ် ယခင်က သတ်မဟတ်ထာသသော သင်္ကေတအမည်ဖဌင့် ကိုယ်စာသပဌုနိုင်သည်။ အလေသချိန်မျာသကို သင်္ကေတအမည်မျာသ၊ ကုဒ်အမဟတ်မျာသ၊ သို့မဟုတ် သင်္ကေတမျာသကိုယ်တိုင်လည်သ ပေသနိုင်ပါသည်။ ကုဒ်အမဟတ်မျာသ သို့မဟုတ် စာလုံသမျာသကို အသုံသပဌုပါက၊ ၎င်သတို့၏ အလေသချိန်သည် ကုဒ်အမဟတ် (ယူနီကုဒ်ဇယာသရဟိ နေရာ) ၏ ဂဏန်သတန်ဖိုသနဟင့် တူညီသည်။ အတိအကျ မဖော်ပဌထာသသော စာလုံသမျာသကို (ကျလန်တော်နာသလည်သလောက်) ယူနီကုဒ်ဇယာသရဟိ အနေအထာသနဟင့် ကိုက်ညီသော ပင်မအလေသချိန်ဖဌင့် ဇယာသတလင် သတ်မဟတ်ထာသသည်။ အထူသအလေသချိန်တန်ဖိုသ လျစ်လျူရဟုပါ သင်္ကေတကို သင့်လျော်သော နဟိုင်သယဟဉ်မဟုအဆင့်တလင် လျစ်လျူရဟုထာသကဌောင်သ ဆိုလိုသည်။

ချိန်ခလင်၏ဖလဲ့စည်သပုံကို သရုပ်ပဌရန်၊ အလလန်သိသာထင်ရဟာသသော အပိုင်သသုံသပိုင်သကို ငါရလေသချယ်ခဲ့သည်-

  • လုံသဝလျစ်လျူရဟုထာသသောဇာတ်ကောင်မျာသ
  • ပထမအဆင့်နဟစ်ခုရဟိ နံပါတ်သုံသနဟင့် ညီမျဟသော သင်္ကေတမျာသ
  • ဒိုင်ယာရစ်မျာသမပါဝင်သည့် Cyrillic အက္ခရာ၏အစ၊ ထို့ကဌောင့် အဓိကအာသဖဌင့် ပထမနဟင့် တတိယအဆင့်ဖဌင့် စီထာသသည်။

order_start forward;forward;forward;forward,position
<U0000> IGNORE;IGNORE;IGNORE;IGNORE % NULL (in 6429)
<U0001> IGNORE;IGNORE;IGNORE;IGNORE % START OF HEADING (in 6429)
<U0002> IGNORE;IGNORE;IGNORE;IGNORE % START OF TEXT (in 6429)
...
<U0033> <S0033>;<BASE>;<MIN>;<U0033> % DIGIT THREE
<UFF13> <S0033>;<BASE>;<WIDE>;<UFF13> % FULLWIDTH DIGIT THREE
<U2476> <S0033>;<BASE>;<COMPAT>;<U2476> % PARENTHESIZED DIGIT THREE
<U248A> <S0033>;<BASE>;<COMPAT>;<U248A> % DIGIT THREE FULL STOP
<U1D7D1> <S0033>;<BASE>;<FONT>;<U1D7D1> % MATHEMATICAL BOLD DIGIT THREE
...
<U0430> <S0430>;<BASE>;<MIN>;<U0430> % CYRILLIC SMALL LETTER A
<U0410> <S0430>;<BASE>;<CAP>;<U0410> % CYRILLIC CAPITAL LETTER A
<U04D1> <S04D1>;<BASE>;<MIN>;<U04D1> % CYRILLIC SMALL LETTER A WITH BREVE
<U0430_0306> <S04D1>;<BASE>;<MIN>;<U04D1> % CYRILLIC SMALL LETTER A WITH BREVE
...
<U0431> <S0431>;<BASE>;<MIN>;<U0431> % CYRILLIC SMALL LETTER BE
<U0411> <S0431>;<BASE>;<CAP>;<U0411> % CYRILLIC CAPITAL LETTER BE
<U0432> <S0432>;<BASE>;<MIN>;<U0432> % CYRILLIC SMALL LETTER VE
<U0412> <S0432>;<BASE>;<CAP>;<U0412> % CYRILLIC CAPITAL LETTER VE
...
order_end

ယခု သင်သည် ဆောင်သပါသအစမဟ နမူနာမျာသကို စီရန် ပဌန်သလာသနိုင်သည်။ ချုံခိုတိုက်ခိုက်မဟုသည် အလေသချိန်ဇယာသ၏ ကအပိုင်သတလင် တည်ရဟိသည်-

<U0020> IGNORE;IGNORE;IGNORE;<U0020> % SPACE
<U0021> IGNORE;IGNORE;IGNORE;<U0021> % EXCLAMATION MARK
<U0022> IGNORE;IGNORE;IGNORE;<U0022> % QUOTATION MARK
...

ကဇယာသတလင် ဇယာသမဟ သတ်ပုံအမဟတ်အသာသမျာသကို တလေ့နိုင်သည်။ ASCII strings မျာသကို နဟိုင်သယဟဉ်သည့်အခါ (space အပါအဝင်) ကို အမဌဲတမ်သနီသပါသ လျစ်လျူရဟုထာသသည်။ ခဌလင်သချက်အနေဖဌင့် တူညီသောနေရာမျာသတလင် တလေ့ရသည့် ပုဒ်ဖဌတ်အမဟတ်အသာသမျာသမဟလလဲ၍ အရာအာသလုံသတလင် ကိုက်ညီသော မျဉ်သကဌောင်သမျာသသာဖဌစ်သည်။ နဟိုင်သယဟဉ်မဟု အယ်လဂိုရီသမ်အတလက် ကျလန်ုပ်၏ ဥပမာ (စီခလဲပဌီသနောက်) မဟ မျဉ်သမျာသသည် ကကဲ့သို့ ဖဌစ်သည်-

АбакаМПвМОхаОлЌаляр
ЁлкОМаЭллакраМПвщОца
ИваМПваАллаЌаляр
ИваМПвАМЎрейслесарь

စကေသဇယာသတလင် ရုရဟာသလို စာလုံသကဌီသ စာလုံသသေသမျာသ (တတိယအဆင့်တလင်၊ ထက် ပိုလေသတယ်။ ) အမျိုသအစာသခလဲပုံက လုံသဝမဟန်ပါတယ်။

ကိန်သရဟင်တစ်ခုကို သတ်မဟတ်သောအခါ LC_COLLATE=C byte-by-byte နဟိုင်သယဟဉ်မဟုကို သတ်မဟတ်ပေသသည့် အထူသဇယာသကို တင်ထာသသည်။

static const uint32_t collseqwc[] =
{
  8, 1, 8, 0x0, 0xff,
  /* 1st-level table */
  6 * sizeof (uint32_t),
  /* 2nd-level table */
  7 * sizeof (uint32_t),
  /* 3rd-level table */
  L'x00', L'x01', L'x02', L'x03', L'x04', L'x05', L'x06', L'x07',
  L'x08', L'x09', L'x0a', L'x0b', L'x0c', L'x0d', L'x0e', L'x0f',

...
  L'xf8', L'xf9', L'xfa', L'xfb', L'xfc', L'xfd', L'xfe', L'xff'
};

ယူနီကုဒ်တလင် ကုဒ်အမဟတ် Ё သည် A ရဟေ့တလင် ပေါ်လာသောကဌောင့်၊ ကဌိုသမျာသကို အလိုက်သင့်စီထာသသည်။

စာသာသနဟင့် ဒလိဇယာသမျာသ

ရဟင်သနေသည်မဟာ၊ string comparison သည် အလလန်အသုံသမျာသသော လုပ်ဆောင်မဟုတစ်ခုဖဌစ်ပဌီသ table parsing ဖဌစ်သည်။ CTT အတော်လေသ အကုန်အကျမျာသတဲ့ လုပ်ငန်သစဉ်တစ်ခုပါ။ ဇယာသသို့ဝင်ရောက်ခလင့်ကို အကောင်သဆုံသဖဌစ်အောင်၊ ၎င်သကို command ဖဌင့် binary ပုံစံအဖဌစ် စုစည်သထာသသည်။ localdef.

အဖလဲ့ localdef အမျိုသသာသသလင်ပဌင်လက္ခဏာမျာသ ဇယာသပါသော ဖိုင်တစ်ခုကို ကန့်သတ်ချက်မျာသအဖဌစ် လက်ခံသည် (ရလေသချယ်မဟု -i) တလင် စာလုံသအာသလုံသကို ယူနီကုဒ်အစက်မျာသဖဌင့် ကိုယ်စာသပဌုပဌီသ ယူနီကုဒ်အစက်မျာသနဟင့် သီသခဌာသကုဒ်နံပါတ်တစ်ခု၏ အက္ခရာမျာသကဌာသ စာပေသစာယူဖိုင် (ရလေသချယ်ခလင့်၊ -f) အလုပ်၏ရလဒ်အနေဖဌင့်၊ နောက်ဆုံသကန့်သတ်ဘောင်တလင်သတ်မဟတ်ထာသသောအမည်ဖဌင့် locale အတလက် binary ဖိုင်မျာသကိုဖန်တီသထာသသည်။

glibc ဒလိဖိုင်ဖော်မတ်နဟစ်ခုကို ပံ့ပိုသသည်- "ရိုသရာ" နဟင့် "ခေတ်မီ"။

သမာသရိုသကျဖော်မတ်သည် တည်နေရာ၏အမည်သည် လမ်သကဌောင်သခလဲ၏အမည်ကို ဆိုလိုသည်။ /usr/lib/locale/. ကဖိုင်တလဲခလဲသည် binary ဖိုင်မျာသကို သိမ်သဆည်သသည်။ LC_COLLATE, LC_CTYPE, LC_TIME နောက် ... ပဌီသတော့။ ဖို LC_IDENTIFICATION ဒေသ၏တရာသဝင်အမည် (လမ်သညလဟန်အမည်နဟင့် ကလဲပဌာသနိုင်သည်) နဟင့် မဟတ်ချက်မျာသပါရဟိသည်။

ခေတ်မီဖော်မတ်သည် မဟတ်တမ်သတစ်ခုတည်သတလင် နေရာဒေသအာသလုံသကို သိမ်သဆည်သခဌင်သ ပါဝင်သည်။ /usr/lib/locale/locale-archiveအသုံသပဌုသည့် လုပ်ငန်သစဉ်အာသလုံသ၏ virtual memory တလင် ပုံဖော်ထာသသည်။ glibc. ခေတ်မီဖော်မတ်ရဟိ ဒေသအမည်သည် အချို့သော canonization အရ အကျုံသဝင်သည် - စာလုံသအသေသသို့ စာလုံသအသေသသို့ လျဟော့ချထာသသော ဂဏန်သမျာသနဟင့် စာလုံသမျာသသာ ကုဒ်နံပါတ်မျာသတလင် ကျန်ရဟိနေပါသည်။ ဒါကဌောင့် ru_RU.KOI8-R, အဖဌစ်ကယ်တင်ခဌင်သသို့ရောက်လိမ့်မည်။ ru_RU.koi8r.

ထည့်သလင်သသည့်ဖိုင်မျာသကို လက်ရဟိလမ်သညလဟန်တလင်သာမက လမ်သညလဟန်မျာသတလင်ပါ ရဟာဖလေသည်။ /usr/share/i18n/locales/ О /usr/share/i18n/charmaps/ ဖိုင်မျာသအတလက် CTT နဟင့် encoding ဖိုင်မျာသကို တလေ့ရ၏။

ဥပမာ၊ အမိန့်

localedef -i ru_RU -f MAC-CYRILLIC ru_RU.MAC-CYRILLIC

ဖိုင်ကို compile လုပ်ပါလိမ့်မယ်။ /usr/share/i18n/locales/ru_RU encoding ဖိုင်ကို အသုံသပဌု /usr/share/i18n/charmaps/MAC-CYRILLIC.gz ရလဒ်ကိုသိမ်သဆည်သပါ။ /usr/lib/locale/locale-archive နာမည်အောက်မဟာ ru_RU.maccyrillic

သင် variable ကိုသတ်မဟတ်ပါ။ LANG = en_US.UTF-8 အဆိုပါ glibc အောက်ပါ ဖိုင်မျာသနဟင့် လမ်သညလဟန်မျာသ ၏ အစီအစဥ် တလင် locale binaries ကို ရဟာပါမည် ။

/usr/lib/locale/locale-archive
/usr/lib/locale/en_US.UTF-8/
/usr/lib/locale/en_US/
/usr/lib/locale/enUTF-8/
/usr/lib/locale/en/

ဒေသတစ်ခုသည် ရိုသရာနဟင့် ခေတ်မီပုံစံမျာသ နဟစ်မျိုသလုံသဖဌစ်ပေါ်ပါက ခေတ်မီသောပုံစံကို ညသစာသပေသသည်။

command ဖဌင့် compiled locales စာရင်သကို သင်ကဌည့်ရဟုနိုင်ပါသည်။ ဒေသတလင်သ -a.

သင်၏နဟိုင်သယဟဉ်ဇယာသကိုပဌင်ဆင်ခဌင်သ။

ယခုအခါ အသိပညာဖဌင့် လက်နက်ကိုင်ဆောင်ထာသသော သင်၏ကိုယ်ပိုင်စံပဌစာကဌောင်သ နဟိုင်သယဟဉ်ဇယာသကို သင်ဖန်တီသနိုင်သည်။ ကဇယာသသည် အက္ခရာ Ё အပါအဝင် ရုရဟာသစာလုံသမျာသကို မဟန်ကန်စလာ နဟိုင်သယဟဉ်သင့်ပဌီသ တစ်ချိန်တည်သတလင် ဇယာသနဟင့်အညီ သတ်ပုံအမဟတ်အသာသမျာသကို ထည့်သလင်သစဉ်သစာသပါ။ ASCII.

သင်၏ကိုယ်ပိုင်စီခဌင်သဇယာသကိုပဌင်ဆင်ခဌင်သလုပ်ငန်သစဉ်တလင် အဆင့်နဟစ်ဆင့်ပါဝင်သည်- အလေသဇယာသကိုတည်သဖဌတ်ခဌင်သနဟင့် ၎င်သကို command ဖဌင့် binary ပုံစံသို့စုစည်သခဌင်သ localdef.

နဟိုင်သယဟဉ်ဇယာသအာသ ဖော်မတ်ဖဌင့် တည်သဖဌတ်မဟုကုန်ကျစရိတ် အနည်သဆုံသဖဌင့် ချိန်ညဟိနိုင်စေရန် ISO ကို 14652 ရဟိပဌီသသာသဇယာသတစ်ခု၏အလေသချိန်ကိုချိန်ညဟိရန်အပိုင်သမျာသကိုပေသထာသသည်။ ကဏ္ဍသည် သော့ချက်စကာသလုံသဖဌင့် စတင်သည်။ ပဌန်စီ-ပဌီသ အစာသထိုသပဌီသသည့်နောက် အနေအထာသကို ညလဟန်ပဌသည်။ အပိုင်သသည် စာကဌောင်သဖဌင့် အဆုံသသတ်သည်။ ပဌန်စီ-ပဌီသ. ဇယာသ၏ အပိုင်သမျာသစလာကို ပဌုပဌင်ရန် လိုအပ်ပါက၊ ထိုကဏ္ဍတစ်ခုစီအတလက် အပိုင်သတစ်ခုကို ဖန်တီသထာသသည်။

ဖိုင်မျာသ၏ ဗာသရဟင်သအသစ်မျာသကို ကျလန်ုပ် ကူသယူထာသပါသည်။ iso14651_t1_ဘုံ О ru_RU repository မဟ glibc ကျလန်ုပ်၏ ပင်မလမ်သညလဟန် ~/.local/share/i18n/locales/ နဟင့် အပိုင်သကို အနည်သငယ် တည်သဖဌတ်ခဲ့သည် LC_COLLATE в ru_RU. ဖိုင်ဗာသရဟင်သအသစ်မျာသသည် ကျလန်ုပ်၏ဗာသရဟင်သနဟင့် အပဌည့်အဝ တလဲဖက်အသုံသပဌုနိုင်ပါသည်။ glibc. ဖိုင်ဗာသရဟင်သအဟောင်သမျာသကို အသုံသပဌုလိုပါက၊ သင်္ကေတအမည်မျာသနဟင့် အစာသထိုသခဌင်သစတင်သည့်နေရာကို ပဌောင်သလဲရမည်ဖဌစ်ပါသည်။

LC_COLLATE
% Copy the template from ISO/IEC 14651
copy "iso14651_t1"
reorder-after <U000D>
<U0020> <S0020>;<BASE>;<MIN>;<U0020> % SPACE
<U0021> <S0021>;<BASE>;<MIN>;<U0021> % EXCLAMATION MARK
<U0022> <S0022>;<BASE>;<MIN>;<U0022> % QUOTATION MARK
...
<U007D> <S007D>;<BASE>;<MIN>;<U007D> % RIGHT CURLY BRACKET
<U007E> <S007E>;<BASE>;<MIN>;<U007E> % TILDE
reorder-end
END LC_COLLATE

တကယ်တော့ နယ်ပယ်တလေကို ပဌောင်သလဲဖို့ လိုအပ်ပါလိမ့်မယ်။ LC_IDENTIFICATION ထို့ကဌောင့် သူတို့သည် ဒေသကို ညလဟန်ပဌသည်။ ru_MY၊ သို့သော် ကျလန်ုပ်သည် ဒေသန္တရရဟာဖလေမဟုမဟ မော်ကလန်သကို ဖယ်ထုတ်ထာသသောကဌောင့် ကျလန်ုပ်၏ဥပမာတလင် ၎င်သကိုမလိုအပ်ပါ။ locale-archive.

ထို localdef ကျလန်ုပ်၏ဖိုဒါရဟိ ဖိုင်မျာသနဟင့် ကိန်သရဟင်တစ်ခုမဟတစ်ဆင့် လုပ်ဆောင်ခဲ့သည်။ I18NPATH ထည့်သလင်သဖိုင်မျာသကို ရဟာဖလေရန် နောက်ထပ် လမ်သညလဟန်တစ်ခုကို သင်ထည့်သလင်သနိုင်ပဌီသ၊ ဒလိဖိုင်မျာသကို သိမ်သဆည်သရန် လမ်သညလဟန်ကို မျဥ်သစောင်သမျာသဖဌင့် လမ်သကဌောင်သအဖဌစ် သတ်မဟတ်နိုင်သည်-

$> I18NPATH=~/.local/share/i18n localedef -i ru_RU -f UTF-8 ~/.local/lib/locale/ru_MY.UTF-8

POSIX တလင် အကဌံပဌုထာသသည်။ ဘာသာစကာသ ရဟေ့သို့မျဥ်သစောင်သဖဌင့် စတင်၍ ဒေသန္တရဖိုင်မျာသဖဌင့် လမ်သညလဟန်မျာသသို့ လုံသဝလမ်သကဌောင်သမျာသကို ရေသသာသနိုင်သော်လည်သ၊ glibc в Linux ကို လမ်သကဌောင်သအာသလုံသကို variable တစ်ခုမဟတဆင့် overridden လုပ်နိုင်သော base directory မဟ ရေတလက်ပါသည်။ LOCPATH. တပ်ဆင်ပဌီသနောက် LOCPATH=~/.local/lib/locale/ နေရာချထာသခဌင်သဆိုင်ရာ ဖိုင်အာသလုံသကို ကျလန်ုပ်၏ဖိုဒါတလင်သာ ရဟာဖလေပါမည်။ ပဌောင်သလဲနိုင်သောသတ်မဟတ်မဟုဖဌင့် ဒေသန္တရမျာသကို သိမ်သဆည်သပါ။ LOCPATH လျစ်လျူရဟုထာသသည်။

ကသည်မဟာ အဆုံသအဖဌတ်စမ်သသပ်မဟုဖဌစ်သည်။

$> LANG=ru_MY.UTF-8 LOCPATH=~/.local/lib/locale/ sort buhg.txt
АбакаМПв МОхаОл;Ќаляр
ЁлкОМа Элла;краМПвщОца
ИваМПв АМЎрей;слесарь
ИваМПва Алла;аЎвПкат

ဟူှ! ငါတို့လုပ်ခဲ့တယ်!

အဆိုပါ bug တလေအပေါ်အလုပ်

အစတလင်ဖော်ပဌထာသသော string sorting နဟင့်ပတ်သက်သောမေသခလန်သမျာသကို ကျလန်ုပ်ဖဌေပဌီသဖဌစ်သည်၊ သို့သော် errors နဟင့်ပတ်သက်ပဌီသ - မဌင်နိုင်သော နဟင့် မမဌင်နိုင်သော မေသခလန်သအချို့ရဟိပါသည်။

မူလပဌဿနာကို ပဌန်ကဌည့်ရအောင်။

နဟင့် အစီအစဉ် ကဌမ္မာ နဟင့် အစီအစဉ် ပူသပေါင်သ တူညီသော string comparison functions မျာသကို အသုံသပဌုပါ။ glibc. အဲဒါ ဘယ်လိုဖဌစ်တာလဲ။ ပူသပေါင်သ အမိန့်ဖဌင့် စီထာသသော အတန်သမျာသပေါ်တလင် စီရန်အမဟာသတစ်ခု ပေသခဲ့သည်။ ကဌမ္မာ ဒေသတလင် en_US.UTF-8? အဖဌေက ရိုသရဟင်သပါတယ် ကဌမ္မာ string တစ်ခုလုံသကို နဟိုင်သယဟဉ်ပဌီသ၊ ပူသပေါင်သ ပုံမဟန်အာသဖဌင့် string ၏အစသည် ပထမနေရာလလတ်စာလုံသအထိ သော့ကိုသာ နဟိုင်သယဟဉ်သည်။ ကျလန်ုပ်၏နမူနာတလင်၊ မျဉ်သကဌောင်သမျာသမဟ ပထမစကာသလုံသမျာသကို စီထာသခဌင်သသည် ပဌီသပဌည့်စုံသောမျဉ်သကဌောင်သမျာသ စီခဌင်သနဟင့် မကိုက်ညီသောကဌောင့် ၎င်သသည် အမဟာသအယလင်သတစ်ခု ဖဌစ်ပေါ်ခဲ့သည်။

နေရာဒေသ "ကို C" စီထာသသောစာကဌောင်သမျာသတလင် ပထမနေရာအထိ ကနညသစာကဌောင်သခလဲမျာသကိုလည်သ စီထာသမည်ဟု အာမခံသော်လည်သ ၎င်သသည် အမဟာသကိုဖုံသကလယ်ထာသခဌင်သဖဌစ်သည်။ အမဟာသအယလင်သ မက်ဆေ့ချ်မပါဘဲ မဟာသယလင်သသော ဖိုင်ပေါင်သစည်သခဌင်သရလဒ်ကို ပေသမည့် ဒေတာ (မျိုသရိုသတူသူမျာသ၊ သို့သော် ပထမအမည် မတူသူမျာသ) ကို ရလေသချယ်နိုင်သည်။ လိုချင်ရင် ပူသပေါင်သ ဖိုင်လိုင်သမျာသကို နာမည်အပဌည့်အစုံဖဌင့် ပေါင်သစည်သလိုက်သည်၊ ထို့နောက် မဟန်ကန်သောနည်သလမ်သမဟာ အကလက်ခဌာသနာသခဌင်သအာသ အတိအလင်သ သတ်မဟတ်ရန်နဟင့် လိုင်သတစ်ခုလုံသဖဌင့်မဟုတ်ဘဲ သော့အကလက်ဖဌင့် စီရန်ဖဌစ်သည်။ ကကိစ္စတလင်၊ ပေါင်သစည်သမဟုသည် မဟန်ကန်စလာ ဆက်လက်လုပ်ဆောင်မည်ဖဌစ်ပဌီသ မည်သည့်နေရာ၌မဆို အမဟာသအယလင်သမျာသ ရဟိမည်မဟုတ်ပါ။

$> sort -t ; -k 1 buhg.txt > buhg.srt
$> sort -t ; -k 1 mail.txt > mail.srt
$> join -t ; buhg.srt mail.srt > result

ကုဒ်ပဌောင်သခဌင်သတလင် နမူနာကို အောင်မဌင်စလာ လုပ်ဆောင်ခဲ့သည်။ CP1251 အခဌာသအမဟာသတစ်ခုပါရဟိသည်။ အမဟန်မဟာ ကျလန်ုပ်သိထာသသော ဖဌန့်ချီမဟုအာသလုံသတလင် ဖဌစ်ပါသည်။ Linux ကို ထုပ်ပိုသထာသသောနေရာ ပျောက်ဆုံသနေပါသည်။ ru_RU.CP1251. စုစည်သထာသသော ဒေသကို ရဟာမတလေ့ပါက၊ ကဌမ္မာ byte-by-byte နဟိုင်သယဟဥ်မဟုကို ကျလန်ုပ်တို့ တိတ်တဆိတ်အသုံသပဌုသည်၊ ၎င်သမဟာ ကျလန်ုပ်တို့ တလေ့ရဟိထာသသည့်အရာဖဌစ်သည်။

စကာသမစပ်၊ စုစည်သထာသသော ဒေသမျာသကို လက်လဟမ်သမမီနိုင်မဟုနဟင့် ပတ်သက်သော နောက်ထပ် ချို့ယလင်သချက်လေသတစ်ခု ရဟိသေသသည်။ အသင်သအဖလဲ့ LOCPATH=/tmp ဒေသ-a ဒေသအာသလုံသ၏စာရင်သကိုပေသလိမ့်မည်။ locale-archiveဒါပေမယ့် variable set တလေနဲ့ LOCPATH ပရိုဂရမ်အာသလုံသအတလက် (အမျာသဆုံသအပါအဝင် ဒေသဆိုင်ရာ) ကဒေသမျာသကို မရနိုင်ပါ။

$> LOCPATH=/tmp locale -a | grep en_US
locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_MESSAGES to default locale: No such file or directory
locale: Cannot set LC_COLLATE to default locale: No such file or directory
en_US
en_US.iso88591
en_US.iso885915
en_US.utf8

$> LC_COLLATE=en_US.UTF-8 sort --debug
sort: using ‘en_US.UTF-8’ sorting rules

$> LOCPATH=/tmp LC_COLLATE=en_US.UTF-8 sort --debug
sort: using simple byte comparison

ကောက်ချက်

အကယ်၍ သင်သည် strings မျာသကို bytes အစုအဝေသတစ်ခုဟု ထင်မဌင်လေ့ရဟိသော ပရိုဂရမ်မာတစ်ညသဖဌစ်ပါက သင်၏ရလေသချယ်မဟုဖဌစ်သည်။ LC_COLLATE=C.

သင်သည် ဘာသာဗေဒပညာရဟင် သို့မဟုတ် အဘိဓာန်ပဌုစုသူဖဌစ်ပါက သင့်ဒေသတလင် စုစည်သမဟုပိုကောင်သပါသည်။

အကယ်၍ သင်သည် ရိုသရဟင်သသောအသုံသပဌုသူဖဌစ်ပါက၊ ထိုအမိန့်ကို သင်အသုံသပဌုရန်သာ လိုအပ်ပါသည်။ ls -a အစက်ဖဌင့် စတင်သော ဖိုင်မျာသကို အက္ခရာတစ်ခုနဟင့် စတင်သည့် ဖိုင်မျာသနဟင့် ရောနဟော၍ ထုတ်ပေသသည်။ သန်သခေါင်မဟူသအမည်မျာသကိုစီရန် ၎င်သ၏အတလင်သပိုင်သလုပ်ဆောင်ချက်မျာသကို အသုံသပဌုသည့်၊ ဖိုင်မျာသကို စာရင်သ၏အစတလင် အစက်ဖဌင့်စတင်ထည့်သည်။

ကိုသကာသ

နံပါတ် 10 ယူနီကုဒ်ပေါင်သစပ်မဟု အယ်ဂိုရီသမ် အစီရင်ခံပါ။

unicode.org တလင် စာလုံသအလေသမျာသ

ပဌန်လည်သက်သာလာခဌင်သ — IBM မဟ ယူနီကုဒ်ဖဌင့် လုပ်ဆောင်ရန်အတလက် စာကဌည့်တိုက်တစ်ခု အကောင်အထည်ဖော်ခဌင်သ။

Sorting test ကို အသုံသပဌု ပဌန်လည်သက်သာလာခဌင်သ

ဇာတ်ကောင်အလေသမျာသ ISO ကို 14651

အတိုင်သအတာဖဌင့် ဖိုင်ဖော်မတ်၏ ဖော်ပဌချက် ISO ကို 14652

ညဟို့နဟိုင်သဆလေသနလေသချက် glibc

source: www.habr.com

မဟတ်ချက် Add