Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

 
 
Herramientas Buscar en Tema Desplegado
  #15  
Antiguo 04-07-2014
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.210
Poder: 22
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Bueno, ahora que he tenido un ratico con el PC te muestro la modificación con concurrencias:

Código:
int Search(char *Buffer, char *S, int SizeBuffer, int Concurrence = 0)
{
  int Con = 0;
  for(int n= 0; n<SizeBuffer-lstrlen(S); n++){
    if(Buffer[n] == *S){
      int i=1;
      for(; S[i]; i++)
        if(Buffer[n+i]!=S[i])  break;
      if(i==lstrlen(S)) if(Con++ == Concurrence) return n;
    }
  }
  return -1;
}

void Replace(char *FileNameA, char *FileNameB, int Concurrence = 0)
{
  HANDLE hFileA = CreateFile(FileNameA, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_FLAG_WRITE_THROUGH, 0);
  if(hFileA!=(HANDLE)(-1)){
    HANDLE hFileB = CreateFile(FileNameB, GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_FLAG_WRITE_THROUGH, 0);
    if(hFileB!=(HANDLE)(-1)){

      DWORD SizeA = GetFileSize(hFileA, 0);
      DWORD SizeB = GetFileSize(hFileB, 0);

      char* BufferA = new char[SizeA+SizeB];
      char* BufferB = new char[SizeB];
      _lread((int)hFileA, BufferA, SizeA);
      _lread((int)hFileB, BufferB, SizeB);

      int IniB = Search(BufferB, "<body>", SizeB, Concurrence);
      if(IniB!=-1){
        int FinB = Search(BufferB+IniB, "</body>", SizeB);
        if(FinB!=-1){
          FinB += IniB;
          int IniA = Search(BufferA, "<body>", SizeA, Concurrence);
          if(IniA!=-1){
            int FinA = Search(BufferA+IniA, "</body>", SizeA);
            if(FinA!=-1){
              FinA += IniA;
              _llseek((int)hFileA, FILE_BEGIN, 0);
              SetEndOfFile(hFileA);
              _lwrite((int)hFileA, BufferA, IniA);
              _lwrite((int)hFileA, BufferB + IniB, FinB-IniB);
              _lwrite((int)hFileA, BufferA + FinA, SizeA-FinA);
            }
          }
        }
      }
      delete [] BufferA;
      delete [] BufferB;
    }
    CloseHandle(hFileB);
  }
  CloseHandle(hFileA);
}
La primera concurrencia es la 0.
Aprovecho mara reservar más memoria para el BufferA para asegurar que no se queda corto si FileB es más grande.

Saludos.

Última edición por escafandra fecha: 04-07-2014 a las 21:33:13.
Responder Con Cita
 



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Intercalar Forms Jorge Hernández Varios 4 30-04-2014 18:58:12
intercalar digitos luisito2011 Varios 6 04-12-2012 18:38:57
intercalar paginas con fastreport mferrero Impresión 1 26-02-2008 13:36:54
Intercalar Variable en SQL... foetus SQL 7 09-07-2007 02:21:28
Como puedo grabar texto en un Archivo de Texto sin Sobreescribir???? AGAG4 Varios 12 08-11-2005 22:53:00


La franja horaria es GMT +2. Ahora son las 05:51:36.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi