Avatar billede skeleton Nybegynder
04. november 2003 - 11:50 Der er 22 kommentarer og
1 løsning

test af 2 streng værdier

hejsa

jeg sidder og laver et prog. til at scanne en tekst fil.
jeg har fået indlæst min tekst fil.
http://www.eksperten.dk/spm/420148

nu kommer spg.
hvordan udplukker man værdier fra tekst filen.
når man kommer til en linie hvor der ex. står
from: me@me.me

hvordan får man plukket me@me.me ud.

ved man kan bruge explode ("from", XXXX); i php.
Avatar billede arne_v Ekspert
04. november 2003 - 11:56 #1
Noget a la:

char s[] = "from: me@me.me";
char tok[] = "from: ";
char *p = strstr(s,tok);
char buf[32];
strcpy(buf,p);
Avatar billede arne_v Ekspert
04. november 2003 - 11:59 #2
Eller:

char s[] = "from: me@me.me (xxxx)";
char tok[] = "from: ";
char *p = strstr(s,tok);
char *p2 = strstr(p," ");
char buf[32];
strncpy(buf,p,p2-p);
buf[p2-p] = '\0';
Avatar billede arne_v Ekspert
04. november 2003 - 11:59 #3
Og et svar.
Avatar billede skeleton Nybegynder
04. november 2003 - 12:03 #4
gider du prøve forklare hvad der sker i hver linie.
Avatar billede skeleton Nybegynder
04. november 2003 - 12:08 #5
har jeg ret i at du tager "from: me@me.me (xxxxx)" og søger efter om "from: " er i linien.
Avatar billede arne_v Ekspert
04. november 2003 - 12:09 #6
strstr søgr efter en streng.
Avatar billede arne_v Ekspert
04. november 2003 - 12:10 #7
Men jeg har da iøvrigt glemt noget !

Selve token skal skippes altså:

char s[] = "from: me@me.me";
char tok[] = "from: ";
char *p = strstr(s,tok) + strlen(tok);
char buf[32];
strcpy(buf,p);

char s[] = "from: me@me.me (xxxx)";
char tok[] = "from: ";
char *p = strstr(s,tok);
char *p2 = strstr(p," ") + strlen(tok);
char buf[32];
strncpy(buf,p,p2-p);
buf[p2-p] = '\0';
Avatar billede arne_v Ekspert
04. november 2003 - 12:11 #8
Nej som det går. Det sidste skal være:

char s[] = "from: me@me.me (xxxx)";
char tok[] = "from: ";
char *p = strstr(s,tok) + strlen(tok);
char *p2 = strstr(p," ");
char buf[32];
strncpy(buf,p,p2-p);
buf[p2-p] = '\0';
Avatar billede arne_v Ekspert
04. november 2003 - 12:12 #9
Man finder en pointer til token, så skipper man token (går jeg ud fra)
og så har man en pointer til starten af det man leder efter. Så kopierer
man enten reesten af linien til en buffer. Eller søger efter en slut
streng og kopierer kun til den.
Avatar billede skeleton Nybegynder
04. november 2003 - 12:56 #10
så har jeg fået det til at virke, dog tilter min borland når der kommer for mange cout ind i mit program???? skod.

men tak for hjælpen.
Avatar billede arne_v Ekspert
04. november 2003 - 12:57 #11
Det lyder mystisk.

Du får sendt linie skift ikke ?
Avatar billede skeleton Nybegynder
04. november 2003 - 13:04 #12
Kan du sige mig hvorfor mit program tilter

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

int main(int argc, char *argv[])
{
  char buf[32];
  char subjekt[] = "subjekt ";
  char line[1024];
  FILE *f;
  if(argc != 2)
  {
    fprintf(stderr, "Du skal angive et filnavn\n");
    return EXIT_FAILURE;
  }
  f = fopen(argv[1], "rt");

  while(fgets(line, sizeof(line), f)){
    printf("%s", line);

    char *p = strstr(line,subjekt) + strlen(subjekt);
    char *p2 = strstr(p," ");
    strncpy(buf,p,p2-p);
    buf[p2-p] = '\0';
    cout << buf;

  }
  fclose(f);

  getch();
  return 0;
}


får fejl meddelse: faulted with message: 'access violation at 0x00000000: read af adress 0x00000000'.
Avatar billede arne_v Ekspert
04. november 2003 - 14:04 #13
Har du et mellemrum efter det du piller ud af linien ?

Hvis ikke så prøv varianten:

char *p = strstr(line,subjekt) + strlen(subjekt);
strcpy(buf,p);
Avatar billede skeleton Nybegynder
09. november 2003 - 16:58 #14
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
#include <iostream.h>
#include <fstream.h>

int main(int argc, char *argv[])
{
  char buf[100];
  char subjekt[] = "subjekt: ";
  char line[1024];
  FILE *f;
  if(argc != 2)
  {
    fprintf(stderr, "Du skal angive et filnavn\n");
    return EXIT_FAILURE;
  }
  f = fopen(argv[1], "rt");

  while(fgets(line, sizeof(line), f)){
  char *p = strstr(line,subjekt) + strlen(subjekt);
  strcpy(buf,p);
  printf("%s", p);
  }
  fclose(f);
  getch();
}
Avatar billede skeleton Nybegynder
09. november 2003 - 17:04 #15
mit program tilter ved strcpy(buf,p);
p er = ""
????
skulle strstr() ikke lede efter subjekt og fylde det resterende af linien over i p????
Avatar billede arne_v Ekspert
09. november 2003 - 17:06 #16
Teknisk set returnerer den bare en pointer til der i line hvor
subjekt er.

Men strcpy burde virke.

Jeg prøver lige hos mig.
Avatar billede arne_v Ekspert
09. november 2003 - 17:16 #17
Kode (essentielt dens amme som din):

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

int main(int argc, char *argv[])
{
  char buf[100],*p;
  char subjekt[] = "subjekt: ";
  char line[1024];
  FILE *f;
  if(argc != 2)
  {
    fprintf(stderr, "Du skal angive et filnavn\n");
    return EXIT_FAILURE;
  }
  f = fopen(argv[1], "rt");
  while(fgets(line, sizeof(line), f)){
      p = strstr(line,subjekt) + strlen(subjekt);
      strcpy(buf,p);
      printf("%s", p);
  }
  fclose(f);
  return EXIT_SUCCESS;
}

input:

subjekt: a
subjekt: bb
subjekt: ccc

output:

a
bb
ccc
Avatar billede skeleton Nybegynder
09. november 2003 - 17:18 #18
strstr(line,subjekt) + strlen(subjekt)
fylder null over i min p.
derfor tilter strcpy
men hvad er der galt med min strstr()
Avatar billede arne_v Ekspert
09. november 2003 - 17:22 #19
Indeholder din fil subjekt på engelsk (subject) ?
Avatar billede arne_v Ekspert
09. november 2003 - 17:22 #20
Mangler kolon eller mellemrum ?
Avatar billede arne_v Ekspert
09. november 2003 - 17:23 #21
Hov - jeg har da vist hovedet under armen !

Har jeg ret i at der ikke er subjekt i alle linier ?
Avatar billede arne_v Ekspert
09. november 2003 - 17:24 #22
I så fald er det nok noget a la:

      p = strstr(line,subjekt);
      if(p != NULL)
      {
        p += strlen(subjekt);
        strcpy(buf,p);
        printf("%s", p);
      }

du leder efter.
Avatar billede skeleton Nybegynder
09. november 2003 - 17:39 #23
det har du fuldstændig ret i.
har testet det med if sætningen og nu kører det bare.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester