Retours à la ligne : unix => windows

0/5 (10 avis)

Vue 5 639 fois - Téléchargée 192 fois

Description

Un petit code pas bien complexe mais dont j'avais besoin donc j'en fait profiter tout le monde.

Il permet de remplacer dans un fichier les retours à la ligne de chez unix (\n) par ceux que l'on retrouve sous windows(\r\n).

En plus c'est pas très fonctionnel parce qu'il n'y a pas de fonction parcourir pour trouver le fichier à étudier.

Commentaires constructifs bienvenus.

Chouchou

Source / Exemple :


BOOL Convertir(char* src, char* dst)
{
	// On vérifie que l'utilisateur a bien rentré deux noms pour les fichiers
	if ( !strcmp(src, "") )
	{
		MessageBox(0, "Il faut rentrer le nom du fichier source", 0, 0) ;
		return 1 ;
	}

	if ( ! strcmp(dst, "") )
	{
		MessageBox(0, "Il faut rentrer le nom du fichier de destination", 0, 0) ;
		return 1 ;
	}

	// On ouvre le fichier source
	FILE*	pFile ;
	char*	ctmp ;

	if ( NULL == ( pFile = fopen(src, "r") ) )
	{
		MessageBox(0, "Le fichier source n\'existe pas", 0, 0) ;
		return 1 ;
	}

	// On récupère la taille du fichier
	size_t taille ;
	fseek(pFile, 0, SEEK_END) ;
	taille = ftell(pFile) ;
	rewind(pFile) ;

	ctmp = new char[taille] ;

	// Lecture du fichier pour le stocker dans un tableau
	fread(ctmp, sizeof(char), taille, pFile ) ;

	// En fin de traitement, on ferme le fichier
	fclose(pFile) ;

	char* FinalFile = new char[2 * taille] ; // C'est trop mais ca évite de calculer la taille exacte

	// On recopie le tableau en insérant \r avant chaque \n
	unsigned posSrc, posDst ;
	for ( posSrc = 0, posDst = 0 ; posSrc < taille ;  )
	{
		if ( ctmp[posSrc] == '\n' )
		{
			FinalFile[posDst++] = '\r' ;
			FinalFile[posDst++] = '\n' ;
			posSrc++ ;
		}
		else
			FinalFile[posDst++] = ctmp[posSrc++] ;
	}

	// Pour finir on copie le tableau sur le disque

	if ( NULL == ( pFile = fopen(dst, "w+") ) )
	{
		MessageBox(0, "Impossible de créer le fichier de destination", 0, 0) ;
		return 1 ;
	}

	fwrite(FinalFile, sizeof(char), posDst, pFile) ;

	// On ferme le fichier
	if ( pFile != NULL ) fclose(pFile) ;

	return 0 ;
}

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Clonk Messages postés 278 Date d'inscription mardi 22 janvier 2002 Statut Membre Dernière intervention 29 août 2006
24 juin 2004 à 14:18
Ca marche bien ton source, mais je sais pas pour les autres, mais moi il m'écrit des caractères inutiles à la fin du nouveau fichier (ça dois sûrement être dû à la taille torp grande du fichier lorsque tu le crée...)
magic_Nono Messages postés 1878 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 16 mars 2011 1
17 févr. 2004 à 00:35
Salud!

ma classe de gestion de chaine a une fonction,winFormat, réversible pour le pb des '\r\n' <=> '\n'

Cette fonction , sert pour les affichages dans les fenetres windows: j'écrit mes textes avec '\n', c'est moins lourd et ça passe avec les messageBoxs
mais ça ne passe pas pour les zones de textes des boîtes de dialigue

=> un coup de winFormat avant d'envoyer la chaîne...


pour y accéder, cliquez sur mon pseudo puis sur les sources, puis sur BString...

Magicalement,
magic_nono.
cs_Chouchou182 Messages postés 252 Date d'inscription vendredi 13 juin 2003 Statut Membre Dernière intervention 25 avril 2011 1
10 févr. 2004 à 13:59
Salut lastpix'l.

Les includes :

pour les accès aux fichires disques : <cstdio>
pour les messagebox (c'est facultatif pour le but du programme mais c'est juste pour offrir une interface graphique) : <window$.h>
pour les comparaisons de chaînes de caractères, <cstring>

Voila, c'est tout.
lastpixl Messages postés 56 Date d'inscription samedi 28 juin 2003 Statut Membre Dernière intervention 16 février 2006
10 févr. 2004 à 10:21
Il faudrait que tu ajoutes les includes présentes dans le zip dans le listing ici...
+++,
Lastpix'l
cs_Chouchou182 Messages postés 252 Date d'inscription vendredi 13 juin 2003 Statut Membre Dernière intervention 25 avril 2011 1
9 févr. 2004 à 21:29
Désolé Vecchio, j'avais pas vu ta source qui a l'air un peu plus élaborée que la mienne.

A++
Afficher les 10 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.