Guntpat1981
Mitglied
Ich muss ein c-programm schreiben, das aus eine Textdatei(verkehrsdaten.txt), die ständig ändert, die daten zeilenweise auslesen und in eine andere textdatei(feld.txt) schreibe. In der erste textdatei (verkehrsdaten.txt) kommen die einträge doppelt und mehrfach vor, und das will verhindern in der andere textdatei (feld.txt) vorzukommen. Die Textdateien sehen folgendermaßen aus:
1. Quelle (verkehrsdaten.txt)
2. Ziel: (feld.txt)
habe folgendes mir gedacht:
- Lese erste Zeile aus verkehrsdaten.txt ein
- "A" oder "E"?
wenn "A" ?
- gibt es diese "A" Zeile in textdatei feld.txt schon mal?
-> Nein: dann schreibe diese "A" Zeile in textdatei Feld.txt und lese die nächste zeile aus verkehrsdaten.txt ein.
Ja-> gibt es zu diesr zeile "A" eine "E" im textdatei feld.txt
-> Ja dann schreibe die "A" Zeile in textdatei feld.txt
das ist die c-code die ich geschrieben habe:
hat jemand eine ideee wie man das programmieren kann. ?
1. Quelle (verkehrsdaten.txt)
Code:
A 192.168.0.84 5996 192.168.0.221 5890 0 user0 user1
A 192.168.0.84 5996 192.168.0.221 5890 0 user0 user1
A 192.168.0.84 5996 192.168.0.221 5890 0 user0 user1
A 192.168.0.123 5062 192.168.0.135 5062 8 user3 user4
A 192.168.0.123 5062 192.168.0.135 5062 8 user3 user4
E 192.168.0.84 5890 192.168.0.84 5996 user0 user1
A 192.168.0.123 5062 192.168.0.135 5062 8 user3 user4
E 192.168.0.123 5062 192.168.0.135 5062 user3 user4
A 192.168.0.151 10170 192.168.0.160 10466 0 user user2
A 192.168.0.84 6000 192.168.0.221 5894 0 user user1
A 192.168.0.221 5894 192.168.0.84 6000 0 user1 user
A 192.168.0.221 5894 192.168.0.84 6000 0 user1 user
E 192.168.0.221 5894 192.168.0.84 6000 user1 user
E 192.168.0.151 10170 192.168.0.160 10466 user user2
Code:
A 192.168.0.84 5996 192.168.0.221 5890 0 user0 user1
A 192.168.0.123 5062 192.168.0.135 5062 8 user3 user4
E 192.168.0.84 5890 192.168.0.84 5996 user0 user1
E 192.168.0.123 5062 192.168.0.135 5062 user3 user4
A 192.168.0.151 10170 192.168.0.160 10466 0 user0 user2
A 192.168.0.84 6000 192.168.0.221 5894 0 user user1
E 192.168.0.221 5894 192.168.0.84 6000 user1 user
E 192.168.0.151 10170 192.168.0.160 10466 user0 user2
- Lese erste Zeile aus verkehrsdaten.txt ein
- "A" oder "E"?
wenn "A" ?
- gibt es diese "A" Zeile in textdatei feld.txt schon mal?
-> Nein: dann schreibe diese "A" Zeile in textdatei Feld.txt und lese die nächste zeile aus verkehrsdaten.txt ein.
Ja-> gibt es zu diesr zeile "A" eine "E" im textdatei feld.txt
-> Ja dann schreibe die "A" Zeile in textdatei feld.txt
das ist die c-code die ich geschrieben habe:
Code:
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <string.h>
//Variableninitialisierung
FILE *file, *file1;
char data[256], ip1[32], ip2[32], port1[8], port2[8], IP1[32], IP2[32], codec[8], name1[8], name2[8], AorE[1];
char Session1_ip1[32], Session2_ip1[32], Session3_ip1[32], Session4_ip1[32], Session5_ip1[32], Session6_ip1[32], Session7_ip1[32], Session8_ip1[32], Session9_ip1[32], Session10_ip1[32];
char *ptr;
int n;
int main(void)
{
strcpy(Session1_ip1,"session1");
strcpy(Session2_ip1,"session2");
strcpy(Session3_ip1,"session3");
strcpy(Session4_ip1,"session4");
// open a txt file verkehrsdaten
file = fopen("/var/tmp/verkehrsdaten2","r");
n=0;
while(1){
while(fgets (data, 256, file))
{
//hier werden die Daten zeilenweise aus der verkehrsdaten.txt gelesen
ptr = strtok(data," ");
sprintf(AorE, "%s", ptr);
if(strstr(AorE, "A")!=NULL)
{
ptr = strtok(NULL," ");
sprintf(ip1, "%s", ptr);
ptr = strtok(NULL," ");
sprintf(port1, "%s", ptr);
ptr = strtok(NULL," ");
sprintf(ip2, "%s", ptr);
ptr = strtok(NULL," ");
sprintf(port2, "%s", ptr);
ptr = strtok(NULL," ");
sprintf(codec, "%s", ptr);
ptr = strtok(NULL," ");
sprintf(name1, "%s", ptr);
ptr = strtok(NULL," ");
sprintf(name2, "%s", ptr);
//feld.txt wird hier durch file1 zum schreiben geöffnet
file1 = fopen("/var/tmp/feld","a");
//beispielhafter Vergleich der Daten (funktioniert so nur für die ersten drei Zeilen!)
if(strstr(Session1_ip1,ip1)==NULL && strstr(Session2_ip1,port1)==NULL && strstr(Session3_ip1,ip1)==NULL && strstr(Session4_ip1,port1)==NULL)// && strstr(Session3_ip1,ip1)==NULL && strstr(Session3_ip1,port1)==NULL && strstr(Session4_ip1,ip1)==NULL && strstr(Session4_ip1,port1)==NULL)
{
fprintf(file1, "%s %s %s %s %s %s %s %s", AorE, ip1, port1, ip2, port2, codec, name1, name2);
if(n==0){strcpy(Session1_ip1,ip1);strcpy(Session2_ip1,port1);}
if(n==1){strcpy(Session3_ip1,ip1);strcpy(Session4_ip1,port1);}
n++;
}
fclose(file1);
}
//alternative Behandlung, wenn eine Zeile mit "E" markiert ist
if(strstr(AorE, "E")!=NULL)
{
ptr = strtok(NULL," ");
sprintf(IP1, "%s", ptr);
ptr = strtok(NULL," ");
sprintf(port1, "%s", ptr);
ptr = strtok(NULL," ");
sprintf(IP2, "%s", ptr);
ptr = strtok(NULL," ");
sprintf(port2, "%s", ptr);
ptr = strtok(NULL," ");
sprintf(name1, "%s", ptr);
ptr = strtok(NULL," ");
sprintf(name2, "%s", ptr);
file1 = fopen("/var/tmp/feld","a");
fprintf(file1, "%s %s %s %s %s %s %s", AorE, IP1, port1, IP2, port2, name1, name2);
fclose(file1);
}
if(strstr(Session1_ip1,IP1)!=NULL && strstr(Session2_ip1,port1)!=NULL) {n=0;}
if(strstr(Session3_ip1,IP1)!=NULL && strstr(Session4_ip1,port1)!=NULL) {n=1;}
}
}
fclose(file);
}