Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

list() wieder zusammenbauen

0 views
Skip to first unread message

Stefan Becker

unread,
Jan 7, 2010, 1:18:22 PM1/7/10
to
Hallo,

wie bekomme ich das konstrukt list() wieder zusammen gebaut, praktisch
gesehen:

if($_POST['rufnummer_hinzufuegen']=="Rufnummer hinzuf�gen"){
//echo "Rufnummer wird hinzugef�gt";
foreach(file($datei) as $datensatz_hinzu){//Wird Zeilenweise in das Array
$datensatz_hinzu geschrieben
list ($gruppenname_hinzu, $gruppendaten_hinzu) = explode(':',
$datensatz_hinzu, 2); //Trennung des Gruppennamens und der Nummern
//echo "$gruppenname und $gruppendaten";
if ($gruppenname_hinzu == $_POST['gruppe']){//Auswahl der gew�hlten
Gruppe
echo "IF Abfrage<br/>";//Testabfrage
var_dump($gruppendaten_hinzu); echo "<br/>";//Ausgabe der Rufnummer der
gew�hlten Rufnummer
$gruppennummern_hinzu =
explode(',',trim($gruppendaten_hinzu));//Aufsplittung der einzelnen
Rufnummer
var_dump($gruppennummern_hinzu);echo "<br/>";
$rufnummer = str_replace(" ","",$_POST['rufnummer']).",";//Leerstellen
werden entfernt und mit , versehen
//var_dump($gruppennummern_hinzu);echo "<br/>";
$gruppennummern_hinzu[] = $rufnummer;//Rufnummer wird zu dem Array
hinzugef�gt
var_dump($gruppennummern_hinzu);echo "<br/>";
echo "Daten werden wieder zusammengebaut<br/>";
$gruppendaten_hinzu = implode(",",$gruppennummern_hinzu);//Nummern
werden wieder zu einem String zusammengebaut
echo"$gruppendaten_hinzu<br/>";
}
}
}

Damit ich Daten ja dann wieder in die Datei zur�ckschreiben kann, muss ich
ja das Array wieder zusammenbauen, wie kann ich das bei list machen?

Stefan

Claus Reibenstein

unread,
Jan 7, 2010, 3:36:41 PM1/7/10
to
Stefan Becker schrieb:

> Hallo,
>
> wie bekomme ich das konstrukt list() wieder zusammen gebaut, praktisch
> gesehen:
>
> if($_POST['rufnummer_hinzufuegen']=="Rufnummer hinzuf�gen"){
> //echo "Rufnummer wird hinzugef�gt";

> foreach(file($datei) as $datensatz_hinzu){//Wird Zeilenweise in das Array
> $datensatz_hinzu geschrieben
> list ($gruppenname_hinzu, $gruppendaten_hinzu) = explode(':',
> $datensatz_hinzu, 2); //Trennung des Gruppennamens und der Nummern
> //echo "$gruppenname und $gruppendaten";
> if ($gruppenname_hinzu == $_POST['gruppe']){//Auswahl der gew�hlten
> Gruppe
> echo "IF Abfrage<br/>";//Testabfrage
> var_dump($gruppendaten_hinzu); echo "<br/>";//Ausgabe der Rufnummer der
> gew�hlten Rufnummer

> $gruppennummern_hinzu =
> explode(',',trim($gruppendaten_hinzu));//Aufsplittung der einzelnen
> Rufnummer
> var_dump($gruppennummern_hinzu);echo "<br/>";
> $rufnummer = str_replace(" ","",$_POST['rufnummer']).",";//Leerstellen
> werden entfernt und mit , versehen
> //var_dump($gruppennummern_hinzu);echo "<br/>";
> $gruppennummern_hinzu[] = $rufnummer;//Rufnummer wird zu dem Array
> hinzugef�gt

> var_dump($gruppennummern_hinzu);echo "<br/>";
> echo "Daten werden wieder zusammengebaut<br/>";
> $gruppendaten_hinzu = implode(",",$gruppennummern_hinzu);//Nummern
> werden wieder zu einem String zusammengebaut
> echo"$gruppendaten_hinzu<br/>";
> }
> }
> }
>
> Damit ich Daten ja dann wieder in die Datei zur�ckschreiben kann, muss ich
> ja das Array wieder zusammenbauen, wie kann ich das bei list machen?

Du musst nicht das Array wieder zusammenbauen, sondern die Teistrings.
Hierf�r gibt es den .-Operator:

$daten = $gruppenname_hinzu . ':' . $gruppendaten_hinzu;

Eine Alternative ohne diesen Operator, die Du auch schon flei�ig benutzt
hast, w�re:

$daten = "$gruppenname_hinzu:$gruppendaten_hinzu";

Hat aber eigentlich nichts mit list() zu tun.

Gru�. Claus

Stefan Becker

unread,
Jan 8, 2010, 4:50:51 AM1/8/10
to

"Claus Reibenstein" <4spame...@kabelmail.de> schrieb im Newsbeitrag
news:7qmuvm...@mid.individual.net...

>
> Du musst nicht das Array wieder zusammenbauen, sondern die Teistrings.
> Hierf�r gibt es den .-Operator:
>
> $daten = $gruppenname_hinzu . ':' . $gruppendaten_hinzu;
>
> Eine Alternative ohne diesen Operator, die Du auch schon flei�ig benutzt
> hast, w�re:
>
> $daten = "$gruppenname_hinzu:$gruppendaten_hinzu";
>
> Hat aber eigentlich nichts mit list() zu tun.
>

Aber dann baue ich ja erstmal nur den String wieder zusammen, welchen ich
erg�nzt habe. Was ist mit den unver�nderten Strings?

Stefan


Stefan Becker

unread,
Jan 8, 2010, 3:01:34 PM1/8/10
to

"Claus Reibenstein" <4spame...@kabelmail.de> schrieb im Newsbeitrag
news:7qmuvm...@mid.individual.net...
>

> Hat aber eigentlich nichts mit list() zu tun.
>

Ist list() eigentlich kein Array? Wenn ich

list ($gruppenname_hinzu, $gruppendaten_hinzu) = explode(':',
$datensatz_hinzu, 2); //Trennung des Gruppennamens und der Nummern

ausf�hre m�sste ich doch eigentlich mit var_dump($gruppenname_hinzu); alle
Gruppennamen sehen, ich sehe aber nur die letze?!

Stefan

Gregor Kofler

unread,
Jan 8, 2010, 3:59:21 PM1/8/10
to
Stefan Becker meinte:

>
>
> "Claus Reibenstein" <4spame...@kabelmail.de> schrieb im Newsbeitrag
> news:7qmuvm...@mid.individual.net...
>>
>> Hat aber eigentlich nichts mit list() zu tun.
>>
> Ist list() eigentlich kein Array? Wenn ich

list ist ein Sprachkonstrukt. Einer Liste von explizit angef�hrten
Variablen werden einzelne Arraywerte zugewiesen.

Steht aber auch alles hier:
http://at.php.net/manual/en/function.list.php

> list ($gruppenname_hinzu, $gruppendaten_hinzu) = explode(':',
> $datensatz_hinzu, 2); //Trennung des Gruppennamens und der Nummern
>
> ausf�hre m�sste ich doch eigentlich mit var_dump($gruppenname_hinzu);

Warum?

$gruppenname_hinzu wird mit dem ersten Eintrag des Arrays bef�llt.
$gruppendaten_hinzu mit dem zweiten.

> alle Gruppennamen sehen, ich sehe aber nur die letze?!

Klar, du �berschreibst ja in der Schleife den vorherigen Variablenwert.

Du suchst eher sowas:

$namen = array();
$daten = array();

foreach($zeilen as $zeile) {
$gruppe = explode(':', $zeile);
$namen[] = $gruppe[0];
$daten[] = $gruppe[1];
}


Gregor

--
http://www.gregorkofler.com

Claus Reibenstein

unread,
Jan 8, 2010, 4:40:35 PM1/8/10
to
Stefan Becker schrieb:

> "Claus Reibenstein" <4spame...@kabelmail.de> schrieb im Newsbeitrag
> news:7qmuvm...@mid.individual.net...

Bitte keine Einleitungsromane!

>> Du musst nicht das Array wieder zusammenbauen, sondern die Teistrings.
>

> Aber dann baue ich ja erstmal nur den String wieder zusammen, welchen ich
> erg�nzt habe. Was ist mit den unver�nderten Strings?

Dann erl�utere bitte mal, was Du mit "Damit ich Daten ja dann wieder in


die Datei zur�ckschreiben kann, muss ich ja das Array wieder

zusammenbauen" meinst. Um Daten in eine Datei zu schreiben, gibt es
diverse Funktionen, und so weit ich das �berblicke, kann keine davon
etwas mit einem Array anfangen.

Womit willst Du denn die Daten wieder in die Datei schreiben? Bis jetzt
machst Du das nirgends. Vielleicht solltest Du das erst einmal kl�ren.
Darauf ergibt sich dann, wie Du die Daten vorbereiten musst.

Gru�. Claus

Stefan Becker

unread,
Jan 12, 2010, 4:41:29 PM1/12/10
to
>
> Womit willst Du denn die Daten wieder in die Datei schreiben? Bis jetzt
> machst Du das nirgends. Vielleicht solltest Du das erst einmal kl�ren.
> Darauf ergibt sich dann, wie Du die Daten vorbereiten musst.
>
Also ich habe mir folgendes gedacht:

- eine neue Nummer wird �bergeben und die Gruppe in welcher die Nummer
hinzugef�gt werden soll
- Datei wird Zeilenweise eingelesen
- Gruppenname und Gruppeninhalt werden getrennt durch eine for schleife
- bei richtigen Gruppennahmen wird der Gruppeninhalt wieder getrennt in eine
array geschrieben um die neue nummer einfach in das array zu schreiben

und jetzt muss ich quasi die schritte wieder umkehren, damit ich wieder den
Aufbau der Datei habe mit der neuen Nummer drin....

Stefan

Claus Reibenstein

unread,
Jan 12, 2010, 5:20:37 PM1/12/10
to
Stefan Becker schrieb:

Ich glaube, ich verstehe jetzt Dein Problem.

Du liest die Datei mittels file() zeilenweise in ein Array. Jede Zeile
dieses Arrays zerlegst Du weiter in seine Bestandteile, �nderst, falls
erforderlich, die Daten, und m�chtest nun wieder daraus ein Array
machen, um dieses mit dem Gegenst�ck zu file() wieder in die Datei
schreiben. Richtig?

Dabei gibt es allerdings ein klitzekleines Problem: Es gibt kein
Gegenst�ck zu file(), also keine Funktion, die ein Array zeilenweise in
eine Datei schreibt. Du musst die Daten selber Zeile f�r Zeile
reinschreiben.

Warum l�dst Du eigentlich die komplette Datei in den Arbeitsspeicher?
Daf�r gibt es keinen vern�nftigen Grund. Die Datei muss sowieso
zeilenweise verarbeitet werden, also sollte sie auch nur zeilenweise
eingelesen werden.

Die Schleife m�sste also Folgendes tun:
- Eine Zeile aus alter Datei lesen --> fgets(),
- Diese eine Zeile verarbeiten,
- Ergebnis in neue Datei schreiben --> fputs().

Mit diesem Ansatz kommt man erst gar nicht auf die Idee, ein Array
zusammenbauen zu wollen, da man es sowieso immer nur mit einer einzelnen
Zeile zu tun hat.

Gru�. Claus

Stefan Becker

unread,
Jan 27, 2010, 6:44:02 AM1/27/10
to

"Claus Reibenstein" <4spame...@kabelmail.de> schrieb im Newsbeitrag

news:7r4atn...@mid.individual.net...


>
> Die Schleife m�sste also Folgendes tun:
> - Eine Zeile aus alter Datei lesen --> fgets(),
> - Diese eine Zeile verarbeiten,
> - Ergebnis in neue Datei schreiben --> fputs().
>

Ok, also m�sste das in etwa so aussehen:

if($_POST['rufnummer_hinzufuegen']=="Rufnummer hinzuf�gen"){
//echo "Rufnummer wird hinzugef�gt";

$handle = fopen ($datei, "r"); //�ffnen der Datei
while (!feof($handle)) { //Datei wird Zeilenweise eingelesen
$gesamteGruppe = fgets($handle, 4096);
//echo $gesamteGruppe;
$geteilteGruppe = explode(':',$gesamteGruppe,2);
//echo $geteilteGruppe[0];
if($geteilteGruppe[0]== $_POST['gruppe']){ //Ausgew�hlte Gruppe gefunden
echo "IF Abfrage";
$geteilteGruppe[1] = trim($geteilteGruppe[1]); //Leerstellen entfernen
$geteilteGruppe[1].= trim($_POST['rufnummer']).","; //Neue Rufnummer zum
alten String hinzuf�gen
echo $geteilteGruppe[1];
$gesamteGruppe = "$geteilteGruppe[0]:$geteilteGruppe[1]"; //String wieder
zusammenbauen
echo $gesamteGruppe;
fputs($handle,$gesamteGruppe); //Zeile in Dateischreiben
}
}
fclose ($handle);

}

Wenn ich aber $handle = fopen ($datei, "r+"); setze, dann erhalte ich eine
Endlosschleife?!

Was mache ich da falsch?

Stefan

Claus Reibenstein

unread,
Jan 27, 2010, 9:34:29 AM1/27/10
to
Stefan Becker schrieb:

> "Claus Reibenstein" <4spame...@kabelmail.de> schrieb im Newsbeitrag
> news:7r4atn...@mid.individual.net...

*seufz*

>> Die Schleife m�sste also Folgendes tun:
>> - Eine Zeile aus alter Datei lesen --> fgets(),
>> - Diese eine Zeile verarbeiten,
>> - Ergebnis in neue Datei schreiben --> fputs().
>
> Ok, also m�sste das in etwa so aussehen:
>
> if($_POST['rufnummer_hinzufuegen']=="Rufnummer hinzuf�gen"){
> //echo "Rufnummer wird hinzugef�gt";
> $handle = fopen ($datei, "r"); //�ffnen der Datei

Damit �ffnest Du die alte Datei (zum Lesen). Sch�n und gut, aber: Wo
�ffnest Du die _neue_ Datei?

> while (!feof($handle)) { //Datei wird Zeilenweise eingelesen
> $gesamteGruppe = fgets($handle, 4096);

feof() kannst Du Dir schenken, ebenso die 4096:

while (($gesamteGruppe = fgets($handle)) !== false) {

Oder falls Dir das sympathischer ist:

for (;;) {
$gesamteGruppe = fgets($handle);
if ($gesamteGruppe === false)
break;

> //echo $gesamteGruppe;
> $geteilteGruppe = explode(':',$gesamteGruppe,2);
> //echo $geteilteGruppe[0];
> if($geteilteGruppe[0]== $_POST['gruppe']){ //Ausgew�hlte Gruppe gefunden
> echo "IF Abfrage";
> $geteilteGruppe[1] = trim($geteilteGruppe[1]); //Leerstellen entfernen
> $geteilteGruppe[1].= trim($_POST['rufnummer']).","; //Neue Rufnummer zum
> alten String hinzuf�gen
> echo $geteilteGruppe[1];
> $gesamteGruppe = "$geteilteGruppe[0]:$geteilteGruppe[1]"; //String wieder
> zusammenbauen
> echo $gesamteGruppe;
> fputs($handle,$gesamteGruppe); //Zeile in Dateischreiben

Genau hier scheppert's: Du versuchst, die ge�nderten Daten in die _alte_
Datei zu schreiben (was nat�rlich schief geht, da die Datei nur zum
Lesen ge�ffnet wurde). Sie m�ssen jedoch in die _neue_ Datei geschrieben
werden.

> }
> }
> fclose ($handle);
>
> }
>
> Wenn ich aber $handle = fopen ($datei, "r+"); setze, dann erhalte ich eine
> Endlosschleife?!

Und zerst�rst gleichzeitig Deine Ausgangsdatei.

Nichts f�r ungut, aber wenn ich mir das so anschaue, w�chst in mir der
Verdacht, dass Dir grundlegende Programmierkenntnisse fehlen. Die
solltest Du Dir mal aneignen oder das Programmieren besser sein lassen.

Gru�. Claus

Stefan Becker

unread,
Jan 27, 2010, 4:11:24 PM1/27/10
to

"Claus Reibenstein" <4spame...@kabelmail.de> schrieb im Newsbeitrag

news:7sb17p...@mid.individual.net...


>
> Damit �ffnest Du die alte Datei (zum Lesen). Sch�n und gut, aber: Wo
> �ffnest Du die _neue_ Datei?

Die Daten sollen nat�rlich in die gleiche Datei, sonst w�re es ja sinnfrei.

>
>> while (!feof($handle)) { //Datei wird Zeilenweise eingelesen
>> $gesamteGruppe = fgets($handle, 4096);
>
>

> Nichts f�r ungut, aber wenn ich mir das so anschaue, w�chst in mir der
> Verdacht, dass Dir grundlegende Programmierkenntnisse fehlen. Die
> solltest Du Dir mal aneignen oder das Programmieren besser sein lassen.

Nur durch testen und probieren kann man lernen... etwas seien zu lassen noch
weniger ;-) Wie kann ich denn die Datei so �ffnen, dass ich in ihr schreiben
kann?

Stefan

Claus Reibenstein

unread,
Jan 27, 2010, 4:48:56 PM1/27/10
to
Stefan Becker schrieb:

> "Claus Reibenstein" <4spame...@kabelmail.de> schrieb im Newsbeitrag
> news:7sb17p...@mid.individual.net...

Bitte gew�hne Dir _endlich_ diese Einleitungsromane ab!

>> Damit �ffnest Du die alte Datei (zum Lesen). Sch�n und gut, aber: Wo
>> �ffnest Du die _neue_ Datei?
>
> Die Daten sollen nat�rlich in die gleiche Datei, sonst w�re es ja sinnfrei.

Das funktioniert so aber nicht.

>> Nichts f�r ungut, aber wenn ich mir das so anschaue, w�chst in mir der
>> Verdacht, dass Dir grundlegende Programmierkenntnisse fehlen. Die
>> solltest Du Dir mal aneignen oder das Programmieren besser sein lassen.
>
> Nur durch testen und probieren kann man lernen...

Ohne Grundlagen kommst Du mit Testen und Probieren nicht weit.

> Wie kann ich denn die Datei so �ffnen, dass ich in ihr schreiben
> kann?

Vergiss es. Das funktioniert nicht. Der normale Weg ist, eine neue Datei
zu erstellen und anschlie�end die alte Datei zu l�schen und die neue
umzubenennen.

In einer Datei zu lesen _und_ zu schreiben funktioniert nur unter
bestimmten Voraussetzungen. Die sind hier nicht gegeben.

Gru�. Claus

0 new messages