php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > PHP Developer Forum
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Fragen zu Laravel, YII oder anderen PHP-Frameworks.

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 05-05-2006, 16:49
Maxe80
 Newbie
Links : Onlinestatus : Maxe80 ist offline
Registriert seit: May 2006
Beiträge: 19
Maxe80 ist zur Zeit noch ein unbeschriebenes Blatt
Maxe80 eine Nachricht über ICQ schicken
Standard Texdatei durchsuchen nach bestimmten STRING

Hallo,

ich möchte folgendes Problem posten.

zugrundeliegende Textdatei (Ausschnitt):

Code:
* Einführungstext
ORIA    36 4490697.497 5922175.080  1178.505   2.5268  -0.7971 
ORIA    37 4490371.312 5922270.142  1181.886   2.0299   0.3653 
ORIA    38 4490044.270 5922366.589  1184.754   2.9589   0.2473 
ORIA    39 4489718.426 5922460.573  1186.111   1.6081  -1.4088 
ORIA    40 4489386.534 5922550.304  1183.751   0.2137   1.2394 
ORIA    41 4489055.174 5922624.307  1189.336   0.0229   2.9818 
CORD    301 4490545.023 5921834.505    49.191  0.035  0.063  0.185
CORD    302 4490274.377 5921946.162    50.038  0.028  0.039  0.130
Ich möchte diese Datei mit dem Namen "itera.txt" nun zeilenweise einlesen,
jedoch nur die Dateikomponenten ausgeben und weiterverarbeiten die hinter dem STRING "ORIA" vorkommen.
Diese sind jeweils durch ein "WhiteSpace" getrennt.

CODE für das zeilenweise Einlesen:
PHP-Code:
<?php 
//DATEI NUR ZUM LESEN ÖFFNEN
$datei fopen('itera.txt','r'); 

//ZEILENWEISE DURCH DIE DATEI GEHEN: 
while (!feof($datei)) 
   { 
   
$zeile fgets($datei,1024); 
   echo 
$zeile.'<br>'
   } 
?> 
<hr> 
<?php 
//DATEI WIEDER SCHLIESSEN: 
fclose($datei); 
?>
Und bei diesem Einlesen soll gleichzeitig auf den STRING "ORIA" geprüft werden, so dass nicht alle Zeilen ausgegeben werden, sondern nur die besagten mit "echo $zeile".

Ich habe noch ein kleines Script dazu geschrieben, welches aber nicht das macht was es soll
PHP-Code:
<?php
$handle 
file_get_contents("itera.txt");
$lookfor '#ORIA(.+)}#s';

preg_match_all($lookfor$handle$matches);
print_r($matches);
?>
Hat jemand eine Idee?

Viele Grüße

Maxe

Geändert von Maxe80 (05-05-2006 um 17:03 Uhr)
Mit Zitat antworten
  #2 (permalink)  
Alt 05-05-2006, 17:24
boris-schneider
 Junior Member
Links : Onlinestatus : boris-schneider ist offline
Registriert seit: Apr 2006
Ort: Hessen/FFM
Beiträge: 208
boris-schneider ist zur Zeit noch ein unbeschriebenes Blatt
boris-schneider eine Nachricht über ICQ schicken
Standard Re: Texdatei durchsuchen nach bestimmten STRING

PHP-Code:
  $content = @file_get_contents('datei.txt');
  
$regex "/ORIA    ([0-9]+) ([.0-9]+) ([.0-9]+)  ([.0-9]+)   ([.0-9]+)  ([-.0-9]+)/iU";
  if (
preg_match_all($regex,$content,$matches,PREG_SET_ORDER))
  {
    foreach(
$matches as $match)
    {
    
// ausgabe
    
}
  } 
Die frage ist natürlich nun, bleiben die leerräume zwischen den zahlen immer gleich ? und brauchst du jede zahlengruppe einzeln ?

Das obige beispiel klappt, wenn die ausgabe der zeilen die spaces immer beibehält, ansonsten muss man dann mit {1,2} die Leerzeichen der zwischenräume bestimmen > sonst gibt's nen Fehler.

die if abfrage am anfang stellt sicher das auch nur die Daten die dem suchmuster entsprechen, ausgegeben werden !

Geändert von boris-schneider (05-05-2006 um 17:32 Uhr)
Mit Zitat antworten
  #3 (permalink)  
Alt 05-05-2006, 17:41
Maxe80
 Newbie
Links : Onlinestatus : Maxe80 ist offline
Registriert seit: May 2006
Beiträge: 19
Maxe80 ist zur Zeit noch ein unbeschriebenes Blatt
Maxe80 eine Nachricht über ICQ schicken
Standard

Hallo Boris,

vielen Dank für die schnelle Hilfe.

Ich werde den Code gleich testen.

Das ASCII-File kommt aus einem System.
Die Leerräume bleiben immer gleich, nur der Output ist variabel, so dass immer erst nach dem besagten STRING gesucht werden muss.

Wie verarbeite ich die Zahlen denn einzeln. weißt du wie das funktioniert?

Viele Grüße

Geändert von Maxe80 (05-05-2006 um 17:44 Uhr)
Mit Zitat antworten
  #4 (permalink)  
Alt 05-05-2006, 18:43
Maxe80
 Newbie
Links : Onlinestatus : Maxe80 ist offline
Registriert seit: May 2006
Beiträge: 19
Maxe80 ist zur Zeit noch ein unbeschriebenes Blatt
Maxe80 eine Nachricht über ICQ schicken
Standard

So hier mein funktionierender CODE:
PHP-Code:
<?php 
//DATEI NUR ZUM LESEN ÖFFNEN, DATEIZEIGER STEHT AM ANFANG: 
$datei fopen('../upload/web/itera.txt','r'); 

//ZEILENWEISE DURCH DIE DATEI GEHEN: 
while (!feof($datei)) 
   { 
   
//GANZE ZEILE ALS EINEN STRING EINLESEN; DIE ZAHL GIBT DIE MAXIMALE LÄNGE IN BYTE AN: 
   
$zeile fgets($datei,1024); 
   
$regex "/ORIA    ([0-9]+) ([.0-9]+) ([.0-9]+)  ([-. .0-9]+)   ([-. .0-9]+)  ([-. .0-9]+)/iU";
  if (
preg_match_all($regex,$zeile,$matches,PREG_SET_ORDER))
  {
    foreach(
$matches as $match)
    {
    echo 
$zeile.'<br>';
    }
  } 
 } 
//DATEI WIEDER SCHLIESSEN: 
fclose($datei); 
?>
Funktioniert wunderbar. Ich bin für die Hilfe sehr dankbar.

Nun jedoch zurück zur Zahlengruppe. Mein Ziel ist es nun die einzelnen Zahlenwerte auszulesen und in ein Formular zu übertragen. So dass entsteht:

Die CODEZEILE nochmal:

Code:
ORIA    36 4490697.497 5922175.080  1178.505   2.5268
Formular:

TextFeld1 36
TextFeld2 4490697.497
TextFeld3 5922175.080 ....

Da bin ich gerade am knobeln bei.
Mit Zitat antworten
  #5 (permalink)  
Alt 05-05-2006, 19:31
boris-schneider
 Junior Member
Links : Onlinestatus : boris-schneider ist offline
Registriert seit: Apr 2006
Ort: Hessen/FFM
Beiträge: 208
boris-schneider ist zur Zeit noch ein unbeschriebenes Blatt
boris-schneider eine Nachricht über ICQ schicken
Standard

bau mal in die foreach ausgabe das hier ein
PHP-Code:
echo '<pre>';
print_r($match);
echo 
'</pre>'
Das ergebnis ist selbsterklärend
Mit Zitat antworten
  #6 (permalink)  
Alt 08-05-2006, 19:22
Maxe80
 Newbie
Links : Onlinestatus : Maxe80 ist offline
Registriert seit: May 2006
Beiträge: 19
Maxe80 ist zur Zeit noch ein unbeschriebenes Blatt
Maxe80 eine Nachricht über ICQ schicken
Standard

Das hat auch super geklappt. Vielen Dank. Der Code ist drinn.

Weitere Frage:

Weiß jemand, wie ich innerhalb einer foreach-Schleife die ausgelesenen Parameter direkt an eine andere Datei zum verarbeiten schicken kann?
Mit Zitat antworten
  #7 (permalink)  
Alt 08-05-2006, 20:03
Koala
 PHP Junior
Links : Onlinestatus : Koala ist offline
Registriert seit: Jan 2006
Beiträge: 887
Koala ist zur Zeit noch ein unbeschriebenes Blatt
Standard

in ne Session packen und dann (nach der Schleife) per header Location
Mit Zitat antworten
  #8 (permalink)  
Alt 08-05-2006, 21:56
Maxe80
 Newbie
Links : Onlinestatus : Maxe80 ist offline
Registriert seit: May 2006
Beiträge: 19
Maxe80 ist zur Zeit noch ein unbeschriebenes Blatt
Maxe80 eine Nachricht über ICQ schicken
Standard

Habe ich mit header() probiert. Klappt nicht. Kann man diese Funktion nicht nur am Anfang einer Datei nutzen?

PHP-Code:
header(Locationdatei.php?Parameter); 
Hast du vielleicht einen Codeschnipsel für mich Koala?
Mit Zitat antworten
  #9 (permalink)  
Alt 08-05-2006, 22:04
Benutzerbild von onemorenerd onemorenerd
  Moderator
Links : Onlinestatus : onemorenerd ist offline
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.471
onemorenerd wird schon bald berühmt werdenonemorenerd wird schon bald berühmt werden
Standard

Schonmal was von Strings gehört?!?

Und nach Location muß eine absolute URI angegeben werden, also http://example.com/pfad/datei.php.
Mit Zitat antworten
  #10 (permalink)  
Alt 09-05-2006, 09:09
Maxe80
 Newbie
Links : Onlinestatus : Maxe80 ist offline
Registriert seit: May 2006
Beiträge: 19
Maxe80 ist zur Zeit noch ein unbeschriebenes Blatt
Maxe80 eine Nachricht über ICQ schicken
Standard

Hallo,

ich habe es mit SESSION und der header Funktion probiert. Ich erhalte jedoch den Fehler

Code:
Warning: Cannot modify header information - headers already sent by (output started at itera2xml.php:9) in itera2xml.php on line 30
PHP-Code:
foreach(...... as ....)
{
 
//Anweisung
}
header("Location: URL+datei.php"); 
Was mache ich falsch? Es funktioniert nicht.
Mit Zitat antworten
  #11 (permalink)  
Alt 09-05-2006, 09:18
wahsaga
  Moderator
Links : Onlinestatus : wahsaga ist offline
Registriert seit: Sep 2001
Beiträge: 25.236
wahsaga befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Original geschrieben von Maxe80
Was mache ich falsch?
Auch du hast den Sticky Thread in diesem Forum nicht beachtet, in dem dieses schon unzählige Male diskutierte und auch im Manual deutlich erklärte "Problem" für die Merkbefreiten noch mal erläutert wird.
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
Mit Zitat antworten
  #12 (permalink)  
Alt 09-05-2006, 09:53
Koala
 PHP Junior
Links : Onlinestatus : Koala ist offline
Registriert seit: Jan 2006
Beiträge: 887
Koala ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Die Frage ist ja:

Was willst Du erreichen?

Eine Datei einlesen und die Daten weiterverarbeiten.

Sollen die Daten vorher ausgegeben werden
oder erst in dem Formular?

Wenn sie erst im Formular ausgegeben werden,
zu was brauchst Du dann ne Weiterleitung?

Ich würds so machen:

Formulardaten prüfen

wenn ok -> alles weitere

wenn nicht -> Datei einlesen und Formular anzeigen.
Mit Zitat antworten
  #13 (permalink)  
Alt 09-05-2006, 10:12
Maxe80
 Newbie
Links : Onlinestatus : Maxe80 ist offline
Registriert seit: May 2006
Beiträge: 19
Maxe80 ist zur Zeit noch ein unbeschriebenes Blatt
Maxe80 eine Nachricht über ICQ schicken
Standard

Ich denke, ich habe den Fehler gefunden.

Vor einem header, darf keine Ausgabe erzeugt werden.

Die Warnung tritt immer dann auf,
wenn vor dem Aufruf der header-Funktion
eine Ausgabe “gesendet” wurde und das ist bei mir der Fall.

Dann ist es für mich die falsche Option.

Das Formular ist nur eine Variante.
Wenn ich ein Textfile (siehe oben) einlese
und dies mit 100 gar 1000 Zeilen gefüllt ist,
möchte ich dem Nutzer das ewige geklicke
im Formular ersparen und den Prozess
automatisiert durchlaufen lassen.
Am Ende wird diese Textdatei in eine XML-Datei umtransformiert.
Für jede "ORIA"-Zeile (siehe CODE oben)
wird dann ein eigenes kleines XML-File erstellt etc..
Dieses kleine XML file wird dann einer größeren XML-Datei angehängt usw. Das nur zum Hintergrund.

Wichtig ist mir, dass die Daten innerhalb der Schleife direkt
an eine PHP-Datei gesendet werden,
die hinten ein XML-File ausspuckt.
Das ist alles fertig. Ich bastele jetzt nur noch an dem Automatisierungsprozess.

Code:
Foreach-Schleife ausführen --> Parameter auslesen --> Weiterschicken zur Generierung des XML-Outputs
Danke für Eure Mithilfe.

Geändert von Maxe80 (09-05-2006 um 10:45 Uhr)
Mit Zitat antworten
  #14 (permalink)  
Alt 11-05-2006, 12:01
Maxe80
 Newbie
Links : Onlinestatus : Maxe80 ist offline
Registriert seit: May 2006
Beiträge: 19
Maxe80 ist zur Zeit noch ein unbeschriebenes Blatt
Maxe80 eine Nachricht über ICQ schicken
Standard

Hallo,

kann mir jemand bei folgendem Problem bitte helfen die einzelnen Strings auszulesen.

Textdatei:
Code:
ORIA    38 4490044.270 5922366.589  1184.754   2.9589    0.2473 
ORIA    39 4489718.426 5922460.573  1186.111   1.6081   -1.4088
ORIA    40      12.559      11.089     8.624 -17.3298   73.4098
ORIA    41      13.174      11.402     8.579 -45.0145   75.9854

Ich versuche es mit dem Code:

PHP-Code:
$regex "/ORIA ([ 0-9]+) ([ .0-9]+) ([ .0-9]+)  ([ .0-9]+) ([ -.0-9]+) ([-. 0-9]+)/i"
Bekomme jedoch das
Code:
Array
(
    [0] => ORIA    36 4490697.497 5922175.080  1178.505   2.5268  -0.7971 181.9945   
    [1] =>    36
    [2] => 4490697.497 5922175.080 
    [3] => 1178.505 
    [4] => 2.5268 
    [5] => -0.7971
    [6] =>  
)
Der Fehler ist in ARRAY[2] zu sehen. Dort werden zwei Parameter ausgegeben, was aber nicht so sein soll. Alles wird durch eine falsche Einstellung verschoben. Kann mir jemand bei den regulären Ausdrücken helfen?

Gruß Maxe
Mit Zitat antworten
  #15 (permalink)  
Alt 11-05-2006, 12:30
Koala
 PHP Junior
Links : Onlinestatus : Koala ist offline
Registriert seit: Jan 2006
Beiträge: 887
Koala ist zur Zeit noch ein unbeschriebenes Blatt
Standard

dieser Regex ersetzt alle Leerzeichen die mehr als einmal
vorkommen durch ein einziges Leerzeichen:

$result = preg_replace('/ {2,}/', ' ', $subject);

Das Array erzeugst Du dann mit $erg = explode(" ", $result);
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


PHP News

Die RIGID-FLEX-Technologie
Die RIGID-FLEX-TechnologieDie sogenannte "Flexible Elektronik" , oftmals auch als "Flexible Schaltungen" bezeichnet, ist eine zeitgemäße Technologie zum Montieren von elektronischen Schaltungen.

06.12.2018 | Berni

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni


 

Aktuelle PHP Scripte

Newsmanager

Der Newsmanager ist ein Newssystem und Newsletter in einem. Mit WYSIWYG Editor und E-Mail import aus einer bestehenden MySql Datenbank sowie dynamische Kategorien / Themen Filter.

11.09.2019 Stephan_1972 | Kategorie: PHP/ News
Modelmanager

Der Modelmanager ist ein Webtool für Fotografen, kann als komplette Homepage oder als Webtool installiert werden.

11.09.2019 Stephan_1972 | Kategorie: PHP/ Webservice
ContentLion - Open Source CMS ansehen ContentLion - Open Source CMS

ContentLion ist ein in PHP geschriebenes CMS, bei dem man Seiten, Einstellungen usw. in Ordnern lagern kann

22.08.2019 stevieswebsite2 | Kategorie: PHP/ CMS
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 22:31 Uhr.