Supportnet Computer
Planet of Tech

Supportnet / Forum / Skripte(PHP,ASP,Perl...)

problem mit arrays





Frage

Hallo, ich habe folgendes Problem. Ich muss eine Textdatei zeilenweisen bearbeiten und bestimmte Werte in einer Zeile vertauschen. Hier ein Auszug aus der zu bearbeitenden Datei: 11 L X+2118.553 Y+33.869 Z-89.176 12 L X+2118.553 Y+34.064 Z-88.658 13 L X+2118.553 Y+34.516 Z-87.560 14 L X+2118.553 Y+35.206 Z-85.991 In Zeile 11 sollen nun die Werte von X und Z vertauscht werden: 11 L X-89.176 Y+33.869 Z+2118.553 Wie würdet ihr das lösen?

Antwort 1 von Diman


$z="11 L X+2118.553 Y+33.869 Z-89.176";
$a=explode(" ",$z);
$memory=$a[2];
$a[2]=str_replace("Z","X",$a[4]);
$a[4]=str_replace("X","Z",$memory);
$z=implode(" ",$a);


Antwort 2 von psypod

Hier nun mein Lösungsansatz der leider nicht bzw nicht ganz funktioniert. Bei dem Austausch von den X und Y Werten gibt es keine Probleme nur, wenn ich X und Z bzw. Y und Z tauschen will, dann ist der Wurm drinn.
t=1 XY Tauschen
t=2 XZ Tauschen
t=3 YZ Tauschen

for($i=0;$i<$anz_zeilen;$i++){

$zeile = explode(" ", $datei[$i]);

if($t==1){
$yx1=str_replace("Y","X",$zeile[4]);
$xy1=str_replace("X","Y",$zeile[3]);
$zeile[3] = $yx1;$zeile[4] = $xy1;
$neu = implode(" ", $zeile)."<br>";
}
if($t==2){
$zx2=str_replace("Z","X",$zeile[5]);
$xz2=str_replace("X","Z",$zeile[3]);
$zeile[3] = $zx2;$zeile[5] = $xz2;
$neu = implode(" ", $zeile)."<br>";
}
if($t==3){
$zy3=str_replace("Z","Y",$zeile[5]);
$yz3=str_replace("Y","Z",$zeile[4]);
$zeile[4] = $zy3;$zeile[5] = $yz3;
$neu = implode(" ", $zeile)."<br>";
}
fwrite($fp, $neu);
}

Hier ein Versuch X und Z zu tauschen:
vorher:
4 L X+1075.000 Y-8.180 Z+143.180
5 L X-2118.054 Y-13.819 Z+137.541
6 L X-2118.054 Y+28.172 Z+95.550
nachher:
4 L X+143.180
Y-8.180 Z+1075.0005 L X+137.541
Y-13.819 Z-2118.0546 L X+95.550
Y+28.172 Z-2118.0547 L X+93.429

komisch dabei ist, wenn ich $neu mit echo ausgebe ist alles ok nur in der geschriebenen Datei ist´s verkehrt!?

Bin für jede Hilfe dankbar!!
Mfg

Antwort 3 von psypod

@ Dimian: so ähnlich hab ich´s ja auch nur:

aus meinem ersten posting wohl leider wegen strg+c nicht ersichtlich sind hinter der zeilennummer 2 leerzeichen..somit verschiebt sich die nummerierung um eins.

$z="11 L X+2118.553 Y+33.869 Z-89.176";
$a=explode(" ",$z);
$memory=$a[3];
$a[3]=str_replace("Z","X",$a[5]);
$a[5]=str_replace("X","Z",$memory);
$z=implode(" ",$a);

ein echo $z ergibt eine fast richtige ausgabe nähmlich:
11 L X-89.176 Y+33.869 Z+2118.553

das fehlende leerzeichen kann ich mir nicht erklären da eine ausgabe des arrays mit echo:

$z="11 L X+2118.553 Y+33.869 Z-89.176";
$a=explode(" ",$z);
echo "0: ".$a[0]."<br>";
echo "1: ".$a[1]."<br>";
echo "2: ".$a[2]."<br>";
echo "3: ".$a[3]."<br>";
echo "4: ".$a[4]."<br>";
echo "5: ".$a[5]."<br>";
$memory=$a[3];
$a[3]=str_replace("Z","X",$a[5]);
$a[5]=str_replace("X","Z",$memory);
$z=implode(" ",$a);
echo $z;

folgendes ergebniss liefert:

0: 11
1:
2: L
3: X+2118.553
4: Y+33.869
5: Z-89.176
11 L X-89.176 Y+33.869 Z+2118.553

Antwort 4 von Diman

Das ist nur ein Darstellungsproblem. HTML zeigt mehrere aufeinanderfolgende Leerzeichen nur als eines an. Wenn Du im Browser die Quelltextansicht benutzt, wirst Du sehen, daß das zweite Leerzeichen da ist.
Übrigens auch hier im Supportnet in Deinem Eingangsposting ganz oben. ^^ :-)

Antwort 5 von psypod

@Diman

ok das ist ja auch nicht wirklich mein problem!!
mein problem ist ich schaffe den austausch (mit echo überprüfbar!!) nur beim schreiben in eine datei passiert irgendetwas das ich mir nicht erklären kann.

mein script kannst du unter folgender adresse testen:
http://psypod.de.vu/hilfe/maske.php
(probier mal x mit z zu tauschen)

die originaldatei liegt in:
http://psypod.de.vu/hilfe/todo/006.h

die umgewandelte in:
http://psypod.de.vu/hilfe/fertig/006.h

den quelltext unter:
http://psypod.de.vu/hilfe/quell.txt

Antwort 6 von Diman

Die Umgewandelte ist nicht da. Das Verzeichnis "fertig" ist leer!

Antwort 7 von psypod

ja stimmt ich dachte du probierst die make selbst mal aus..
probiers nochmal ich hab nun eine rein.
und danke auch für die hilfe!! :)

Antwort 8 von psypod

eigenartig ist nur, dass der austausch vom x und y problemlos funktioniert und nur bei xz und yz das problem auftaucht..

Antwort 9 von Diman

Das Problem ist, daß am Ende der Zeile immer noch die Zeilenendekennung steckt. Wenn Du Z und X vertauscht, rutscht das Zeilenende vor Y. Mit chop() kannst Du die Kennung vor der Bearbeitung loswerden. Mußt dann nur bei fwrite wieder "\r\n" anhängen.

Antwort 10 von psypod

Vielen vielen Dank Diman!! Von selbst wär ich da warscheinlich erst nach Tagen wenn überhaupt draufgekommen :D
Du hast mir sehr geholfen danke nochmal.
mfg psypod

Antwort 11 von Diman

Gerne geschehen! Beim ersten Mal hab ich auch Wochen gebraucht, bis ich drauf kam! :-)