Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2110 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  VB2005 : ecrire à un endroit precis d'un txt ou ini

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

VB2005 : ecrire à un endroit precis d'un txt ou ini

n°1789971
Profil sup​primé
Posté le 21-09-2008 à 11:19:14  answer
 

bonjour,
 
j'utilise visual 2005
 
je sais lire un fichier texte ou ini,
je sais ecrire dans ce meme fichier, mais uniquement en fin de fichier.
 
pouvez me dire comment faire pour remplacer ou ajouter une ligne de texte MAIS à un endroit precis du fichier svp ?
 
c'est pas faute d'avoir posé la question à mon amis google mais j'arrive pas à trouver exactement ça (ou je comprend pas les sources cause niveau debutant)
 
merci d'avance

mood
Publicité
Posté le 21-09-2008 à 11:19:14  profilanswer
 

n°1790008
kiki29
Posté le 21-09-2008 à 12:40:25  profilanswer
 
n°1790039
Profil sup​primé
Posté le 21-09-2008 à 13:48:16  answer
 


 
ok merci mais comme je le disais google j'ai deja essayé
plutot que des pages de liens à parcourir et que je ne comprend pas forcement,
je prefererai un exemple concret stp
 
lire un fichier txt ou autre je sais faire.
ce qui me bloque c'est ecrire à un endroit precis de ce fichier.  
 
j'ai bien vu des liens pour decouper le fichier par ligne avec split
mais pas la methode à utiliser pour dire, par exemple, que c'est à la ligne 23 precisement que je veux rajouter du texte
 
merci


Message édité par Profil supprimé le 21-09-2008 à 13:48:49
n°1790062
kiki29
Posté le 21-09-2008 à 14:56:22  profilanswer
 

Salut, si tu ne comprends déjà pas les exemples proposés par les liens ...

n°1790079
Profil sup​primé
Posté le 21-09-2008 à 16:27:05  answer
 

kiki29 a écrit :

Salut, si tu ne comprends déjà pas les exemples proposés par les liens ...


 
1er exemple proposé : lecture d'un fichier ini alors que j'ai dis que je savais faire depuis le debut
 
autres exemples : des pages et des pages de liens google
 
si tu sais pas repondre plus precisement...

n°1790081
Profil sup​primé
Posté le 21-09-2008 à 16:56:21  answer
 

pour le cas d'un ajout/ modification dans un fichier ini j'ai trouvé avec "WritePrivateProfileString"
 
mais pour le cas d'un txt je ne sais pas faire mieux que de le spliter pour avoir un tableau de ligne
 
donc si vous pouvez m'aider à coder l'insertion de texte sur le n° de ligne voulu merci d'avance
 
 

n°1790181
MagicBuzz
Posté le 21-09-2008 à 22:22:50  profilanswer
 

Salut.
 
Voici un exemple en C#. Tu n'as plus qu'à le traduire en VB.NET, puisque ce sont les mêmes objets/méthodes.
 
C'est pas forcément la méthode la plus courte ni la plus simple, mais la plus claire parmi celles qui permettent de manipuler de gros fichiers.
 
Les ReadToEnd(), non merci, quand tu modifies un fichier qui fait 800 Mo moi ça me gêne un peu ;)
 
Ici on traîte donc ligne par ligne, et on en profite pour faire un backup.
 

Code :
  1. using System;
  2. using System.IO;
  3. using System.Windows.Forms;
  4.  
  5. namespace SandBox
  6. {
  7.    public partial class Form1 : Form
  8.    {
  9.        const string FILENAME = @"c:\in\exemple.ini";
  10.        public Form1()
  11.        {
  12.            InitializeComponent();
  13.            LoadFile();
  14.        }
  15.  
  16.        private void button1_Click(object sender, EventArgs e)
  17.        {
  18.            int selected = listBox1.SelectedIndex;
  19.            int current = 0;
  20.            string tmpFileName = Path.GetTempFileName();
  21.  
  22.            TextReader tr = new StreamReader(FILENAME);
  23.            TextWriter tw = new StreamWriter(tmpFileName);
  24.  
  25.            FileInfo f = new FileInfo(FILENAME);
  26.            
  27.            while (tr.Peek() > 0)
  28.            {
  29.                if (current++ == selected)
  30.                {
  31.                    tw.WriteLine(textBox1.Text);
  32.                }
  33.                tw.WriteLine(tr.ReadLine());
  34.            }
  35.            tr.Close();
  36.            tr.Dispose();
  37.            tw.Flush();
  38.            tw.Close();
  39.            tw.Dispose();
  40.            File.Replace(tmpFileName, FILENAME, string.Format("{0}.old", FILENAME));
  41.  
  42.            LoadFile();
  43.        }
  44.  
  45.        private void LoadFile()
  46.        {
  47.            int selected = listBox1.SelectedIndex;
  48.  
  49.            TextReader tr = null;
  50.            try
  51.            {
  52.                tr = new StreamReader(FILENAME);
  53.            }
  54.            catch (FileNotFoundException e)
  55.            {
  56.                // Fichier inexistant, on ne fait rien
  57.            }
  58.            finally
  59.            {
  60.                if (tr != null)
  61.                {
  62.                    listBox1.Items.Clear();
  63.  
  64.                    while (tr.Peek() > 0)
  65.                    {
  66.                        listBox1.Items.Add(tr.ReadLine());
  67.                    }
  68.  
  69.                    tr.Close();
  70.                    listBox1.SelectedIndex = selected;
  71.                }
  72.            }
  73.        }
  74.    }
  75. }


 
Et on split pas pour lire un fichier texte, on n'est pas en train de faire du PHP là...

Message cité 1 fois
Message édité par MagicBuzz le 21-09-2008 à 22:26:16
n°1790183
MagicBuzz
Posté le 21-09-2008 à 22:29:14  profilanswer
 

Une méthode plus performante pourrait passer non pas par des TextReader/TextWriter, mais des accès binaires bufferés avec genre un buffer de la taille d'un cluster disque à chaque lecture/écriture, et isoler les valeurs 13 pour retrouver les sauts de lignes dans le buffer. Ca éviterait de se taper des conversions en string inutile, mais c'est clairement plus chiant à écrire et débugger.
 
Ceci dit, les TexReader/TextWriter ne font pas un accès disque à chaque ReadLine/WriteLine, ils gèrent déjà ça pour nous, donc c'est se prendre la tête pour un gain certainement non significatif.


Message édité par MagicBuzz le 21-09-2008 à 22:35:06
n°1791320
Profil sup​primé
Posté le 24-09-2008 à 13:55:39  answer
 

MagicBuzz a écrit :

Salut.
 
Voici un exemple en C#. Tu n'as plus qu'à le traduire en VB.NET, puisque ce sont les mêmes objets/méthodes.
 
C'est pas forcément la méthode la plus courte ni la plus simple, mais la plus claire parmi celles qui permettent de manipuler de gros fichiers.
 
Les ReadToEnd(), non merci, quand tu modifies un fichier qui fait 800 Mo moi ça me gêne un peu ;)
 
Ici on traîte donc ligne par ligne, et on en profite pour faire un backup.
 
 
Et on split pas pour lire un fichier texte, on n'est pas en train de faire du PHP là...


 
 
(avec un peu de retard..)  merci pour le code  


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  VB2005 : ecrire à un endroit precis d'un txt ou ini

 

Sujets relatifs
Eclipse, EAR Project et jar qui ne veut pas se mettre au bon endroit.Ecrire en début de fichier? Rafraichir une page externe?
Script "Ecrire login + mot de passe et validation sur une page"Ecrire le contenue de variables java applet dans la page html
ecrire un script shell avec bashecrire dans un fichier sur Windows CE
Effectuer des calculs dans un ordre précisEcrire dans un docx en JAVA
Vérifier si un e-mail contient un texte précisEcrire sur une clé USB sans passer par le FS
Plus de sujets relatifs à : VB2005 : ecrire à un endroit precis d'un txt ou ini


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR