Avatar billede Slettet bruger
30. oktober 2001 - 16:49 Der er 6 kommentarer

Adskillelse af textstreng

Jeg har en tekstfil med flg linier:

17.2.25.1|http (80/tcp)|10671|REPORT|;
17.2.25.2|http (80/tcp)|10672|REPORT|;
17.2.25.3|http (80/tcp)|10673|REPORT|;
17.9.25.4|http (80/tcp)|10674|REPORT|;

Jeg vil gerne læse linierne enkeltvis og men
kun have fat i ip-adressen og serienummeret. Dvs. i første linie 17.2.25.1 og 10671. How to??
(Oplysningerne gemmes i to vectore)
Avatar billede mickni33 Nybegynder
30. oktober 2001 - 16:57 #1
lav en løkke med en tæller der tæller hvergang den møder en |.
og lig så char[] ind i vectoren når den møder en | føreste og tredie gang
Avatar billede mickni33 Nybegynder
30. oktober 2001 - 17:08 #2
noget i denne stil, dette kan dog ikke kopieres direkte men der er dog mere får at få en ide om det


ifstream indfil(textfil.txt);
char tegn;
char charArray[200];
int x=0;

while(indfil){
indfil>>tegn;
charArray[x]=tegn;

  if(tegn==\'|\' && tæller ==1){
  vector_1=charArray;
  tæller++;
  }
    if(tegn==\'|\' && tæller ==2){[
    vector_2=charArray;
    tæller++;
    }
x++;
}
Avatar billede ttn.bonk Nybegynder
30. oktober 2001 - 19:56 #3
for hver linie i filen (variabel line) som indlæses:

char ip[256], http[256], serial[256];
int n = sscanf(line,\"^[|]|^[|]|^[|]\",ip,http,serial);

if (n==3)
{
  // ip indeholder ip nummeret
  // serial indeholder seriennummeret
  // http bruges bare ikke
}
Avatar billede futter2 Nybegynder
30. oktober 2001 - 20:19 #4
En anden lille løsning:

char    str[] = \"17.2.25.1|http (80/tcp)|10671|REPORT|\";
char    str1[5][20];
char    *p;
int    cnt = 0;

    p = strtok(str, \"|\");
    if (p) {
        strcpy (str1[0], p);
        do {
            cnt++;
            p = strtok(NULL, \"|\");
            if (!p) break;
            strcpy (str1[cnt], p);
            } while (1);
        }
Avatar billede ttn.bonk Nybegynder
31. oktober 2001 - 08:40 #5
Ups, sorry - glemte % tegn og satte ^forkert i mit indlæg:

int n = sscanf(line,\"%[^|]|%[^|]|%[^|]\",ip,http,serial);

eller hvis man ønsker serial som en integer:

char ip[256], http[256];
int serial;

int n = sscanf(line,\"%[^|]|%[^|]|%d\",ip,http,&serial);


Avatar billede lan Nybegynder
01. november 2001 - 11:00 #6
char linje[80];
char ip[20];
char serie[10];

ifstream indfil(\"navn.ext\"); // hvis du bruger c++
indfil.getline(linje,80);
while (indfil)
{
    int i;
    for (i=0; linje[i]!=\'|\';i++) ip[i] = linje[i];
    ip[i] = \'\\0\';
    i++;
    for ( ; linje[i]!=\'|\'; i++); // skip
    i++;
    for ( ; linje[i]!=\'|\';i++) serie[i] = linje[i];
    serie[i] = \'\\0\';
    indfil.getline(linje,80);
}
indfil.close();
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