romero: Doppelbuchstaben nicht "höher" als Einzelbuchstabe

Hallo an euch,

ich habe da wiedermal ein Problem, wo ich nicht weiterkomme oder anders gesagt, wo ich eine, hoffentlich, einfache Lösung suche.

Ich habe viele Dateien, welche ich sortieren möchte.

Bsp.:
D258_70100_000A_20m.nc
D258_70100_000B_20m.nc
D258_70100_000BB_20m.nc
...
D258_70100_000F_20m.nc

Wenn ich über normalem Wege sortiere, dann bewirkt ja die Funktion sort() folgendes:

D258_70100_000A_20m.nc
D258_70100_000B_20m.nc
D258_70100_000BB_20m.nc
...
D258_70100_000F_20m.nc

Für mich ist aber wichtig, dass die Datei mit dem "BB" (D258_70100_000BB_20m.nc) am Ende kommen soll, sprich:

D258_70100_000A_20m.nc
D258_70100_000B_20m.nc
...
D258_70100_000F_20m.nc
D258_70100_000BB_20m.nc

Also ist "für mich", die Datei mit den doppelten Buchstaben höherwertig als Dateien mit 1 Buchstaben.
Wenn ich also nur die Buchstaben vergleichen möchte, unabhängig von den restlichen Zahlen & Buchstaben, ist der Buchstabe F höher als BB.

Ich könnte zwar jedem Buchstaben eine Zahl gegenüberstellen, wollte aber so eine "Maske" vermeiden zu schreiben.

Gibt es da eine einfachere Lösung, wie ich meinem Script verklickern kann, dass Doppelbuchsten höherwertig sind als Einzelbuchstaben?

LG Romero

  1. Moin,

    Gibt es da eine einfachere Lösung, wie ich meinem Script verklickern kann, dass Doppelbuchsten höherwertig sind als Einzelbuchstaben?

    An dem Sortieralgorithmus der Funktion sort() kannst du nichts ändern. Du kannst entweder einen eigenen Algorithmus in eine eigene Funktion implementieren, oder du macht einen Workaround, indem du beispielsweise _ durch Z ersetzt oder ähnliches.

    Grüße Marco

    --
    Ich spreche Spaghetticode - fließend.
    1. An dem Sortieralgorithmus der Funktion sort() kannst du nichts ändern. Du kannst entweder einen eigenen Algorithmus in eine eigene Funktion implementieren, oder du macht einen Workaround, indem du beispielsweise _ durch Z ersetzt oder ähnliches.

      Grüße Marco

      Hy Marco,

      aber was soll mir dieses "Z" bringen? Bzw. das Ersetzen?

      Wenn dann müsste ich also nen Art Container schreiben wo z.B. folgendes deklariert ist:

      A = 1
      B = 2
      C = 3
      ...
      AA = 101
      AB = 102
      AC = 103
      ...
      BB = 202
      BC = 203
      ...

      Aber da hätte ich ja ne riesige Liste. Und das wollte ich eigentlich umgehen.

      Ich hab mir da schon was gebastelt, dass wenn die Datei mit dem Doppelbuchstaben, von der Länge her länger ist als die mit dem Einzelbuchstaben, dann soll die "längere" Datei ans Ende gestellt werden:

      				for( i = 0; i < a.length; i++ )  
      				{  
      					if( !b[i] ) return 1;  
      					if( a[i].length > b[i].length ) return 1;  
      					if( a[i].length < b[i].length ) return -1;  
      					if( a[i] > b[i] ) return 1;  
      					if( a[i] < b[i] ) return -1;  
      							};  
      				return 0;
      

      Und dann ein Vergleich der sortierten Daten, um die letzte Datei zu nehmen:

      					current000   = arr1[i].n[0];  
      					current00x   = arr1[i].n[1].split("_")[1];  
      					currentX     = arr1[i].n[1].split("_")[0];  
      					if( last000 != current000 )  
      					{  
      						out1 = out1.concat( temp1 );  
      						temp1 = [];  
      					};  
      					if( i > 0 && lastX != currentX ) { temp1 = []; }  
      					temp1.push( arr1[ i ] );  
      					last000 = current000;  
      					lastX   = currentX;  
      					last00x = current00x;
      

      arr1[0].n[0] => D258_70100_000 (...)
      .n[1] => A_20m (...)
      .n[1].split("_")[0] => A (...)
      .n[1].split("_")[1] => 20m (...)

      Dieses .n ist quasi alles das, was nach dem 14. Zeichen kommt. Sozusagen die Eigenschaft.

      Und nach diesem Verfahren erhalte ich die "höchste" Datei mit dem höchsten Buchstaben, egal ob Einzel oder Doppel.

      Und nun wollte ich nur die Buchstaben vergleichen. Welche von den Ganzen die Höhere ist. Dachte das System erkennt das "von alleine".
      Ansonsten müsste ich so wie oben beschrieben, erst die Länge vergleichen, und wenn da die eine Länger ist, dann ist sie dann auch "höhere".

      LG Romero

      1. Om nah hoo pez nyeetz, romero!

        Ist denn das Ende des Namens immer gleich?
          Dann könntest du "_20m.nc" abschneiden, die Liste sortieren und "_20m.nc" wieder anhängen.

        Haben die Dateien immer dieselbe Struktur?
         Dann könntest du ebenfalls alles nach (und einschließlich) dem letzten "_" abschneiden, die Liste sortieren, die Reste mitsortieren(!) und wieder anhängen.

        tosort[0] = ['Anfang0', 'Ende0'];
        ...
        tosort.sort();

        -ungetestet-

        Matthias

        --
        1/z ist kein Blatt Papier.

    2. An dem Sortieralgorithmus der Funktion sort() kannst du nichts ändern. Du kannst entweder einen eigenen Algorithmus in eine eigene Funktion implementieren

      Den Algorithmus muss man auch nicht ändern, nur die Vergleichsfunktion. Die kann man praktischerweise sort als Parameter übergeben.