» »

[C] shranjevanje stringov v array

[C] shranjevanje stringov v array

pijavka ::

Imam txt file v katerem je v vsaki vrstici zapisano: ime_racunalnika;IP;username;password. Pač ločeno s podpičem.
Sedaj sem skušal v Cju napisat program, ki prebere te vrednosti in jih sharni v tabelo.
Do sedaj mi je uspelo narediti to:


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

void get_names(char str[150]);

int main()
{
    FILE *f0;
    char tmp_0[200];
    f0 = fopen("names.txt", "r");
    int i = 0;
    for(i; f0 != NULL && fgets(tmp_0, sizeof(tmp_0), f0) != NULL; i++)
    {
        printf("Nr. %d\n", i + 1);
        get_names(tmp_0);
    }
    fclose(f0);
    return 0;
}

void get_names(char str[150])
{
    char delims[] = ";";
    char *computer_name = NULL;
    char *IP_address = NULL;
    char *username = NULL;
    char *password = NULL;
    computer_name = strtok(str, delims);
    IP_address = strtok(NULL, delims);
    username = strtok(NULL, delims);
    password = strtok(NULL, delims);
    printf("COMPUTER NAME: %s\n", computer_name);
    printf("IP ADDRESS: %s\n", IP_address);
    printf("USERNAME: %s\n", username);
    printf("PASSWORD: %s\n", password);
}


Za ločevanje med dvopičjem sem uporabil strtok. Hm. Stvar sicer deluje, bral sem kako naj se uporabi, vendar mi ni čisto jasno. Kakšna alternativa?
Program lepo izpisuje, kar je prebral v fajlu, samo nikakor ne znam tega shraniti.
Rad bi nekako v for zanki shranil vrednosti. Razmišljal sem v tej smeri: recimo naredil bi array IP_addresses[i][20] in potem bi za vsak i shranil notri IP naslov. Izgleda lahko, samo meni nikakor ne uspe. Skušal sem uporabiti pointerje, samo sem preveč šlampast, pa ni bilo pravega rezultata.
Kakšen predlog?
  • spremenilo: pijavka ()

Vesoljc ::

za parsanje lahko uporabis tudi sscanf druzino


lahko nardis strukturo z staticnimi size-i ala
struct compinfo {
    char  compname[32];
    int   ip;
    char  username[32];
    char  password[32];
};


down side je wasted memory, alpa pac alociras tocno tolk kot rabis, ko gre filat strukturo

struct info {
    char  *compname;
    int   ip;
    char  *username;
    char  *password;
};


// read computer_name 
// get string length
int len = strlen
// alloc buffer
info.compname = malloc ( len );
// copy string
strcpy info.compname, computer_name 


"downside" je rocna alokacija/dealokacija

rabis nujno C? ce presaltas na c++ dobis stdlib zraven, ki ma arraye (vector), ce ne pa naredis tole:
compinfo    *aCompInfo[1000];
int count = 0;
for each text line in file
   compinfo *cf = malloc ( sizeof(compinfo) );
   // read stuff
   // fill cf
   // cf->compname
   aCompInfo[count] = cf;
   count = count + 1
Abnormal behavior of abnormal brain makes me normal...

pijavka ::

Hvala lepa za odgovor. Ko preštudiram tvoj napotek, (strukture + pointerji še niso čisto jasni), javim, kako je ratalo.

No, super! Dela, ratalo zrihtat! Hvala!

Zgodovina sprememb…

  • spremenilo: pijavka ()


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

C - shranjevanje rezultatov iz baze v array

Oddelek: Programiranje
71222 (921) Randomness
»

[C] Razbitje stringa s pomočjo indeksov

Oddelek: Programiranje
5831 (709) Shinobi
»

[C] struct in int[] (strani: 1 2 )

Oddelek: Programiranje
657339 (6412) MrBrdo
»

C strukture, kazalci naloga pomoc

Oddelek: Programiranje
51464 (1359) DavidJ
»

Pointer-ji v C-ju

Oddelek: Programiranje
291777 (1475) rokpok

Več podobnih tem