Daten auslesen aus Datei und in Variable speichern
Thomas Z.
- php
Moin Moin...
Bräuchte mal ein wenig Hilfe folgender Sache.
Ich bekomme ein Mail in der stehen folgende Sachen.
Kunden ID: 1
Pos: 1
Kunden ID: 1
Pos: 1
usw usw.
dann gibt es eine Mail die beinhaltet folgenden Text
Kunden ID: 1
Kunden NA: nein
Kunden ID: 2
Kunden NA: ja
etc etc.
Ich hab mir da ein Script gestrickt welches in den jeweiligen Zeilen sucht.
Nur macht das nicht viel Sinn weil es ja zwei unterschiedliche Texte enthält.
Jemand eine Idee.....
Gruss Thomas
Hi,
Ich hab mir da ein Script gestrickt welches in den jeweiligen Zeilen sucht.
Nur macht das nicht viel Sinn weil es ja zwei unterschiedliche Texte enthält.
wenn Dein Problem darin bestehen sollte, dass Du E-Mails verschiedenen Typs mit Suchen und Ersetzen bearbeiten willst, dann folgendes:
1.) E-Mail komplett in Array laden
2.) Array durchlaufen und anhand eines Suchmusters Ersetzungen durchführen (nicht anhand fester Zeilennummern!)
Ansonsten bitte noch mal "durchklingeln". :-)
Bossie
Moin Bossie
Ich möchte die bestimmten Datensaetze suchen, in Variable speichern und dann mit einem MySQL Statement in die MySQL Datenbank einfügen.
Letzteres ist kein Thema.
Gruss Thomas
Hi,
Ich möchte die bestimmten Datensaetze suchen, in Variable speichern und dann mit einem MySQL Statement in die MySQL Datenbank einfügen.
Letzteres ist kein Thema.
ich revidiere meine weiter o.g. getätigte Aussage. Zuerst (nach komplettem Laden der E-Mail) anhand einer Musterprüfung den E-Mailtyp möglichst zweifelsfrei identifizieren, dann an festen Stellen (an den erwarteten Stellen, eventuell nochmals Mustersuche auf eine Zeile) die Werte auslesen und diese dann in die DB schreiben. Fehlerbehandlung implementieren!
Es gibt da String-Funktionen bei PHP, diese recherchieren.
Bossie
Hi,
am besten die gesamte E-Mail mit einer von Dir erstellten Schablone abgleichen.
Bossie
Hey
Also mit den festen Stellen kein Thema
$lines = file ('admin/messagesbackup/edv');
// initialisiere das assoziative Array, das das Ergebnis aufnehmen wird
$date = "";
$ip = "";
$ip1 = "";
// Durchgehen des Arrays und Anzeigen des HTML Source inkl. Zeilennummern
foreach ($lines as $line_num => $line) {
// echo "{$line_num}</b> : " . htmlspecialchars($line) . "<br>\n";
// Zeilen nicht ausgeben, sondern verarbeiten :-)
// Zeile 0 enthält das Datum
// 0 : From MAILER-DAEMON Sat Dec 17 13:21:06 2005
if ($line_num == 0) {
// From MAILER-DAEMON Sat Dec 17 13:21:06 2005
// Teile die Zeichenkette am Leerzeichen auf: Separator: " "
// Nach dem zweiten Leerzeichen interessiert der ganze Rest: Limit: 3
// Ergebnis: From $parts[0]
// MAILER-DAEMON $parts[1]
// Sat Dec 17 13:21:06 2005 $parts[2]
$parts = explode(" ", $line, 3);
$date = $parts[2]; // Datum erledigt
}
// Suche weiter nach der Zeile mit dem Inhalt inet Adresse
if ($line_num == 20)
{
hier suche ich nach dem Datum....
nur kann es sein das die Email 20 mal die Einträge hat die ich oben geschildert habe. Also kann ich mit festen Zeilen das nicht machen. Es muss nur nach den Daten gesucht werden und zwar immer nach den beschriebenen Kriterien.
Wenn ich dich falsch verstanden habe. Sorry
Gruss Thomas
Hi,
wenn die E-Mail nicht allzu komplex ist, kannst Du diese - wie Du es auch tust - stückweise analysieren. Wenn Du mit verschiedenen E-Mailtypen arbeitest und Einfluss auf die Gestaltung der E-Mail hast, dann solltest Du den E-Mailtyp möglichst weit oben fest kodieren. Also bspw. "E-Mailtyp=FehlermeldungVertrieb" oben (Betreffzeile?) einfügen.
Musst Du damit rechnen, dass die Struktur der E-Mail stark variiert, weil bspw. per Hand Einträge gemacht werden, dann rate ich Dir von dieser Herangehensweise Abstand zu nehmen, denn der Textanalyse mit Hilfe von Algorythmen sind enge Grenzen gesetzt.
Es besteht also die entfernte Möglichkeit, dass Du etwas vorhast, was nicht geht. - Nur zur Info...
Bossie
So, alles eigentlich ganz einfach -)))
Nehmen wir an wir haben eine Textdatei, in dieser steht geschrieben
Kunden ID: 1
Pos: 1
Kunden ID: 2
Pos: 3
Kunden ID: 3
Pos 2
da das ganze per Mail kommt kann es auch sein bzw es ist so das in der Mail (Textdatei) drin steht
Kunden ID: 1
Kunden NA: nein
Kunden ID: 2
Kunden NA: ja
Was ich möchte ist :
Es soll immer nach dem Pärchen gesucht werden entweder
Kunden ID: 1
Pos : 1
etc etc
oder nach
Kunden ID: 1
Kunden NA: nein
bzw. den Inhalten hinter den Doppelpunkten
Diese Speichern in Variable und uebergeben an MYsql
wenn das Script dann dort rueber gelaufen ist wird die Mail automatisch gelöscht.
Eigentlich nichts wildes...
Gruss Thomas
Hi,
Eigentlich nichts wildes...
dann einfach umsetzen und den Laden hier nicht aufhalten...
;-)
Bossie
Ja nee is klar, so richtig geholfen wurde mir nicht dadurch.
Gruss Thomas
Hi,
Ja nee is klar, so richtig geholfen wurde mir nicht dadurch.
manchmal wird einem auch geholfen, wenn einem nicht geholfen wird.
Wenn Du wirklich sowas umsetzen willst:
"
Was ich möchte ist :
Es soll immer nach dem Pärchen gesucht werden entweder
Kunden ID: 1
Pos : 1
etc etc
oder nach
Kunden ID: 1
Kunden NA: nein
bzw. den Inhalten hinter den Doppelpunkten
Diese Speichern in Variable und uebergeben an MYsql
"
Dann fällt mir zumindest dazu nichts anderes ein als ein "Machs doch!". Oder schreib doch wenigstens _einmal_ was nicht klappt, oder ob es eine Fehlermeldung gibt oder ob andersartig gelagerte Probleme vorliegen.
Cheers
Bossie
Hey Bossie
Ich benötige erstmal einen Vorschlag wie und mit welchen Befehlen ich das umsetzen kann (grep, find etc.)
Gruss Thomas
Hi,
Ich benötige erstmal einen Vorschlag wie und mit welchen Befehlen ich das umsetzen kann (grep, find etc.)
http://www.php.net/manual/en/ref.strings.php
Bossie
Irgentwie komm ich mir verarscht vor...
Gruss Thomas
Hi,
Irgentwie komm ich mir verarscht vor...
gut, nee, im Ernst, das ist schlecht. Was ist Dein Problem? Kannst Du nicht englisch? Willst Du, dass man hier für Dich kodiert? Live coding so zu sagen? Oder gibt es noch anders gelagerte Probleme von denen zumindest Bossie nichts ahnt? :-)
cheers
Bossie
Hi..
Also so ein paar Codeschnipsel würden mir schon weiter helfen.
Ich bekomme es zwar hin das in bestimmten Zeilen gesucht wird line=bla bla nur wenn ich das fort führen würde bis meinetwegen 50 Zeilen kämen irgentwannn leere Datensaetze daraus also möchte ich es in einer anderen Weise umsetzen.
Und da bin ich überfragt da ich kein Experte bin und das mal ab und wann mache.
Gruss Thomas
Hallo Thomas,
ein Code-Schnipsel war Dir bereits gegeben. Was fehlt Dir denn nun noch?
Gruß aus Berlin!
eddi
Tach Eddie
Also das was du mir gepostet hast , blicke ich nicht so wirklich durch, wo sind die Variablen die die Werte dann enthalten ?
Gruss Thomas
Re:
Also das was du mir gepostet hast , blicke ich nicht so wirklich durch, wo sind die Variablen die die Werte dann enthalten ?
Von welchen Variablen in Gottes Namen sprichst Du?
Was _genau_ willst Du überhaupt machen?
Wie sollen die Werte aussehen, die Du in die DB packen willst?
Liefere dazu bitte ein Beispiel mit einer vollständigen Mail und den daraus zu extrahierenden Daten!
(Es ist doch kein Wunder, daß Du Dich verarscht fühlst, wenn Du nicht die notwendigen Parameter der Problemlösungen bennenst!)
Gruß aus Berlin!
eddi
Hi
Guck mal auf http://forum.de.selfhtml.org/?t=126744&m=817657
da hatte ich es eigentlich beschrieben.
Zur Veranschaulichung hier mal ein Script aus dem ich mir 3 Werte hole.
Datum, Kunden ID und Kunden NA
und dieses in Variablen speichern und dann uebergebe.
<?php
$lines = file ('admin/messagesbackup/edv');
aufnehmen wird
$date = "";
$ip = "";
$ip1 = "";
Zeilennummern
foreach ($lines as $line_num => $line) {
($line) . "<br>\n";
if ($line_num == 0) {
Separator: " "
Rest: Limit: 3
$parts = explode(" ", $line, 3);
$date = $parts[2]; // Datum erledigt
}
if ($line_num == 20)
{
einmal vor,
enthält.
if(strpos($line, "Kunden ID") !== false) {
Leerzeichen haben
$ip1 = explode(":", $part1[1]);
$Kundenid = $ip1[1];
}}
if ($line_num == 21)
{
if(strpos($line, "Kunden NA") !== false) {
Leerzeichen haben
$part = explode(" ", trim($line));
$ip = explode(":", $part[1]);
$Kundenna = $ip[1];
}
}
}
if ($parts[2] == '')
{$date2="1";}
else
$date1=$parts[2];
if ($part[2] == '')
{$ip2="1";}
else
$ip=$part[2];
if ($part1[2] == '')
{$ip3="1";}
else
$Kundenid=$part1[2];
if ($parts[2] == '')
{$user="user";
$password="passwort";
$host="localhost";
$dbname="database";
$db = mysql_connect($host, $user, $password)or die("Verbindung fehlgeschlagen");
mysql_select_db($dbname,$db);
$sql="";
mysql_query($sql);
mysql_close();}
else
{
$user="user";
$password="password";
$host="localhost";
$dbname="database";
$db = mysql_connect($host, $user, $password)or die("Verbindung fehlgeschlagen");
mysql_select_db($dbname,$db);
$sql="UPDATE lieferungen SET Lieferstatus='$date1', NA='$ip' WHERE kd_id='$part1[2]'";
mysql_query($sql);
mysql_close();
echo mysql_error() ;
}
?>
<?php
echo mysql_error() ;
?>
vielleicht wird es jetzt klarer -)))))
Re:
Von welchen Variablen in Gottes Namen sprichst Du?
Was _genau_ willst Du überhaupt machen?
Wie sollen die Werte aussehen, die Du in die DB packen willst?
Liefere dazu bitte ein Beispiel mit einer vollständigen Mail und den daraus zu extrahierenden Daten!
Guck mal auf...
Ich hatte mich klar ausgedrück, aber seisdrum >:-{
<?php
$eml=file_get_contents('admin/messagesbackup/edv');
// Ausplalten der Mail in Headeranteil und Messagebody
list($head,$eml)=explode("\n\n",str_replace("\r\n","\n",$eml),2);
$head=explode("\n",$head,2);
$head=explode(' ',$head[0]);
$date=$head[2]; // Datum erledigt
// Message-Body: Hier kann erst weitergemacht werden, wenn Du die Ausgabe von folgendem code hier postest!
echo $eml;
?>
Gruß aus Berlin!
eddi
Hi...
so wenn ich dein Script ausführe bekomme ich als Ergebnis
Kunden ID: 6 Pos: 1 Kunden ID: 7 Pos: 2 -- Diese Nachricht wurde auf Viren und andere gefaehrliche Inhalte untersucht und ist - aktuelle Virenscanner vorausgesetzt - sauber. MailScanner dankt transtec Computer fuer die freundliche Unterstuetzung.
Die Mail sieht so aus die sich in /admin/edv befindet
From bla@domain.de Fri Mar 31 13:44:40 2006
Return-Path: bla@domain.de
Received: from Inbox (csd-ip-139-7-60-66.vodafone-net.de [139.7.60.66])
by (8.13.6/8.13.4) with ESMTP id k2VBiAcG009667
(version=TLSv1/SSLv3 cipher=RC4-MD5 bits=128 verify=NO)
for <>; Fri, 31 Mar 2006 13:44:23 +0200
Message-Id: <200603311144.k2VBiAcG009667@>
From: "" <>
To: <>
Subject: Tour
Date: Fri, 31 Mar 2006 13:44:32 +0200
MIME-Version: 1.0
Content-Type: text/plain;
charset="iso-8859-1"
Content-Transfer-Encoding: 7bit
X-MimeOLE: Produced By Microsoft MimeOLE V5.00.1432.1
X-www..de-MailScanner-Information: Please contact the ISP for more information
X-www..de-MailScanner: Found to be clean
X-www..de-MailScanner-From:
X-Spam-Status: No
Kunden ID: 6
Pos: 1
Kunden ID: 7
Pos: 2
--
Diese Nachricht wurde auf Viren und andere gefaehrliche Inhalte untersucht
und ist - aktuelle Virenscanner vorausgesetzt - sauber.
MailScanner dankt transtec Computer fuer die freundliche Unterstuetzung.
So nun muessen nur noch die Pärchen zusammen gestzt zu werden sprich
Kunden ID: 6 Pos: 1 gehören zusammen und Kunden ID: 7 Pos: 2
gehören zusammen
diese muessen dann in Variablen gespeichert werden.
Ich möchte dann mit dem SQl Statement
$sql="UPDATE lieferungen SET Pos='$variable' WHERE kd_id='$variable1'";
wobei $variable = die Pos ist und $variable1 die Kunden ID
die daten in die Datenbank einfügen.
Gruss Thomas
Hi,
So nun muessen nur noch die Pärchen zusammen gestzt zu werden sprich
Kunden ID: 6 Pos: 1 gehören zusammen und Kunden ID: 7 Pos: 2
gehören zusammen
nur mal so interessehalber - hast Du in der Zwischenzeit irgendwelche Bemühungen getätigt Dich selbst dem angestrebten Entwicklungsziel in irgendeiner Form zu nähern?
Bossie
Mahlzeit Bossie
Ich bin soweit das ich die Variablen $head[1] bis [7] mir anzeigen lassen konnte, beinhalten im Moment das Datum und die Empfängeradresse.
Ich sagte ja schon ich bin da nicht der fitteste drin.
Gruss Thomas
Hi,
Ich bin soweit das ich die Variablen $head[1] bis [7] mir anzeigen lassen konnte, beinhalten im Moment das Datum und die Empfängeradresse.
Ich sagte ja schon ich bin da nicht der fitteste drin.
na, Du hast ja eddi aus Berlin. :-)
Aber Du verstehst hoffentlich, dass passendes Kodieren hier eher nicht im Serviceangebot ist und - im Sinne von SELFHTL - Eigeninitiative erwartet wird.
Gruß
Bossie
Ich arbeite dran...
Gruss Thomas
Re:
<?php
$eml=file_get_contents('admin/messagesbackup/edv');
// Ausplalten der Mail in Headeranteil und Messagebody
list($head,$eml)=explode("\n\n",str_replace("\r\n","\n",$eml),2);
$head=explode("\n",$head,2);
$head=explode(' ',$head[0]);
$date=$head[2]; // Datum erledigt
$e_id=explode('Kunden ID: ',$eml);
for($i=1;$i<count($e_id);$i++){
if(count($t=explode("\nPos: ",$e_id[$i]))>1){
// hier kann dann Dein Kram mit der DB hin
speicherFunktion($t[0],$t[1]);
}
else break;
}
for($i=1;$i<count($e_id);$i++){
if(count($t=explode("\nKunden NA: ",$e_id[$i]))>1){
// hier kann dann Dein Kram mit der DB hin
speicherFunktion($t[0],$t[1]);
}
else break;
}
?>
Gruß aus Berlin!
eddi
Hey Eddie
Schönen Dank, nur in der derzeitigen Mail ist kein Kunden NA: enthalten daher bekomme ich wenn ich es richtig sehen den Fehler
Fatal error: Call to undefined function speicherFunktion() in email_filtern.php on line 29
Gruss Thomas
Einzelne Lines bekomme ich hin wie unten ersichtlich ist
if ($line_num == 21)
{
if(strpos($line, "Kunden NA") !== false) {
Leerzeichen haben
$part = explode(" ", trim($line));
$ip = explode(":", $part[1]);
$Kundenna = $ip[1];
nur ist die Sachlage jetzt anders....
Moi Moin,
<?php
$eml=file_get_contents('admin/messagesbackup/edv');
list($head,$eml)=explode("\n\n",str_replace("\r\n","\n",$eml),2);
$head=explode("\n",$head,2);
/* hier asu $head[0] das Datum ermitteln */
$eml=explode("\n",$eml);
$c=count($eml);
for($i=0;$i<$c;$i++){
$line=eplode(':',$eml[$i],2);
speicher_in_DB($line);
}
?>
So recht schlau bin ich aber noch nicht aus Deinem Problemvortag geworden, jedenfalls würde ich das, was ich bis jetzt verstanden habe, wie oben umsetzen.
Gruß aus Berlin!
eddi
Hallo Thomas,
Deine Mail ist bei mir angekommen und läßt mich nun um so frustrierter auf diesen Thread zurückblicken. Es geht mir immer weider nicht in den Kopf, wie jemand mit Datenbanken hantiert und die Kommunikation durch PHP sichert, aber die elementaren Grundlagen der Programmiersprache nicht bereit ist, sich anzueignen.
Mir stößt in diesem Thread insbesondere Dein Mangel an der Fähigkeit, detailreich strukturiert Dein Problem genau beschreiben zu können, auf. Zum einen soll "Kunden ID" mit der darauffolgenden(? - selbst das ist mir noch nicht in der nötigen Deutlichkeit klar geworden) Zeile "Pos: ~" als Datensatz erkannt werden, zum anderen gibt es auch noch anders strukturierte Daten.
Es ist ja ersichtlich, daß Deine Aufgabenstellung komplex ist. Dennoch sträubst Du Dich ebenso - selbst auf Aufforderung hin - Deine Problematik zusammenzutragen und nicht über den gesamten Thread häpchenweise preiszugeben. Das ist kontraproduktiv und versperrt Dir Einsichten von Strukturen, die Dir bei der Probelmlösung durch Programmierung immer wieder begegnen werden.
Ich hatte Dir bereits einen Script gepostet, das nur grobschlecht der Problematik gerecht wird und auch bewußt zu Fehlern neigt. Es soll Dir als Anleitung dienen. Auch wird diese Form der/meiner Hilfe nicht von allen gutgeheißen, da sie nicht zum eigenen/Deinem Nachdenken anregt, was aber zum Kalkül gehört.
Kein Mensch würde sich, insbesondere da in den vergangenen Wintertagen einigen das Dach auf den Kopf gekommen ist, hinstellen und Baupläne von Häusern konstuieren, die dann nach seinem Gutdünken gebaut werden. Vielleicht ist es auch die Gesetzeslage, die Pfusch hier unterbindet und Akademiker auf den Plan ruft.
Ein halbwegs verständiges Menschenkind würde auch nicht zum Skalpell greifen, um sich seiner Geschwüre selbst zu entledigen, sondern in (hoffentlich greifender) Einsicht zu einem Arzt gehen, weil er nicht genug Ahnung von der eigenen Physiologie hat.
So Herr Doktor sie sind in diesem Fall ihr eigener Patien. Hier ist ihr Skalpell und hier können Sie lernen damit umzugehen.
Gruß aus Berlin!
eddi
Hi,
Deine Mail ist bei mir angekommen und läßt mich nun um so frustrierter auf diesen Thread zurückblicken. Es geht mir immer weider nicht in den Kopf, wie jemand mit Datenbanken hantiert und die Kommunikation durch PHP sichert, aber die elementaren Grundlagen der Programmiersprache nicht bereit ist, sich anzueignen.
wenn ich mal etwas spekulieren darf. Da soll Geld gespart werden.
Mir stößt in diesem Thread insbesondere Dein Mangel an der Fähigkeit, detailreich strukturiert Dein Problem genau beschreiben zu können, auf.
Mangelnder Wille ebenfalls.
Es ist ja ersichtlich, daß Deine Aufgabenstellung komplex ist. Dennoch sträubst Du Dich ebenso - selbst auf Aufforderung hin - Deine Problematik zusammenzutragen und nicht über den gesamten Thread häpchenweise preiszugeben. Das ist kontraproduktiv und versperrt Dir Einsichten von Strukturen, die Dir bei der Probelmlösung durch Programmierung immer wieder begegnen werden.
Ich kenne Leute, die sich ähnlich verhalten. Sogar IT-Profis. Also besser eigentlich "Profis", aber die verdienen wirklich Geld mit ihren bescheidenen IT-Kenntnissen. Ist halt Geheimwissen gepaart mit "sozialer Kompetenz". ;-)
So Herr Doktor sie sind in diesem Fall ihr eigener Patien. Hier ist ihr Skalpell und hier können Sie lernen damit umzugehen.
Kennst Du den Spruch mit dem Hopfen und dem Malz? :-)
Bossie
Hallo,
Ich kenne Leute, die sich ähnlich verhalten. Sogar IT-Profis. Also besser eigentlich "Profis", aber die verdienen wirklich Geld mit ihren bescheidenen IT-Kenntnissen. Ist halt Geheimwissen gepaart mit "sozialer Kompetenz". ;-)
Ich dachte TomIRL würde dafür nur weibliche Namen verwenden?!
Kennst Du den Spruch mit dem Hopfen und dem Malz? :-)
Ihhh - Tittenbier (Hopfen) ;)
Gruß aus Berlin!
eddi