Olli1967: String zerlegen und in Datenbank speichern

Guten Morgen,

ich versuche gerade einen String in seine Bestandteile zu zerlegen und in die Datenbank zu schreiben. Der String sieht wie folgt aus:

Fr,12.06.2009,06,28,24,875,SPS12 ,S->,MFR1SA12LI010908568807VBBEC ********************
Fr,12.06.2009,06,28,25,062,SPS12 ,<-E,SA12MFR1LU011207220535AB02**********************
Fr,12.06.2009,06,28,25,312,SPS12 ,<-E,SA12MFR1LQ011007220646**************************
Fr,12.06.2009,06,28,25,406,SPS12 ,<-E,SA12MFR1LT011007220646**************************
Fr,12.06.2009,06,28,26,093,SPS12 ,<-E,SA12MFR1LQ011107220538**************************
Fr,12.06.2009,06,28,26,109,SPS12 ,<-E,SA12MFR1LU011007220645AB02**********************
Fr,12.06.2009,06,28,26,140,SPS12 ,S->,MFR1SA12LI011107220538****C ********************

bisher habe ich es geschafft alles was "," getrennt ist zu zerlegen und mit folgendem Script in die Datenbank zu schreiben:

  
<?php  
error_reporting(E_ALL);  
  
function daten_import($source)  
{  
  $source = fopen($source, "rb");  
  $db = mysqli_connect("localhost","root","start","","3306") or die("Keine Verbindung zur Datenbank!");  
  $ergebnis=mysqli_query($db, $sql);  
  $i=0;  
  
  if ($source)  
{  
	while (false !== (!feof($source)))  
	{  
		$ipteiler = fgets($source);  
	list($t1, $t2, $t3, $t4, $t5, $t6, $t7, $t8, $t9) = explode(",", $ipteiler);  
		  
	  
	$ins = ("replace into telegramme.`test`  
	values('".$t1."','".$t2."','".$t3.":".$t4.":".$t5.":".$t6."','".$t7."','".$t8."','".$t9."');");  
    $i++;  
	echo ".";  
	  
	  
$ergebnis=mysqli_query($db, $ins);  
//$muell_loeschen=("delete from telegramme.`daten` where richtung not like 'S->' and richtung not like '<-E'");  
//$ergebnis=mysqli_query($db, $muell_loeschen);  
  
  	}  
}  
 else  
{  
	fclose($source);  
 return false;  
}  
  
	echo "fertig! von $source wurden $i Zeilen in die Datenbank geschoben<br>";  
	fclose($source);  
  return true;  
}  
  
// Hier ist das Script durchgelaufen  
$_filenames = glob('G:\xampp\htdocs\Kartonwege\Test\*.csv');  
  
if (is_array($_filenames))   ## es würde auch reichen "if ($filenames)", aber das ist schmuddleig  
{  
    foreach($_filenames as $source)  
    {  
  
        $ready = daten_import($source);  
  
        if ($ready)  
        {  
	    rename("$source","$source.sav");  
            echo "$source wurde fehlerfrei eingelesen<br>";  
        }  
        else  
        {  
            echo "<p>$source konnte nicht fehlerfrei eingelesen werden!</p>";  
        }  
    }  
}  
  
?>  

was ich jetzt nicht hin bekomme ist, den letzten String "$9" der immer genau 48 Zeichen lang ist, an bestimmten stellen weiter zu zerlegen.
Für ein wenig Hilfe würde ich mich tierisch freuen.

Gruß aus Bremen

Olaf

  1. Hi,

    was ich jetzt nicht hin bekomme ist, den letzten String "$9" der immer genau 48 Zeichen lang ist, an bestimmten stellen weiter zu zerlegen.
    Für ein wenig Hilfe würde ich mich tierisch freuen.

    was hast Du versucht, und woran ist es gescheitert?

    Cheatah

    --
    X-Self-Code: sh:( fo:} ch:~ rl:| br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. Hi,

      »» was ich jetzt nicht hin bekomme ist, den letzten String "$9" der immer genau 48 Zeichen lang ist, an bestimmten stellen weiter zu zerlegen.
      »» Für ein wenig Hilfe würde ich mich tierisch freuen.

      was hast Du versucht, und woran ist es gescheitert?

      Cheatah

      Moin,

      bin gerade dabei in der Materie PHP einzusteigen und kenne mich in der Sprache noch nicht so aus. Zeichenketten mit "str_replace" zerlegen bekomme ich auch hin aber Details wie in meinen Problem beschrieben da fehlt mir der Ansatz.

      Olaf

      1. bin gerade dabei in der Materie PHP einzusteigen und kenne mich in der Sprache noch nicht so aus. Zeichenketten mit "str_replace" zerlegen bekomme ich auch hin aber Details wie in meinen Problem beschrieben da fehlt mir der Ansatz.

        Du solltest vieleicht sagen, was du aus dem String haben möchtest?
        Stehen diese Zeichen immer an der selben Stelle oder beginnen sie mit einem bestimmten Zeichen?

        1. »» bin gerade dabei in der Materie PHP einzusteigen und kenne mich in der Sprache noch nicht so aus. Zeichenketten mit "str_replace" zerlegen bekomme ich auch hin aber Details wie in meinen Problem beschrieben da fehlt mir der Ansatz.

          Du solltest vieleicht sagen, was du aus dem String haben möchtest?
          Stehen diese Zeichen immer an der selben Stelle oder beginnen sie mit einem bestimmten Zeichen?

          Sie stehen schon an der selben Stelle, aber ich habe ein Telegramm was 38 Zeichen lang ist und das andere ist 48 Zeichen lang. Mittlerweile bekomme ich es hin das Telegramm mit substr zu zerlegen aber ich weiss nicht wie man 2 Functionen schaltet anhand der Stringlänge. Z.B.:

          MFR1SPV3LI3707546064000001VBBEH ******

          substr($var, 12, 8) ergibt 07546064

          während ich für das 48er Telegramm

          MFR1SA12LI010908525908VBBEC ********************

          substr($var, 14, 8) 08525908 brauche.

          Also bevor der substr ausgeführt wird müsste festgestellt werden wie lang das Telegramm ist.

          1. Hi,

            MFR1SPV3LI3707546064000001VBBEH ******
                   MFR1SA12LI010908525908VBBEC ********************

            so wie es aussieht, möchtest Du alles abgesehen von den Sternchen haben. Dies kannst Du u.a. erreichen, indem Du alle Sternchen durch einen Leerstring ersetzt, oder indem Du den Teilstring vom ersten Zeichen bis vor das erste Sternchen nimmst.

            Cheatah

            --
            X-Self-Code: sh:( fo:} ch:~ rl:| br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
            X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
            X-Will-Answer-Email: No
            X-Please-Search-Archive-First: Absolutely Yes
            1. Hi,

              »»        MFR1SPV3LI3707546064000001VBBEH ******
              »»        MFR1SA12LI010908525908VBBEC ********************

              so wie es aussieht, möchtest Du alles abgesehen von den Sternchen haben. Dies kannst Du u.a. erreichen, indem Du alle Sternchen durch einen Leerstring ersetzt, oder indem Du den Teilstring vom ersten Zeichen bis vor das erste Sternchen nimmst.

              Cheatah

              »»

              hi

              nein, ich brauche schon alles. Die Positionen von den Daten liegen nur an unterschiedlicher Stelle. Die ersten 10 Stellen vom 38er und 48er Telegramm sind gleich aber die Position wie z.B. VBBE liegt im 38er Telegramm an Stelle 26 während es im 48er an 22ster Stelle steht. Die Information bekomme ich mit substr ganz gut ausgelesen nur welches substr angewendet werden muss lässt sich nur anhand der Länge bestimmen. Und genau das weiß ich nicht wie man das switcht.

              Gruß Olaf

              1. Hello,

                »»        MFR1SPV3LI3707546064000001VBBEH ******
                »»        MFR1SA12LI010908525908VBBEC ********************

                so wie es aussieht, möchtest Du alles abgesehen von den Sternchen haben. Dies kannst Du u.a. erreichen, indem Du alle Sternchen durch einen Leerstring ersetzt, oder indem Du den Teilstring vom ersten Zeichen bis vor das erste Sternchen nimmst.

                Cheatah
                »»

                hi

                nein, ich brauche schon alles. Die Positionen von den Daten liegen nur an unterschiedlicher Stelle. Die ersten 10 Stellen vom 38er und 48er Telegramm sind gleich aber die Position wie z.B. VBBE liegt im 38er Telegramm an Stelle 26 während es im 48er an 22ster Stelle steht. Die Information bekomme ich mit substr ganz gut ausgelesen nur welches substr angewendet werden muss lässt sich nur anhand der Länge bestimmen. Und genau das weiß ich nicht wie man das switcht.

                siehe https://forum.selfhtml.org/?t=187732&m=1248463

                und http://de3.php.net/manual/en/language.control-structures.php

                Mal ganz ehrlich:
                Bevor man in einer Programmiersprache anfängt zu schreiben, sollte man sich zumindest einmal die Funktions- und Befehlsreferenz durchgesehen haben, damit man weiß, was es überhaupt gibt in der Sprache. Wie es funktioniert, kann man dann auch noch nachlesen, wenn man es benutzt. Bei Funktionen mir mehr als einem Argument ist das auch für Profis noch angeraten, denn selbst so saubere Sprachen, wie Embarcaresro (Turbo-Pascal) vertauschen manchmal noch die Reihenfolge von einer Funktion zur nächsten. Bei PHP ist das Vertauschen leider Standard -> also immer besser gucken.

                Liebe Grüße aus dem schönen Oberharz

                Tom vom Berg

                --
                Nur selber lernen macht schlau
                http://bergpost.annerschbarrich.de
          2. Hello,

            Sie stehen schon an der selben Stelle, aber ich habe ein Telegramm was 38 Zeichen lang ist und das andere ist 48 Zeichen lang. Mittlerweile bekomme ich es hin das Telegramm mit substr zu zerlegen aber ich weiss nicht wie man 2 Functionen schaltet anhand der Stringlänge. Z.B.:

            MFR1SPV3LI3707546064000001VBBEH ******

            substr($var, 12, 8) ergibt 07546064

            während ich für das 48er Telegramm

            MFR1SA12LI010908525908VBBEC ********************

            substr($var, 14, 8) 08525908 brauche.

            Sind die Sternchen am Ende tatsächlich Sternchen, oder hast Du die jetzt nur eingesetzt, um Inhalte unkenntlich zu machen? Wenn Du nur die Sternchen weg haben möchtest, kannst Du den String einfach trimmen lassen:

            $nutzlast = rtim($telegram,'*');

            http://de3.php.net/manual/en/function.rtrim.php

            Deine andere Frage lässt erkennen, dass Du bisher noch keine Strukturierte Programmierung betrieben hast. Um das im Eilzugtempo nachzuholen, empfehle ich Dir mal

            http://tut.php-quake.net/de/

            Liebe Grüße aus dem schönen Oberharz

            Tom vom Berg

            --
            Nur selber lernen macht schlau
            http://bergpost.annerschbarrich.de
            1. Hi,

              Sind die Sternchen am Ende tatsächlich Sternchen, oder hast Du die jetzt >>nur eingesetzt, um Inhalte unkenntlich zu machen? Wenn Du nur die Sternchen >>weg haben möchtest, kannst Du den String einfach trimmen lassen:

              $nutzlast = rtim($telegram,'*');

              es sind tatsächlich Sternchen. Es soll auch nichts getrimmt werden, das habe ich schon mit einem Script in der Datenaufbereitung gemacht. Es geht rein darum, wie schalte ich eine Funktion die vorher abfragt ob der Inhalt der Variable 38 oder 48 Stellen hat und dann erst die substr Routinen ausführt.

              Deine andere Frage lässt erkennen, dass Du bisher noch keine Strukturierte >>Programmierung betrieben hast. Um das im Eilzugtempo nachzuholen, empfehle >>ich Dir mal

              Ich danke für Empfehlungen bezüglich "Strukturierte Programmierung" bin halt am lernen und habe auch eine Menge Schulungsmaterial über PHP & MySQL Zuhaus.

              Gruß Olaf

              1. Hello,

                Ich danke für Empfehlungen bezüglich "Strukturierte Programmierung" bin halt am lernen und habe auch eine Menge Schulungsmaterial über PHP & MySQL Zuhaus.

                Nun, dann solltest Du dir das Kapitel "Kontrollstrukturen" ansehen und im PHP-Manual die Stringfunktionen und -behandlung.
                http://de3.php.net/manual/en/language.types.string.php
                http://de3.php.net/manual/en/ref.strings.php

                Du wirst mit strlen() und "if() elseif() else()" weiterkommen.

                Liebe Grüße aus dem schönen Oberharz

                Tom vom Berg

                --
                Nur selber lernen macht schlau
                http://bergpost.annerschbarrich.de
  2. Hi,

    was ich jetzt nicht hin bekomme ist, den letzten String "$9" der immer genau 48 Zeichen lang ist, an bestimmten stellen weiter zu zerlegen.

    Definiere "bestimmte Stellen".

    MfG ChrisB

    --
    Light travels faster than sound - that's why most people appear bright until you hear them speak.