FB18 - Das Forum für Informatik

fb18.de / Off-Topic / Hard- und Softwarefragen

[PHP] CSV-Datei aus Array aufbauen - wie gelingt die Anordnung?

[PHP] CSV-Datei aus Array aufbauen - wie gelingt die Anordnung? 2007-03-20 10:51
Anonymer User
Wie gesagt versuche ich mit php eine csv-datei aufzubauen…

[php]
//datensatz für die csv
$datensatz;

$newcounter = 0;
//datensatz mit werten aus array füttern
foreach($text as $value){
global $newcounter;
$newcounter +=1;
echo $newcounter;
$datensatz.=$value;
if($newcounter ==3){
$datensatz.=";";
$newcounter =0;
}
[/php]
Mein ziel war es eine struktur zu schaffen die innerhalb von Excel so ungefähr aussieht:

[feld1 ][feld2 ][feld2 ]

[wert1][wert2][wert3] <- zeile 1
[wert4][wert5][wert6] <- zeile 2

Nur werden meine werte in der Excel so angezeigt:

[wert1]
[wert2]
[wert3]
..

Was mache ich falsch?

(edit fal: Topictitel)

RE: [php] csv datei aus array aufbauen - wie gelingt die Anordnung? 2007-03-20 13:39
f0k
Was mache ich falsch?
Ich weiß nicht, wie die Werte in $text aussehen, aber eine CSV-Datei sollte irgendein Trennzeichen zwischen den einzelnen Feldern einer Zeile und einen Zeilenumbruch am Ende einer Zeile haben. Falls das Trennzeichen in den Feldern selbst auch noch auftauchen kann, solltest Du die Felder zusätzlich mit Anführungszeichen umschließen. Es ergibt sich also etwas wie:
"Wert1";"Wert2";"Wert3" "Wert4";"Wert5";"Wert6"
Wie's aussieht, enthalten die Elemente des $text-Arrays bei Dir alle schon Zeilenumbrüche am Ende, die musst Du halt gegen ein Semikolon austauschen (bei Wert1, Wert2, Wert4, Wert5, …) oder so lassen (bei Wert3, Wert6, …).

Davon abgesehen ist eine foreach-Schleife nur sinnvoll, wenn Du den Index der Elemente nie benutzt. Jetzt zusätzlich einen globalen Counter einzubauen, ist irgendwie eklig; nimm da mal lieber eine normale for-Schleife.

/edit: Beim Abschicken an scheinbar beliebiger Stelle automatisch eingefügtes schließendes Code-Tag entfernt…

RE: [php] csv datei aus array aufbauen - wie gelingt die Anordnung? 2007-03-20 13:41
Da:Sourcerer
Ich finde es etwas befremdlich (um nich zu sagen undurchschaubar), wie du die einzelnen Zeilen deiner CSV-Datei erzeugst. Eventuell könnte dir die implode()-Funktion hilfreich sein. Ansonsten guck die mal im Wikipedia-Artikel zu [[CSV-Datei|CSV-Dateien]] den Abschnitt über Fallstricke an.

RE: [php] csv datei aus array aufbauen - wie gelingt die Anordnung? 2007-03-20 13:43
Anonymer User
ok das Problem habe ich an sich jetzt gelöst - der Fehler lag wo anders!
hatte um leerzeichen bzw. rauszuhauen folgenden reg-ausdruck mit replace angewandt:

[php]$text= preg_replace('@([\r\n])[\s]+@', ' \1' , $text) ;[/php]

AHb erst später realisiert das er mehrere zeilenumbrüche zu einem reduziert…
…jetzt habe ich daraus einfach das gemacht (urprüngliche ziel):
[php]$text= preg_replace('@([\r\n])[\s]+@', ' ' , $text)[/php]

bleibt, aber neue Probleme:

genau am Anfang der cvs werden viele leere felder gesetzt, weil mein regulären Ausdrücke noch am Anfang leerzeichen lassen
- wie kann man einen regulären Ausdruck kreierren, der nur leerzeichen am Anfang, des Strings rausschmeisst?
ich hatte gehofft so etwas würde ausreichen:
^([ ]{0,}?)
Ich trenne die Daten im Array nach leerzeichen - da kann es vorkommen das ein Name aus zwei Teilen mit einem Leerzeichen dazwischen besteht - wie kann ich so etwas abfangen?

RE: [php] csv datei aus array aufbauen - wie gelingt die Anordnung? 2007-03-20 13:49
Da:Sourcerer
Generell sollte folgender Ausdruck führende Leerzeichen vernichten:
/^\s+(\w+)/\1/Wenn du die Felder mit Whitespaces abtrennst, wäre es evtl. besser, du würdes eine Funktion wie preg_split() verwenden, um gleich ein "richitges" Array zu erhalten.

RE: [php] csv datei aus array aufbauen - wie gelingt die Anordnung? 2007-03-20 14:03
Anonymer User
danke für die antworten! Ich weiss ja selber - das ist ganz schön ekelg was ich da mache [15],
aber ich weiss nicht wie ich mit den daten umgehen soll…

wenn ich so etwas mache:
[php]
for(i=0; i <= sizeof($text); i++){
$datensatz.=$value;
$datensatz.=";";
}
[/php]
…fehlt mir die Idee wie ich mit solchen datensätzen klar werden soll…

wert1 wert2 teil1_wert3 teil2_wert3 teil1_wert4 teil2_wert4

RE: [php] csv datei aus array aufbauen - wie gelingt die Anordnung? 2007-03-20 14:08
Anonymer User
mit $ natürlich… kann ich als anonymer nicht editieren? Schließlich habe ich doch ein PAsswort gesetzt…

RE: [php] csv datei aus array aufbauen - wie gelingt die Anordnung? 2007-03-20 14:09
Da:Sourcerer
Äh… Kannst du mal ein konkretes Beispiel einer Zeile geben? Eventuell kann man da was machen…

RE: [php] csv datei aus array aufbauen - wie gelingt die Anordnung? 2007-03-20 14:33
Anonymer User
Äh… Kannst du mal ein konkretes Beispiel einer Zeile geben? Eventuell kann man da was machen…
…das wäre prima [10]! Ich nehme mal an du meinst einen konkreten Datensatz:
Ich ändere die Daten aus Datenschutzgründen etwas (aber Buchstabe bleibt Buchstabe etc. - ich denke du willst mit einem konkreten reg-muster aushelfen…)
. Gold 2006 BA Telekommunikation Jürgen Sauerstein 95555 Ortxyz 09001/000000 0160/00000010 09201/000000 Gold 2006 Alexexus Dietmeier blaster D i e h m..... TV-Hifi-Video-Telekom-Computer-Elektro Beispeilstraße 00 90000 Ortyxy am Main 09342/5094 09342/5041 siehst schlimm aus… die leerzeichen sind noch am Anfang geblieben und das Gold (oder Silber) +Leerzeichen +Jahr krieg ich auch nicht raus…

Außerdem sind da auch deutsche Umlaute (bzgl. Fallstricke…)

ich versuche alle Sachen mit einem
[php]$text = preg_replace($patternsWords, "", $text);
$patternsWords = "/^\s+(\w+)|((Gold|Silber)([ ]{0,}?)([0-9]{4})(.*?))/";
[/php]
patternWords ist stark abgekürzt…

RE: [php] csv datei aus array aufbauen - wie gelingt die Anordnung? 2007-03-20 14:49
Da:Sourcerer
Oha, das sieht aber mal wüst aus… Frage: Ist alles zwischen "Gold 2006" und "Beispielstraße" ein zusammenhängendes Feld? Wenn nicht, sehe ich da pechschwarz [21]

RE: [php] csv datei aus array aufbauen - wie gelingt die Anordnung? 2007-03-20 14:52
Anonymer User
nicht das man mich falsch versteht, folgendes ist Ergebnis eines durchlaufes mit dem preg_replace, was ich dann auch noch in eine txt-datei speichere um es besser zu begutachten:
. Gold 2006 BA Telekommunikation Jürgen Sauerstein 95555 Ortxyz 09001/000000 0160/00000010 09201/000000 Gold 2006 Alexexus Dietmeier blaster D i e h m..... TV-Hifi-Video-Telekom-Computer-Elektro Beispeilstraße 00 90000 Ortyxy am Main 09342/5094 09342/5041
Außerdem sind da auch deutsche Umlaute (bzgl. Fallstricke…)
habe ich reduziert, da waren noch so viele wegen einer murkszeile… ,sind aber trotzdem noch welche übriggeblieben…

RE: [php] csv datei aus array aufbauen - wie gelingt die Anordnung? 2007-03-20 15:02
Anonymer User
Oha, das sieht aber mal wüst aus… Frage: Ist alles zwischen "Gold 2006" und "Beispielstraße" ein zusammenhängendes Feld? Wenn nicht, sehe ich da pechschwarz [21]

nee, Beispielstraße gehört schon zum nächsten Datensatz.
In diesem Beispiel sind die Datensäte von "Gold [Jahr]" eingeschlossen - das ist leider nicht immer so…

vielleicht ist mein Ansatz ja falsch - ich schmeiss am anfang alle htmltags raus
( mit: [php]$text = preg_replace("/\<(.*)\>/Usi", " ", $text);[/php])

vielleicht sollte ich mich an den tags orientieren?

RE: [php] csv datei aus array aufbauen - wie gelingt die Anordnung? 2007-03-20 15:11
f0k
vielleicht sollte ich mich an den tags orientieren?
Wäre vermutlich sinnvoll. Wenn Du die Tags einfach durch Leerzeichen ersetzt, kannst du nachher ja nicht mehr sehen, welches Leerzeichen mal ein Tag war und welches Leerzeichen ein gewolltes Leerzeichen ist (z.B. zwischen Straße und Hausnummer). Du könntest die Tags durch irgendein anderes Trennzeichen ersetzen, dann erhältst Du zumindest einen Teil der Struktur. Poste doch sonst mal eine Originalzeile mit Tags.

RE: [php] csv datei aus array aufbauen - wie gelingt die Anordnung? 2007-03-20 15:13
Anonymer User
wenn ich die start-html in ein druckformat bringe kriege ich folgende Anfangsstruktur:
//davor gibt es noch einiges an html.... <TD class=no align=left> <TABLE> <TBODY> <TR> <TD><IMG src="TECH Händlerübersicht0-Dateien/Gold_50.gif" name=Applikationsschulung></TD> <TD style="PADDING-LEFT: 10px">Gold<BR>im Jahr 2006</TD></TR></TBODY></TABLE><BR><IMG src="TECH Händlerübersicht0-Dateien/Stern_50.gif" name=Applikationsschulung><IMG src="TECH Händlerübersicht0-Dateien/isdn-over-ip_50.gif" name="VoiP Partner"><BR><B>langjähriger Partner</B></TD> <TD class=no><B><A class=bold href="javascript:win2=NewWindow('/agfeo_web/tw.nsf/Anlage_w/A984F5E9DFC19326C12571920064E239!opendocument&m1=0&zr=1','win',720,700,'yes');">Name &amp; Partner GMBH</A></B><BR><BR>Beispielstraße. 13<BR>04299 Ort</TD> <TD class=no align=left>Telefon: 0000/ 00000<BR>Fax: 0000/ 00000000<BR><A href="javascript:linkTo_Mail('ocknBygnv|0fg');">eMail schreiben</A><BR></TD></TR> <TR> <TH align=left colSpan=3> <HR> </TH></TR> <TR> <TD class=no align=left> //hier fängt ein neuer satz an...
- hier ein replace ransätzen das sich irgendwie an den tags orientiert und die (value)s irgendwie ordnet? hab nicht viel Erfahrung damit…

RE: [PHP] CSV-Datei aus Array aufbauen - wie gelingt die Anordnung? 2007-03-21 07:56
Anonymer User
noch ne kleine frage….

möchte von ein bis beliebig viele <br> -tags fangen…

ich kenn ja solche Ausdrücke wie (.*?) um null bis beliebig viele zeichen zu fangen
- daraus hätten ich geschlossen ((<br>)*?) für null bis beliebig viel <br>'s

nur bei einem onlinetester, kommen solche ergebnisse:

auf text: <br><br>

Pattern Match!

Here's where the pattern was found:

[!MATCH!][!MATCH!][!MATCH!][!MATCH!][!MATCH!]

Parenthesized substring matches:

* substring 1:


und



Pattern Match!

Here's where the pattern was found:

[!MATCH!][!MATCH!][!MATCH!]

Parenthesized substring matches:

* substring 1:
für text <br>

was heißt das? Ich weiss ja, dass das ? die ausdrücke davon abhält gierig zu werden - nur wwwwas findet er dann innerhalb des textes?

RE: [PHP] CSV-Datei aus Array aufbauen - wie gelingt die Anordnung? 2007-03-21 10:14
Anonymer User
…also irgendwie komm ich mit dem preg_replace und den regulären ausdrücken immer noch nicht zurecht - das ist echt zum heulen…

so etwas einfaches klappt bei mir nicht:

[php]

$suchtext1 ="Telefon: 03562/984444>";
$pattern1 ="/(Telefon:)([0-9]+(\/*?)[0-9]*)/";
$replace1="$2 und $1";
$text1=preg_replace($pattern1, $replace1, $suchtext1);
echo $text1;

[/php]
da kommt so etwas als Ergebnis raus:
Telefon: 03562/984444>
- replace wird also nicht so angewandt wie gewollt…

RE: [PHP] CSV-Datei aus Array aufbauen - wie gelingt die Anordnung? 2007-03-21 11:14
Da:Sourcerer
Als Suchausdruck würde ich da eher sowas nehmen: /(Telefon:)\s+([0-9\/]+)/
Allerdings stellt sich mir gerade die Frage, warum du Telefon matchen willst, wenn das eh' immer gleich zu sein scheint…

RE: [PHP] CSV-Datei aus Array aufbauen - wie gelingt die Anordnung? 2007-03-21 11:22
Anonymer User
wie soll am den vorgehen um alle tel.-nummern zu sammeln, ich dachte man würde sich dann gerade eben an das Telefonnummer orientieren…

RE: [PHP] CSV-Datei aus Array aufbauen - wie gelingt die Anordnung? 2007-03-21 11:28
Anonymer User
ich arbeite jetzt mit preg_match_all …

[php]
$extext1 ="Telefon:03562/984444";

$pattern1 ="/Telefon:\s*([0-9]+\/*[0-9]*)/";

preg_match_all($pattern1, $extext1, $ergebnisarray, PREG_SET_ORDER);

//Ausgabe - kA wie man das am besten macht…
foreach ($ergebnisarray as $outer_key => $inner_array) {
print $outer_key . ' innere Werte:<br />';

foreach ($inner_array as $value) {
print '- ' . $value . '<br />';
}
}
[/php]

Ausgabe:
0 innere Werte: - Telefon:03562/984444 - 03562/984444
Mein Ziel ist es ja einen großen preg_match_all durchlauf zumachen, in dem alle relevanten Daten gesammelt werden - nur wie krieg ich die ordentlich zusammen?
Er soll ja später irgendwie
(Name) (Tel) (Adresse) und co gesammelt haben und die zusammengehörigen sollen auch zusammen bleiben… ich komm echt nicht weiter.. [9]

RE: [PHP] CSV-Datei aus Array aufbauen - wie gelingt die Anordnung? 2007-03-21 11:31
Anonymer User
/(Telefon:)\s+([0-9\/]+)/
den trick mit / in der charakterclass hab ich erst jetzt realisiert..

RE: [PHP] CSV-Datei aus Array aufbauen - wie gelingt die Anordnung? 2007-03-21 11:48
Anonymer User
[php]
$suchtext1 ="Telefon: 03562/984444>";
$pattern1 ="/(Telefon:)([0-9]+(\/*?)[0-9]*)/";
[/php]

Dein Suchmuster berücksichticht nicht das Leerzeichen zwischen "Telefon:" und der Nummer. Eine Möglichkeit wäre:
[php]
$pattern1 = "/(Telefon:)\s*([0-9]+(\/*?)[0-9]*)/";
[/php]

Ich würde die Regex so schreiben:

[php]
$pattern1 = "#(Telefon:)\s*(\d+(?:/\d+)?)#";
[/php]

RE: [PHP] CSV-Datei aus Array aufbauen - wie gelingt die Anordnung? 2007-03-21 12:02
Anonymer User
Dein Suchmuster berücksichticht nicht das Leerzeichen zwischen "Telefon:" und der Nummer. Eine Möglichkeit wäre:
darum hab ich mich schon gekümmert…
Ich würde die Regex so schreiben:

[php]
$pattern1 = "#(Telefon:)\s*(\d+(?:/\d+)?)#";
[/php]

die Klammer ist keine schlechte Idee - aber was bedeutet das ":" da?

RE: [PHP] CSV-Datei aus Array aufbauen - wie gelingt die Anordnung? 2007-03-21 12:44
Da:Sourcerer
Mit ?: verhinderst du, dass du beim Backtracking einen weiteren Match hast. Kann manchmal ganz nützlich sein. Siehe dazu auch mal die tutorials unter www.regular-expressions.info

RE: [PHP] CSV-Datei aus Array aufbauen - wie gelingt die Anordnung? 2007-03-21 12:58
Anonymer User
Mit ?: verhinderst du, dass du beim Backtracking einen weiteren Match hast. Kann manchmal ganz nützlich sein. Siehe dazu auch mal die tutorials unter www.regular-expressions.info

Die Tutorials kenne ich… und ich weiss auch was das "?" bedeutet - meine Frage bezog sich auf das ":" bei:
$pattern1 = "#(Telefon:)\s*(\d+(?:/\d+)?)#";
bzw. der ganze Ausdruck:
(?:/\d+)?
das letzte "?" markiert den selector davor - also den ganzen letzten Ausdruck, aber was macht das erste "?" ? und was soll ":\" bedeuten?

RE: [PHP] CSV-Datei aus Array aufbauen - wie gelingt die Anordnung? 2007-03-21 13:03
Da:Sourcerer
Ganz genau das, was ich gesagt habe. Betrachte halt nicht nur : sonder ?:. und :/ hat in diesem Zusammenhang nciht viel zu bedeuten. Hier wurde # als Begrenzer für den Ausdruck gewählt, folglich muss das / nciht als \/ maskiert werden.

RE: [PHP] CSV-Datei aus Array aufbauen - wie gelingt die Anordnung? 2007-03-21 13:11
Anonymer User
versteh ich trotzdem nicht - willst du mir sagen, dass das "?" sich auf ":" bezieht?
- müsste es dann nicht ":?" statt "?:" heißen?!

RE: [PHP] CSV-Datei aus Array aufbauen - wie gelingt die Anordnung? 2007-03-21 13:21
Anonymer User
soll das vielleicht ein (?ifthen|else) -konstrukt sein?

RE: [PHP] CSV-Datei aus Array aufbauen - wie gelingt die Anordnung? 2007-03-21 13:30
f0k
?: am Anfang einer Gruppe, also direkt hinter der öffnenden runden Klammer, bewirkt nur, dass die Gruppe nicht als Referenz zur Verfügung steht. Die gematchten Teile der Regex in runden Klammern kann man ja normalerweise später wiederverwenden, z.B. bei einem Search&Replace. Wenn man das eh nicht braucht, sondern die Klammern nur zur Gruppierung benötigt (z.B. weil man wie hier einen Quantor auf einen ganzen Teilausdruck anwenden will), kann man mit ?: dafür sorgen, dass keine Referenz gespeichert wird.

The question mark and the colon after the opening round bracket are the special syntax that you can use to tell the regex engine that this pair of brackets should not create a backreference.

RE: [PHP] CSV-Datei aus Array aufbauen - wie gelingt die Anordnung? 2007-03-21 13:31
Da:Sourcerer
Äh… Nein. Wenn du z.B. (?:Telefon:) in deinen Suchausdruck setzt, so wird Telefon: nicht mehr beim Backtracking erfasst, sprich Telefon: liegt dann nicht mehr in \1.

RE: [PHP] CSV-Datei aus Array aufbauen - wie gelingt die Anordnung? 2007-03-21 13:34
Anonymer User
ach so - gut zu wissen….

RE: [PHP] CSV-Datei aus Array aufbauen - wie gelingt die Anordnung? 2007-03-21 13:41
Anonymer User
ich wollt das gerad anwenden um alle audrücke zu fangen, die zwischen beliebigen <tags> liegen

also <br>strasse 23<br>

oder <br>strasse 23<br><br> sollen gefangen werden, mein Ausdruck der nicht klappt:

/(?<[^>]*>)*(.*?)(?<[^>]*>)*/
Da mach ich wohl noch was falsch mit den "?"…

RE: [PHP] CSV-Datei aus Array aufbauen - wie gelingt die Anordnung? 2007-03-21 13:45
Da:Sourcerer
Es gibt halt 'nen Unterschied zwischen ? und ?:

RE: [PHP] CSV-Datei aus Array aufbauen - wie gelingt die Anordnung? 2007-03-21 13:48
f0k
Äh… Nein. Wenn du z.B. (?:Telefon:) in deinen Suchausdruck setzt, so wird Telefon: nicht mehr beim Backtracking erfasst, sprich Telefon: liegt dann nicht mehr in \1.
Sag ich doch - nur dass es nicht Backtracking heißt, sondern backreference. Mit \1 kannst Du auf die erste backreference zugreifen. Mit ?: verhinderst Du, dass Telefon: als backreference gespeichert wird.

Aber dann reden wir ja doch von der selben Funktionalität. Dein Beitrag:
Mit ?: verhinderst du, dass du beim Backtracking einen weiteren Match hast.
klang so danach, als ob ?: das gleiche sein sollte wie ! in Prolog [22].

RE: [PHP] CSV-Datei aus Array aufbauen - wie gelingt die Anordnung? 2007-03-21 13:59
Anonymer User
dann versteh ich das ":" immer noch nicht…

ein anonymer hat nur eins im beispiel benutzt:

(?:/\d+)und benutzt zwei (?:ausdruck_zum_matchen_nicht-werten:) - wie ich es auch anwende, für ein
muster wie <br><br>strasse 23<br> liefert es katastrophale ergebnisse [11]

er wirft jedes zeichen einzeln ins array…

mein ausdruck - so:

[php]$pattern="/(?:<[^>]*>:)*(.*?)(?:<[^>]*>:)*/";[/php]
oder so:
[php]$pattern="/(?:<[^>]*>)*(.*?)(?:<[^>]*>)*/";[/php]

RE: [PHP] CSV-Datei aus Array aufbauen - wie gelingt die Anordnung? 2007-03-21 14:26
Da:Sourcerer
Äh… Nein. Wenn du z.B. (?:Telefon:) in deinen Suchausdruck setzt, so wird Telefon: nicht mehr beim Backtracking erfasst, sprich Telefon: liegt dann nicht mehr in \1.
Sag ich doch - nur dass es nicht Backtracking heißt, sondern backreference. Mit \1 kannst Du auf die erste backreference zugreifen. Mit ?: verhinderst Du, dass Telefon: als backreference gespeichert wird.

Aber dann reden wir ja doch von der selben Funktionalität. Dein Beitrag:
Mit ?: verhinderst du, dass du beim Backtracking einen weiteren Match hast.
klang so danach, als ob ?: das gleiche sein sollte wie ! in Prolog [22].

Ich wollte nichts Gegenteiliges zum Ausdruck bringen. Du warst nur einfach beim Antworten schneller [22]

Und was Backreference vs Backtracking angeht: Wenn man lange, lange Zeit nicht mehr in die Doku geschaut hat, sind Namen nur noch Schall und Rauch [24]

RE: [PHP] CSV-Datei aus Array aufbauen - wie gelingt die Anordnung? 2007-03-23 10:54
Anonymer User
..also irgendwie weiss ich nicht wie ich die ergebnisse verarbeiten soll…

mit preg_match_all erhalte ich ein riesiges multidimensionales Array - was an sich kein Problem wäre, wenn nicht alles doppelt und dreifach aufgezählt werden würde!

Wenn ihr mal so ein Blick auf die Ausgabe werfen wollt:
- href="javascript:win2=NewWindow('/bla_web/tw.nsf/Anlage_w/A984F5E9DFC19326C12571920064E239!opendocument&m1=0&zr=1','win',720,700,'yes');">Hinz & Partner OHG Beispielstr. 93 04299 Ort1 - href="javascript:win2=NewWindow('/bla_web/tw.nsf/Anlage_w/A984F5E9DFC19326C12571920064E239!opendocument&m1=0&zr=1','win',720,700,'yes');">Hinz & Partner OHG Beispielstr. 93 04299 Ort1 - Hinz & Partner OHG - Beispielstr. 93 - href="javascript:win2=NewWindow('/bla_web/tw.nsf/Anlage_w/87892911FD1A465CC12571920064AE19!opendocument&m1=0&zr=1','win',720,700,'yes');">unternehmenxy Beisplie Straße 2 03149 ort2 - href="javascript:win2=NewWindow('/bla_web/tw.nsf/Anlage_w/87892911FD1A465CC12571920064AE19!opendocument&m1=0&zr=1','win',720,700,'yes');"> unternehmenxy Beisplie Straße 2 03149 ort2 - unternehmenxy - Beisplie Straße 2 - href="javascript:win2=NewWindow('/bla_web/tw.nsf/Anlage_w/A2D06C87EF1549D0C1257192006509FC!opendocument&m1=0&zr=1','win',720,700,'yes');">unternehmen2

diese Ausgabe habe ich mit
[php]
foreach ($ergebnisarray as $outer_key => $inner_array) {
//print 'Außen:'.$outer_key . ' innere Werte:<br />';

foreach ($inner_array as $value) {
print '- ' . $value . '<br />';
}
}
[/php] erhalten.

Ich weiss nicht warum die Ausgabe so ungeordnet ist schließlich ist mein Reg.-Ausdruck erstmal so aufgebaut:
[php]
$patternStrasse2="([^<]+)(?:<[^>]*>)+";
$firmenname2="(?:.*'win',720,700,'yes'\);\">)([^<]+)(?:<\/A><\/B>)(?:<BR>)+";
$postleitzahl2="[^<>]+(?:<\/TD>)+";

preg_match_all("/($firmenname2"."$patternStrasse2"."$postleitzahl2)+/", $page, $ergebnisarray, PREG_SET_ORDER);
[/php]

bzw. ich weiss nicht warum ich soetwas href="javascript:win2=NewWindow('/bla_web/tw.nsf/Anlage... zu sehen bekomme, wenn ich doch da auf backreference verzichten wollte - bei den anderen tags klappt das doch auch… Was mach ich falsch und wie kann ich die Ergebnisse sinnvoll verwerten? - ich will keine Duplikate…

RE: [PHP] CSV-Datei aus Array aufbauen - wie gelingt die Anordnung? 2007-03-23 12:55
Anonymer User
….ich könnte echt hilfe gebrauchen… steh unter zeitdruck [11]

…vielleicht ist ja nur unklar was ich frage, wo meine Probleme sind… wenn 'Fragen da sind - nur zu!

RE: [PHP] CSV-Datei aus Array aufbauen - wie gelingt die Anordnung? 2007-03-23 13:56
f0k
….ich könnte echt hilfe gebrauchen… steh unter zeitdruck [11]

Sind es denn so viele Datensätze, dass es nicht inzwischen einfacher gewesen wäre, die alle per Hand in eine Tabelle zu kopieren?
Ansonsten solltest Du es vielleicht mit Tools wie kregexpeditor oder Regex Coach probieren, da kannst Du die Expressions bestimmt besser debuggen als in einem PHP-Script.

RE: [PHP] CSV-Datei aus Array aufbauen - wie gelingt die Anordnung? 2007-03-23 14:03
Anonymer User
jepp - das sind zu viele daten - mehrere Dateien mit tausenden Firmen….

…fremdsoftware ist hier verpöhnt [9]

…aber ich bin um einiges weiter… [17]

Ich habs leider ein bischen umständlich - wegen dieser mir unverständlich auswertung eines Ausdrucks aber egal - jetzt habe ich die relevanten Informationen innerhalb eines Feldes gesammelt und werde da noch mal matchen mit hilfe von leerzeichen…

RE: [PHP] CSV-Datei aus Array aufbauen - wie gelingt die Anordnung? 2007-03-23 15:00
Anonymer User
..irgendwie verzweifele ich wieder an den leerzeichen…

[php]
for ($i = 0; $i < count($ergebnisarray); $i++) {
$ergebnisarray[$i][0] = preg_replace("/'win',720,700,'yes'\);\">/", "", $ergebnisarray[$i][0]);
echo $ergebnisarray[$i][0];
echo "<br><br>";
}
[/php]
liefert mir alle Daten schön sauber auf dem Bildschirm…

nach dem Motto:

Name1

Strasse1
Ort1

Name2

Strasse2
Ort2


jeder datensatz liegt auf der zweiten Ebene des Arrays ($ergebnisarray[$i][0];)

da möchte ich auftrennen nach leerzeichen, oder so ähnlich…

nur weiss ich nicht wieviele leerzeichen jeweils zwischen den werten sind…

..ich hatte an so etwas gedacht:

[php]
function replaceandreform($input_array){
global $csvdatensatz;

for ($i = 0; $i < count($input_array); $i++) {
$input_array[$i][0] = preg_replace("/'win',720,700,'yes'\);\">/", "", $input_array[$i][0]);
//echo $ergebnisarray[$i][0];
$datensatz = preg_split("/[\s]{2,}/", $input_array[$i][0]);
foreach($datensatz as $value){
$csvdatensatz.= $value;
$csvdatensatz.= ";";
}
}

}

[/php]

gibt es vielleicht eine andere möglichkeit?

RE: [PHP] CSV-Datei aus Array aufbauen - wie gelingt die Anordnung? 2007-03-23 15:33
Anonymer User
vielleicht triviale Frage…

wie kann ich in php mehrere lerrzeichen auf eins reduzieren?

ich dachte soetwas müsste hinhauen:

[php]preg_replace("/[\s]{2,}/", " ", $input);[/php]

..klapt aber irgendwie nicht…

RE: [PHP] CSV-Datei aus Array aufbauen - wie gelingt die Anordnung? 2007-03-23 17:21
tilo
Versuchs hiermit:
[php]
preg_replace('/ {2,}/', ' ', $input);
[/php]

RE: [PHP] CSV-Datei aus Array aufbauen - wie gelingt die Anordnung? 2007-03-23 17:46
Anonymer User
..der fehler lag woanders [2]….

…hab mal wieder ein großes Problem, folgendes pattern
/(.*?)[\w]+\.[\s]+([\d]+)[\s\n\r]+([\d]+)[\s]+([\w]+)/ matched anscheinend nicht:
"
SMK teleprofi

Cottbuser Straße 53
03149 Forst

"
…und das obwohl das online funkt…

.d.h. wenn ich das in ein replace derart fülle:

[php]echo preg_replace("/(.*?)[\w]+\.[\s]+([\d]+)[\s\n\r]+([\d]+)[\s]+([\w]+)/", "$3 $4", $ergebnisarray[1][0]);[/php]

…aber ich wieder alles ausgegeben…

RE: [PHP] CSV-Datei aus Array aufbauen - wie gelingt die Anordnung? 2007-03-24 20:13
Muelli
es gibt tolle Regexp checker.. so mit Farbe und Bunt… zB http://kodos.sourceforge.net/

MfG
Muelli

PS: PHP und Regexps sind doof. Besonders regexps, aber ganz besonders PHP..