Ein array sortiert in eine Datei schreiben - wie?

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

  • #16
    Einen zweiten Thread zu öffnen ist in diesem Fall völlig unnötig, ich gehe einfach mal davon aus, dass dein Array noch garnicht richtig sortiert ist - oder hast du es zwischendurch schon einmal ausgegeben?
    Die Regeln | rtfm | register_globals | strings | SQL-Injections | [COLOR=silver][[/COLOR][COLOR=royalblue]–[/COLOR][COLOR=silver]][/COLOR]

    Kommentar


    • #17
      So
      PHP-Code:
      <?php
      date_default_timezone_set
      ('Europe/Berlin');
      $lines file_get_contents('/var/www/web22/log/test.txt');
      foreach (
      explode("\n"$lines) as $line)
           {
          
      $result[] = explode('|'$line);
          }

      $sortMe $result;
      $sortCol = array();
      foreach (
      $sortMe as $key => $row)
      #while(list($key,$row)= each($sortMe));
          
      {
          
      $sortCol[$key] = strtotime(implode('-',array_reverse(explode('.',$row[3]))));
          }
      $result[] =  array_multisort($sortColSORT_DESC$sortMe);


      $path "/var/www/web22/log/";
      $file "fertig.txt";
      $size count($result);

      if(
      file_exists($path.$file) && is_writeable($path.$file))
      {
          
      $fp fopen($path.$file'w');
          foreach( 
      $result as $i=>$value )
          
      #    for ($i = 0; $i < $size; $i++)
          
      {
              
      $size1count($result[$i]);
                  if(isset(
      $result[$i][0]) && isset($result[$i][1]) && isset($result[$i][2])
                  && isset(
      $result[$i][3]) && isset($result[$i][4]) && ($result != ""))
                  {
                  
      $zeilen =  "<a href=\"".$result[$i][0]."\">".$result[$i][1]."</a><b>" 
                  
      .$result[$i][4]."</b>".[".$result[$i][3]."".$result[$i][2]."<br>";        
                  fputs(
      $fp, "$zeilen \n");

                  }
          }
          fclose(
      $fp);
      }else{
          echo "
      Datei ".$path.$file." ist nicht beschreibbar oder exisistiert nicht!";
          }

      echo "
      <pre>";
      print_r( 
      $sortMe  );
      echo "
      </pre>";


      ?>
      Zuletzt geändert von janein; 06.04.2008, 13:05.

      Kommentar


      • #18
        Das steht in der Datei:
        o|b|c|07.04.08|1
        t|w|c|09.04.08|0
        u|b|z|10.04.08|0
        pp|bz|cu|02.04.08|1
        So sieht das array aus:
        PHP-Code:
        Array
        (
            [
        0] => Array
                (
                    [
        0] => u
                    
        [1] => b
                    
        [2] => z
                    
        [3] => 10.04.08
                    
        [4] => 0
                
        )

            [
        1] => Array
                (
                    [
        0] => t
                    
        [1] => w
                    
        [2] => c
                    
        [3] => 09.04.08
                    
        [4] => 0
                
        )

            [
        2] => Array
                (
                    [
        0] => o
                    
        [1] => b
                    
        [2] => c
                    
        [3] => 07.04.08
                    
        [4] => 1
                
        )

            [
        3] => Array
                (
                    [
        0] => pp
                    
        [1] => bz
                    
        [2] => cu
                    
        [3] => 02.04.08
                    
        [4] => 1
                
        )

            [
        4] => Array
                (
                    [
        0] => 
                )


        Es klappt jetzt übrigens, auch das geschriebene array ist jetzt sortiert :-)
        Danke, danke für Eure Vorschläge!

        Nur dies offset Meldung stört ...
        Zuletzt geändert von janein; 06.04.2008, 15:17.

        Kommentar


        • #19
          Datei in array einlesen - immer ein Key mehr - warum?

          Das steht in der Datei:
          o|b|c|07.04.08|1
          t|w|c|09.04.08|0
          u|b|z|10.04.08|0
          pp|bz|cu|02.04.08|1
          Zum einlesen:
          [PHP]
          $lines = file_get_contents('test.txt');
          foreach (explode("\n", $lines) as $line)
          {
          $result[] = explode('|', $line);
          }
          [⁄PHP]

          So sieht das eingelesene array aus:
          PHP-Code:
          Array
          (
              [
          0] => Array
                  (
                      [
          0] => u
                      
          [1] => b
                      
          [2] => z
                      
          [3] => 10.04.08
                      
          [4] => 0
                  
          )

              [
          1] => Array
                  (
                      [
          0] => t
                      
          [1] => w
                      
          [2] => c
                      
          [3] => 09.04.08
                      
          [4] => 0
                  
          )

              [
          2] => Array
                  (
                      [
          0] => o
                      
          [1] => b
                      
          [2] => c
                      
          [3] => 07.04.08
                      
          [4] => 1
                  
          )

              [
          3] => Array
                  (
                      [
          0] => pp
                      
          [1] => bz
                      
          [2] => cu
                      
          [3] => 02.04.08
                      
          [4] => 1
                  
          )

              [
          4] => Array
                  (
                      [
          0] => 
                  )



          array [4] ist leer, aber wieso ist es da und wie werde ich es los, es werden doch nur 4 Zeilen eingelesen, oder nicht?
          Zuletzt geändert von janein; 06.04.2008, 15:27.

          Kommentar


          • #20
            ganz einfach, wenn du beim schreiben immer \n am Ende dran hängst und beim explode \n als Trenner verwendest, wundert dich das?

            Kommentar


            • #21
              ich tippe darauf, dass am Ende der Datei noch eine leere Zeile steht?!

              Kommentar


              • #22
                Original geschrieben von asp2php
                ganz einfach, wenn du beim schreiben immer \n am Ende dran hängst und beim explode \n als Trenner verwendest, wundert dich das?
                Ok, das leuchtet ein :-)

                Wie macht man es besser, eine Datei Zeile für Zeile einzulesen - einfach ein anderes Zeichen wie #⁄n verwenden und nach # trennen?

                Kommentar


                • #23
                  Original geschrieben von janein
                  Ok, das leuchtet ein :-)

                  Wie macht man es besser, eine Datei Zeile für Zeile einzulesen - einfach ein anderes Zeichen wie #⁄n verwenden und nach # trennen?
                  entweder mit file einlesen oder mit fopen und fgets

                  Kommentar


                  • #24
                    Ok, das leuchtet ein :-)
                    Wohl noch nicht ganz - zum besseren Verständnis: Man nehme immer ein Wort und hänge "\n" daran:
                    Code:
                    Foo\n        1. Zeile hinzufügen
                    Bar\n        2. Zeile hinzufügen
                    Blubb\n     3. Zeile hinzufügen
                    Wenn du das jetzt nach \n explodest passiert folgendes:
                    Code:
                    [COLOR=silver][[/COLOR][COLOR=royalblue]Foo[/COLOR][COLOR=silver]][/COLOR][COLOR=blue]\n[/COLOR][COLOR=silver][[/COLOR][COLOR=royalblue]Bar[/COLOR][COLOR=silver]][/COLOR][COLOR=blue]\n[/COLOR][COLOR=silver][[/COLOR][COLOR=royalblue]Blubb[/COLOR][COLOR=silver]][/COLOR][COLOR=blue]\n[/COLOR][COLOR=silver][[/COLOR][COLOR=silver]][/COLOR]
                    Wie du siehst ist das letzte Element leer. Die einfachste Möglichkeit das zu verhindern ist beim Einlesen zu prüfen ob der aktuelle Teil leer ist:
                    PHP-Code:
                    if(!empty($line)) {
                         
                    $result[] = explode('|'$line);

                    Die Regeln | rtfm | register_globals | strings | SQL-Injections | [COLOR=silver][[/COLOR][COLOR=royalblue]–[/COLOR][COLOR=silver]][/COLOR]

                    Kommentar


                    • #25
                      Original geschrieben von tontechniker
                      ... Die einfachste Möglichkeit das zu verhindern ist beim Einlesen zu prüfen ob der aktuelle Teil leer ist:
                      PHP-Code:
                      if(!empty($line)) {
                           
                      $result[] = explode('|'$line);

                      Danke für die ausführliche Erkärung! Durch die andere Art des Einlesens, sind die "Leerstellen" auch verschwunden. So mache ich es jetzt:
                      PHP-Code:
                      $lines file ('test2.txt');
                      #print_r($lines);

                      foreach ($lines as $key => $line)
                          {
                          
                      $result[] = explode('|'$lines[$key]);
                          } 
                      Ich werde Deine Überprüfungsmethode auch noch probieren, es könnte ja auch mal ein Wert leer sein, ohne dass er am Ende der Datei erzeugt wurde. Dafür scheint mir Dein Tipp hilfreich.

                      Was ist der Unterschied zu
                      PHP-Code:
                      if(isset($line)) {
                           
                      $result[] = explode('|'$line);

                      ?
                      Zuletzt geändert von janein; 06.04.2008, 16:31.

                      Kommentar


                      • #26
                        Zb. dass "" bei !empty() false wird und bei isset() true ist.
                        isset() prüft eigentlich nur, ob die Variable vorhanden ist und nicht gleich null ist.
                        Die ganzen Unterschiede kannst du dir hier anschauen:
                        http://de.php.net/manual/de/types.comparisons.php
                        Zuletzt geändert von TheFish511; 06.04.2008, 16:56.
                        Assembler ist eine Methode,
                        Programme, die zu langsam laufen,
                        so umzuschreiben,
                        dass sie überhaupt nicht mehr laufen.

                        Kommentar


                        • #27
                          PHP-Code:
                          function sortArray($a,$b){ 
                            
                          $timeA explode('.',$a[3]); 
                            
                          $timeB explode('.',$b[3]); 
                            
                          $timeA mktime(0,0,0,$timeA[1],$timeA[0],$timeA[2]); 
                            
                          $timeB mktime(0,0,0,$timeB[1],$timeB[0],$timeB[2]); 
                            if(
                          $timeA == $timeB){ 
                              return 
                          0
                            } 
                            return (
                          $timeA<$timeB)?-1:1

                          $str[0] = 'o|b|c|07.04.08|1'
                          $str[1] = 't|w|c|09.04.08|0'
                          $str[2] = 'u|b|z|10.04.08|0'
                          $str[3] = 'pp|bz|cu|02.04.08|1'
                          $arr = array(); 
                          foreach(
                          $str as $wert){ 
                            
                          $arr[] = explode('|',$wert); 

                          usort($arr,"sortArray"); 
                          echo 
                          '<pre>'
                          var_dump($arr); 
                          echo 
                          '</pre>'
                          Funzt wie du auch hier sehen kannst. Übrigens habe ich das bereits in meinem ersten Post geschrieben...

                          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

                          Lädt...
                          X