প্রাকৃতিক সাজানোর ক্রমে বিভ্রান্তি

বেশিরভাগ গ্রাফিক্যাল ফাইল ম্যানেজার কেবল অভিধানিকভাবে বাছাই করেন না, বরং "প্রাকৃতিক" বাছাই ব্যবহার করেন। নামের মধ্যে সংখ্যার ব্লকগুলিকে সংখ্যা হিসাবে ব্যাখ্যা করা হয় - সংখ্যার বৃহত্তর ব্লক জয়ী হয়, এমনকি যদি বিপরীতটি বর্ণানুক্রমিকভাবে সত্য হয়। প্রাকৃতিক বাছাইয়ের পিছনে ধারণা: লোকেরা সাধারণত যা চায় তা হল "১০ এর আগে ৯," "১০ এর আগে অধ্যায় ২" - এর আগে শূন্য যোগ না করে।


নিম্নলিখিত ফাইল জোড়াগুলি স্বাভাবিকভাবেই নিম্নরূপে ঊর্ধ্বক্রমানুসারে সাজানো হয়েছে::

  • build-9e2.log
  • build-950.log

আশ্চর্যজনক, কিন্তু ব্যাখ্যাযোগ্য: প্রথম অঙ্ক \(9\) সংখ্যার প্রথম ব্লক \(950\) এর চেয়ে ছোট।

  • IMG_12113419_90.jpg
  • IMG_0554363070_90.jpg

\(12113419\) সংখ্যাটি \(554363070\) এর চেয়ে কম (প্রধান \(0\) সরানো হয়েছে)।

  • temp_0C.txt
  • temp_2C.txt
  • temp_-3C.txt
  • temp_10C.txt
  • temp_-12C.txt

তুলনা করা সংখ্যাগুলি হল \(0\) , \(2\) , \(3\) , \(10\) , \(12\) – “-” সংখ্যার অংশ হিসেবে বিবেচিত হয় না।

এমনকি "বর্ণানুক্রমিক"ও বিশ্বব্যাপী স্পষ্ট নয়: বড় হাতের অক্ষর, ä (জার্মান) এর মতো umlauts, অথবা ch (চেক) এর মতো বহু-অক্ষরের অক্ষর বৈধ রূপের দিকে পরিচালিত করে। তাই "বিশুদ্ধ বর্ণানুক্রমিক" প্রসঙ্গ-নির্ভর। উইন্ডোজ এক্সপ্লোরার এটি StrCmpLogicalW ফাংশনে প্রয়োগ করে। যদিও এর সোর্স কোড (shlwapi.dll) মালিকানাধীন এবং সর্বজনীন নয়, উদাহরণস্বরূপ, ReactOS থেকে পুনঃবাস্তবায়ন রয়েছে।:

{
    TRACE("%s, %s\n", wine_dbgstr_w(str), wine_dbgstr_w(comp));
 
    if (!str || !comp)
        return 0;
 
    while (*str)
    {
        if (!*comp)
            return 1;
        else if (*str >= '0' && *str <= '9')
        {
            int str_value, comp_value;
 
            if (*comp < '0' || *comp > '9')
                return -1;
 
            /* Compare the numbers */
            StrToIntExW(str, 0, &str_value);
            StrToIntExW(comp, 0, &comp_value);
 
            if (str_value < comp_value)
                return -1;
            else if (str_value > comp_value)
                return 1;
 
            /* Skip */
            while (*str >= '0' && *str <= '9') str++;
            while (*comp >= '0' && *comp <= '9') comp++;
        }
        else if (*comp >= '0' && *comp <= '9')
            return 1;
        else
        {
            int diff = ChrCmpIW(*str, *comp);
            if (diff > 0)
                return 1;
            else if (diff < 0)
                return -1;
 
            str++;
            comp++;
        }
    }
 
    if (*comp)
      return -1;
 
    return 0;
}

গুগল ড্রাইভ, ওয়ানড্রাইভ, কেডিই এবং অন্যান্যরা একই ধরণের সাজানোর আচরণ প্রদর্শন করে। সিএলআই সরঞ্জাম যেমন ls এবং find তবে, তারা GUI ফাইল ম্যানেজারের চেয়ে আলাদাভাবে সাজান। শব্দার্থবিজ্ঞান ফাইলের নামে থাকে, API তে নয়। যদি আপনি অবাক না হয়ে ফলাফল চান, তাহলে নিয়মাবলী সংজ্ঞায়িত করুন: সামঞ্জস্যপূর্ণ বিভাজক, প্যাডেড সংখ্যা এবং ইউনিটের স্পষ্ট পরিচালনা। তারপর "বর্ণানুক্রমিক" আবার অনুমানযোগ্য হয়ে ওঠে।

পেছনে