Modification au sein d'un fichier txt

Résolu
Selenore Messages postés 11 Date d'inscription vendredi 19 octobre 2007 Statut Membre Dernière intervention 7 novembre 2009 - 21 févr. 2008 à 19:26
Neo_Fr Messages postés 653 Date d'inscription mardi 6 décembre 2005 Statut Membre Dernière intervention 10 novembre 2014 - 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.

5 réponses

Neo_Fr Messages postés 653 Date d'inscription mardi 6 décembre 2005 Statut Membre Dernière intervention 10 novembre 2014 2
22 févr. 2008 à 22:51
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
3
Neo_Fr Messages postés 653 Date d'inscription mardi 6 décembre 2005 Statut Membre Dernière intervention 10 novembre 2014 2
22 févr. 2008 à 00:16
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
0
Selenore Messages postés 11 Date d'inscription vendredi 19 octobre 2007 Statut Membre Dernière intervention 7 novembre 2009
22 févr. 2008 à 18:43
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.)
0
Neo_Fr Messages postés 653 Date d'inscription mardi 6 décembre 2005 Statut Membre Dernière intervention 10 novembre 2014 2
22 févr. 2008 à 18:58
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Selenore Messages postés 11 Date d'inscription vendredi 19 octobre 2007 Statut Membre Dernière intervention 7 novembre 2009
22 févr. 2008 à 21:28
(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
0
Rejoignez-nous