Toon posts:

[C] Ip vergelijken uit txt bestand

Pagina: 1
Acties:

Verwijderd

Topicstarter
De bedoeling is een ingevoerde IP adres vergelijken uit een lijst IP's die in een txt bestand staan.
De code die ik nu heb leest mooi alle IPs uit het txt bestand en zet ze ook mooi op het scherm. Alleen als ik kijk of er een IP is wat gelijk is aan het andere geef het programma Dubbel = 0, terwijl het IP adres toch echt in het txt bestand staat.

C:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
//---------------------------------------------------------------------------

#pragma hdrstop

//---------------------------------------------------------------------------

#pragma argsused
#include <stdio.h>
int main(int argc, char* argv[])
{
//Declaratie
char ipadres[20];
char ip[]="192.168.1.3";
int dubbel=0;
FILE *fp;

fp=fopen("ip.txt","a+");
fseek(fp,0,SEEK_SET);

printf("File geopened. Content:\n\n");

 while(!feof(fp)) {

 fgets(ipadres, 20, fp);
 printf("Ip adres: %s", ipadres);

  if (ip == ipadres)
  {
  dubbel = "1";
  }

 }
 printf("Dubbelen: %d", dubbel);

 printf("\n\nBestand nu sluiten...\n");
 fclose(fp);

getchar();
return 0;

}

//---------------------------------------------------------------------------


Hij geeft dus bij bovenstaande aan dat dubbel=0 terwijl het IP nummer wel in het bestand staat.

In het bestand ip.txt heb ik de IP's 192.168.1.1 t/m .4 staan.

De IP's zet ie wel netjes onder elkaar op het scherm maar toch is dubbel 0.

Na veel te hebben gelezen toch maar besloten om er een topic over te maken.

Verwijderd

Je vergelijkt strings in C met strcmp(), met == vergelijk je de adressen van de strings. Verder lijkt dubbel = "1"; ook niet zo fris; en open je de file voor lezen en schrijven en wel achteraan het bestand, terwijl je er vanaf het begin uit wil lezen. Maw. nog veel meer lezen over C ;)

[ Voor 12% gewijzigd door Verwijderd op 06-12-2004 20:00 ]


Verwijderd

Topicstarter
Het is de bedoeling dat er later in het programma ook nog in het txt bestand moet worden geschreven.

Verwijderd

edit: wat hier stond klopt, niet, over de fseek() heen gelezen.

[ Voor 88% gewijzigd door Verwijderd op 06-12-2004 20:03 ]


  • AtleX
  • Registratie: Maart 2003
  • Niet online

AtleX

Tyrannosaurus Lex 🦖

[ Voor 168% gewijzigd door AtleX op 06-12-2004 20:06 ]

Sole survivor of the Chicxulub asteroid impact.


  • corani
  • Registratie: December 2000
  • Laatst online: 05-10-2017

corani

__,,,_(^_^)_,,,__

En hou er rekening mee dat fgets óók de newline characters uit de textfile leest. Dus misschien wil je deze achter de zoekstring aanplakken ;)

Laat me nou toch eens met rust man!
Iedereen die in telekinese gelooft, steek a.u.b. mijn hand op


Verwijderd

Topicstarter
corani schreef op maandag 06 december 2004 @ 20:06:
En hou er rekening mee dat fgets óók de newline characters uit de textfile leest. Dus misschien wil je deze achter de zoekstring aanplakken ;)
Kom erachter ja, na de lengte van ipadres uit gelezen te hebben kom ik op 12, terwijl het maar 11 karakters zijn. Hoe zou ik dit probleem dan op kunnen lossen?

[ Voor 6% gewijzigd door Verwijderd op 06-12-2004 20:18 ]


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 20:44

Creepy

Tactical Espionage Splatterer

o.a. fscanf geeft geen whitspace / newline. Dus hiermee kan je prima het ip lezen zonder extra tekens.

Maar dit kan je toch wel vinden in een beetje C boek of tutorial?

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • corani
  • Registratie: December 2000
  • Laatst online: 05-10-2017

corani

__,,,_(^_^)_,,,__

en anders zoek je toch gewoon op:

C:
1
char ip[]="192.168.1.3\n"; 


niet zo netjes als Creepy's oplossing, maar het werkt wel ;)

Laat me nou toch eens met rust man!
Iedereen die in telekinese gelooft, steek a.u.b. mijn hand op


Verwijderd

Topicstarter
corani schreef op maandag 06 december 2004 @ 20:46:
en anders zoek je toch gewoon op:

C:
1
char ip[]="192.168.1.3\n"; 


niet zo netjes als Creepy's oplossing, maar het werkt wel ;)
Dit had ik al geprobeerd, maar de var dubbel werd toen 4202722 :?

Zo heb ik hem nu:

C:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
//---------------------------------------------------------------------------

#pragma hdrstop

//---------------------------------------------------------------------------

#pragma argsused
#include <stdio.h>
int main(int argc, char* argv[])
{
//Declaratie
char ipadres[20];
char ip[]="192.168.1.3";
int dubbel=0;
FILE *fp;

fp=fopen("ip.txt","a+");

// fputs (ip, fp);
printf("File geopened. Content:\n\n");

 while(!feof(fp)) {

// fgets(ipadres, 20, fp);
fscanf (fp, "%s", &ipadres);
 printf("Ip adres: %s \n", ipadres);

if (strcmp(ipadres, ip) == 0)
 {
  dubbel = "1";
 }

 }
 printf("Dubbelen: %d", dubbel);

 printf("\n\nBestand nu sluiten...\n");
 fclose(fp);

getchar();
return 0;

}

//---------------------------------------------------------------------------

Het weergeven van de IPs doet ie ook weer goed.
Nu krijg ik de uitkomst van dubbel 4202726 :S

[ Voor 68% gewijzigd door Verwijderd op 06-12-2004 21:22 ]


  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 09-04 22:08
Ja, dat kan goed kloppen. Zei mietje ook al in zijn eerste reactie. Als je die nog eens leest?

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 21:24

NMe

Quia Ego Sic Dico.

C:
1
2
int dubbel = 0;
dubbel = "1";

Right. Weet je wat je hier doet? Je slaat een character pointer op in een integerveld. En ja, dat adres kan best wel eens 4202726 zijn...

[ Voor 5% gewijzigd door NMe op 06-12-2004 22:18 ]

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • igmar
  • Registratie: April 2000
  • Laatst online: 12-05 15:46

igmar

ISO20022

Zet AUB om te beginnen eens warnings in je compiler aan, en begin eens met een tutorial die uitlegt wat pointers zijn in C, en wat een string nu eigenlijk is. De '\n' is simpel te vervangen door 'm op te zoeken met strchr() en dan te vervangen door een '\0'.
Pagina: 1