PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [C/C++] Datei durchsuchen



luxury11
03.06.2010, 20:32
Ich suche Funktionen mit denen ich eine Textdatei durchsuchen kann.
Dabei soll keine Stringklasse verwendet werden sowie IOStream.
D.h die Funktionen sollten mit Buchstabenketten hantieren.

Hier mit mit Stringklasse und FStream sowie IOStream (so sollte es nich sein)


size_t iBegin, iEnd;
ifstream f; string s;

f.open(ccFile, ios::in);
while (!f.eof())
{
getline(f, s);
iBegin=s.find(*sBegin);
iEnd=s.find(*sEnd);

if ((iBegin!=string::npos) && (iEnd!=string::npos))
{
*sLine = s.substr (iBegin+8,iEnd-29);
f.close();
return true;
}
}


Habe mich schon nach FILE* informiert,
doch leider werden die Zeilen mit getline() ausgelesen,
die zu IOStream gehört (Arbeite mit WinForm).

GregorSamsa
03.06.2010, 20:34
Schau mal bei den C/C++ Sourcecodes, da ist ein Stub/Builder von mir, der auch so eine Funktion implementiert.

luxury11
03.06.2010, 21:20
So hab jetzt die Funktionen gefunden zum Laden eine Textdatei
in einen dynamisch angelegten Puffer. Leider fehlt mir noch eine Funktion mit der ich z.B bei "FUSSBALL" das SS sucht ein true oder false zurückgibt und die Stelle pointet.



#include <string.h>
#include <stdio.h>
#include <windows.h>
#include <stdlib.h>

int main()
{
FILE* TextDatei = 0;
char* TextBuffer = 0;
long TextSize = 0;
size_t FunctionResult = 0;

//Öffne Datei
TextDatei = fopen("mywords.txt", "rwb");
if(TextDatei == NULL)
{
MessageBoxA(NULL,(LPCSTR)"exit(1)",0,0);
exit(1);
}

//Berechne Dateigröße
fseek (TextDatei , 0 , SEEK_END);
TextSize = ftell (TextDatei);
fseek (TextDatei , 0, SEEK_SET );

//Allokiere diese Größe
TextBuffer = (char*) malloc (sizeof(char)*TextSize);
if (TextBuffer == NULL)
{
MessageBoxA(NULL,(LPCSTR)"exit(2)",0,0);
exit(2);
}

// Kopiere in TextBuffer
FunctionResult = fread (TextBuffer,1,TextSize,TextDatei);
TextBuffer[sizeof(char)*TextSize-1]='\0';
fclose (TextDatei);

MessageBoxA(NULL,(LPCSTR)TextBuffer,0,0);
free (TextBuffer);
return 0;
}




Edit: Hab doch was gefunden :)
const char * strstr ( const char * str1, const char * str2 );
str1C string to be scanned.str2C string containing the sequence of characters to match.Returns a pointer to the first occurrence of str2 in str1, or a null pointer if str2 is not part of str1.


PS: Danke nochmal für die schnelle Hilfe.

GregorSamsa
03.06.2010, 21:31
Mein Code:


void setField(char *buffer, unsigned int buf_len, char *field, char *value, unsigned int value_len)
{
unsigned int i, j, found = 0;

printf("Searching for '%s'... ", field);
for(i = 0;i < (buf_len - strlen(field));i++)
{
for(j = 0;j < strlen(field);j++)
if(buffer[i + j] == field[j]) found++;

if(found == strlen(field))
{
printf("found @<buffer+%i> - writing '%s'\n", i, value);
for(j = 0;j < value_len;j++)
buffer[i + j] = value[j];
buffer[i + j] = 0x00;
return;
}
else found = 0;
}
}

http://free-hack.com/sourcecodes/52427-%5Bc%5D-builder-stub.html