suppression espace formé lors d'une jointure de 2 vairiable

orion
Invité n'ayant pas de compte PHPfrance

19 mars 2010, 13:21

Bonjour tout le monde, comme souvant je me trouve face à un problème que je n'arrive pas à resoudre et j'ai besoin de vos conseils pour y parvenir.

Alors je vous explique:
J'ai un fichier texte, contenant des séquences (enchainement d'acide aminé), cette séquence est dans le fichier ecrite sur plusieur ligne.
Je souhaite donc récupérer l'ensemble de la séquence en continu dans une variable.
Pour le faire, je place donc l'ensemble des lignes du fichier dans un tableau avec commande "file" et à chaque lecture de ligne je la concaténe avec la variable précedente contenant le reste de la séquence.
Cela marche bien au détail près que à chaque concaténation il me met un petit espace entre les deux. Je ne voie pas comment je pourai supprimer cet espace.
Voici la partit defectueuse de mon code:

if(file_exists($this->way)) {                              

			$lignes= file ($this->way); 
        
			//print_r($lignes);

			$cpt=0;                                                

			foreach($lignes as $ligne) {                           

				if(strpos($ligne,'>')!== false){     //Cette fonction permet de supprimer les première ligne des   séquences		

					if($cpt>0) {
						echo "$sequence<br \>";
                                                $this->subsequence($sequence);   //Lorsqu'il y'a plusieurs séquences dans le même fichier
						$sequence="";
            
					}

					$sequence="";

					$cpt++;

				}
				else{
					$sequence.=$ligne;  //Concaténation

					 	                     

				}

				

			}

			if($sequence!="") {     
				echo "$sequence<br \>";                             

				$this->subsequence($sequence);

			}

		}
		else {   
			die("impossible d'ouvrir le fichier FASTA");

			

		}
Voici maitenant le fichier d'entrée: au format fasta:


>gi|21708105|gb|AAH33756.1| TLR2 protein [Homo sapiens]
MPHTLWMVWVLGVIISLSKEESSNQASLSCDRNGICKGSSGSLNSIPSGLTEAVKSLDLSNNRITYISNS
DLQRCVNLQALVLTSNGINTIEEDSFSSLGSLEHLDLSYNYLSNLSSSWFKPLSSLTFLNLLGNPYKTLG
ETSLFSHLTKLQILRVGNMDTFTKIQRKDFAGLTFLEELEIDASDLQSYEPKSLKSIQNVSHLILHMKQH
ILLLEIFVDVTSSVECLELRDTDLDTFHFSELSTGETNSLIKKFTFRNVKITDESLFQVMKLLNQISGLL
ELEFDDCTLNGVGNFRASDNDRVIDPGKVETLTIRRLHIPRFYLFYDLSTLYSLTERVKRITVENSKVFL
VPCLLSQHLKSLEYLDLSENLMVEEYLKNSACEDAWPSLQTLILRQNHLASLEKTGETLLTLKNLTNIDI
SKNSFHSMPETCQWPEKMKYLNLSSTRIHSVTGCIPKTLEILDVSNNNLNLFSLNLPQLKELYISRNKLM
TLPDASLLPMLLVLKISRNAITTFSKEQLDSFHTLKTLEAGGNNFICSCEFLSFTQEQQALAKVLIDWPA
NYLCDSPSHVRGQQVQDVRLSVSECHRTALVSGMCCALFLLILLTGVLCHRFHGLWYMKMMWAWLQAKRK
PRKAPSRNICYDAFVSYSERDAYWVENLMVQELENFNPPFKLCLHKRDFIPGKWIIDNIIDSIEKSHKTV
FVLSENFVKSEWCKYELDFSHFRLFDENNDAAILILLEPIEKKAIPQRFCKLRKIMNTKTYLEWPMDEAQ
REGFWVNLRAAIKS

Et voici un échantillon de ce que j'obtient lorsque je fait un echo de ma variable au retour à la ligne dans le fichier d'entrée il me place un petit espace.

MPHTLWMVWVLGVIISLSKEESSNQASLSCDRNGICKGSSGSLNSIPSGLTEAVKSLDLSNNRITYISNS DLQRCVNLQALVLTSNGINTIEEDSFSSLGSLEHLDLSYNYLSNLSSSWFKPLSSLTFLNLLGNPYKTLG


Voilà j'ai besoin de votre aide pour toute question je suis là.

D'avance merci

Petit nouveau ! | 6 Messages

19 mars 2010, 13:33

Salut

Bizarre cet espace qui se glisse quand tu récupère les données de ton fichier.

Code : Tout sélectionner

Un trim($sequence) ou encore un ereg_replace(" ","",$sequence); devraient résoudre ton problème.

orion
Invité n'ayant pas de compte PHPfrance

19 mars 2010, 14:37

J'ai regardé l'utilisation de cette fonction, effectivement celle ci pourrai régler le problème, mais en l'essayant je n'observe aucun changement #-o
Je l'utilise peutêtre mal?

$sequence.=$ligne;

trim($sequence);

ou

trim($sequence.=$ligne);

Mammouth du PHP | 985 Messages

19 mars 2010, 15:16

Bonjour Orion,

Pour utiliser la fonction trim(), il faut récupérer le résultat dans une variable sinon cela ne fonctionne pas.
Exemple:
<?php
$var = '  a  ';

// le contenu de la variable $var est donc écrasé avec ce que lui retourne trim().
$var = trim($var);

// Un var_dump juste pour vérifier le résultat de l'exemple
var_dump($var);
?>
Face à la roche, le ruisseau l'emporte toujours, non pas par la force mais par la persévérance.

orion
Invité n'ayant pas de compte PHPfrance

19 mars 2010, 15:23

Je regrette mais cela ne fonctionne toujours pas, j'ai pourtatn mis:


$seq.=$ligne;

$sequence=trim($seq);

Les espaces sont toujours bel et bien présent :(

ViPHP
ViPHP | 1024 Messages

19 mars 2010, 15:32

Le trim supprime les espaces aux extrémités de la chaine, donc on l'utilise avant de concaténer chaque ligne :
// avant
$sequence.=$ligne;  //Concaténation
//après
$sequence.= trim($ligne);  //Concaténation
A+

Pascal

orion
Invité n'ayant pas de compte PHPfrance

19 mars 2010, 15:32

Autant pour moi ca fonctionne
Merci beaucoup à tous
Ecore une fois vous m'avez été d'une grande aide.
Bon courage à tous et encore merci

Mammouth du PHP | 985 Messages

19 mars 2010, 15:33

Ok :wink:
Face à la roche, le ruisseau l'emporte toujours, non pas par la force mais par la persévérance.

ViPHP
ViPHP | 5462 Messages

21 mars 2010, 20:21

pas besoin de trim, c'est un paramètre a régler avec file : FILE_IGNORE_NEW_LINES
tu peu ensuite utiliser implode avec NULL en paramètre pour afficher tout sur une ligne

donc si t'avais que 1 séquence ca te donnerais ca
$file = file('data.txt',FILE_IGNORE_NEW_LINES);
$data = array_shift($file);
echo implode(NULL, $file);

orion
Invité n'ayant pas de compte PHPfrance

22 mars 2010, 16:38

Ok mais je vais pas me compliquer la vie, ca fonctionne très bien comme ca
merci