Problème avec les regex [PHP]

cs_b4d Messages postés 29 Date d'inscription dimanche 23 janvier 2005 Statut Membre Dernière intervention 18 mars 2008 - 8 sept. 2005 à 12:43
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 - 9 sept. 2005 à 15:44
Bonjour.

Voilà, j'ai un petit problème avec une regex...
Je ne sais pas comment la faire.

Pouvez-vous m'aider?

Le problème:
Je vais lire dans un fichier et je récupère une ligne qui ressemble à ceci:
Date:20/05/2005 15:47:12
Maintenant, a partir de cette ligne, j'aimerai avoir une variable date et une variable heure telles que:
$date='20/05/2005';
$heure='15:47:12';

A partir de la, je suis bloqué...
J'avais pensé à ceci mais ca ne fonctionne pas:
$date = preg_replace ('!(.{5})(.{10})(.{1})(.{8})!', '$2', $temp);
$heure = preg_replace ('!(.{5})(.{10})(.{1})(.{8})!', '$4', $temp);
Mais ça ne fonctionne pas.

Si vous avez une idée... Merci

15 réponses

malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
8 sept. 2005 à 13:09
Franchement, si c'est toujours sous ce format, ne t'emmerde pas avec les expressions régulières :



<?php

$chaine ='Date:20/05/2005 15:47:12';

$chaine = str_replace ('Date:', '', $chaine);

$tmp = explode (' ', $chaine);

echo $date = $tmp[0];

echo '
';

echo $heure = $tmp[1];

?>
0
cs_b4d Messages postés 29 Date d'inscription dimanche 23 janvier 2005 Statut Membre Dernière intervention 18 mars 2008
8 sept. 2005 à 14:15
Merci, ça fonctionne à un détail près...
Il ne prend pas le str_replace!

Donc, je me retrouve avec d'un coté
Date:20/05/2005
et de l'autre
15:47:12


Ce qui ne m'arrage pas puisque la suite prévois d'envoyer ça dans une table (dont je ne peux modifier les champs) avec un champ date et un champ heure tout deux en chiffre... (séparateur accepté)

Merci
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
8 sept. 2005 à 14:26
Essaye avec str_ireplace
0
cs_b4d Messages postés 29 Date d'inscription dimanche 23 janvier 2005 Statut Membre Dernière intervention 18 mars 2008
8 sept. 2005 à 15:46
Non, cela ne fonctionne toujours pas...
Fonction inconnue...
Est-ce que ça ne peut pas venir du fait que je travaille avec easy PHP?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
8 sept. 2005 à 17:33
Fonction inconnue...? Elle existe depuis php 3... Non EasyPhp doit la
connaitre aussi. Tu es sûr de bien l'écrire ? Fais un copier-coller de
ton code ici ?
0
cs_b4d Messages postés 29 Date d'inscription dimanche 23 janvier 2005 Statut Membre Dernière intervention 18 mars 2008
8 sept. 2005 à 17:46
J'explique pour pas qu'il y ai de malentendu: Le but, c'est que la page php parcours un fichier, ouvre les fichier dont l'extention est vmg qu'il aille lire la ligne 18 et la 19 puis qu'il l'ajoute a une base de donnée contenant un champ id qui s'incrémente seul, un champ date, un champ heure et un champ message...

Le code:

<?
$rep='./';
$dir = opendir($rep);
while ($file = readdir($dir))
{
if(is_file($file))
{
$pos = strrpos($file,".");
$ext = substr($file,$pos+1,strlen($file)-$pos); // verification de l'extention
if ($ext=='vmg')
{
$lire=fopen($file, "r");
for ($i=1; $i<18; $i++) //on passe les 17 premieres lignes
{
$x = fgets ($lire);
}
$chaine = trim(fgets ($lire));
$chaine = str_ireplace('Date:','',$chaine);
$tmp = explode (' ', $chaine);
$date = $tmp[0];
$heure = $tmp[1];
$msg = trim(fgets ($lire));
fclose ($lire);


echo $date.'
'.$heure.'
'.$msg.'
';
echo '
';
}
}
}
closedir($dir);
?>

La partie ajout a la base de donnée, ce sera pour quand ceci fonctionnera...

Merci de bien vouloir m'aider...
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
8 sept. 2005 à 17:56
$x = fgets ($lire);
}
$chaine = trim(fgets ($lire));
$chaine = str_ireplace('Date:','',$chaine);



Y a un blème là. Tu stockes ce que tu lis dans $x, donc le ltrim doit
se faire sur $x, et pas sur $lire. Ce qui fait que, dans ton cas,
$chaine ressemble à n'importe quoi.
0
cs_b4d Messages postés 29 Date d'inscription dimanche 23 janvier 2005 Statut Membre Dernière intervention 18 mars 2008
8 sept. 2005 à 18:41
Non, en fait, dans le fichier que je doit lire, les 17 premières lignes ne m'interessent pas... et je ne connais pas d'autre moyen que celui là pour les oublier!
fonc, le for sert a passer les 17 premieres lignes et le ensuite, je recupere les deux lignes suivantes qui m'interessent...
J'espere que tu me comprends... J'avoue parfois tres mal expliquer mais en général, je me contente de mal expliquer lol!
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
9 sept. 2005 à 09:06
Oui j'avais mal lu ton code désolé :-)



Je suis très étonné du "fonction inconnue"...

Bon ben y a une autre solution. Enlève le str_replace (), fais le explode, et là :

$tmp = explode (' ', $chaine);
$date = $tmp[0];
$heure = $tmp[1];



Tu remplaces par ça :



$tmp = explode (' ', $chaine);
$date = substr ($tmp[0], 5);
$heure = $tmp[1];



Mais ça devient tordu lol.
0
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
9 sept. 2005 à 12:27
$chaine = str_replace('Date:',' ',$chaine);



Faut peut être laissé un espace non ? ;)
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
9 sept. 2005 à 12:38
Boah moi ça marche sans espace. De toutes façons y aurait une erreur
sur les paramètres (wrong parameter), pas undefined function. Ptete
qu'il a un php 2xx... ;-)
0
cs_b4d Messages postés 29 Date d'inscription dimanche 23 janvier 2005 Statut Membre Dernière intervention 18 mars 2008
9 sept. 2005 à 13:50
$tmp = explode (' ', $chaine);
$date = $tmp[0];
$heure = $tmp[1];

Tu remplaces par ça :

$tmp = explode (' ', $chaine);
$date = substr ($tmp[0], 5);
$heure = $tmp[1];

Cette solution a tres bien fonctionné... Juste que j'ignore pourquoi mais j'ai du mettre
$dataque e = substr ($tmp[0],10);
Comme si chcaractère comptait pour deux... allez comprendre!
On dit toujours que l'ordinateur ne fait pas d'erreur mais que c'est le programmeur qui en fait! En tout cas, même si j'ai corrigé la mienne, je ne l'ai toujours pas comprise!
Si quelqu'un la comprend, j'aimerais une explication!

En tout cas, merci beaucoup!
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
9 sept. 2005 à 13:55
10 au lieu de 5...?

Heu...il devait y avoir des caractères blancs devant, dans ton fichier, non ? Enfin tan que ça marche, hein...
0
cs_b4d Messages postés 29 Date d'inscription dimanche 23 janvier 2005 Statut Membre Dernière intervention 18 mars 2008
9 sept. 2005 à 15:35
Voici a quoi ca ressemble quand je l'ouvre avec notepad...

BEGIN:VMSG
VERSION:1.1
X-IRMC-STATUS:READ
X-IRMC-BOX:INBOX
BEGIN:VCARD
VERSION:2.1
N:
TEL:+32000000000
END:VCARD
BEGIN:VENV
BEGIN:VCARD
VERSION:2.1
N:
TEL:
END:VCARD
BEGIN:VENV
BEGIN:VBODY
Date:21/05/2005 17:30:40
Ici le message sur une seule ligne...
END:VBODY
END:VENV
END:VENV
END:VMSG

Désolé, je l'ai un peu modifié parce que c'est un poil privé! lol...
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
9 sept. 2005 à 15:44
Bizarre...
0
Rejoignez-nous