Modification au sein d'un fichier txt [Résolu]

Selenore 11 Messages postés vendredi 19 octobre 2007Date d'inscription 7 novembre 2009 Dernière intervention - 21 févr. 2008 à 19:26 - Dernière réponse : Neo_Fr 653 Messages postés mardi 6 décembre 2005Date d'inscription 10 novembre 2014 Dernière intervention
- 22 févr. 2008 à 22:51
    Bonsoir à tous, c'est mon premier post :)

Voila, j'aurais besoin de votre aide, je cherche la fonction qui me permetterais de supprimer une série de caractère en fonction d'un mot se trouvant après

Exemple : le fichier txt contient les infos suivantes :

86.230.267.80 Debian
82.880.675.733 Uni
86.230.264.80 Vista
82.850.675.733 XP

Ce que je cherche à faire, c'est de supprimer les lignes qui contienne "Debian" ou "Vista" en second mot.
Si cela suffisait, je serais content mais ... Je ne peux pas me baser sur les numéro de lignes sachant qu'elles peuvent elle même varier.

Je ne vois pas du totu comment procéder.

Quelqu'un pourrait-il m'aider ?

Merci d'avance.
Afficher la suite 

Votre réponse

5 réponses

Meilleure réponse
Neo_Fr 653 Messages postés mardi 6 décembre 2005Date d'inscription 10 novembre 2014 Dernière intervention - 22 févr. 2008 à 22:51
3
Merci
remplace #include par #include <windows.h>
ensuite remplace int main(void)..
par:
#pragma comment(linker, "/entry:_WinMain")
int WINAPI _WinMain(void)
{
char szInfo[128];
DWORD nb;
nb = DeleteEntries(szInFile, szOutFile, "Unix");
sprintf(szInfos, "%d entrees ont ete supprimer!\r\n", nb);
MessageBox(0, szInfos, 0, 0, 0x40);
ExitProcess(0);
}

Neo_Fr

Merci Neo_Fr 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 92 internautes ce mois-ci

Commenter la réponse de Neo_Fr
Neo_Fr 653 Messages postés mardi 6 décembre 2005Date d'inscription 10 novembre 2014 Dernière intervention - 22 févr. 2008 à 00:16
0
Merci
Salut,
Commence par telecharger ca:
http://www.cppfrance.com/codes/WIN32-LIRE-FICHIER-LIGNE-LIGNE_44453.aspx
ensuite inclus dans ton projet ReadLine.h et ReadLine.c
et apres tu pourras utiliser cette fonction:

#define LINE_SIZE 256
DWORD __stdcall DeleteEntries(LPSTR lpszInFile, LPSTR lpszOutFile, LPCSTR lpcEntrie)
{
LPOPENL lpoLine;
HANDLE hOutFile;
DWORD LineSize, dwEntriesDeleted 0, i 0, bw;
BYTE Line[LINE_SIZE];
lpoLine = OpenLine(lpszInFile, GetTypeOfFile(lpszInFile));
if(!lpoLine) return 0;
hOutFile = CreateFile(lpszOutFile, GENERIC_WRITE, 0, 0, CREATE_ALWAYS, 0, 0);
if(hOutFile == INVALID_HANDLE_VALUE) goto Error;
while(1)
{
LineSize = ReadLine(lpoLine, i++, Line);
if(LineSize == OPENL_EOF) break;
if( *((DWORD*) &Line[LineSize-4]) != *((DWORD*) lpcEntrie) )
{
*((WORD*) &Line[LineSize]) = 0x0A0D; // CRLF
if(!WriteFile(hOutFile, Line, LineSize+2, &bw, 0)) goto Error;
}else dwEntriesDeleted++;
}
Error:
CloseHandle(hOutFile);
CloseLine(lpoLine);
return dwEntriesDeleted;
}

char szInFile[] = "C:\\in.txt";
char szOutFile[] = "C:\\out.txt";

int main(void)
{
DWORD nb = 0;
nb = DeleteEntries(szInFile, szOutFile, "Unix");
printf("%d entrées ont ete supprimer!\r\n", nb);
system("PAUSE");
return 0;
}

Neo_Fr
Commenter la réponse de Neo_Fr
Selenore 11 Messages postés vendredi 19 octobre 2007Date d'inscription 7 novembre 2009 Dernière intervention - 22 févr. 2008 à 18:43
0
Merci
Je dois avouer avoir pas mal de difficultés à suivre ton code.

Tu pourrais me l'expliquer un peu je te prie ?

J'ai regardé ton autre source.

Le problème, c'est qu'il faudrait que je puisse inclure dans mon programme un code qui me permettrait de supprimer rapidement une à plusieurs lignes, sans interaction de l'utilisateur, pour plus de simplicité.

(note, j'ai essayé et j'ai 14 erreurs qui s'affichent dans la compilation sous Visual C++ 2005 Express. Erreur de version ? Je ne comprend pas très bien ce code, il est possible que je ne vois pas la ligne qui le défini. Merci quand même.)
Commenter la réponse de Selenore
Neo_Fr 653 Messages postés mardi 6 décembre 2005Date d'inscription 10 novembre 2014 Dernière intervention - 22 févr. 2008 à 18:58
0
Merci
La fonction DeleteEntries prend 3 argument
-lpszInFile: C'est ton fichier d'origine qui contient plein d'ips
-lpszOutFile: C'est le fichier qui sera créer a partir du fichier d'entrée en supprimant tt les lignes finissant par 'lpcEntrie'
ex: DeleteEntries("C:\\in.txt", "C:\\out.txt", "Unix");
out.txt sera créer et contiendra tt les lignes de in.txt sauf celle se finissant par "Unix".

Cette fonction a besoin de ReadLine.c et ReadLine.h c'est pour cela que tu doit les inclure ds ton projet..

Neo_Fr
Commenter la réponse de Neo_Fr
Selenore 11 Messages postés vendredi 19 octobre 2007Date d'inscription 7 novembre 2009 Dernière intervention - 22 févr. 2008 à 21:28
0
Merci
(je suis comme qui dirait un petit bleu...)

J'ai essayé de mettre les fichiers (ReadLine.h et ReadLine.c) en en-tête tous 2, en fichier sources tous 2, en en-tête pour ReadLine.h et fichier source pour ReadLine.c combiné à ce code :

#include

#define

LINE_SIZE 256 DWORD

__stdcall DeleteEntries(LPSTR lpszInFile, LPSTR lpszOutFile, LPCSTR lpcEntrie) {

LPOPENL lpoLine;

HANDLE hOutFile;
DWORD LineSize, dwEntriesDeleted 0, i 0, bw;

BYTE Line[LINE_SIZE];

lpoLine = OpenLine(lpszInFile, GetTypeOfFile(lpszInFile));

if(!lpoLine)
return 0; hOutFile = CreateFile(lpszOutFile, GENERIC_WRITE, 0, 0, CREATE_ALWAYS, 0, 0);

if(hOutFile == INVALID_HANDLE_VALUE)
goto Error;

while(1) {

LineSize = ReadLine(lpoLine, i++, Line);

if(LineSize == OPENL_EOF)
break;

if( *((DWORD*) &Line[LineSize-4]) != *((DWORD*) lpcEntrie) ) {

*((WORD*) &Line[LineSize]) = 0x0A0D;

// CRLF

if(!WriteFile(hOutFile, Line, LineSize+2, &bw, 0))
goto Error; }

else dwEntriesDeleted++; }

Error:

CloseHandle(hOutFile);

CloseLine(lpoLine);

return dwEntriesDeleted; }

char

szInFile[] =
"C:\\in.txt";
char

szOutFile[] =
"C:\\out.txt";
int

main(
void) {

DWORD nb = 0;

nb = DeleteEntries(szInFile, szOutFile,

"Unix"); printf(

"%d entrées ont ete supprimer!\r\n", nb); system(

"PAUSE");

return 0; }

_____________________________________________

Il me met ensuite ce code d'erreur :

------ Début de la génération : Projet : correction, Configuration : Debug Win32 ------

Compilation en cours...

main.cpp

c:\documents and settings\pierre\mes documents\visual studio 2005\projects\destruction\correction\main.cpp(3) : error C2143: erreur de syntaxe : absence de ';' avant '__stdcall'

c:\documents and settings\pierre\mes documents\visual studio 2005\projects\destruction\correction\main.cpp(3) : error C4430: spécificateur de type manquant - int est pris en compte par défaut. Remarque : C++ ne prend pas en charge int par défaut

c:\documents and settings\pierre\mes documents\visual studio 2005\projects\destruction\correction\main.cpp(3) : error C2065: 'LPSTR' : identificateur non déclaré

c:\documents and settings\pierre\mes documents\visual studio 2005\projects\destruction\correction\main.cpp(3) : error C2146: erreur de syntaxe : absence de ')' avant l'identificateur 'lpszInFile'

c:\documents and settings\pierre\mes documents\visual studio 2005\projects\destruction\correction\main.cpp(3) : warning C4229: anachronisme utilisé : modificateurs de données ignorés

c:\documents and settings\pierre\mes documents\visual studio 2005\projects\destruction\correction\main.cpp(3) : error C4430: spécificateur de type manquant - int est pris en compte par défaut. Remarque : C++ ne prend pas en charge int par défaut

c:\documents and settings\pierre\mes documents\visual studio 2005\projects\destruction\correction\main.cpp(3) : error C2059: erreur de syntaxe : ')'

c:\documents and settings\pierre\mes documents\visual studio 2005\projects\destruction\correction\main.cpp(4) : error C2143: erreur de syntaxe : absence de ';' avant '{'

c:\documents and settings\pierre\mes documents\visual studio 2005\projects\destruction\correction\main.cpp(4) : error C2447: '{' : en-tête de fonction manquant (liste formelle à l'ancien format ?)

c:\documents and settings\pierre\mes documents\visual studio 2005\projects\destruction\correction\main.cpp(34) : error C2146: erreur de syntaxe : absence de ';' avant l'identificateur 'nb'

c:\documents and settings\pierre\mes documents\visual studio 2005\projects\destruction\correction\main.cpp(34) : error C2065: 'nb' : identificateur non déclaré

c:\documents and settings\pierre\mes documents\visual studio 2005\projects\destruction\correction\main.cpp(35) : error C2064: le terme ne correspond pas à une fonction qui prend 3 arguments

Le journal de génération a été enregistré à l'emplacement "file://c:\Documents and Settings\Pierre\Mes documents\Visual Studio 2005\Projects\correction\destruction\Debug\BuildLog.htm"

destruction - 11 erreur(s), 1 avertissement(s)

======== Génération : 0 a réussi, 1 a échoué, 0 mis à jour, 0 a été ignoré ==========

J'ai rajouté l'include pour ajouter la fonction système mais j'ai des codes d'erreur, ais-je oublié d'inclure un include ?
Je ne comprend pas exactement tous les codes d'erreurs, pourrais-tu encore m'apporter un peu d'aide ?

Je ne me suis mis au C++ que depuis peu, toutes mes excuses pour mon incapacité :s
Commenter la réponse de Selenore

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.