Accueil > Forum > > > > std::string Buffer = "";
std::string Buffer = "";
vendredi 11 juillet 2008 à 16:19:49 |
std::string Buffer = "";

yanlou
|
salut j'ai un fichier .csv qui contient 27000 ligne et je veux suprrimer les ligne 4,5,6 ça fonction avec le code que j'ai mais ça prend presque 2min pour s'exécuté y'a t'il unmoyenne pour minimiser le temps de l'execution #include <string> #include <fstream> void Erase_Line1(char* z, int Line_to_Erase) { std::string Buffer = ""; //Variable contenant le texte à réécrire dans le fichier std::ifstream ReadFile( z); if (ReadFile) //Si le fichier est trouvé { std::string line; int Line = 0; while ( std::getline( ReadFile, line ) ) //on parcours le fichier et on initialise line à la ligne actuelle { Line++; if(Line != Line_to_Erase) //Si la ligne atteinte est différente de la ligne à supprimer... Buffer += line + "\n"; //On ajoute le contenu de la ligne dans le contenu à réécrire } } ReadFile.close(); //On ferme le fichier en lecture std::ofstream WriteFile( z); //On ouvre ce même fichier en écriture WriteFile << Buffer; //On écris le texte dedans WriteFile.close(); //et on ferme le fichier } int main() { Erase_Line1("z.txt", 4); Erase_Line1("z.txt", 4); Erase_Line1("z.txt", 4); return 0; } maximus
|
|
vendredi 11 juillet 2008 à 17:26:05 |
Re : std::string Buffer = "";

laurent1024
|
Faut changer la fonction, là tu va lire et écrire 3 fois un gros fichiers. Il faut faire une fonction qui puisse supprimer plusieurs ligne consécutivement : void Erase_Line1(char* z, int Line_to_Erase_Begin; int length) if(Line < Line_to_Erase || Line >= (Line_to_Erase+length)) Erase_Line1("z.txt", 4, 3);
Ce que tu peux essayer aussi c'est de créer un deuxième fichier de sortie et au lieu d'utiliser un buffer tu écris au fur et à mesure dans ce deuxième fichier.
|
|
vendredi 11 juillet 2008 à 17:27:08 |
Re : std::string Buffer = "";

luhtor
|
Bas au lieu de supprimer 3 fois 1 ligne, il vaut bcp mieux supprimer 1 fois 3 lignes. Donc changes ta fonction pour qu'elle supprime toutes les lignes d'un coup en prenant par exemple un tableau en argument.
|
|
vendredi 11 juillet 2008 à 17:58:24 |
Re : std::string Buffer = "";

yanlou
|
je reçoi une erreur undeclared Line_to_Erase_Begin maximus
|
|
vendredi 11 juillet 2008 à 18:24:12 |
Re : std::string Buffer = "";

Neo_Fr
|
Si tu veut que se soit vraiment rapide, oublie les string, ofstream and co..;
utilise directement les apis..
Je t'ai fait une fonction, pour l'utiliser tu devras te procurer ReadLine.c et ReadLine.h ici: http://www.cppfrance.com/codes/WIN32-LIRE-FICHIER-LIGNE-LIGNE_44453.aspx
Voici la fonction change szInFile et szOutFile par les chemins appropriés..
tu peut changer les valeur de dwTab[] pour effacer les lignes que tu veux..
DWORD __stdcall GetNumberOfLine(LPSTR lpszFilePath)
{
HANDLE hFile;
DWORD dwLines = 0, dwByteRead, i;
BYTE* lpData;
lpData = (BYTE*) HeapAlloc(GetProcessHeap(), 0, 0x100000);
if(!lpData) return 0;
hFile = CreateFile(lpszFilePath, GENERIC_READ, 0, 0, OPEN_EXISTING, 0, 0);
if(hFile == INVALID_HANDLE_VALUE) return 0;
while(1)
{
if(!ReadFile(hFile, lpData, 0x100000, &dwByteRead, 0)) goto _Error;
if(!dwByteRead) break;
i = dwByteRead;
do
{
if(lpData[i] == 0x0D) dwLines++;
}while(i--);
}
_Error:
HeapFree(GetProcessHeap(), 0, lpData);
CloseHandle(hFile);
return dwLines;
}
DWORD __stdcall EraseLines(LPSTR lpszInFile, LPSTR lpszOutFile, LPDWORD lpdwLinesTab, DWORD nbLines)
{
const DWORD dwMaxLineSize = 4096;
LPOPENL lpoLine;
HANDLE hFile;
DWORD dwLinesErased = 0, dwLines = 1, dwLinesLeft, dwLineLen, bw, i;
BOOL bWrite;
BYTE* lpBuff;
lpBuff = (BYTE*) HeapAlloc(GetProcessHeap(), HEAP_NO_SERIALIZE, dwMaxLineSize);
if(!lpBuff) goto _Error;
dwLinesLeft = GetNumberOfLine(lpszInFile);
if(!dwLinesLeft) goto _Error;
lpoLine = OpenLine(lpszInFile, GetTypeOfFile(lpszInFile));
if(!lpoLine) return 0;
hFile = CreateFile(lpszOutFile, GENERIC_WRITE, 0, 0, CREATE_ALWAYS, 0, 0);
if(hFile == INVALID_HANDLE_VALUE) goto _Error;
do
{
dwLineLen = ReadLine(lpoLine, dwLines, lpBuff);
if(!dwLineLen) goto _Error;
*((WORD*) &lpBuff[dwLineLen]) = '\r\n'; dwLineLen+=2;
i = nbLines;
bWrite = TRUE;
do
{
if(dwLines == lpdwLinesTab[i]) bWrite = FALSE;
}while(i--);
if(bWrite) { if(!WriteFile(hFile, lpBuff, dwLineLen, &bw, 0)) goto _Error; }
else dwLinesErased++;
dwLines++;
}while(dwLinesLeft--);
_Error:
if(hFile) CloseHandle(hFile);
if(lpoLine) CloseLine(lpoLine);
HeapFree(GetProcessHeap(), HEAP_NO_SERIALIZE, lpBuff);
return dwLinesErased;
}
int main(void)
{
DWORD dwLinesErased;
char szInFile[] = "C:\\ton_fichier_originale.txt";
char szOutFile[] = "C:\\ton_fichier_de_sortie.txt";
DWORD dwTab[6] = { 3, 5, 8, 16, 18, 32 };
dwLinesErased = EraseLines(szInFile, szOutFile, dwTab, (sizeof(dwTab)/sizeof(DWORD)));
printf("%i lignes effacées...\n", dwLinesErased);
system("PAUSE");
return 0;
}
Neo_Fr
|
|
jeudi 17 juillet 2008 à 12:08:14 |
Re : std::string Buffer = "";

yanlou
|
avec ce code j'obtie 22 erreur !!! maximus
|
|
jeudi 17 juillet 2008 à 12:12:34 |
Re : std::string Buffer = "";

laurent1024
|
Sans doute parce que tu n'as pas repris complètement la source. Il manque sans doute des includes. Cdt
|
|
jeudi 17 juillet 2008 à 12:18:45 |
Re : std::string Buffer = "";

yanlou
|
non, j'ai tous repris mais il me donne tjr ces erreur !! maximus
|
|
jeudi 17 juillet 2008 à 12:21:38 |
Re : std::string Buffer = "";

laurent1024
|
Si tu ne donnes pas les erreurs, nous n'allons pas les devinez. Cdt
|
|
Cette discussion est classée dans : fichier, ligne, std, line, erase
Répondre à ce message
Sujets en rapport avec ce message
Lire un fichier texte ligne par ligne et copier les éléments dans une combo!!! [ par freepouy18 ]
Salut à tous, j'ai un problème avec la copie de données provenant d'un fichier texte dans une combo. Voila mon code : std::ifstream fichier( "monfichi
modifier la ligne N [ par Rhazou ]
bonjour, J'ai un petit probleme concernant les flux entré/sortie. j'aimerais replacer un ligne par une autre dasn un fichier. je cherche depusi un mom
Probleme boucles Fstream comparaison [ par nerone21 ]
Bonsoir a vous les serials codeurs, alors j'aurais besoin de vos lumiere car j'ai un petit gros probleme que je ne comprend pas.voici mon code en dess
MFC lire un fichier texte ligne par ligne [ par mqsi ]
salut a tous,vs pouvez me dire comment lire un fichier texte ligne par ligne,puis recuperer chaque ligne ds un tableau,et merci pr l'aide,je travail a
lecture fichier et test des lignes... [ par jojomillenium ]
Bonjour, J'aimerai lire un fichier qui ressemble a ca: KJ 1 3 5; I OPL; B 12 34 78, 90; I PPL; et ainsi de suite des lignes qui ne sont pas du meme
[Langage C] Obtenir une ligne d'un fichier (scanf%[^X]) [ par Thranduil ]
Bonjour, j'essaie de créer une fonction qui doit lire une ligne entière d'un fichier texte (donc jusqu'au '\n' mais ça ne marche pas. (C'est la même q
Fichier TXT dans textbox [ par nerone21 ]
Bonjour a tt les codeurs...Lors voila mon probleme, je code avec visual C++ 2005 express et quel fut mon desarroi lorsque je me suis appercu ke nos ch
détection d'un mot dans un fichier [ par stan000 ]
Bonjour,J'aurais besoin d'aide pour réaliser un programme ou pour connaitre la démarche à suivre.J'ai un fichier texte contenant plusieurs lignes dont
message d'erreur [ par mqsi ]
bjr a tous;j'ai un petit probleme : j'ai un programme qui lire un fichier text ligne par ligne quand le fichier contient plusieur ligne( equivalent 3
lire un fichier texte avec visual C++ [ par sarah62223 ]
Bonjour,Je suis actuellement en train de developper en C++ et je voudrais savoir comment faire pour venir lire dans un fichier texte ligne par ligne ,
Livres en rapport
|
Derniers Blogs
UNE JOLIE-HORLOGE ET PAS QU'UN PEU !UNE JOLIE-HORLOGE ET PAS QU'UN PEU ! par neodante
Pour les possesseurs d'iPhone, ça y est Bijin Tokei - qui se traduit littéralement en Français par " Jolie Horloge " - est arrivé et GRATUITEMENT s'il vous plaît ! Après la version Tokyo, Hokkaido, night club, racing, Gal, "pour les mademoiselles'", . voi...
Cliquez pour lire la suite de l'article par neodante TECHDAYS PARIS 2010 : CONNECTEZ VOS DONNéES à SHAREPOINT 2010 AVEC LES BUSINESS CONNECTIVITY SERVICESTECHDAYS PARIS 2010 : CONNECTEZ VOS DONNéES à SHAREPOINT 2010 AVEC LES BUSINESS CONNECTIVITY SERVICES par ROMELARD Fabrice
Animé par: Gaetan Bouveret et Julien Chomarat Business Connectivity Services (BCS) est dans SharePoint 2010 la version 2 de Business Data Catalog (BDC dans SharePoint 2007). Il s'agit de la solution permettant de visualiser des données provenan...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice [DIVERS] SUIVRE VOS SéRIES PRéFéRéS SUR LA TOILE[DIVERS] SUIVRE VOS SéRIES PRéFéRéS SUR LA TOILE par orion
Comme de nombreux geek, je suis un grand amateur de série TV et je rate régulièrement des épisodes de mes séries préférés. Une solution s'offre à vous avec ce merveilleux site : Tv Gorge - www.tvgorge.com Moteur de recherche à l'appui, vous pouvez ...
Cliquez pour lire la suite de l'article par orion TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010 par ROMELARD Fabrice
Animé par: Vincent Bellet et Baptiste Giraudier La BI dans SharePoint 2010, Les nouveaux services d'application dans SP2010 et SQL Server Reporting services 2008 R2. La BI dans SharePoint est généralisée pour tous afin de permettre à tous les coll...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Forum
RE : WIN APIRE : WIN API par racpp
Cliquez pour lire la suite par racpp WIN APIWIN API par omarino_007
Cliquez pour lire la suite par omarino_007
Logiciels
DB-MAIN (9.1.0)DB-MAIN (9.1.0)DB-MAIN is a data-modeling and data-architecture tool. It is designed to help developers and anal... Cliquez pour télécharger DB-MAIN Xilisoft DPG Convertisseur (5.1.37.0120)XILISOFT DPG CONVERTISSEUR (5.1.37.0120)Xilisoft DPG Convertisseur offre aux fans de Nintendo DS une bonne solution leur permettant de dé... Cliquez pour télécharger Xilisoft DPG Convertisseur GraphicsGale (2.01.01)GRAPHICSGALE (2.01.01)GraphicsGale est un logiciel de PixelArt avec de nombreuse fonctionnalités permettant de réalisé ... Cliquez pour télécharger GraphicsGale Architecte 3D (Platinum 2010)ARCHITECTE 3D (PLATINUM 2010)Architecte 3D Platinium vous permet de concevoir facilement les plans votre future maison, de l'é... Cliquez pour télécharger Architecte 3D TeamViewer 5 (TeamViewer 5)TEAMVIEWER 5 (TEAMVIEWER 5)Dépanner un ami,expliquer une manipulation devient un jeu d'enfant.
Prise en main d'un autre ord... Cliquez pour télécharger TeamViewer 5
|