ecrire et lecture dans un fichier

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : ecrire et lecture dans un fichier

par Ryle » 23 juil. 2007, 15:02

Modération :
Puisque ta question est résolue, j'ajoute le tag [Résolu]
pour indiquer aux personnes qui voudront consulter ce sujet qu'il contient une solution.

Tu peux réaliser cette opération toi-même
en cliquant sur le bouton Image qui s'affiche en haut à gauche de ce sujet
si tu as posté le 1er message en tant que membre (inscrit et identifié).

Alors... inscris-toi !!! ;)

par stephoNo » 23 juil. 2007, 14:53

J'ai réussi en concatenant chaque ligne dans une longue chaine de caractere que j'explode ensuite suivant '|'

merci a tous

par Ryle » 23 juil. 2007, 14:30

Le fait est que ton fichier n'est pas réellement en csv (délimiteur ";" et encapsuleur guillemets). Du coup, comme les chaines qui contiennent des retours à la ligne ne sont pas délimités par des guillemets, il ne peut pas deviner que la chaine n'est pas terminée. La fonction fgetcsv() n'est donc pas forcément la plus approprié...

Concernant la taille du buffer, si tu es en php tu peux mettre 0 pour qu'elle ne soit pas limitée :)

Bref, le plus simple dans ton cas si tu n'as pas la possibilité de générer un véritable fichier csv (c'est à dire avec des guillemets autour des chaines de caractères qui contiennent des retours à la ligne ou des guillemets - qu'il faut doubler si la chaine en contient). C'est de lire le fichier ligne par ligne et de concaténer toi même chaque ligne jusqu'à ce que tu en trouves une qui se termine par un "|". Tu exécutes alors ton traitement et tu recommences à concatener les lignes :)

par d0m » 23 juil. 2007, 13:33

peut être en créant une longue chaine contenant tout ton fichier texte par concaténation à chaque ligne. Ensuite tu exploses cette chaine suivant le caractère '|'

ecrire et lecture dans un fichier

par stephaNo » 23 juil. 2007, 13:16

Bonjour je suis en train de faire un script et il ne fonctionne pas très bien.

Je dois récuperer des données dans un fichier et les mettre dans un tableau (pour une future utilisation)
Au debut j'inserer des données de cette forme
id#nom#legende#commentaire|
(tout ceci se passe bien).
Apres autre part dans mon script, je recupere les données et je les affiche(dans un 1er temps).
Tout se passe bien.

Tous les test ont ete fait avec des mots et des nombres.

Quand j'ai voulu tester avec des chaines de caracteres (en particulier un text avec saut de lignes dans commentaires)... Je n'ai que des problemes.



function lire($fichier)
{
	if($fichier==NULL)
	{
		exit("erreur, fichier vide");
	}
	else
	{
		if(!$fp=fopen($fichier,"a+"))
		{
			exit("impossible d\'ouvrir ce fichier (".$fichier.") en lecture");
		}
		else
		{
			$tab=array();
			$i=0;
			while(!feof($fp))
			{
				$char=fgetcsv($fp,4096, "|") ;
				$tab[$i]=$char;
				$i++;
			}
		}
	}
	return $tab;
}
mon problème est que je souhaite mettre dans chaque case du tableau les elements du fichiers finissant par |.

Pour le moment mon script met une ligne par case.

Donc si j'ai 3 données dans mon tableau
exemple
1#nom1#lengede1#commentaire commentaire commentaire|
2#nom2#lengede2#commentaire
commentaire
commentaire|
3#nom3#lengede3#commentaire commentaire
commentaire|

mon script ne me crée pas un tableau a 3 cases mais a 6 cases...


ps: Y a til un moyen de dire prend moi tous les éléments finissant par | sans spécifier de taille, car je crois que c'est le 4096 qui pose problème mais j'suis pas sur....

Merci beaucoup
Avez vous une idée svp, merci