2017-10-19 40 views
-1

J'essaye de lire un fichier avec 1000 lignes contenant la date comme: 2017-09-04 aaaa-mm-jj mm yyyy dd. vient d'abord la date, puis le format actuel, puis le format désiré pour convertir la date en. J'essaye de lire toutes les données du dossier dans la rangée et l'éclate sur la base de l'espace. Ensuite, je prends la première position de trois tableaux pour convertir la date au format désiré. Mais il donne une erreur en disant une exception inattendue.lignes de séparation de dates et de présentation dans le format désiré

Voici mon code:

<?php 
$homepage = file_get_contents("file.txt"); 

$keywords = preg_split("/[\s,]+/", $homepage); 

print_r($keywords); 
$len = count($keywords); 
for ($i = 0; $i <= $len; $i = $i + 2) { 

    $a = $keywords[$i]; 
    $b = $keywords[$i + 1]; 
    $c = $keywords[$i + 2]; 

    $date = new DateTime($a); 
    echo $date - > format($c); 
} 
?> 
+0

Pourquoi ne pas utiliser un [ 'foreach'] (http://php.net/manual/en/control-structures.foreach.php) -loop pour le' $ tableau de mots-clés? Et où se déroule l'excpetion? – empiric

+1

Pour un, ces chaînes de format ne sont pas valides, (voir: ['date()'] (http://php.net/manual/fr/function.date.php#refsect1-function.date-parameters)) pour accepté chaînes de format] et pour deux, vous devrez utiliser ['DateTime :: createFromFormat()'] (http://php.net/manual/fr/datetime.createfromformat.php) pour créer un datetime à partir d'un donné chaîne et format. – Sammitch

+0

Pourriez-vous publier la partie du fichier actuelle ici? –

Répondre

0

Essayez quelque chose comme ça. Le problème est PHP ne regarde pas les formats comme yyyy-mm-dd, mais plutôt comme Y-m-d'. Which is what the fonctions preg_replace sont pour.

<?php 
$homepage = "2017-09-04, yyyy-mm-dd, mmyyyydd"; 

$homepage = preg_replace('/yyyy/', 'Y', $homepage, -1); 
$homepage = preg_replace('/mm/', 'm', $homepage, -1); 
$homepage = preg_replace('/dd/', 'd', $homepage, -1); 

$keywords = preg_split("/[\s,]+/", $homepage); 

print_r($keywords); 
$len = count($keywords); 
for ($i = 0; $i < $len; $i += 3) { 

    $a = $keywords[$i]; 
    $b = $keywords[$i + 1]; 
    $c = $keywords[$i + 2]; 

    $date = date_create_from_format($b, $a); 
    echo $date->format($c); 
} 
?> 

Works here

+0

Que faire si j'essaie de lire des données à partir d'un fichier qui a plusieurs dates avec leur format actuel et les formats désirés. alors dans ce cas, comment prendre la boucle for à la position 4ème tableau. – Rahila

+0

Désolé? Pourriez-vous poster un exemple de vos données? –

+0

Définition d'entrée Un fichier d'entrée pour ce problème contient moins de 1 000 lignes de triplets séparés par des espaces. Chaque ligne contiendra une date, son format actuel et le format de sortie souhaité. Définition de sortie Votre sortie doit contenir le même nombre de lignes que le fichier d'entrée donné. Chaque ligne doit contenir la date d'entrée donnée dans le format de sortie souhaité. Exemple d'entrée 2017-09-04 aaaa-mm-jj mm * aaaa * jj Exemple de sortie 09 * 2017 * 04 – Rahila