Massenhafte Fileverarbeitung, bräuchte kurz mal Hilfe

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

  • Massenhafte Fileverarbeitung, bräuchte kurz mal Hilfe

    Hallo Community,

    ich steh mit einem Projekt ein bisschen aufm Schlauch. Mir fehlt noch eine function/befehl um meine Mission zu beenden, jedoch habe ich sowas noch nie machen müssen, und nun hängt es wohl an den Grundlagen....

    Problem/Aufgabe: ein Order mit ca. 2000 Text-files, nun sollen alle Files nach einem String durchsucht werden, wenn der String gefunden ist soll anhand eines Mustervergleichs ein immer unterschiedliches Stück aus dem File/string in eine Mysql-DB geschrieben werden.

    Ich habe schon einiges gecoded jedoch hängts an dem auswerten des Strings.

    Mein script arbeitet die files durch, findet das "Suchkriterium" in meinem Fall "Mann", "Frau" oder "Firma". Wie , oder mit welchem Befehl kann ich nun aus z.B. diesem String:
    "
    F r a u c a r m e n M ü l l e r

    M ü l l e r s t r a s s e 6 7

    8 2 3 6 6 m e i t t e n

    T e l e f o n n u m m e r : 0 1 1 1 1 1 1 1 1 1

    B e r u f : "

    alles ausschneiden zwischen F R A U und B e r u f.... leider bin ich mit RegEX nicht so bewandert, da jeder Mensch anderst heisst und woanderst wohnt ist die Stringlänge auch variabel, auch das vorkommen des gesuchten Strings ist immer unterschiedlich...

    Hintergrund des ganzen ist eine Liste aller Menschen zu erstellen die mir je was geschrieben haben ... die Leerzeichen zwischen den Buchstaben sind gewollt. vielen Dank schonmal im voraus für eure Hilfe.

    Strassencoder Andre

  • #2
    substr($str, strpos('F R A U'), -1*(strlen($str)-strpos('B e r u f'))

    Kommentar


    • #3
      Guten Morgen,

      @nerd: naja , so ein nerd kannst du nicht sein, ich werde das "konstrukt" mal testen, vielen Dank schonmal für die Hilfe. Manchmal steh ich einfach aufm Schlauch und mir fällt dann nix mehr ein.

      Gruß Strassencoder

      Kommentar


      • #4
        OffTopic:
        Original geschrieben von strassencoder
        @nerd: naja , so ein nerd kannst du nicht sein,


        Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

        bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
        Wie man Fragen richtig stellt

        Kommentar


        • #5
          Hy

          Leider bringt es nicht ganz das gewünschte Ergebnis, kann aber nur noch ne kleinigkeit sein.

          ich habe es ein bisschen aufgedrösselt :

          $inhalt_der_datei = "den ganzen inhalt der datei mit Frau und .... ";

          $name_adresse_start = strpos($inhalt_der_datei,'Frau');
          $name_adresse_stop = strlen($inhalt_der_datei)-strpos($inhalt_der_datei,'Telefonnummer');
          $name_adresse = substr($inhalt_der_datei,$name_adresse_start,$name_adresse_stop );

          echo $name_adresse;

          das -1* habe ich mal weg, und den strpos syntax richtig gemacht ...

          das Problem was ich jetzt hab ist, dass PHP mir ab dem 2. Vorkommen des Wortes Frau bis zum Ende alles ausgibt. PHP sollte dies aber vom 1. Vorkommen bis Ende. Wie kan ich meinem script beibringen das Erste vorkommen zu nehmen. Gruß Andre

          ps: Nerd [nɜːd] (engl. für Fachidiot, Langweiler, Sonderling, Streber, Schwachkopf, Außenseiter, Freak, Geek) ,

          wobei Nerd eher nagativ ist, Geek wäre positiver Streber

          Kommentar


          • #6
            Ok ... bin schlauer, es scheint als ob der Fehler an dem File, also dem "haystack" liegt.

            es ist ein .msg file aus MickyOutlook , im editor betrachtet steht mein keyword "Frau" als "F R A U" , file_get_content-schleife zeigt bei echo ausgabe "FRAU" , im Quelltext dann wieder "F R A U", Hmmm ich kann aber die spaces nicht entfernen da ich diese als Trennung zw. Vorname Nachname Str/hausnummer brauche.

            EDIT: als ich das original-File im Editor als UTF-8 statt ANSI gespeichert hatte fand mir strpos das richtige vorkommen von "Frau" ....

            EDIT2: $inhalt_der_datei = str_replace(chr(0), "", $inhalt_der_datei); <- das ist mein Freund, jetzt kann ich schonmal die email extrahieren, mit der Adresse gibts noch so das eine oder andere Problemchen....

            Was wisst Ihr was ich wissen müsste ?

            Gruß Andre der ratlose Strassencoder ....
            Zuletzt geändert von strassencoder; 02.08.2007, 13:15.

            Kommentar


            • #7
              Original geschrieben von strassencoder
              Was wisst Ihr was ich wissen müsste ?
              Du müsstest ein bisschen mehr über Zeichenkodierungen Bescheid wissen.


              Die "Leerzeichen" sind nämlich vermutlich gar keine, sondern Null-Bytes - bei UTF-8 wird bei den in ASCII abbildbaren Zeichen das zweite Byte nämlich auf Null gesetzt.

              Ob du also in einem in Kodierung XY vorliegenden Text den Suchbegriff findest, hängt massgeblich damit zusammen, ob du "beim Suchen" auch die gleiche Kodierung verwendest.
              I don't believe in rebirth. Actually, I never did in my whole lives.

              Kommentar


              • #8
                Hy Wahsaga,

                $inhalt_der_datei = str_replace(chr(0), "", $inhalt_der_datei);

                war mein Freund der mir half ...

                ist immernoch ein bisschen vertrackt das ganze , ich bin nur darauf gekommen als ich es mal in einem hex/dec Editor gesehen hatte das es keine "leerzeichen" sondern chr(0) waren....

                50% geschaffft , ich habe aber immernoch das Problem das nun das Ende des substr nicht gefunden wird.

                Gruß von einem nicht mehr ganz so ratlosen Strassencoder

                Kommentar


                • #9
                  Testausgaben?

                  Kommentar


                  • #10
                    Testausgaben sind nicht so einfach da ich genau die Zeilen ersetzen muss mit den persönlichen Daten um es zu posten.

                    Ich bin auch schon ein bisschen weiter, das Ende wird nun in 2/3 der Fälle auch richtig erkannt. Leider nicht immer, das Ende des gesuchten Strings ist in 2/3 der Fälle das besagte "Telefonnummer" , leider gibt es auch files ohne das.... was in allen 4000 Files das gleiche ist, ist ein doppelter Absatz zw quasi plz-stadt und Telefonnummer.

                    Ich müsste jetzt wissen wie man quasi nach einem "/n/n" also doppelter absatz sucht, bei

                    strpos($inhalt_der_datei,'/n/n'); kann das nicht funktionieren, aber da gibt es bestimmt auch nen Trick.... wenn ich das noch wüsste wäre meine Mission erfolgreich.

                    Gruß vom immer schlaueren Strassencoder Andre

                    Kommentar


                    • #11
                      Original geschrieben von strassencoder
                      bei strpos($inhalt_der_datei,'/n/n'); kann das nicht funktionieren
                      Stimmt. Zum einen ist /n kein Zeilenumbruch, und zum anderen, so /n denn das entsprechende Steuerzeichen darstellen würde, wären die Hochkommata falsch.

                      http://www.php.net/manual/de/language.types.string.php
                      I don't believe in rebirth. Actually, I never did in my whole lives.

                      Kommentar


                      • #12
                        hmmm....

                        also gibt es keine möglichkeit strpos auf z.B. /n , /n/n oder /n/r anzuwenden. oder doch ?

                        oder muss es nur heissen "\n" statt '\n'

                        Gruß Andre

                        Kommentar


                        • #13
                          doch gibt es natürlich! Probiers aus. Nur du weißt, wie deine Daten aussehen, weil du es uns ja nicht zeigen darfst.

                          Kommentar


                          • #14
                            oder muss es nur heissen "\n" statt '\n'
                            Was war denn daran
                            Zum einen ist /n kein Zeilenumbruch, und zum anderen, so /n denn das entsprechende Steuerzeichen darstellen würde, wären die Hochkommata falsch.
                            nicht klar ?
                            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


                            • #15
                              Hey, ich bin doch noch am lernen. Aber es klappt dank eurer Hilfe

                              Tja was soll ich sagen, danke Herr Wahsaga, auch dafür das ich mal wieder was lernen konnte weil ich es mit Fingerzeig von Dir selber rausgefunden hab.

                              also in meinem fall hat mit strpos "\n\r\n\r" geholfen, jetzt werden alle files richtig ausgelesen, was mir das manuelle eintippen von 4000 Kundenadressen erspart hat und ich nur noch 4000 mal betätigen muss

                              Danke auch an jahlives und onemorenerd.

                              Hier noch der Code falls jmd mal auf ähnliche Probleme stossen sollte.

                              PHP-Code:
                              //funktion aus php.net bei strpos
                              function TextBetween($s1,$s2,$s){
                                
                              $s1 strtolower($s1);
                                
                              $s2 strtolower($s2);
                                
                              $L1 strlen($s1);
                                
                              $scheck strtolower($s);
                                if(
                              $L1>0){$pos1 strpos($scheck,$s1);} else {$pos1=0;}
                                if(
                              $pos1 !== false){
                                  if(
                              $s2 == '') return substr($s,$pos1+$L1);
                                  
                              $pos2 strpos(substr($scheck,$pos1+$L1),$s2);
                                  if(
                              $pos2!==false) return substr($s,$pos1+$L1,$pos2);
                                }
                                return 
                              '';
                              }

                              //// Ab hier mein Teil

                              $dateiname="test/test2.msg";
                              $zeiger_auf_datei=fopen($dateiname,"rb");
                              $inhalt_der_datei=fread($zeiger_auf_datei,filesize($dateiname));
                              fclose($zeiger_auf_datei);
                              //erster Trick
                              $inhalt_der_datei str_replace(chr(0), ""$inhalt_der_datei);
                              //email finden
                              $email TextBetween('From: <','>',$inhalt_der_datei);

                              echo 
                              $email//geht

                              $name_adresse TextBetween('Frau',"\n\r\n\r",$inhalt_der_datei)  ;

                              echo 
                              $name_adresse;

                              exit; 
                              Zuletzt geändert von strassencoder; 02.08.2007, 16:08.

                              Kommentar

                              Lädt...
                              X