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
PB LORS DE L'INSTALLATION SHAREPOINT 2010.PB LORS DE L'INSTALLATION SHAREPOINT 2010. par Patrick Guimonet
Lors de l'installation de SharePoint 2010, j'ai rencontré un problème de plantage à l'étape 5 du configuration Wizard. Ca se termine sur cet écran : Et en analysant le fichier de journalisation, on remarque vers la fin des 15000 et quelques lign...
Cliquez pour lire la suite de l'article par Patrick Guimonet [WF4] AJOUTER DES CONTRAINTES à UNE ACTIVITé (2/2)[WF4] AJOUTER DES CONTRAINTES à UNE ACTIVITé (2/2) par JeremyJeanson
Après mon précédent article qui attaque les contraintes par la fasse Nord de l'Everest. passons à la seconde possibilité offerte par WF4 pour valider une activité : la metadata . Je vous en ai déjà toucher un ou deux mots. La metadata dans WF4 est un élém...
Cliquez pour lire la suite de l'article par JeremyJeanson [WF4] AJOUTER DES CONTRAINTES à UNE ACTIVITé (1/2)[WF4] AJOUTER DES CONTRAINTES à UNE ACTIVITé (1/2) par JeremyJeanson
De WF3 à WF4 pas mal de choses on été changées pour faciliter la vie des développeurs, mais certain points peuvent sembler obscures. comme les contraintes. Pour vous guider, je me lance dans une série de deux articles. Ils présenterons deux approches poss...
Cliquez pour lire la suite de l'article par JeremyJeanson [ASP.NET] NE PAS SE FAIRE AVOIR PAR IHTTPMODULE ET SA MéTHODE INIT()[ASP.NET] NE PAS SE FAIRE AVOIR PAR IHTTPMODULE ET SA MéTHODE INIT() par tja
Beaucoup de développeurs pensent que lorsqu'on créé et enregistre un IHttpModule, il n'en existe qu'une seule instance et la méthode Init() sera appelée qu'une fois.
C'est faux
Cela peut vraiment créer des bugs subtils dont en ne se rend pas compte ...
Cliquez pour lire la suite de l'article par tja [MSTD10] SHAREPOINT 2010 ET TEAM FOUNDATION SERVER[MSTD10] SHAREPOINT 2010 ET TEAM FOUNDATION SERVER par phil
Un post rapide pour vous informer de la disponibilité de la vidéo de ma présentation sur SharePoint 2010 & Team Foundation Server. http://www.microsoft.com/france/vision/mstechdays10/Webcast.aspx?EID=20215d48-02e3-4d43-8c36-e53505c3b316 Dans la ...
Cliquez pour lire la suite de l'article par phil
Logiciels
Xilisoft Convertisseur Vidéo Ultimate (5.1.39.0305)XILISOFT CONVERTISSEUR VIDéO ULTIMATE (5.1.39.0305)Xilisoft Convertisseur Vidéo Ultimate est un outil puissant de conversion vidéo, facile à utilise... Cliquez pour télécharger Xilisoft Convertisseur Vidéo Ultimate Xilisoft DVD Ripper Ultimate (5.0.64.0304)XILISOFT DVD RIPPER ULTIMATE (5.0.64.0304)Xilisoft DVD Ripper Ultimate est un logiciel excellent pour copier et convertir DVD vers presque ... Cliquez pour télécharger Xilisoft DVD Ripper Ultimate Rigs of Rods (63.3)RIGS OF RODS (63.3)c'est un jeu de multi-simulation camions,autobus voitures, avions, bateaux, hélicoptère avec défo... Cliquez pour télécharger Rigs of Rods Konvertor (4.00)KONVERTOR (4.00)Le logiciel est un gestionnaire multimedia affichant, jouant et convertissant plus de 2000 format... Cliquez pour télécharger Konvertor
|