[Funktion] Sortieren einer .dat Datei nach "Zeilenanfang"

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Funktion] Sortieren einer .dat Datei nach "Zeilenanfang"

    Hi.
    Habe eine .dat mit jeweils 3 Werten pro Zeile, die mit einem | getrent sind.
    Der erste Wert ist eine Zahl, nach der ich absteigend sortieren möchte.
    Hat jemand einen Vorschlag?

    Danke

  • #2
    in nen array bekommen und dann per array-sort funktionen sortieren....
    asort
    Für alle die Fehler suchen, gibts gratis tolle Debuggingmöglichkeiten:
    var_dump(), print_r(), debug_backtrace und echo.
    Außerdem gibt es für unsere Neueinsteiger ein hervorragendes PHP Tutorial zu PHP 4 und PHP 5 (OOP)
    Es heißt $array['index'] und nicht $array[index]! Und nein, das ist nicht egal!
    Dieses Thema lesen, um Ärger im Forum und verzögerte Hilfen zu vermeiden.

    Kommentar


    • #3
      in Array einlesen, sortieren, ausgeben

      edit: da war jemand schneller...

      Kommentar


      • #4
        sortieren ist gut, mit welcher funktion denn?
        sort() hilft mir nicht weiter, weil die ja nach allen Elementen sortiert.

        Kommentar


        • #5
          Wenn die Zahlen unique sind, dann würde ich das Ganze in ein mehrdimensionales Array einlesen. Der Index wäre dann die Zahl und dann kannste das Array nach den Indecies ordnen (geht aber wirklich nur wenn die Zahlen unique sind)

          Gruss

          tobi
          Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

          [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
          Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

          Kommentar


          • #6
            Wie wärs hiermit?

            (War nicht so schwierig, hab nur auf den Link von Shurakai geklickt.)

            asort -- Sortiert ein Array und behält die Indexverbindungen
            gibt es auch anders herum
            arsort -- Sortiert ein Array in umgekehrter Reihenfolge und behält die Verbindung zum Index

            PHP-Code:
            <?php 

            $array
            [0][0]="1";
            $array[0][1]="egal";
            $array[0][2]="auch egal";

            $array[1][0]="3";
            $array[1][1]="blablubb";
            $array[1][2]="blubber";

            $array[2][0]="42";
            $array[2][1]="stand mal an dritter Stelle";
            $array[2][2]="huhu";

            $array[3][0]="2";
            $array[3][1]="letzer Eintrag";
            $array[3][2]="Abend...";

            for(
            $i=0;$i<4;$i++){
            print_r($array[$i]);
            echo 
            "<br>";
            }

            function 
            array_sort_multi2($array$key,$key2


              for (
            $i 0$i sizeof($array); $i++) { 
                   if(! empty(
            $array[$i][$key][$key2])){ 
                   
            $sort_values[$i] = $array[$i][$key][$key2]; 
                   }else{ 
                   
            $sort_values[$i] = $array[$i]; 
                   } 
              } 
             
            arsort ($sort_values); 
             
            reset ($sort_values); 
             while(list(
            $arr_keys,$arr_values)=each($sort_values)){
                     
            $sorted_arr[] = $array[$arr_keys]; 
              } 
              return 
            $sorted_arr


            $neu=array_sort_multi2($array,0,0);
            echo 
            "<br> <br>sortiert:<br> <br>";
            for(
            $i=0;$i<4;$i++){
            print_r($neu[$i]);
            echo 
            "<br>";
            }
            ?>
            gibt folgendes aus:

            Array ( [0] => 1 [1] => egal [2] => auch egal )
            Array ( [0] => 3 [1] => blablubb [2] => blubber )
            Array ( [0] => 42 [1] => stand mal an dritter Stelle [2] => huhu )
            Array ( [0] => 2 [1] => letzer Eintrag [2] => Abend... )


            sortiert:

            Array ( [0] => 42 [1] => stand mal an dritter Stelle [2] => huhu )
            Array ( [0] => 3 [1] => blablubb [2] => blubber )
            Array ( [0] => 2 [1] => letzer Eintrag [2] => Abend... )
            Array ( [0] => 1 [1] => egal [2] => auch egal )
            Zuletzt geändert von carlo; 27.07.2005, 00:05.

            Kommentar


            • #7
              hat schon mal gut geklappt, ABER, der sortiert leider nur nach dem ersten zeichen.
              gewünscht ist nach dem ganzen wert.
              sprich:

              gibt folgendes aus:

              Array ( [0] => 1 [1] => egal [2] => auch egal )
              Array ( [0] => 3 [1] => blablubb [2] => blubber )
              Array ( [0] => 42 [1] => stand mal an dritter Stelle [2] => huhu )
              Array ( [0] => 2 [1] => letzer Eintrag [2] => Abend... )
              Array ( [0] => 5 [1] => letzer Eintrag [2] => Abend... )


              sortiert:

              Array ( [0] => 5 [1] => letzer Eintrag [2] => Abend... )
              Array ( [0] => 42 [1] => stand mal an dritter Stelle [2] => huhu )
              Array ( [0] => 3 [1] => blablubb [2] => blubber )
              Array ( [0] => 2 [1] => letzer Eintrag [2] => Abend... )
              Array ( [0] => 1 [1] => egal [2] => auch egal )

              5 ist leider kleiner als 42... ;-(

              Kommentar


              • #8
                Dann schreib doch einfach Nullen davor.

                Länge des Strings auslesen mit strlen() und entsprechende Anzahl Nullen davor setzen

                aus 1 wird 0001
                aus 430 wird 0430
                aus 42 wird 0042



                PHP-Code:
                for ($i 0$i sizeof($array); $i++) { 
                $nullen="";

                for(
                $x=0;$x<(4-strlen($array[$i][0]));$x++){
                $nullen=$nullen."0";
                }
                $array[$i][0]=$nullen.$array[$i][0];

                Array ( [0] => 0001 [1] => egal [2] => auch egal )
                Array ( [0] => 0005 [1] => blablubb [2] => blubber )
                Array ( [0] => 0042 [1] => stand mal an dritter Stelle [2] => huhu )
                Array ( [0] => 0002 [1] => letzer Eintrag [2] => Abend... )


                sortiert:

                Array ( [0] => 0042 [1] => stand mal an dritter Stelle [2] => huhu )
                Array ( [0] => 0005 [1] => blablubb [2] => blubber )
                Array ( [0] => 0002 [1] => letzer Eintrag [2] => Abend... )
                Array ( [0] => 0001 [1] => egal [2] => auch egal )

                Kommentar


                • #9
                  nullen davor zu schreiben ist unschön, da ich floating zahlen habe wie 38.1 oder sowas...
                  bin dir ja schon dankbar, aber der schönheitsfehler ist wichtig

                  Kommentar


                  • #10
                    Dann würde ich einfach mal aufhören die Zahlen als STRINGS zu behandeln. Also lass die " " da weg! Danach funktionierts, weil er sie dann als Integer behandelt....


                    P.S.: Carlo kannst du bitte Code umbrechen? Du kennst das ja... is scheiße <--> zu scrollen
                    Für alle die Fehler suchen, gibts gratis tolle Debuggingmöglichkeiten:
                    var_dump(), print_r(), debug_backtrace und echo.
                    Außerdem gibt es für unsere Neueinsteiger ein hervorragendes PHP Tutorial zu PHP 4 und PHP 5 (OOP)
                    Es heißt $array['index'] und nicht $array[index]! Und nein, das ist nicht egal!
                    Dieses Thema lesen, um Ärger im Forum und verzögerte Hilfen zu vermeiden.

                    Kommentar


                    • #11
                      P.S.: Carlo kannst du bitte Code umbrechen? Du kennst das ja... is scheiße <--> zu scrollen
                      Watt??? Hier musste schon scrollen?
                      14'' Monitor?

                      Welche Zeile ist Dir denn zu lang? Die gehen bei mir gerade mal zur Mitte...

                      Kommentar


                      • #12
                        shit...
                        jetzt erzähl mir bitte nicht, dass arsort nur nach integer sortiert, und nicht auch nach gleitkommazahlen.

                        ich übergebe sie nicht als strings - wie carlo - ins array.
                        PHP-Code:
                          for($i=0$i<count($temp_file); $i++)
                          {
                            
                        $temp_element explode("|"$temp_file[$i]);
                            
                        $temp_array[$i][0] = $temp_element[0];
                            
                        $temp_array[$i][1] = $temp_element[1];
                            
                        $temp_array[$i][2] = $temp_element[2];
                          }
                          
                        $neu=array_sort_multi2($temp_array,0,0); 
                        in $temp_file steht folgendes z.b.:
                        7.48187|A|14
                        30.1537|E|330
                        2.79617|I|20
                        2.67766|H|35

                        ausgabe sollte sein:

                        30.1537|E|330
                        7.48187|A|14
                        2.79617|I|20
                        2.67766|H|35

                        Kommentar


                        • #13
                          Notfalls hilft uasort().

                          Kommentar


                          • #14
                            Ich denke, das sind trotzdem noch Strings.
                            Umwandlung in Zahlen mittels 1*, also

                            PHP-Code:
                            $temp_array[$i][0] = 1*$temp_element[0];
                            (...) 
                            sollte helfen.

                            Kommentar


                            • #15
                              SAUBER!!!!
                              10000 dank carlo.
                              endlich, bin auch aus hh, hast einen gut bei mir!

                              Kommentar

                              Lädt...
                              X