Zwei kleine Formatprobleme

Hi Ihr Retter in der Not *g*

ich hab zwei kleine Probleme, wo ich grade ein wenig hänge…
Leider bin ich ein wenig unter Zeitdruck und versuche deswegen recht früh - mit relativ wenig suche - hier mein Glück, weil ich weiss, dass ihr fitter seid als ich :wink:

nun zu den Problemen.

  1. Ich habe Daten in der folgenden Formatierung:
    27-May-2004 05:26:00
    12-Apr-2004 07:59:48
    etc.
    Diese Daten würde ich gerne in Unix-Timestamp umwandeln, aber wie? Muss ich wirklich alles zerlegen um dann mktime anwenden zu können oder gibt es vielleicht doch einen besseren Weg?
    Warum ich es umwandeln will ist folgendes: Ich würde gerne sortieren können, in welcher Reihenfolge etwas passiert ist - die Daten kommen aber durcheinander an (verschiedene Datenquellen, keine Datenbank)…

  2. ich habe einen String gefangen, der aus Zahlen besteht. Genauergenommen besteht er aus Leerzeichen und Zahlen und hintendran ein \n. wird durch ein substr nach einem identifier selektiert. Die Anzahl der Leerzeichen unterscheidet sich, die Zahlen sollten eigentlich immer aus 4 Ziffern bestehen und anschliessend gleich der Zeilenumbruch. Nun fällt mir da als einzige möglichkeit ein die Leerzeichen und das \n mit ereg/str_replace zu entfernen, ich meine aber dass es noch eine schönere Lösung gab… Aber ich bin mir nicht sicher, ob ich das nicht mit Excel verwechselt habe…
    Deswegen frage ich hier nochmal nach…

wieder mal vielen Dank :smile:
Munich

Hi Ihr Retter in der Not *g*

ich hab zwei kleine Probleme, wo ich grade ein wenig hänge…
Leider bin ich ein wenig unter Zeitdruck und versuche deswegen
recht früh - mit relativ wenig suche - hier mein Glück, weil
ich weiss, dass ihr fitter seid als ich :wink:

nun zu den Problemen.

  1. Ich habe Daten in der folgenden Formatierung:
    27-May-2004 05:26:00
    12-Apr-2004 07:59:48
    etc.
    Diese Daten würde ich gerne in Unix-Timestamp umwandeln, aber
    wie? Muss ich wirklich alles zerlegen um dann mktime anwenden
    zu können oder gibt es vielleicht doch einen besseren Weg?
strtotime("27-May-2004 05:26:00");
  1. ich habe einen String gefangen, der aus Zahlen besteht.
    Genauergenommen besteht er aus Leerzeichen und Zahlen und
    hintendran ein \n. wird durch ein substr nach einem identifier
    selektiert. Die Anzahl der Leerzeichen unterscheidet sich, die
    Zahlen sollten eigentlich immer aus 4 Ziffern bestehen und
    anschliessend gleich der Zeilenumbruch. Nun fällt mir da als
    einzige möglichkeit ein die Leerzeichen und das \n mit
    ereg/str_replace zu entfernen, ich meine aber dass es noch
    eine schönere Lösung gab…

es gibt keine schoenere loesung als regexp.

$foo = ereg\_replace('[^0-9]+',''," 1432 \n");

intval ist nicht schoen.

$foo = intval(" 1432 \n");

vielen Dank :smile:

strtotime(„27-May-2004 05:26:00“);

ich scheine echt nen Kurs zu brauchen in „finde die Funktion, die Du suchst“ ;(

es gibt keine schoenere loesung als regexp.

$foo = ereg_replace(’[^0-9]+’,’’," 1432 \n");

Danke!
Ich blicke diese sachen leider irgendwie nicht so… ^ bedeutet sowas wie „alles ausser“, oder?
[0-9] ist sicher die wildcard für zahlenwerte?
was bedeutet das + ?

intval ist nicht schoen.

$foo = intval(" 1432 \n");

das war glaub ich das was ich im Hinterkopf hatte, aber warum ist das nicht so schön?

vielen Dank nochmal :smile:

Re: vielen Dank :smile:
http://de.selfhtml.org/cgiperl/sprache/regexpr.htm

es gibt keine schoenere loesung als regexp.

$foo = ereg_replace(’[^0-9]+’,’’," 1432 \n");

Ich blicke diese sachen leider irgendwie nicht so…

ist zu lesen als ersetze alle zeichen, die keine ziffern sind mit nichts

^ bedeutet sowas wie „alles ausser“, oder?

wenn es wie im besipiel direkt hinter [ bedeutet es keines der menge s.u., wenn es unmittelbar am anfang des ausdruckes steht bedeutet es der anfang eines stringes, entspr. $ fuer das ende eines stringes

[0-9] ist sicher die wildcard für zahlenwerte?

[xxx] die eckigen klammern begrenzen eine zeichenmenge, das 0-9 alle ziffern, entsprechend a-z und A-Z. obacht: wenn man ein - in eine zeichenmenge einschliessen will, muss man es direkt hinter [ bzw. [^ notieren.

was bedeutet das + ?

1 od. bel. viele der betreffenden zeichen, entsprechend ? 1 od. kein, bzw. * kein od. bel. viele

intval ist nicht schoen.

$foo = intval(" 1432 \n");

das war glaub ich das was ich im Hinterkopf hatte, aber warum
ist das nicht so schön?

schoen im sinne von cleaner code ist es wahrscheinlich, man kann es leichter lesen.
schoen im sinne von ninja ist es nciht. regexp sind ninja und also schoen :wink:))

wobei ich einschraenkend hinzufuegen meochte, dass ich halbwegs lesen kann, wann ein regexp matched. was intval intern macht, koennte ich nur durch analyse des php-quellcodes herausfinden. ich kann also sicherer vorhersagen, was mein regexp macht, als was die funktion macht - aber kalr, man kann/darf/soll auf keinen fall alles neu schrieben, was es auch kompiliert gibt.

1 Like

jetzt wirds kriminell *g*
was auch immer Kampfsport damit zu tun hat *lach*

http://de.selfhtml.org/cgiperl/sprache/regexpr.htm

suuuper link… da hab ich endlich mal alle Wildcards beisammen - man Du gehst heute auf Sternejagd *g*

[xxx] die eckigen klammern begrenzen eine zeichenmenge, das
0-9 alle ziffern, entsprechend a-z und A-Z. obacht: wenn man
ein - in eine zeichenmenge einschliessen will, muss man es
direkt hinter [ bzw. [^ notieren.

was bedeutet das + ?

1 od. bel. viele der betreffenden zeichen, entsprechend ? 1
od. kein, bzw. * kein od. bel. viele

das bedeutet, dass wenn ich das nicht mache ich auch eine Zeichenfolge konstruieren kann, oder?
Weil ich nämlich jetzt schon wieder vor dem nächsten Problem stehe, bei dem mein Variableninhalt etwa so aussieht:

" A1.23 B4\n"

und da würde ich jetzt auch gerne alles rauskürzen. sollte aber nach Möglichkeit das mittlere Leerzeichen behalten…
Wenn ich es recht verstehe müsste es also ein ‚[^A-Z][^0-9].[^0-9+] [^A-Z][^0-9]‘ sein? *grübel*
ist bestimmt falsch *vermut*

das war glaub ich das was ich im Hinterkopf hatte, aber warum
ist das nicht so schön?

schoen im sinne von cleaner code ist es wahrscheinlich, man
kann es leichter lesen.
schoen im sinne von ninja ist es nciht. regexp sind ninja und
also schoen :wink:))

da war er ja, der Ninja… aber was hat der jetzt damit zu tun? *g*

aber kalr, man
kann/darf/soll auf keinen fall alles neu schrieben, was es
auch kompiliert gibt.

drum frag ich ja lieber nach :smiley:

Weil ich nämlich jetzt schon wieder vor dem nächsten Problem
stehe, bei dem mein Variableninhalt etwa so aussieht:

" A1.23 B4\n"

und da würde ich jetzt auch gerne alles rauskürzen. sollte
aber nach Möglichkeit das mittlere Leerzeichen behalten…
Wenn ich es recht verstehe müsste es also ein
‚[^A-Z][^0-9].[^0-9+] [^A-Z][^0-9]‘ sein? *grübel*

nee, ich glaube der ansatz ist nicht wirklich ok. am besten tust du dir ein tutorial zu regexp rein… im uebrigen steht . fuer ein beliebiges zeichen, wenn du also nach einem punkt suchen moechtest, dann schreib .

wenn du die obige folge genauso erhalten willst, und sicher bist, dass am anfang immer leerzeichen und am ende immer ein newline steht, tut es viellecht auch schon trim oder rtrim etc… die sind aber auch wieder nciht ninja :wink:

wenn du natuerlich die einzelnen werte erhalten moechtest, was natuerlich interessanter und vor allem ninja waere, dann muesste man es wie folgt schreiben - ungetestet:

$foo = " A1.23 B4\n";
if (! eregi('([a-z0-9]{2})\.([a-z0-9]{2}) ([a-z0-9]{2})',$foo,$matches) )
 { print "war nciht im geforderten format"; }
else
 { 
 print "s1:".$matches[1]." s2:".$matches[2]." s3:".$matches[3];
 }
print "
\n";

den erklaer ich jetzt aber nicht, das wird mir zu lang…

1 Like

Wenn ich es recht verstehe müsste es also ein
‚[^A-Z][^0-9].[^0-9+] [^A-Z][^0-9]‘ sein? *grübel*
ist bestimmt falsch *vermut*

es gibt diverse kleine tools, mit denen man regexp probieren+editieren kann, ist glaube ich auch in phpcoder od. so drin…

was auch immer Kampfsport damit zu tun hat *lach*

http://de.selfhtml.org/cgiperl/sprache/regexpr.htm

suuuper link… da hab ich endlich mal alle Wildcards
beisammen - man Du gehst heute auf Sternejagd *g*

Da will ich gleich auch noch 2 Links beisteuern:
http://www.regenechsen.de/regex_de/regex_1_de.html
http://www.weitz.de/regex-coach/

Alexander