Accueil > Forum > > > > Lire & Supprimer un caractère dans un fichier
Lire & Supprimer un caractère dans un fichier
mardi 10 octobre 2006 à 15:16:01 |
Lire & Supprimer un caractère dans un fichier

Encore1ben
|
Bonjour, J'ai repris le code source de mon prédécesseur concernant une application qui est censé formater un fichier texte en un autre. Malheureusement, il ne fonctionne pas et son code est loin d'être clair.  Y'aurait il quelqu'un qui pourrait me résumer en 2 lignes, comment faire pour lire une ligne d'un fichier texte, caractères par caractères à partir d'un certain caractère, pour enfin, les remplacer ou les supprimer ? En plus concret, j'ai un fichier avec des lignes de 20 caractères. Je souhaiterais tester les caractères à partir du 10ème caractère de chaque ligne, pour vérifier si c'est un "0" et si c'est le cas, remplacer le zéro par un autre caractère, et ce jusqu'à arriver à un caractère qui soit différent de "0". Exemple ( Ligne X de mon fichier ): ABCDEFGHIJ+000012036 Je voudrais lire à partir de "+" et remplacer tous les "0" jusqu'au chiffre "12036" ! J'espère avoir été clair et merci infiniment d'avance !  Ps: j'ai bien fouillé sur le site, mais je n'arrive pas à appliquer les différentes solutions à mon cas. Y'a un truc que je dois pas faire correctement !  ----------------------------------------------------------- "No Comment ! Just Act..."
|
|
mardi 10 octobre 2006 à 16:12:16 |
Re : Lire & Supprimer un caractère dans un fichier
|
mardi 10 octobre 2006 à 17:30:34 |
Re : Lire & Supprimer un caractère dans un fichier

Francky23012301
|
Salut,
Si je peux me permettre : si tu as un fichier texte volumineux, ce genre de technique de lire caractère par caractère va prendre beaucoup de temps. Si tu fais ca avec l'Univeralis, tu as intéret à être patient.
Il n'y a pas possibilité de scruter qu'une partie du fichier ?
|
|
mardi 10 octobre 2006 à 17:30:55 |
Re : Lire & Supprimer un caractère dans un fichier

Encore1ben
|
Salut,
Tout d'abord, un grand merci pour ta réponse et pour ton eventuel aide futur ou non !
Concernant le code, je ne suis pas sûr que cela t'aide beaucoup mais je vais quand même te le copier ci dessous. La fonction correspond à un decryptage de fichier qu'il faut ensuite mettre correctement en forme d'ou ma demande...
En fait, je voudrais formater mon texte soit dans cette procédure, soit après peu importe... Mais j'ai déjà du mal à décrypter ce que mon collègue précédent à fait !!! 
procedure decryptage_fichier(nom_fichier, clef : string); var i,j,t : integer; f_in, f_out : textfile; c : array of byte; ligne, retour : string; fichier : array of string; begin // Préparation du code de premutation pour le decryptage setlength(c,length(clef)+1); t:=0; for j:=0 to 255 do for i:=1 to length(clef) do if clef[I]=chr(j) then begin inc(t); c[t]:=i; end;
assignfile(f_in,nom_fichier); reset(f_in);
setlength(fichier,0); t:=0; while ((not eof(f_in)) and (t=0)) do begin readln(f_in,ligne); if ligne='/DOC ()' then t:=1; end;
while not eof(f_in) do begin readln(f_in,ligne); if ligne<>'/DOC ' then begin retour:=''; for i:=1 to length(ligne) do retour:=retour+' '; for i:=0 to (length(ligne) div length(clef))-1 do for j:=1 to length(clef) do begin if ligne[j+i*length(clef)]=']' then ligne[j+i*length(clef)]:=' '; retour[c[j]+i*length(clef)]:=ligne[j+i*length(clef)]; end; setlength(fichier,high(fichier)+2); fichier[high(fichier)]:=retour; end; end; closefile(f_in);
assignfile(f_out,nom_fichier); rewrite(f_out);
for i:=0 to high(fichier) do writeln(f_out,fichier[i]);
closefile(f_out);
setlength(fichier,0); end;
Merci d'avance, 
-----------------------------------------------------------
"No Comment ! Just Act..."
|
|
mardi 10 octobre 2006 à 19:40:31 |
Re : Lire & Supprimer un caractère dans un fichier

neko
|
Déjà la personne qui a écrit ça semble bosser sur les fichiers directement honnètement il vau mieu bosser en mémoire ( via des TStringList ) ou si ce sont des gros fichiers utiliser des Tfilestream.
var i,j,t : integer; f_in, f_out : textfile; c : array of byte; ligne, retour : string; fichier : array of string; //Il vau mieu utiliser un TStringList
setlength(c,length(clef)+1); t:=0; for j:=0 to 255 do for i:=1 to length(clef) do if clef[I]=chr(j) then begin inc(t); c[t]:=i; end; Ce code tel quel est étrange, en gros il trie la clé par ordre alphabétque en stockant les indices genre si la clé est "DELPHIFR" c sera un tableau avec dedans les valeurs: 2,1,7,5,6,3,4,8 a savoir qu'il initialise un tableau de longueur N+1 indexé de 0 à N ( avec N=longueur de la clé ) mais qu'il commenceà l'indice 1... bon
assignfile(f_in,nom_fichier); reset(f_in);
t:=0; while ((not eof(f_in)) and (t=0)) do begin readln(f_in,ligne); if ligne='/DOC ()' then t:=1; end;
Recherche de la ligne '/DOC ()' ( je suppose que c'est ce qui indique le début du cryptage )
setlength(fichier,0); //Debut du cryptage ( à la ligne juste après /DOC() ) while not eof(f_in) do begin readln(f_in,ligne); if ligne<>'/DOC ' then begin retour:=''; for i:=1 to length(ligne) do retour:=retour+' '; //Creation d'une chaine remplie de N espaces avec N=longueur de la chaine lign //Equivalent à: SentLength(Retour, Length(Ligne)); FilleChar(Retour, Length(Ligne), ' ');
for i:=0 to (length(ligne) div length(clef))-1 do for j:=1 to length(clef) do begin if ligne[j+i*length(clef)]=']' then ligne[j+i*length(clef)]:=' '; //On Remplace les caractères ']' par un espace
retour[c[j]+i*length(clef)]:=ligne[j+i*length(clef)]; //Change la position des lettres en fonction de la clé end; setlength(fichier,high(fichier)+2); //Rejoute 1 ligne au tableau de string Fichier fichier[high(fichier)]:=retour; //Ajoute la ligne cryptée au tableau //Avec un stinglist il aurait suffit de faire Add ^^ end; end; closefile(f_in);
a noter que l'algo continue de crypter le fichier après le /DOC s'il reste des lignes après
assignfile(f_out,nom_fichier); rewrite(f_out); for i:=0 to high(fichier) do writeln(f_out,fichier[i]); closefile(f_out);
remplace le fichier par le fichier crypté
En plus concret, j'ai un fichier avec des lignes de 20 caractères. Je
souhaiterais tester les caractères à partir du 10ème caractère de
chaque ligne, pour vérifier si c'est un "0" et si c'est le cas,
remplacer le zéro par un autre caractère, et ce jusqu'à arriver à un
caractère qui soit différent de "0". Var i, j: Integer; S: TStringList; Begin S.LoadFromFile(Nom_Fichier); //Chargement du fichier For i:= 0 To S.Count-1 Do //Pour chaque ligne For j:=10 To Length(S.Strings[i]) Do //Pour chaque caractère au dessus du 10ième if S.Strings[i][j]='0' Then S.Strings[i][j]:=autre_caractère; S.SaveToFile(Nom_Fichier); //Sauvegarde End;
Mais je ne vous pas en quoi ceci a a voir avec le code précédent
bouh
|
|
mercredi 11 octobre 2006 à 11:23:58 |
Re : Lire & Supprimer un caractère dans un fichier

Encore1ben
|
Tout d'abord, un grand MERCI pour ta réponse.. Elle est très claire et bien détaillée, tu as dû bien te faire chier pour la faire... Donc, merci infiniment ! 
Je suis en train de reprendre le code, en utilisant plutôt les stringlist que je ne connaissais pas. J'ai donc découvert pas mal de chose comme la possibilité de trier ou d'insérer...
Par contre, je vais abuser de toi, une dernière fois, car j'ai un petit soucis avec mon insertion dans mon tableau, car delphi m'indique 'Left side cannot be assigned' pour la ligne en gras du code ci dessous...
Var i, j, X: Integer; Sys: TStringList; Begin Sys:=TStringList.Create; Sys.LoadFromFile('C:\temp.dat'); For i:= 0 To Sys.Count-1 Do For j:=49 To Length(Sys.Strings[i]) Do if Sys.Strings[i][j]='0' Then begin Sys.Strings[i][j]:='_'; <<<< Cette fonction n'est pas reconnue !  end; Sys.SaveToFile('C:\copy.dat'); end;
Aurais tu une idée ??? J'ai essayé avec un Insert mais le problème, c'est que je ne peux le faire que sur une ligne...
Désolé d'abuser encore de ton temps et merci encore !
Chapeau bas l'ami ! 
-----------------------------------------------------------
"No Comment ! Just Act..."
|
|
mercredi 11 octobre 2006 à 12:07:50 |
Re : Lire & Supprimer un caractère dans un fichier

Encore1ben
|
Non, non, le fichier n'est pas volumineux ! A tout casser, il doit faire 30 ko, avec une petite centaine de ligne de 60 caractères chacunes ! Pas de quoi casser 3 pattes à un canard quoi...  ----------------------------------------------------------- "No Comment ! Just Act..."
|
|
mercredi 11 octobre 2006 à 12:29:29 |
Re : Lire & Supprimer un caractère dans un fichier

Delphiprog
|
Réponse acceptée !
Salut Codial  Alors, comme ça on ne connait pas les TStringList ??? Solution : passer par une chaine intermédiaire (ici nommée s): var i, j, X: Integer; Sys: TStringList; s: string; begin Sys := TStringList.Create; try Sys.LoadFromFile('C:\temp.dat'); for i := 0to Sys.Count - 1do begin s := Sys.Strings[i]; for j := 49to Length(s) do if s[j] = '0'then s[j] := '_';
Sys.Strings[i] := s; end; Sys.SaveToFile('C:\copy.dat'); finally Sys.Free; end; end;
May Delphi be with you !
Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
|
|
mercredi 11 octobre 2006 à 20:30:52 |
Re : Lire & Supprimer un caractère dans un fichier

Francky23012301
|
Si je peux me permettre : la technique du TStringList ne fonctionne que pour les fichiers de petite taille : plus, il faut ruser.
|
|
jeudi 12 octobre 2006 à 01:40:38 |
Re : Lire & Supprimer un caractère dans un fichier

Encore1ben
|
Réponse acceptée !
Merci à tous pour votre aide ! Tout fonctionne parfaitement... C'est une bonne réponse collégialle !  Enfin, bref, merci à vous et longue vie à ce site et à sa communauté !!! (je fais pas mon lèche cul, mais je sais reconnaître un effort, surtout quand il me permet d'avancer aussi rapidement et aussi clairement !  ) ----------------------------------------------------------- "No Comment ! Just Act..."
|
|
Cette discussion est classée dans : fichier, lire, caractère, supprimer, caractères
Répondre à ce message
Sujets en rapport avec ce message
lire octet par octet dans un fichier bynaire [ par golum ]
EEEppppssss!voici mon code :varFs: TFileStream;b:Byte;begin Fs := TFileStream.Create(ExtractFilePath(Application.ExeName)+'fichier.dat',fmOpenRead);
lire fichier F1book [ par zicklon ]
J 'essaie d' utiliser le composant F1Book (activex de Formula One).J' arrive a ecrire le contnu d' un tableau : - F1book1.Write('fichier.txt',3); Mais
Lire un fichier son encode à partir d'une url ? [ par Fredelphi ]
Bonjour,Comment puis-je faire pour lire un fichier encode par windows media encoder, à partir d'une url ?quelqu'un a une idée à me suggérer ?Car j'ai
comment lire un fichier dbf ? [ par jarv ]
Bonjour !Je suis encore débutant en delphi et j'ai réalisé une petite application qui gére un fichier de donnée mais pas sous la forme d'une base de d
comment lire un fichier dbf ? [ par jarv ]
Bonjour !Je suis encore débutant en delphi et j'ai réalisé une petite application qui gére un fichier de donnée mais pas sous la forme d'une base de d
Cacher un fichier texte [ par Furbyz ]
Bonjour,Voila je créer un fichier .exe sous delphi 6 qui permet de lire le comptenue d'un fichier texte nommé info.txtjusque la pas de prob. Mais je v
Stockage de caractère grec dans ORACLE [ par antonio69 ]
Je dois stocker des caractères grecs dans une base ORACLEces caractères composent un mot (par ex: Tr(Alpha); Alpha devant etre en caractère grec.).Pui
Comment faire pour lire et modifier un fichier ressource ? [ par twain ]
Comment faire pour lire et modifier un fichier ressource ?A bientôt
Comment lire un fichier Excel sous Delphi? [ par kwentinn ]
Salut tt le monde!Je voudrais savoir comment on peut récupérer des données de fichier Excel dans Delphi. (Ensuite, j'enregistre sous fichier texte.. ç
Lire un fichier deja ouvert par une appli [ par JulioDelphi ]
helloj'utilise :assignfile(file); //le fichier existeFileMode:=0;Reset(file); meme avec un try finally, je pensais justement ke ça evitais d'avoir l'
Livres en rapport
|
Derniers Blogs
SESSION SILVERLIGHT 5 3D : SLIDES ET DEMOSSESSION SILVERLIGHT 5 3D : SLIDES ET DEMOS par Groc
Durant les techdays, j'ai eu le plaisir d'animer une session sur Silverlight 5 et la 3D avec Simon Ferquel. Comme promis, voici nos slides et mes démos (celles avec le viper BSG) ici et là. Pour mémoire, les démos utilisent toutes le viper BSG...
Cliquez pour lire la suite de l'article par Groc [TECHDAYS 2012] SESSION WEBMATRIX 2 : LE COUTEAU SUISSE GRATUIT POUR VOS DéVELOPPEMENTS WEB - SLIDES[TECHDAYS 2012] SESSION WEBMATRIX 2 : LE COUTEAU SUISSE GRATUIT POUR VOS DéVELOPPEMENTS WEB - SLIDES par gpommier
Suite à la session que j'ai présenté sur WebMatrix 2, vous pouvez trouver les slides ici, ainsi que les démos en packages nuget : démos1 et démos2 J'en profite pour remercier chaleureusement tous ceux qui sont venus très nombreux à cette sess...
Cliquez pour lire la suite de l'article par gpommier [SHAREPOINT] LES SESSIONS TECHDAYS 2012.[SHAREPOINT] LES SESSIONS TECHDAYS 2012. par Patrick Guimonet
Voici donc pour ceux qui n'ont pas pu venir, ou ceux qui n'ont pas pu toutes les suivre la liste des sessions SharePoint aux TechDays 2012, que je mettrais à jour dès que les liens des vidéo seront disponibles. Ou ici : http...
Cliquez pour lire la suite de l'article par Patrick Guimonet TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3 par ROMELARD Fabrice
Speaker: Bernard Ourghanlian Cette session est comme chaque jour transmise en live par BrainSonic, et j'ai donc suivi cette troisième pleinière par ce moyen sur mon iPad . Elle est dédiée comme chaque année à la mise en perspective de l'é...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE !MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE ! par Vko
Hier durant une session dédiée aux Techdays 2012, j'ai eu le plaisir d'annoncer la sortie de la Béta 2 de Mishra Reader. C'est quoi ? Pour les utilisateurs, c'est une vraie expérience de lecture de flux RSS sur Windows. Rien à voir avec les produit...
Cliquez pour lire la suite de l'article par Vko
Logiciels
Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning COLLECTOR PLUS (3.00B)COLLECTOR PLUS (3.00B)COLLECTOR PLUS version 3.00B est un logiciel utilisant une base de données alimentée par :
- L... Cliquez pour télécharger COLLECTOR PLUS PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO LettresFaciles 2011 (8.0.0.1)LETTRESFACILES 2011 (8.0.0.1)LettresFaciles est un logiciel facilitant la création et la rédaction de lettres types.
Son inte... Cliquez pour télécharger LettresFaciles 2011
|