Datei durchsuchen und mit anderem Dateinamen speichern ...

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

  • Datei durchsuchen und mit anderem Dateinamen speichern ...

    Hi,
    hier ein weiteres Problem :-)

    Ich habe eine Datei, deren Inhalt so aus sieht.

    <NITF>
    <HEAD>
    <TITLE>DAX verliert - Neuer Markt weitet Verluste aus</TITLE>
    <META content="www.dpa-info.com" name="GENERATOR">
    <TOBJECT>
    <TOBJECT.SUBJECT TOBJECT.SUBJECT.REFNUM="04000000" TOBJECT.SUBJECT.CODE=WIR>
    </TOBJECT>
    <IPTC7901.WIREHEAD IPTC7901.PRIORITY="3" IPTC7901.CATEGORY="wi" IPTC7901.MSGNUM="127" IPTC7901.KEYWORD="/B&ouml;rsen/Effekten/" IPTC7901.TIMEDATE="20011221 095655+0100" IPTC7901.SVCID="bdt" IPTC7901.CATCHLINE="/wirtschaft/">
    </HEAD>
    <BODY ID="DPA-NEWSBOX"><HEDLINE>
    <HL1>DAX verliert - Neuer Markt weitet Verluste aus</HL1>
    </HEDLINE>
    <LOCATION><COUNTRY>DEU</COUNTRY></LOCATION>
    <P>Frankfurt/Main (dpa) - Die Aktien an der Frankfurter B&ouml;rse haben im fr&uuml;hen Handel am Freitag leichter notiert. Der Deutsche Aktienindex DAX gab um 0,50 Prozent auf 4909 Punkte nach. Am Neuen Markt weitete der NEMAX 50 seine Verluste aus und br&ouml;ckelte um 2,21 Prozent auf 1137 Punkte ab. Die mittelgro&szlig;en Werte im MDAX verloren 0,17 Prozent auf 4183 Punkte.</P>

    <BLOCK>
    <TABLE ID="REFERENCED-IMAGES">
    <TBODY>

    <TR><TD>
    <A HREF="./13df5105-10920a_1393674.nitf">B&ouml;rse Frankfurt/Main</A>
    </TD></TR>

    </TBODY>
    </TABLE>
    </BLOCK>

    </BODY>
    </NITF>

    Nun möchte ich die NITF-Tags durch HTML-Tags ersetzen
    und dieser Bereich soll komplett wegfallen:
    <META content="www.dpa-info.com" name="GENERATOR">
    <TOBJECT>
    <TOBJECT.SUBJECT TOBJECT.SUBJECT.REFNUM="04000000" TOBJECT.SUBJECT.CODE=WIR>
    </TOBJECT>
    <IPTC7901.WIREHEAD IPTC7901.PRIORITY="3" IPTC7901.CATEGORY="wi" IPTC7901.MSGNUM="127" IPTC7901.KEYWORD="/B&ouml;rsen/Effekten/" IPTC7901.TIMEDATE="20011221 095655+0100" IPTC7901.SVCID="bdt" IPTC7901.CATCHLINE="/wirtschaft/">

    Ebenfalls soll der Bereich <LOCATION><COUNTRY>DEU</COUNTRY></LOCATION> wegfallen.

    Die HL1-Tags sollen durch p-Tags ersetzt werden.

    Für Hilfe wäre ich sehr dankbar ;-))
    Manus manum lavat.

  • #2
    Die bekommst du aber erst, wenn du mir sagst, wie ich diese Bereiche eindeutig identifizieren kann - sprich welche Teile in jeder Datei gleich sind... Sonst gibt's Probleme.

    CAT Music Files

    Kommentar


    • #3
      Ja, dann mal los.

      Der Bereich zwischen einschliesslich <META bis zu ausschliesslich </HEAD> kann immer gelöscht werden.
      Anders gesagt, der Bereich zwischen </TITLE> und </HEAD> kann weg.
      Die ganze LOCATION-Zeile kann auch immer weg.

      Ach, was ich noch vergessen hatte. Die Datei soll dann unter einem anderen Namen abgespeichert werden. Wenn sie z.B. hfk-231201-47-dpa_1400484.nitf heisst, soll sie danach hfk-231201-47-dpa_1400484.html heissen und im selben Pfad gespeichert werden.

      Ich hoffe, es hilft ;-)








      Ich hoffe, dass das nicht tooooooo much ist :-)
      Manus manum lavat.

      Kommentar


      • #4
        PHP-Code:
        $inhalt preg_replace("!<location>.*?</location>!i","",preg_replace("!<(.*?)nitf>!i","<$1HTML>",preg_replace("!<meta.*?</head>!i","</head>",preg_replace("!<(.*?)hl1>!i","<$1P>",$inhalt))));
        rename($alterdateiname,str_replace('.nitf','.html',$alterdateiname)); //nimmt an, dass die ursprünglichen Dateien alle die Endung nitf haben 
        $alterdateiname musst du durch die entsprechende Variable ersetzen.

        Nochmal EDIT: Das rename darfst du natürlich erst ausführen, wenn du den geänderten Inhalt wieder zurückgeschrieben hast und die Datei wieder geschlossen hast

        [Editiert von Sky am 27-12-2001 um 22:47]

        CAT Music Files

        Kommentar


        • #5
          Hi Sky,
          ich habe da noch mal eine Frage.
          Der Befehl rename benennt die Datei sicherlich um. Bleibt die original NITF-Datei erhalten ???
          Manus manum lavat.

          Kommentar


          • #6
            Hi Sky,
            Du hattest beim letzten Mal geschrieben:

            Das rename darfst du natürlich erst ausführen, wenn du den geänderten Inhalt wieder zurückgeschrieben hast und die Datei wieder geschlossen hast

            Wie schreibe ich denn den geänderten Inhalt zurück ? Einfach mit fwrite ???
            Manus manum lavat.

            Kommentar


            • #7
              Na gut, dann lass das rename weg und mach stattdessen:

              $f = fopen(preg_replace("!\.nitf$!i",".html",$alterdateiname),'bw') or die("Couldn't create file");
              echo (fwrite($f,$inhalt)).' bytes written to file.';
              fclose($f);

              CAT Music Files

              Kommentar


              • #8
                Hi,
                irgendwie gibt es da noch ein Problem :-(

                Zum besseren Verständis mein Quellcode:

                $dateiliste = dateien_einlesen($verzeichnis);

                for ($i = 0; $i < count($dateiliste); $i++)
                {
                $temp_time = date("H:i", filemtime("$verzeichnis/$dateiliste[$i]"));
                $temp_date = date("d.m.Y", filemtime("$verzeichnis/$dateiliste[$i]"));
                $fp = fopen("$verzeichnis/$dateiliste[$i]",'rb') or die('Couldn\'t open file or forbidden.');
                //Inhalt der kompletten Datei wird eingelsen
                $inhalt = fread($fp, filesize ("$verzeichnis/$dateiliste[$i]")) or die('Cannot read.');
                fclose($fp);
                //Text zwischen <title>-tags wird gesucht und in matches[1] ausgegeben
                preg_match("!<title>(.*?)</title>!i",$inhalt,$matches);

                $f = fopen(preg_replace("!\.nitf$!i",".html","$verzeichnis/$dateiliste[$i]"),'bw') or die("Couldn't create file");
                $inhalt = preg_replace("!<location>.*?</location>!i","",preg_replace("!<(.*?)nitf>!i","<$1HTML>",preg_replace("!<meta.*?</head>!i","</head>",preg_replace("!<(.*?)hl1>!i","<$1P>",$inhalt))));

                echo (fwrite($f,$inhalt)).' bytes written to file.';
                fclose($f);

                $dateiliste2[$i] = $temp_date." ".$temp_time." ".$matches[1]." ".$dateiliste[$i];
                }

                rsort($dateiliste2);

                Wenn ich das Skript jetzt ausführe, dann bekomme ich diese Fehlermeldung.


                Warning: fopen("c:/FoxServ/www/Ticker_try/dpa-infoline/generatedSite/bdt-261201-292-dpa_1407680.html","bw") - No such file or directory in c:\foxserv\www\2712\ticker\make_index2812.php on line 90
                Couldn't create file

                Das ist ja auch logisch, da es diese HTML-Datei noch gar nicht gibt. Die soll ja nachher erst erstellt werden.

                Nochmal zum Verständis:

                Ich habe diese Dateien: bdt-261201-292-dpa_1407680.nitf
                Die sollen gelesen und abgeändert werden und dann unter dem Namen bdt-261201-292-dpa_1407680.html abgespeichert werden.
                Manus manum lavat.

                Kommentar


                • #9
                  Zitat php-Manual, fopen()-Modi:
                  'w' - Open for writing only; place the file pointer at the beginning of the file and truncate the file to zero length. If the file does not exist, attempt to create it.

                  An meinem Code sollte es nicht liegen.
                  Stimmt der Pfad? Hast du Zugriffsrechte?

                  CAT Music Files

                  Kommentar


                  • #10
                    Hi Sky,
                    nach dem ich das b aus 'bw' entfernt habe funzt es.

                    $fp = fopen(preg_replace("!\.nitf$!i",".html","$verzeichnis/$dateiliste[$i]"),'w')

                    Danke

                    Manus manum lavat.

                    Kommentar


                    • #11
                      Das könnte aber wichtig für fwrite() sein... Probier zuerst mal wb

                      CAT Music Files

                      Kommentar


                      • #12
                        Yo, ist OK. Funzt mit wb.

                        Das sieht ja alles OK jetzt aus, nur eine Sache funzt nicht richtig.

                        Hier zur Erläuterung die Dateien:
                        HTML:
                        <HTML>
                        <HEAD>
                        <TITLE>Starker Schneefall führte zu Verkehrschaos - Zwei Tote bei Unfall</TITLE>
                        <META content="www.dpa-info.com" name="GENERATOR">
                        <TOBJECT>
                        <TOBJECT.SUBJECT TOBJECT.SUBJECT.REFNUM="17000000" TOBJECT.SUBJECT.CODE=WET>
                        </TOBJECT>
                        <IPTC7901.WIREHEAD IPTC7901.PRIORITY="5" IPTC7901.CATEGORY="vm" IPTC7901.MSGNUM="56" IPTC7901.KEYWORD="/Wetter/Verkehr/" IPTC7901.TIMEDATE="20011228 075010+0100" IPTC7901.SVCID="bdt" IPTC7901.CATCHLINE="/wetter/">
                        </HEAD>
                        <BODY ID="DPA-NEWSBOX"><HEDLINE>
                        <P>Starker Schneefall führte zu Verkehrschaos - Zwei Tote bei Unfall</P>
                        </HEDLINE>

                        <P> Text </P>

                        </BODY>
                        </HTML>

                        und hier die NITF-Datei:

                        <NITF>
                        <HEAD>
                        <TITLE>Starker Schneefall führte zu Verkehrschaos - Zwei Tote bei Unfall</TITLE>
                        <META content="www.dpa-info.com" name="GENERATOR">
                        <TOBJECT>
                        <TOBJECT.SUBJECT TOBJECT.SUBJECT.REFNUM="17000000" TOBJECT.SUBJECT.CODE=WET>
                        </TOBJECT>
                        <IPTC7901.WIREHEAD IPTC7901.PRIORITY="5" IPTC7901.CATEGORY="vm" IPTC7901.MSGNUM="56" IPTC7901.KEYWORD="/Wetter/Verkehr/" IPTC7901.TIMEDATE="20011228 075010+0100" IPTC7901.SVCID="bdt" IPTC7901.CATCHLINE="/wetter/">
                        </HEAD>
                        <BODY ID="DPA-NEWSBOX"><HEDLINE>
                        <HL1>Starker Schneefall führte zu Verkehrschaos - Zwei Tote bei Unfall</HL1>
                        </HEDLINE>
                        <LOCATION><COUNTRY>DEU</COUNTRY></LOCATION>
                        <P> Text </P>

                        </BODY>
                        </NITF>

                        Daran kann man sehen, dass leider das Entfernen des Bereichs zwischen <META und </HEAD> nicht funzt. Ich habe zwar eben schon rumprobiert, aber leider schaff ich DOOFIE das nicht. Kannst Du noch mal schauen ;-)
                        Manus manum lavat.

                        Kommentar


                        • #13
                          try !<meta(.*?)</head>!i

                          CAT Music Files

                          Kommentar


                          • #14
                            Hi Sky,
                            funzt leider auch nicht ;-(

                            Noch 'ne Idee ???
                            Manus manum lavat.

                            Kommentar


                            • #15
                              Keine Ahnung mehr... Das Pattern sollte eigentlich korrekt sein...

                              CAT Music Files

                              Kommentar

                              Lädt...
                              X