Frage von Ucanaskme, 18

Wie kann ich aus einem Text eine Zeile ausgeben (undetailliert! Beschreibung siehe unten!?

Ich habe eine txt Datei mit einigen IPs. Jede IP ist in einer Zeile. Hinten in der Zeile steht das Land, z.B. Deutschland. Ich will jetzt meine txt Datei nach deutschen IPs durchsuchen und anschließend die IP in eine neue Datei ablegen. Das Problem besteht darin, dass sich die IP vor dem Namen des Landes befindet, wodurch ich die IP nicht durch einen Zeiger sehen kann.

Code bisher: (falls die Formatierung falsch ist: habe in Code-Tags gepackt, nicht meine Schuld :D, es gibt hier damit leider manchmal Probleme) [CODE] #include "alibrary.h"

define MAX_SIZE 9999999

int main(){

FILE *ip;
FILE *nf;
char txtinf[199999];
char *text;
int counter=0;


nf=fopen("IP's_Deutschland.txt", "w+");
ip=fopen("IP_Adressen.txt", "rb");
while((fgets(txtinf, sizeof(txtinf), ip))!=NULL){
    //txtinf=0;
    counter++;
    if((strlen(txtinf))>MAX_SIZE){
        printf("MAX_SIZE wurde überschritten.\n");
        }
    
    if((text=strstr(txtinf, "DE"))!=NULL){
        printf("Counter=%d\n", counter);
        puts(txtinf);
        fputs(text, nf);

//so wird mir ja nur DE und Germany geliefert. Wie kann ich die IP mitliefern? }

    }


    
    

sleep(1);
return 0;
}

/* Beispiel für IP:
"2.16.6.0","2.16.7.255","34604544","34605055","DE","Germany"
*/

[/CODE]

Antwort
von regex9, 9

Ganz simpel. Lies die Datei zeilenweise aus (in ein Aggregat: Array, Liste, ...) und filtere danach. Das Schreiben würde ich an deiner Stelle erst zuletzt durchführen (also nicht synchron auf die Textdateien zugreifen).

Zeilenweise lesen mit C:

#define _GNU_SOURCE
#include <stdio.h>
#include <stdlib.h>

int main()
{
FILE *file;
char *line = NULL;
size_t length = 0;
ssize_t read;
file = fopen("IP_Adressen.txt", "r");
if(!file)
{
return 0;
}
while(-1 != (read = getline(&line, &length, file)))
{
// check line ...
}
fclose(file);
if(line)
{
free(line);
}
// write file ...
return 1;
}

Zeilenweise lesen mit C++:

#include <fstream>
#include <string>
int main()
{
std::ifstream file("IP_Adressen.txt");
std::string txtinf;
while (std::getline(file, txtinf))
{
char *text = strstr(txtinf, "DE");

if(text)
{ // ...
}
}
}

Beim Filtern suchst du die Zeilen mit DE heraus und parst aus den betreffenden Zeilen zusätzlich die IP. 

Kommentar von Ucanaskme ,

Sry, ich habe dich leider immer noch nicht ganz verstanden :-( 

Was macht die -1 !=read da?

Sonst aber schonmal vielen Dank im Voraus und bis hierhin!

Kommentar von Ucanaskme ,

Ok :-) 

Ist mir gerade schon aufgefallen...

Die obige Frage hat sich dann von selber geklärt :D 

Kannte die getline noch nicht und habe sie auch noch nie benutzt...

Sollte sich jetzt ändern...

Danke!

Keine passende Antwort gefunden?

Fragen Sie die Community