Michael2008: Text in eine Grafik umwandeln

Hallo Zuasmmen

Ich hatte ja kürzlich folgenden Thread gestartet:

http://forum.de.selfhtml.org/?t=174329&m=1144996

Ich habe nun eine Lösung gefunden. Ich kann nun die gwünschten Felder aus der CSV auslesen. Nun habe ich eine neue Frage:

Die auszulesende CSV Datei stammt ja von einem online Fussballmanager. In der CSV sind von den Spielern die verschiedenen Informationen und aktuellen Werte. Da gibt es zum Beispiel das Feld "Nationalität". Im entsprechenden Feld gibt es dann die Information als Länderkürzel. zB DE für Deutschland. Nun möchte ich das DE durch eine kleine Flagge ersetzen. Nun ist aber das Problem, dass das DE ja auch in einer anderen Zelle mal vorkommen könnte. So würde dann dieses DE fälschlicher Weise auch umgewandelt.

Ich habe die ausgelesenen Werte in einer HTML Tabelle abgelegt. Mit folgendem Script lese ich die Werte aus der entsprechenden CSV aus:

<?php
if (file_exists('Dateiname.csv')) {
$Datei = fopen('Dateiname.csv','r');
$Zeile1 = fgets($Datei,9999);
$Zeile2 = fgets($Datei,9999);
$Zeile3 = fgets($Datei,9999);
$array1 = explode(";",$Zeile1);
fclose($Datei);
}
echo $array2[3]."<nobr>";
?>

Ist es möglich, nach diesem Script das hier der Wert DE ausgibt, das DE noch  in eine Grafik umzuwandeln?

Wenn ja, was für ein Befehl wäre geeignet?

Danke schon mal für sachdienliche Hinweise die zur Behebung des Problems führen. ;) ;)

  1. echo $begrüßung;

    Nun möchte ich das DE durch eine kleine Flagge ersetzen. Nun ist aber das Problem, dass das DE ja auch in einer anderen Zelle mal vorkommen könnte. So würde dann dieses DE fälschlicher Weise auch umgewandelt.

    Es ist ja keineswegs eien Gesetzmäßigkeit, dass DEs in Flaggen umgewandelt werden. Wenn du also einen Mechanismus dafür entwickelst, warum, meinst du, kannst du nicht dafür sorgen, dass die Umwandlung nur genau die Stellen betrifft, die du umwandeln willst?

    Ich habe die ausgelesenen Werte in einer HTML Tabelle abgelegt. Mit folgendem Script lese ich die Werte aus der entsprechenden CSV aus:

    if (file_exists('Dateiname.csv')) {
    $Datei = fopen('Dateiname.csv','r');

    Du verwendest vermutlich ein Multitasking-Betriebssystem. Zwischen der Feststellung ob die Datei existiert und dem Öffnen kann theoretisch ein anderer Task die Datei gelöscht haben. Auch kann das Öffnen trotz Vorhandenseins misslingen. Besser ist es, zu versuchen, die Datei zu öffnen und durch Auswertung des Funktionsergebnisses Erfolg oder Misserfolg festzustellen und daraufhin entsprechend weiterzuarbeiten.

    $Zeile1 = fgets($Datei,9999);
    $Zeile2 = fgets($Datei,9999);
    $Zeile3 = fgets($Datei,9999);
    $array1 = explode(";",$Zeile1);

    Warum nimmst du nicht fgetcsv()?

    echo $array2[3]."<nobr>";
    Ist es möglich, nach diesem Script das hier der Wert DE ausgibt, das DE noch  in eine Grafik umzuwandeln?
    Wenn ja, was für ein Befehl wäre geeignet?

    Wie genau definierst du Grafik in diesem Kontext? Ist es nicht vielmehr nur eine Zeichenkette, die im HTML-Kontext ein img-Element ergibt? Möchtest du vielleicht, wenn du auf die Zeichenfolge DE triffst, die Zeichenfolge für ein img-Element ausgeben?

    echo "$verabschiedung $name";

    1. Wie genau definierst du Grafik in diesem Kontext? Ist es nicht vielmehr nur eine Zeichenkette, die im HTML-Kontext ein img-Element ergibt? Möchtest du vielleicht, wenn du auf die Zeichenfolge DE triffst, die Zeichenfolge für ein img-Element ausgeben?

      Genau das möchte ich. Es müsste aber abgrenzbar in einem Feld sein, da ich auch eine Zahl ersetzen will. Und wenn ich das Ersetzen auf das gesamte Script ausweiten würde, würde es gleiche Zahlen in anderen Feldern auch ersetzen.

      Und, ist es kein Problem eine Zeichenkette zu ersetzen, die noch vom Script ausgelesen werden muss?

      1. echo $begrüßung;

        Es müsste aber abgrenzbar in einem Feld sein, da ich auch eine Zahl ersetzen will. Und wenn ich das Ersetzen auf das gesamte Script ausweiten würde, würde es gleiche Zahlen in anderen Feldern auch ersetzen.

        Dann wende doch den Test auf DE und die daraufhin andere Ausgabe auf nur dieses eine Feld an. Was genau ist dir an dieser Vorgehensweise unklar? Beim Ausgeben (echo $array2[3]) konntest du dich doch auch auf genau ein Feld beschränken.

        Und, ist es kein Problem eine Zeichenkette zu ersetzen, die noch vom Script ausgelesen werden muss?

        Warum vorher? Zwischen Auslesen und Ausgeben ist doch genug "Platz" zur Manipulation der Daten bzw. zu Entscheidungen was vom Ausgelesenen in welcher Form ausgegeben wird.

        echo "$verabschiedung $name";

        1. Ich habe nun noch weiter gesucht und hier im Forum folgendes Script gefunden:

          $original='DE';
          $resultat=str_replace('DE','<img src="Deutschland.jpg" border="0" alt="Deutschland">',$original);
          echo $resultat;

          Das Script funktioniert leider nicht richtig bei mir und gibt nur die Flagge wieder, es ersetzt aber den Code nicht. Was mach ich falsch?

          1. echo $begrüßung;

            Ich habe nun noch weiter gesucht und hier im Forum folgendes Script gefunden:

            $original='DE';
            $resultat=str_replace('DE','<img src="Deutschland.jpg" border="0" alt="Deutschland">',$original);
            echo $resultat;

            Das Script funktioniert leider nicht richtig bei mir und gibt nur die Flagge wieder, es ersetzt aber den Code nicht. Was mach ich falsch?

            Vermutlich etwas, das dir bei genauem Anschauen des nicht veröffentlichten Teils auffallen wird. Nützlich sein können Kontrollausgaben, vor allem mit var_dump(). Wenn du vermutest, dass die Ersetzung nicht geklappt hat, dann lass dir das Ergebnis so ausgeben, dass es eindeutig der Ersetzungsroutine zugeordnet werden kann. Beispielweise durch Zeichen, die im umliegenden Text nicht vorkommen, die du davor und danach ausgeben lässt. Oder das erwähnte var_dump(), das diesen Effekt nebenbei auch hat.
            Du könntest auch einfach mal in deinen ausgegebenen HTML-Code schauen. Da steht zwischen DE und dem img-Element ein <nobr>, das garantiert nicht aus dem zitierten Code stammt ...

            echo "$verabschiedung $name";

            1. Du könntest auch einfach mal in deinen ausgegebenen HTML-Code schauen. Da steht zwischen DE und dem img-Element ein <nobr>, das garantiert nicht aus dem zitierten Code stammt ...

              Hm, ich habe den <nobr> rausgenommen. Es zuerst eine Fehlermeldung. Als ich noch einen, wahrscheinlich überflüssigen, Punkt gelöscht habe, läuft das Script wieder.

              DE wird aber weiterhin nicht ersetzt.

              So sieht das Script aus, was ist denn falsch an der Ausführung. Wo habe ich den Fehler gemacht?

              <?php
               if (file_exists('csv_kader_aktive.csv')) {
              $Datei = fopen('csv_kader_aktive.csv','r');
              $Zeile1 = fgets($Datei,9999);
              $Zeile2 = fgets($Datei,9999);
              $Zeile3 = fgets($Datei,9999);
              $array1 = explode(";",$Zeile1);
              fclose($Datei);
              }
              echo $array2[4];

              $original='DE';
              $resultat=str_replace('DE','<img src="Germany.jpg" border="0" alt="Deutschland">',$original);
              echo $resultat;

              ?>

              1. echo $begrüßung;

                DE wird aber weiterhin nicht ersetzt.
                So sieht das Script aus, was ist denn falsch an der Ausführung. Wo habe ich den Fehler gemacht?

                Natürlich wird es ersetzt. Das hättest du durch Befolgen aller meiner Hinweise eigentlich sehen sollen. Geh doch nochmal Zeile für Zeile durch und verdeutliche dir, was sie macht. Dann findest du auch die Ausgabe, die für das _zusätzliche_ DE verantwortlich ist.

                echo "$verabschiedung $name";

                1. Natürlich wird es ersetzt. Das hättest du durch Befolgen aller meiner Hinweise eigentlich sehen sollen. Geh doch nochmal Zeile für Zeile durch und verdeutliche dir, was sie macht. Dann findest du auch die Ausgabe, die für das _zusätzliche_ DE verantwortlich ist.

                  Ich habe jetzt einen zweiten Spieler eingesetzt der aus der Schweiz kommt. Die Flagge bleibt aber Deutschland. Wenn ich nun im selben Feld ein zweiter "str_replace" mit CH und der Schweizer Flagge setze, dann habe ich zwei Flaggen...

                  Langsam bin echt ratlos...

                  1. echo $begrüßung;

                    Ich habe jetzt einen zweiten Spieler eingesetzt der aus der Schweiz kommt. Die Flagge bleibt aber Deutschland. Wenn ich nun im selben Feld ein zweiter "str_replace" mit CH und der Schweizer Flagge setze, dann habe ich zwei Flaggen...

                    Wenn in dem Feld sowieso nur DE oder CH drinsteht, dann mach doch eine Fallunterscheidung (if oder switch) und keine Stringersetzung.

                    echo "$verabschiedung $name";

                    1. Wenn in dem Feld sowieso nur DE oder CH drinsteht, dann mach doch eine Fallunterscheidung (if oder switch) und keine Stringersetzung.

                      Nein, es kommen mehrere hinein. Schätze mal das es über 20 mögliche Länderkürzel sein werden.

                      1. Ich habe nun mal das vorhergehende Auslesen des "DE's" entfernt. Die Flagge erscheint aber dennoch. Das Bild wird angezeigt, ohne das es überhaupt vorhanden ist.

                        1. echo $begrüßung;

                          Ich habe nun mal das vorhergehende Auslesen des "DE's" entfernt. Die Flagge erscheint aber dennoch. Das Bild wird angezeigt, ohne das es überhaupt vorhanden ist.

                          Leg doch mal das, was du bisher erzeugt hast, zur Seite, nimm die eine neue Datei, in der du wie folgt beginnst:

                          $land = 'DE'; // oder was auch immer aus dem Feld kommt

                          Versuche nun, dass in der Ausgabe die Fahne zu sehen ist. Ändere nun das DE in CH und ergänze deinen Code so, dass nun die Schweiz zu sehen ist. Dann mach wieder DE draus und überzeuge dich, dass das auch noch geht. Anschließend fahre mit anderen Ländern fort. Sobald du das Prinzip sicher drauf hast kannst du dir die rückwirkenden Einzelprüfungen sparen und nur noch das neu hinzugefügte Land prüfen.

                          Das kannst du nun in das vorhandene einbauen. Und wenn du ganz gut bist, machst du aus diesem eben entwirckelten Code eine Funktion, die ein Landeskürzel übernimmt und eine Fahne zurückliefert.

                          echo "$verabschiedung $name";

                          1. $land = 'DE'; // oder was auch immer aus dem Feld kommt

                            Danke für Deine Hilfe, aber ich habe keinen Plan was ich nachher einsetzen soll. Das komische am "str_replace" Script das ich eingesetzt habe ist, dass es eine Flagge ausgibt obwohl sonst gar kein Code oder etwas geschriebenes drin ist.

                            Wenn ich nun folgenden Text schreibe:
                            Herr Meier kommt aus DE.

                            Dann müsste das DE ja in eine Flagge ersetzt werden. Das geschieht aber nicht. Das str_replace setzt nur einfach eine Flagge hin, ohne das es das vorhergehende, oder nachher kommende DE ersetzen würde...

                            So wie im Link sieht es aus:
                            http://www.illnau-united.ch.vu/kaderliste/test.php

                            Wie muss ich denn nach

                            $land = 'DE';

                            weiterfahren, was sollte als nächstes kommen?

                            1. echo $begrüßung;

                              Das komische am "str_replace" Script das ich eingesetzt habe ist, dass es eine Flagge ausgibt obwohl sonst gar kein Code oder etwas geschriebenes drin ist.

                              Tut mir leid, ich habe keine Kristallkugel. :-)

                              Wenn ich nun folgenden Text schreibe:
                              Herr Meier kommt aus DE.

                              Hast du denn diesen Fall vorliegen? Einen Text, in dem irgendwo ein DE drin vorkommt? Oder hast du ein Feld in einer CSV-Datei, in dem DE und sonst nichts weiter steht?

                              Dann müsste das DE ja in eine Flagge ersetzt werden. Das geschieht aber nicht. Das str_replace setzt nur einfach eine Flagge hin, ohne das es das vorhergehende, oder nachher kommende DE ersetzen würde...

                              Das str_replace() arbeitet wie vorgesehen. Hast du dich mal mit Kontrollausgaben angefreundet, damit du nachverfolgen kannst, welcher Code was macht?

                              Wie muss ich denn nach

                              $land = 'DE';
                              weiterfahren, was sollte als nächstes kommen?

                              Wenn aus dem Feld der CSV-Datei nur dieses DE kommt und CH, AT und so weiter, dann machst du anschließend eine Fallunterscheidung

                              switch ($land) {
                                case 'DE':
                                  $land = 'Fahne von Deutschland';
                                  break;
                                case 'AT':
                                  $land = 'Fahne von Österreich';
                                  break;
                                case 'CH':
                                  $land = 'Fahne der Schweiz';
                                  break;
                                default:
                                  // nix $land bleibt wie es ist.
                              }

                              Zur Kontrolle kannst du dir nun anschauen, was in $land steht: var_dump($land);

                              echo "$verabschiedung $name";

                              1. Danke für Deine Ausführungen. Ich habe eine andere Variante des str_replace eingebaut und es klappt nun wie es soll. Es ersetzt das Kürzel und es bleibt kein überzähliger Code sichtbar.

                                Nun noch eine weitere Frage:
                                Es gibt etwa 25 verschiedne Kürzel. Darunter Schottland mit SCO und Kolumbien mit CO. Das heisst also wenn ich SCO umwandeln möchte, wird statt SCO in eine Schottlandflagge getauscht, das CO von SCO in die Kolumbienflagge (für CO) getauscht und das "S" bleibt stehen.

                                Hier mal ein Link wenn es etwas schwierig zu verstehen wäre:
                                http://www.illnau-united.ch.vu/kaderliste/test.php

                                Die erste Flagge sollte durch SCO in Schottland werden, wurde aber in "S-Kolumbienflagge". Weil CO Kolumbien ist.

                                Gibt es da eine Möglichkeit dies noch zu beheben?

                                1. echo $begrüßung;

                                  Es gibt etwa 25 verschiedne Kürzel. Darunter Schottland mit SCO und Kolumbien mit CO. Das heisst also wenn ich SCO umwandeln möchte, wird statt SCO in eine Schottlandflagge getauscht, das CO von SCO in die Kolumbienflagge (für CO) getauscht und das "S" bleibt stehen.

                                  Hier mal ein Link wenn es etwas schwierig zu verstehen wäre:
                                  http://www.illnau-united.ch.vu/kaderliste/test.php

                                  Verweise bitte nicht auf Framesets, wenn diese mit deinem Problem nichts zu tun haben, sondern direkt auf die entsprechende Seite: http://www.snooker-results.ch/illnau-united/kaderliste/test.php

                                  Die erste Flagge sollte durch SCO in Schottland werden, wurde aber in "S-Kolumbienflagge". Weil CO Kolumbien ist.
                                  Gibt es da eine Möglichkeit dies noch zu beheben?

                                  Wenn der Wert DE oder SCO oder CO als Einzelwert in dem Feld steht, dann ist eine Fallunterscheidung sinnvoller als eine Stringersetzung. Noch besser (warum ist mir das nicht schon eher eingefallen?) und einfacher zu pflegen wäre ein Array, dass das Länderkürzel als Schlüssel hat und den Fahnencode als Wert.

                                  $laender = array(
                                      'DE' => 'Germanen',
                                      'CO' => 'Kolumnen',
                                      'SCO' => 'Schotten',
                                    );

                                  if (isset($laender[$land]))
                                      echo $laender[$land];
                                    else
                                      echo $land; // keine Fahne

                                  Wenn das Kürzel mitten im Text vorkommt, dann ist eine Stringersetzung nötig. Für den Fall sieh dir strtr() in der zweiten Variante an. Der kannst du das obige $laender-Array übergeben und alles wird gut.

                                  echo "$verabschiedung $name";

                                  1. Verweise bitte nicht auf Framesets, wenn diese mit deinem Problem nichts zu tun haben, sondern direkt auf die entsprechende Seite:

                                    Sorry, werds mir für weiere Fragen merken.

                                    Nun, ich hatte grade als ich ins Forum kam einen Geistesblitz: Ich hatte die Kürzel alphabetisch geordnet und habe CO vor SCO eingereiht. Wenn SCO kam wurde dann natürlich anhand der Abfrage zuerst das CO abgefragt und auch ersetzt. Dann blieb das bekannte S vor der Kolumbienflagge bestehen. Wenn ich das SCO nun vor CO nehme wird zuerst das SCO geprüft und auch richtig ersetzt. Das CO wird nachher geprüft und auch richtig ersetzt. Es stimmt nun also alles...

                                    Auf jeden Fall vielen Dank für die tollen Hinweise, ohne die hätte ich es wohl kaum geschafft!