Page 1 sur 2

Problème caractère => retour à la ligne

Posté : 07 avr. 2010, 10:23
par gui
Bonjour tous le monde,
Voilà je cherche à crééer un fichier contenant une chaine de caratère alignée, j'ai donc créé le script pour mais lorsque le caractère n'est pas du même type, il me met des retour à la ligne, presque de façon aléatoire.
Voici la fonction execute permettant de joindre les chaines de caratères contenus dans un fichier

public function execute() {
		if(file_exists($this->way)) {                              

			$lignes= file ($this->way); 
			$cpt=0;                                                

			foreach($lignes as $ligne) {                           

				if(strpos($ligne,'>')!== false){
					if($cpt>0) {
					

						echo "$sequence<br \>";
						$sequence=trim($sequence," "); 

						$this->readwind($sequence);   
						$sequence="";
						
               

					}
					$this->id=$ligne;

					$sequence="";

					$cpt++;

				}
				else{
				
					$sequence.=$ligne;  

					$sequence=trim($sequence);
				}

				

			}

			if($sequence!="") {     
				echo "$sequence<br \>"; 
				echo "$this->id<br \>";	
				#echo "$sequence<br \>";	
				$this->readwind($sequence);

			}

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

			

		}
	}

	function readwind($sequence) {
		echo $sequence;
		
		$fich="/home/guillaume/Desktop/Seq-matrice/completefile.txt";

		file_put_contents($fich,$this->id,FILE_APPEND);
		file_put_contents($fich,$sequence,FILE_APPEND);
	}

La fonction function readwind permet d'écrire le contenue dans une un fichier.

PS Ce script focntionne lorsque les caratères composant la chaine de caract sont du même type à savoir des lettres.
Un exemple de mon output:
>gi|15130760|emb|CAC48161.1| pertactin [Bordetella pertussis]

MNMSLSRIVKAAPLRRTTLAMALGALGAAPAAHADWNNQSIVKTGERQHGIHIQGSDPGGVRTASGTTIKVSGRQAQGILLENPAAELQFRNGSVTSSGQLSDDGIRRFLGTVTVKAGKLVADHATLANVGDTWDDDGIALYVAGEQAQASIADSTLQGAGGVQIERGANVTVQRSAIVDGGLHIGALQSLQPEDLPPSRVVLRDTNVTAVPASGAPAAVSVLGASELTLDGGHITGGRAAGVAAMQGAVVHLQRATIRRGDAPAGGAVPGGAVPGGFGPGGFGPVLDGWYGVDVSGSSVELAQSIVEAPELGAAIRVGRGARVTVSGGSLSAPHGNVIET-GGARRFAPQAAPLSITLQAGAHAQGKALLYRVLPEPVKLTL----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Ce que je souhaiterai avoir c'est la même chose pour le titre et la sequence sur une seule ligne, pas de retour à la ligne au "-".

Voilà si vous connaissez une fonction permettant de corriger ce bugg
merci d'avance

Re: Problème caractère => retour à la ligne

Posté : 07 avr. 2010, 10:26
par stealth35
a tout hasard le flag de file FILE_IGNORE_NEW_LINES

Re: Problème caractère => retour à la ligne

Posté : 07 avr. 2010, 10:33
par gui
Je viens d'essayer, pas de changement, l'idée était pourtant très bonne.

public function execute() {
		if(file_exists($this->way)) {                              

			$lignes= file ($this->way, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); 
			$cpt=0;                                                

			foreach($lignes as $ligne) {                  



Re: Problème caractère => retour à la ligne

Posté : 07 avr. 2010, 10:39
par stealth35
d'ailleurs comme c'est du texte ca serait
file($this->way, FILE_TEXT |FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); 
idem pour file_put_contents le FILE_TEXT :wink:

pourquoi tu enleves que les espace a :
$sequence=trim($sequence," "); 
tu peux enlever tout

Re: Problème caractère => retour à la ligne

Posté : 07 avr. 2010, 10:47
par gui
C'est pas vrais malgrès tout ce que tu me dit cela ne fonctionne toujours pas, j'ai pourtant tout modif

ublic function execute() {
		if(file_exists($this->way)) {                              

			$lignes= file ($this->way,FILE_TEXT |FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); 
			$cpt=0;                                                

			foreach($lignes as $ligne) {                           

				if(strpos($ligne,'>')!== false){
					if($cpt>0) {
					

						echo "$sequence<br \>";
						$sequence=trim($sequence); 

						$this->readwind($sequence);   
						$sequence="";
						
               

					}
					$this->id=$ligne;

					$sequence="";

					$cpt++;

				}
				else{
				
					$sequence.=$ligne;  

					$sequence=trim($sequence);
				}

				

			}

			if($sequence!="") {     
				echo "$sequence<br \>"; 
				echo "$this->id<br \>";	
				#echo "$sequence<br \>";	
				$this->readwind($sequence);

			}

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

			

		}
	}

	function readwind($sequence) {
		echo $sequence;
		
		$fich="/home/guillaume/Desktop/Seq-matrice/completefile.txt";

		file_put_contents($fich,$this->id,FILE_TEXT|FILE_APPEND);
		file_put_contents($fich,$sequence,FILE_TEXT|FILE_APPEND);
				
	}


Re: Problème caractère => retour à la ligne

Posté : 07 avr. 2010, 10:48
par stealth35
met ton retour en balise [ code], pour voir ce que ca donne avec les espaces

Re: Problème caractère => retour à la ligne

Posté : 07 avr. 2010, 10:53
par gui
Je voi pas trop ce que tu veux dire... dsl peux-tu être plus explicite

Re: Problème caractère => retour à la ligne

Posté : 07 avr. 2010, 10:58
par gui

Code : Tout sélectionner

SIVEAPELGAAIRVGRGARVTVSGGSLSAPHGNVIET-GGARRFAPQAAPLSITLQAGAHAQGKALLYRVLPEPVKLTL---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Re: Problème caractère => retour à la ligne

Posté : 07 avr. 2010, 11:05
par stealth35
et tu voudrais que ca rend quoi ?

Re: Problème caractère => retour à la ligne

Posté : 07 avr. 2010, 11:14
par gui
Dans ce cas là

>gi|72539735|gb|AAZ74302.1| pertactin [Bordetella bronchiseptica]
SIVEAPELGAAIRVGRGARVTVSGGSLSAPHGNVIET-GARRFAPQAAPLSITLQAGAHAQGKALLYRVLPEPVKLTL-----------------------------------------------

Sur le fichier de base chaque sequences est étalé sur 12 lignes, je souhaiterai qu'elle soit alignée sur une seule ligne, avec ce script elle s'étallent sur 2 ou 3 lignes avec généralement des retours à la ligne au premier '-' rencontré

Re: Problème caractère => retour à la ligne

Posté : 07 avr. 2010, 11:52
par gui
Je ne comprend pas , normalement avec tout ce qu'il y'a sur ce script, je ne devrai pas avoir de retour à la ligne. La plupart d'entre eux(retour à la ligne) ont été supprimé par rapport au fichier initial mais il en reste certains invisibles qui persistes.

Re: Problème caractère => retour à la ligne

Posté : 07 avr. 2010, 14:37
par gui
Personne ne connaîtrait un moyen de le supprimer?? #-o

Re: Problème caractère => retour à la ligne

Posté : 07 avr. 2010, 14:50
par stealth35
je vois ce que tu veux dire, un methode avec des regexp serais plus adapter

Re: Problème caractère => retour à la ligne

Posté : 07 avr. 2010, 14:53
par macgawel
Le "retour à la ligne", ce ne serait pas bêtement un problème de présentation ?

Tu peux nous donner le source de ce que tu obtiens ? (juste une ligne)

sinon, essaye d'ouvrir le fichier résultat avec un bon éditeur de texte, capable de t'afficher les caractères cachés (Notepad++ fait ça très bien sous Windows). Ca devrait te donner des indications...

Re: Problème caractère => retour à la ligne

Posté : 07 avr. 2010, 15:07
par gui
en brut

>gi|15130760|emb|CAC48161.1| pertactin [Bordetella pertussis]
MNMSLSRIVKAAPLRRTTLAMALGALGAAPAAHADWNNQSIVKTGERQHGIHIQGSDPGGVRTASGTTIKVSGRQAQGILLENPAAELQFRNGSVTSSGQLSDDGIRRFLGTVTVKAGKLVADHATLANVGDTWDDDGIALYVAGEQAQASIADSTLQGAGGVQIERGANVTVQRSAIVDGGLHIGALQSLQPEDLPPSRVVLRDTNVTAVPASGAPAAVSVLGASELTLDGGHITGGRAAGVAAMQGAVVHLQRATIRRGDAPAGGAVPGGAVPGGFGPGGFGPVLDGWYGVDVSGSSVELAQSIVEAPELGAAIRVGRGARVTVSGGSLSAPHGNVIET-GGARRFAPQAAPLSITLQAGAHAQGKALLYRVLPEPVKLTL----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Voila les 3 premiere ligne de mon fichier de sortie, j'ai enlevé le FILE_IGNORE_NEW_LINES de "file" car il m'alligné ma sequence avec le titre : ">gi|15130760|emb|CAC48161.1| pertactin [Bordetella pertussis]"