Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD
PHP & SGBD Forum d'entraide sur les SGBD avec PHP. Avant de poster : FAQ BDD, toutes les FAQ PHP, cours BDD et sources BDD
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 18/03/2011, 17h43   #1
Invité de passage
 
Femme
Technicien réseau
Inscription : mars 2011
Messages : 9
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France

Informations professionnelles :
Activité : Technicien réseau
Secteur : Industrie

Informations forums :
Inscription : mars 2011
Messages : 9
Points : 0
Points : 0
Par défaut lecture d'un fichier avec variable aléatoire.

Bonjour,

je dois afficher sur ma page php dans un formulaire des données .
Pour cela je dois lire un fichier .txt et en extraire des données .
Je vous explique :

exemple du txt et données a lire :

Citation:
l1. 14/08/12; 3785 ; 1; 24
l2. 14/08/12; 3785 ; 2; 18
l3. 14/08/12; 3785 ; 3; 42
l4. 14/08/12; 3785 ; 4; 80
l5. 15/08/12; 3785 ; 1; 25
l6. 15/08/12; 3785 ; 2; 48
l7. 15/08/12; 3785 ; 3; 60

Le but étant de lire simplement les 2 données qui sont en rouge et de les afficher une a une sur la page php.

avec ce code j'arrive a les lires :
Code php :
1
2
3
4
5
6
7
8
9
<?php
$num_ligne=6;
$fichier = file('monfichier.txt'); //ouvre le fichier texte.
echo(""); //test.
$position=explode(";",$fichier[$num_ligne-1]); //permet de chercher la ligne souhaitée et utilise le ; pour differencier chaque champ.
$variable=$position[12-1]; //affiche le champ 4.
print floatval (trim($variable));//trim permet de supprimer les espaces et floatval permet de conserver uniquement que des chiffres.
 
?>

seulement le problème c'est que j'utilise une ligne et une colonne précise , alors qu'il faudrait que se soit des variables car mon fichier texte varie en permanence je ne peut donc pas savoir a quelle ligne sera ma données par contre la colonne reste identique .

si quelqu’un pourrait m'aider se serait vraiment sympa .
lamissgirl est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/03/2011, 17h54   #2
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 016
Points : 5 016
Il s'agit de trouver les valeurs 80 et 60 en fait ?

Si c'est le cas tu peux faire:
Code :
1
2
3
4
5
6
7
 
$handle = fopen('mon_fichier.txt', 'r');
while ($line = fgets($handle)) {
  $pieces = explode(';', $line);
  if (in_array(array_pop($pieces), array('80','60'))
    echo $line;
}
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/03/2011, 10h57   #3
Membre chevronné
 
Homme
Développeur Web
Inscription : mars 2011
Messages : 399
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur Web
Secteur : Finance

Informations forums :
Inscription : mars 2011
Messages : 399
Points : 662
Points : 662
Récupérer la 4ème valeur de la dernière ligne de chaque jour, c'est ça ?
__________________
Membre de StackOverflow, je suis un fervant utilisateur de PHP et de jQuery.
Après des études de graphisme, j'ai décidé de mélanger développement web et web design. J'ai ainsi donc créé mon site web mais aussi plusieurs projets personnels.
Dans les plus aboutis, vous pourrez trouver dans mon labo et dans mon devblog, un raccourcisseur d'url, un bookmarklet pour envoyer l'url de la page actuelle vers votre email pour lire plus tard ou sauvegarder, mon générateur de template HTML5, etc...
Shikiryu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/03/2011, 11h39   #4
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 016
Points : 5 016
Mais comment fais-tu pour déterminer les lignes à lire ? quelle logique doit suivre ton algorithme ?
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/03/2011, 13h32   #5
Membre Expert
 
Avatar de transgohan
 
Homme Baptiste ROUSSEL
Étudiant
Inscription : janvier 2011
Messages : 802
Détails du profil
Informations personnelles :
Nom : Homme Baptiste ROUSSEL
Localisation : France, Territoire de Belfort (Franche Comté)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : janvier 2011
Messages : 802
Points : 1 515
Points : 1 515
Code :
1
2
3
4
5
6
7
8
9
10
$handle = fopen('mon_fichier.txt', 'r');
$tmp = "";
while ($line = fgets($handle)) {
  $pieces = explode(';', $line);
  if( $pieces[2] == 1 )
  {
    echo $tmp; // affichage de la valeur de la ligne précédente
  }
  $tmp = $pieces[3]; // sauvegarde de la valeur
}
Ceci pourrait-il aller ? (non testé)
transgohan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/03/2011, 13h32   #6
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 016
Points : 5 016
Ok, c'est toujours pas super clair mais je crois comprendre ce que tu cherches à faire: tu as un ensemble de lignes dont une colone est un index qui va de 1 à n et qui peut revenir à 1 (j'imagine que chaque "bloc" d'index 1-n caractérise un jour un truc du genre). Il faut que tu obtiennes la dernière colonne du dernier ensemble de lignes numérotés de 1 à n c'est ça ?

Si c'est effectivement le cas, tu peux faire:
Code :
1
2
3
4
5
6
7
8
9
 
$handle = fopen('mon_fichier.txt', 'r');
$res = array();
$current_block = 0;
while ($row = fgetcsv($handle)) {
  if ($row[2] == 1) $current_block ++; // bloc suivant
  $res[$current_block] = $row[3];
}
var_dump($res);
Donc immaginon qu'on ait
Code :
1
2
3
4
5
6
7
8
9
10
11
12
l1. 14/08/12; 3785 ; 1; 24
l2. 14/08/12; 3785 ; 2; 18
l3. 14/08/12; 3785 ; 3; 42
l4. 14/08/12; 3785 ; 4 ; 80
l5. 15/08/12; 3785 ; 1; 48
l6. 15/08/12; 3785 ; 2 ; 60
l7. 16/08/12; 3785 ; 1; 37
l8. 16/08/12; 3785 ; 2; 78
l9. 16/08/12; 3785 ; 3; 19
l10. 16/08/12; 3785 ; 4; 45
l11. 16/08/12; 3785 ; 5 ; 159
On a bien trois blocs, donc le tableau de résultat produit par l'exemple de code que je t'ai donné produira:
Code :
1
2
3
4
 
1 => 80
2 => 60
3 => 159
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/03/2011, 14h02   #7
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 016
Points : 5 016
Ce code ne peut pas fonctionner car il manque une ligne avec un index 1 qui empêche la dernière valeur d'être lue. Utilise l'exemple que je t'ai passé, ça devrait fonctionner comme tu le souhaite.
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/03/2011, 14h10   #8
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 016
Points : 5 016
Étrange, les lignes sont pourtant contigües... Qu'a cela ne tienne, on va faire:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
 
$handle = fopen('mon_fichier.txt', 'r');
$res = array();
$current_block = 0;
while ($line = fgets($handle)) {
  $row = explode(';', $line);
  if (isset($row[2]) && isset($row[3])) {
    if ($row[2] == 1) $current_block ++; // bloc suivant
    $res[$current_block] = $row[3];
  }
}
var_dump($res);
Et là on devrait être tranquille.

-- EDIT

Dans mon exemple précédent (celui qui à des erreurs) j'avais oublié de spécifier le délimiteur CSV, la syntaxe correcte est donc:
Code :
1
2
3
4
5
6
7
8
9
10
11
 
$handle = fopen('mon_fichier.txt', 'r');
$res = array();
$current_block = 0;
while ($row = fgetcsv($handle, ';')) {
  if (isset($row[2]) && isset($row[3])) {
    if ($row[2] == 1) $current_block ++; // bloc suivant
    $res[$current_block] = $row[3];
  }
}
var_dump($res);
A voir: http://php.net/manual/en/function.fgetcsv.php
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/03/2011, 14h19   #9
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 016
Points : 5 016
Citation:
il m'affiche maintenant sa :

array(3) { [1]=> string(5) " 80 " [2]=> string(5) " 60 " [3]=> string(4) " 159" }

pourtant il n'est pas demandé de retourner le array() ?

Il faudrait qu'il m'affiche juste la valeur : 80 60 159
Tu aurais pu y arriver non ?

Code :
1
2
 
echo implode(' ', $res);
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 21/03/2011, 14h32   #10
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 016
Points : 5 016
La dernière donnée en rouge est le dernier élément du tableau de résultat, pour l'afficher il suffit de faire:
Code :
1
2
3
4
 
echo array_pop($res);
// ou
echo end($res);
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 21/03/2011, 14h51   #11
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 016
Points : 5 016
Mais au juste, on vient de faire tout un imbroglio pour afficher une donnée de la dernière ligne du fichier exact ?

Vu que c'est ça, pourquoi ne pas utiliser directement la dernière ligne en itérant le fichier par la fin ?? On peut utiliser ça: http://tekkie.flashbit.net/php/tail-...onality-in-php

Ou faire ça salement de cette manière:
Code :
1
2
3
4
 
$data = file("mon_fichier.txt");
$row = str_getcsv($data[count($data)-1], ';');
echo $row[3];
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/03/2011, 15h00   #12
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 466
Points : 8 466
pour utiliser moins de mémoire je ferais plus comme ca :

Code :
1
2
3
4
5
6
7
8
9
10
$data = fopen('test.csv', 'rb');
 
while($buffer = fgetcsv($data, 0, ';'))
{
    $row = $buffer;
}
 
fclose($data);
 
echo $row[3];
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/03/2011, 15h02   #13
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 016
Points : 5 016
On reviens à ma solution précédente
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 22h36.


 
 
 
 
Partenaires

Hébergement Web