PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [C++] Zeile in Textdatei finden und ausgeben



sn0w
06.11.2008, 11:43
Hab leider keine Ahnung, wie das gehen soll...
Ich möchte eine Zeile in einem textdokument finden.
txt sieht so aus:
Max:1234
Hans:iop
Moritz:321
Paul:123
usw.

Ich möchte, dass man sein Wort finden kann und dann diese Zeile in ein extra Textdokument geschrieben werden soll. Am besten noch die Eingabe in eine input.txt und dann das Ergebnis in eine output.txt

Alle Codeschnipsel, die mit diesem Thema was zu tun haben bitte hier rein...

Mfg

Easysurfer
06.11.2008, 13:05
Kommt drauf an ob Du unter .Net arbeitest, oder nicht. Ich mach mal trotzdem für beides nen Beispiel:


//Für C++ unter Visual Studio in Net
String^ Line;
System::IO::StreamReader^ Reader = gcnew System::IO::StreamReader("Comboliste.txt");

while(Line = Reader->ReadLine() !=0) //Solang noch Zeilen da sind
{
if( Line->IndexOf("DeinSuchwort")>0)
{
System::IO::StreamWriter Writer = gcnew System::IO::StreamWriter("output.txt") //Würde erstellt werden
Writer->WriteLine(Line);
Writer->Close();
}
}
Reader->Close();


Und noch die Methode die Sicher funktioniert:


#include <iostream>
#include <fstream.h>

using namespace std;

int main()
{
ifstream Input("text.txt");
//Dann das selbe wie Oben, das wirst Du ja noch können... ;-)
char Line[2000];
while(Line = ....)
Input.readline
//So ziemlich das selbe, musst halt noch umschreiben...
if(Gefunden==1 oder so)
{
ofstream Output("output.txt");
Output.write(Line);
}
}


P.s mit dem Zweiten bin ich mir nicht ganz sicher, google mal nach fstream

Noch was, der code ist einfach so zusammen getippt, ich hoff (wenigstes der erste) läuft...

Greez easysurfer

blackberry
06.11.2008, 15:39
Hier das ganze mal C-kompatibel (Größe: 8150 bytes, Linux Binärdatei, unter Windows wahrscheinlich ~16 KB).


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

#define TXTF "input.txt"
#define OUTF "output.txt"
#define FIND "Hans:"


int strpos(FILE *, const char *, unsigned int);
unsigned int readline(FILE *, char *, unsigned int);

int main(void)
{
int pos;
unsigned int len;
char buffer[200];
FILE *fp = fopen(TXTF, "rb");
FILE *fp2 = fopen(OUTF, "wb");

if (fp == 0 || fp2 == NULL) return 0;
if ((pos = strpos(fp, FIND, 0)) == -1) return 0;

fseek(fp, pos, SEEK_SET);
/* folgende Zeile funktioniert auch mit stdin ;) */
len = readline(fp, buffer, sizeof(buffer) - 1);
fwrite(buffer, 1, len, fp2);

fclose(fp);
fclose(fp2);
return 0;
}

int strpos(FILE *fp, const char *find, unsigned int offset)
{
int o = - strlen(find);
int p = ftell(fp);
unsigned int x = 0;
unsigned int len;
char str = 0;

fseek(fp, 0, SEEK_END);
len = ftell(fp);
fseek(fp, offset, SEEK_SET);

for(; offset < len; offset++)
{
fread(&str, 1, sizeof(str), fp);
if (feof(fp) || x == strlen(find)) break;
else if (find[x] != str) x = 0;
else x++;
}

fseek(fp, p, SEEK_SET);
return feof(fp) ? -1 : (int) offset + o;
}

unsigned int readline(FILE *fp, char *buffer, unsigned int sz)
{
unsigned int resp = 0;
char *backup = buffer;
while(*(buffer - 1) != '\n' && *(buffer - 1) != '\r' && --sz)
{
*buffer = fgetc(fp);
if (*buffer == '\r') continue;
buffer++;
resp++;
}
if (backup < buffer) *(buffer - 1) = 0;
return --resp;
}


mfG. BlackBerry

sn0w
09.11.2008, 20:43
@ BlackBerry: thx erstmal hat 1a funktioniert^^ Geht das vielelicht auch so, dass man den gesuchten Text in ein extra Textdokument schreibt? search.txt <- In diesem .txt-Dokument stehen mehrere Wörter, die gefunden werden soll.

Mfg

Ps: Wenn du Zeit hast, kannste mir das vielleicht ein bisschen erklären ;)