Retours à la ligne : unix => windows

Soyez le premier à donner votre avis sur cette source.

Vue 5 185 fois - Téléchargée 136 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
-
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 -
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
-
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
-
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
-
Désolé Vecchio, j'avais pas vu ta source qui a l'air un peu plus élaborée que la mienne.

A++

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.