IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

[C#] Pb de découpage de Fichier


Sujet :

C#

  1. #1
    Membre du Club
    Inscrit en
    Juillet 2006
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 61
    Points : 53
    Points
    53
    Par défaut [C#] Pb de découpage de Fichier
    Je souhaite découper mon fichier en N autres fichiers de NB Lignes. Plus précisément, je récupère N tableaux de bytes (réprésentant au moins NB lignes).

    Je lit mon fichier principale ligne par ligne. je copie dans un memoryStream et après je fais memoryStream.ToArray() pour récuperer un tab de byte...

    Malheureusement (il faut bien que quelque chose cloche), il y a des problèmes dans la copie (j'obtiens des motiées de lignes des fois et en gros il manque des lignes) ...

    J'ai une autre fonction detacheFichierPart pour reconstituer le fichier....

    Voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
     
    	public class Geocode
    	{
            const int NB = 1000;
            public ArrayList partFichier;
           // public ArrayList partFichierGeo;
     
                    public Geocode()
    		{
                        partFichier = new ArrayList();
                        //partFichierGeo = new ArrayList();
    		}
     
          public void AttacheFichierPart(ParametresGeo paraG, string filename)
            {
                 ....
                try{
     
                Stream stream = new FileStream(filename, FileMode.Open);
     
                //Si le fichier fait -NB ligne pas de découpage
                if (main.GU_VS2003.nbTableRows <= NB) 
                                           //nbTableRows: nbligne du fichier
                {
                    byte[] buffer = new byte[stream.Length];
                    stream.Read(buffer, 0, buffer.Length);
                    partFichier.Add(buffer);
                    return;
                }
     
                int nbPart = main.GU_VS2003.nbTableRows / NB;
                int rest = main.GU_VS2003.nbTableRows - (nbPart * NB);
     
                //Decoupage
                StreamReader reader = new StreamReader(stream);
                for (int i = 0; i < nbPart; i++)
                {
                    MemoryStream temp = new MemoryStream();
                    StreamWriter writer = new StreamWriter(temp);
                    for (int j = 0; j < NB; j++)
                    {
                        writer.WriteLine(reader.ReadLine());
                    }
                    partFichier.Add(temp.ToArray());
                    writer.Close();
                    temp.Close();
                }
     
                //Dernier fichier si il reste des lignes
                if (rest > 0)
                {
                     MemoryStream tempFin = new MemoryStream();
                     StreamWriter writerFin = new StreamWriter(tempFin);
                    for (int j = 0; j < rest; j++)
                    {
                        writerFin.WriteLine(reader.ReadLine());
                    }
                    partFichier.Add(tempFin.ToArray());
                    tempFin.Close();
                    writerFin.Close();
                }
                reader.Close();
                stream.Close();
                }
                catch (Exception e)
                {
                //traitement exception
                }
            }
     
            public void DetacheFichierPart(string rep, string namefile)
            {
                //recuperation fichier geocoder du serveur			
                if (!Directory.Exists(rep))
                    Directory.CreateDirectory(rep);
     
                ...
     
                StreamWriter sOut = null;
                Stream streamOut = null;
                MemoryStream file = null;
                StreamReader sIn = null;
     
                try
                {
                    streamOut = new FileStream(rep + namefile + ".csv",                    FileMode.Create);
                    sOut = new StreamWriter(streamOut);
     
                    IEnumerator enumerator = partFichier.GetEnumerator();
                    while (enumerator.MoveNext())
                    {
                        file = new MemoryStream((byte[])enumerator.Current);
                        sIn = new StreamReader(file);
                        sOut.Write(sIn.ReadToEnd());
                    }
                }
                catch (Exception e)
                {
                    //traitement exception
                }
                finally
                {
                    if (sIn != null)
                        sIn.Close();
                    if (sOut != null)
                        sOut.Close();
                    if (streamOut != null)
                        streamOut.Close();
                    if (file != null)
                        file.Close();
                }
     
            }
    Pour tester, je fait AttacheFichierPart(...) puis DetacheFichierPart() Et bien sûr ce n'est pas exactement le même fichier....

    Je trouve pas mon erreur

    d'avance pour tout aide

  2. #2
    Membre du Club
    Inscrit en
    Juillet 2006
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 61
    Points : 53
    Points
    53
    Par défaut
    Désolé j'ai encore chercher hier soir et j'ai toujours pas trouvé...

    Donc je vous sollicite, je dois vraiment pas être douée

  3. #3
    Membre du Club
    Inscrit en
    Août 2005
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 42
    Points : 42
    Points
    42
    Par défaut
    Quelle est la nature de ton fichier ?

    En effet, en fonction du fichier que tu lis, le stream à utiliser et l'encoding n'est pas le meme.

    As tu essayé d'utiliser d'autres stream (comme par exemple BinaryReader) et d'autres encoding (UTF7Encoding,ASCIIEncoding,...) ?

  4. #4
    Membre du Club
    Inscrit en
    Juillet 2006
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 61
    Points : 53
    Points
    53
    Par défaut
    Il s'agit de fichier CSV (separateur virgule).
    Je vais essayer avec le binary reader...

    Au boulot...

  5. #5
    Membre du Club
    Inscrit en
    Juillet 2006
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 61
    Points : 53
    Points
    53
    Par défaut
    J'ai trouvé:

    Dans la fonction AttacheFichierPart
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      StreamWriter writer = new StreamWriter(temp);
      writer.AutoFlush = true;
    J'adore ce genre de petites lignes qui prennent bien la tête.

    Merci quand même de ton aide missinfo


+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Package hyperref et découpage de fichier
    Par GDMINFO dans le forum Mise en forme
    Réponses: 6
    Dernier message: 11/01/2010, 16h47
  2. découpage de fichier texte en tenant compte d'un délimiteur
    Par c_salsabil dans le forum Général Java
    Réponses: 3
    Dernier message: 29/12/2009, 20h56
  3. Réponses: 8
    Dernier message: 23/06/2009, 18h36
  4. [SOLARIS] découpage de Fichiers de 3Go
    Par franchet dans le forum Solaris
    Réponses: 4
    Dernier message: 17/04/2007, 14h24
  5. découpage de fichier image + texte
    Par dirty_boy dans le forum C
    Réponses: 8
    Dernier message: 13/03/2006, 18h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo