cs_mat74
Messages postés241Date d'inscriptiondimanche 10 août 2003StatutMembreDernière intervention16 juin 2010
-
13 févr. 2004 à 12:53
michelcreve
Messages postés13Date d'inscriptionmardi 1 mars 2005StatutMembreDernière intervention10 mars 2006
-
15 nov. 2005 à 08:35
salut a ts
je voudrai savoir comment je pourrai lire un fichier lignes par lignes . par exemple une fonction qui me permerttrai de recuperer la ligne 3 ds une chaine .
cs_Arnotic
Messages postés933Date d'inscriptiondimanche 1 avril 2001StatutMembreDernière intervention 9 janvier 2012 13 févr. 2004 à 13:54
Bonjour,
Il faut lire ton fichier caractère par caractère et voir quand tu les caractère CR et LF dans ce cas tu peux déterminer que les octects précédents ces caractères faisaient partis d'une ligne.
michelcreve
Messages postés13Date d'inscriptionmardi 1 mars 2005StatutMembreDernière intervention10 mars 2006 4 oct. 2005 à 09:00
Salut, c'est michel,
Jete un oeil sur mon programme ci dessous, qui pourra peut être t'aider.
J'essai de faire un Utilitaire de reformatage d'un fichier lu en entrée et création d'un autre fichier en sortie.
- Le programme demande le chemin daccès du fichier en entrée
la longueur des enregistrements en sortie
et éventuellement si on veut tronquer ou faire un retour a la ligne
Reste un problème que j'ai, c'est que lorsque je lis des fichiers en provenance de Windows NT, toutes les caractères 'é' 'è' 'à', unicode etc.. sont ignorés et ne sont pas repris alors que les fichiers venant de XP c'est OK ??.
Je pense que le problème se situe dans le code recopié cidessous (en rouge):
Il faut surement utiliser autre code, mais lequel ?
FileStream* fw = new FileStream(path, FileMode::Open);
StreamReader* sr = new StreamReader(fw);
Si de ton coté tu as eu l'info pour ouvrir ton fichier, ce serait sympas de me donner le tuyau.
Michel (le mari de la belle cicilienne)
Voici mon source :
// This is the main project file for VC++ application project
// generated using an Application Wizard.
#include "stdafx.h"
#using <mscorlib.dll>
using namespace System;
using namespace System::IO;
using namespace System::Text;
#include <valarray>
#include <Cstring>
#include
#include
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
// This is the entry point for this application
#ifdef _UNICODE
int wmain(int argc, wchar_t *argv[], wchar_t *envp[] )
//int wmain(void)
#else
int main(int argc, char* argv[])
#endif
{
using namespace std;
String* path = new String(argv[1]);
int longueur = 0;
string line2 ("");
char respons = ' ' ;
//Console::Write("Valeur de argc = ");
//Console::WriteLine(argc);
//Console::WriteLine(argv[1]);
//Console::WriteLine(argv[2]);
if (argc < 2) // Verifie si on a passé le 1er parametre
{
Console::WriteLine(S" ----------------------------------------------");
Console::WriteLine(S" Veuillez entrer le chemin et nom de fichier : ");
Console::WriteLine(S" ----------------------------------------------");
path = Console::ReadLine();
}
if (argc == 3) // Verifie si on a passé le 2eme parametre
{longueur = atoi(argv[2]);
}
if (longueur == 0) // Verifie si on a passé la longueur
{
Console::WriteLine(S" ----------------------------------------------------");
Console::WriteLine(S" Veuillez entrer la longueur de chaque record desiré ");
Console::WriteLine(S" ----------------------------------------------------");
longueur = Console::ReadLine()->ToInt16(0);
}
if (!File::Exists(path)) // Verifie si le fichier existe
{
Console::WriteLine(S" --------------------------------------");
Console::WriteLine(S" Fichier ou chemin d'accès incorrect ! ");
Console::WriteLine(S" --------------------------------------");
Console::WriteLine(path);
Console::WriteLine(S" --------------------------------------");
cin.ignore();
return -1;
}
try
{
// Create a FileStream
String* path2 = S"D:\\data\\MyTest2.out";
//FileStream* fs = new FileStream("d:\\data\\output.txt", FileMode::Create);
// Create a StreamWriter
StreamWriter* sw = new StreamWriter(path2, false, new UnicodeEncoding());
//StreamWriter* sw = new StreamWriter(fs); topé 09sept
FileStream* fw = new FileStream(path, FileMode::Open);
StreamReader* sr = new StreamReader(fw);
int count = 0;
Voici le Fichier header stdafx.h (contenant que du commentaire)
// stdafx.h : include file for standard system include files,
// or project specific include files that are used frequently, but
// are changed infrequently
//
michelcreve
Messages postés13Date d'inscriptionmardi 1 mars 2005StatutMembreDernière intervention10 mars 2006 15 nov. 2005 à 08:35
C'était pour lire toutes les lignes d'un fichier pour les reformater autrement.
sinon, pour permettre de lire les enregistrements contenant des accents 'é' 'è' 'à' etc.. j'ai enfin trouvé la solution (après beaucoup de recherche) voici le code :
FileStream* fw = new FileStream(path, FileMode::Open);
StreamReader* sr = new StreamReader(fw, Encoding::UTF7, true);
Il fallait tout simplement ajouter Encoding:: avec UTF7 (pour mon cas)
valeurs possibles : ASCII, Unicode, UTF7 et UTF8
Après avoir trouvé la solution, j'ai donc amélioré mon programme pour rectifier certains bugs.
Si ca vous interresse d'avoir la dernière version, faites le moi savoir.
Michel.