Forum Coders' city Strona Gwna Coders' city
Nasza pasja to programowanie!
 

 PomocPomoc   SzukajSzukaj   UytkownicyUytkownicy   GrupyGrupy  RejestracjaRejestracja 
Archiwum starego forum + teoria    RSS & Panel/SideBar
 ProfilProfil   Zaloguj si, by sprawdzi wiadomociZaloguj si, by sprawdzi wiadomoci   ZalogujZaloguj 

Potrzebuj szybkiej odpowiedzi na moje pytanie... Zasady

[C] Wpisanie danych z pliku tekstowego do struktury



 
Odpowiedz do tematu    Forum Coders' city Strona Gwna -> C i C++
Zobacz poprzedni temat :: Zobacz nastpny temat  
Autor Wiadomo
nightrrayy



Doczy: 08 Lip 2017
Posty: 2

PostWysany: Sob Lip 08, 2017 3:22 pm  OP    Temat postu: [C] Wpisanie danych z pliku tekstowego do struktury Odpowiedz z cytatem Pisownia

Witam,
Mam problem z wpisaniem danych z pliku tekstowego do struktury.

Nazwa pliku to wyluskanie-adresu.txt

Plik tekstowy u mnie jest taki :

Cell 01 - Address:
Channel:
Frequency: (Channel)
Quality = Signal level =
ESSID:
Extra: Last beacon:
Oczywicie jest to zapenione odpowiednimi wartociami. Chodzi tylko o zamys. I takich pocze moe by sporo w zalenoci od tego w jakim momencie uruchomi swoj aplikacj.

Kod jaki do tej pory wymyliem jest taki :

Kod:


#include <stdio.h>

int countlines(char *filename); // funkcja do zliczania linijek w tekscie




int main()
{



int i = 0;

int b = countlines("wyluskanie-adresu.txt");

struct  polaczenie{
    int cell;
    char mac[15];
    int channel;
    double frequency;
    int quality;
    char essid;
    double last_beacon;
}wifi[(b-1)/6];


FILE *emp_file;
emp_file = fopen("wyluskanie-adresu.txt","r");

  do {
        int n =
        fscanf(emp_file, "%d %s %d %d %d %s %f", &wifi[i].cell,
               wifi[i].mac, &wifi[i].channel,
               &wifi[i].frequency, &wifi[i].quality,
               &wifi[i].essid, &wifi[i].last_beacon);              
        //printf("i = %d, n = %d\n", i, n);
        i++;
    } while (feof(emp_file) == 0);
    
      for ( int k = 0; k < i; k++)
    {
        printf("%d,%s\n",wifi[k].cell,wifi[k].mac);
    }
    
    fclose(emp_file);

    return 0;
}


int countlines(char* filename)
{
    
    FILE *fp = fopen(filename,"r"); // otwarcie pliku tylko do odczytu ("r")
    int ch = 0; // bufor na znaki
    int lines = 0; // licznik linii
    
    if (fp == NULL) // jesli plik tekstowy jest pusty
    {
    return 0;
    }
    
    
while(!feof(fp))
{
  ch = fgetc(fp);
  if(ch == '\n')
  {
    lines++;
  }
}
    fclose(fp); // zamkniecie pliku tekstowego
    return lines;
}



Niestety nie dziaa on tak jak powinien. Zaptla si a chciabym eby te dane byy wpisane do stuktur i tam przechowywane.
Powrt do gry
Zobacz profil autora Wylij prywatn wiadomo
hicks
Site Admin


Doczy: 25 Maj 2005
Posty: 1252
Skd: DO-Wrocaw

PostWysany: Nie Lip 09, 2017 1:20 am      Temat postu: Odpowiedz z cytatem Pisownia

Program dziaa dokadnie tak jak powinien. Robi bowiem dokadnie to co mu kazano.

Kod si zaptla poniewa funkcja fscanf nie umie dopasowa danych z pliku do podanego formatu. W pliku masz dane typu:
Cell 01 - Address: 12:34:56:78:90:12
Channel: 123
Frequency: 2400 (Channel)
Quality = 123 Signal level = 123
ESSID: cokolwiek
Extra: Last beacon: 319

Jednake kaesz funkcji fscanf odczyta dane ktre powinny np. tak:
01 12:34:56:78:90:12 123 2400 123 123 cokolwiek 391

Ju na pierwszym znaku format nie pasuje i funkcja fscanf przerywa prac i pozycja w pliku si nie zmienia. To z kolei powoduje, e program si zaptla, bo uparcie prbuje ponownie bez sprawdzenia czy poprzedni odczyt si uda.

Przy okazji:
1. formatuj kod,
2. niepotrzebnie odczytujesz plik z danymi wejciowymi 2 razy,
3. czytanie z pliku po 1 znaku jest chyba najwolniejsz metod jaka istnieje,
4. nigdzie nie ma sprawdzenia czy wystpi bd odczytu,
5. funkcja countlines zwraca bdne wartoci,
6. adres MAC na pewno ma 14B? Wyglda do specyficznie. Zwykle widuj zapisy 12-to, albo 17-to znakowe,
7. le uyta (a o to nietrudno), funkcja fscanf moe by niebezpieczna. Jeli dane wejciowe mog pochodzi z niezaufanego rda to moliwe jest np. spowodowanie wyjcia po za poprawne pozycje w buforach odczytu.

_________________
Moje portfolio Oto ja
Powrt do gry
Zobacz profil autora Wylij prywatn wiadomo Odwied stron autora
nightrrayy



Doczy: 08 Lip 2017
Posty: 2

PostWysany: Nie Lip 09, 2017 2:34 pm  OP    Temat postu: Odpowiedz z cytatem Pisownia

Dzikuje bardzo za odpowied. Kod ju poprawiem i dziaa jak naley. Jest jaki sposb eby poczy si z danym urzdzeniem poprzez Wi-Fi z poziomu aplikacji w C ?
Powrt do gry
Zobacz profil autora Wylij prywatn wiadomo
Wywietl posty z ostatnich:   
Odpowiedz do tematu    Forum Coders' city Strona Gwna -> C i C++ Wszystkie czasy w strefie CET (Europa)

Strona 1 z 1

 
Skocz do:  
Moesz pisa nowe tematy
Moesz odpowiada w tematach
Nie moesz zmienia swoich postw
Nie moesz usuwa swoich postw
Nie moesz gosowa w ankietach
Moesz dodawa zaczniki na tym forum
Moesz pobiera pliki z tego forum




Debug: strone wygenerowano w 0.16963 sekund, zapytan = 11
contact

| Darmowe programy i porady Jelcyna | Tansze zakupy w Helionie | MS Office Blog |