fread / fwrite - przetwarzanie plików binarnych.

0

Zacząłem bawić się strukturami oraz ich zapisywaniem/odczytem z pliku i tutaj pojawiło się moje zdziwienie gdy zamiast liczb prze zemnie wpisywanych w pliku.txt widniały same znaczki (wpisane za pomocą fwrite) początkowo myślałem że robię coś źle lecz po krótkiej lekturze dowiedziałem się o funkcji fread która owe znaczki odczytuje z pliku i znów możemy na nich operować w konsoli. Cały proces o ile się nie mylę nazywa się przetwarzaniem plików binarnych. Niemniej jednak chodzi mi o to czy istnieje możliwość zapisu danych liczbowych w ,,ładnej" postaci do pliku.txt? by np Jan kowalski mógł go otworzyć ręcznie i wprowadzić swoje modyfikacje na danych. Oczywiście wczytywane dane murza pochodzić z struktury.

podsumowując czy mogę zapisać liczbę np 2 w postaci 2 w pliku tekstowym (nie chce widziec znaczkow tylko 2) pobraną ze struktury.

//kod na którym bazowałem - dr inż. Jarosław Gramacki, Instytut Informatyki i El
ektroniki, UZ (ver. 1.11)

//ZAPIS

#include <stdlib.h> // for exit(), atof(), etc.
#include <stdio.h>
int main(void) {
struct
{
char name[40];
int agnumb;
double height;
} agent; // structure variable
char numstr[81]; FILE *fptr;
if( (fptr = fopen( "agents.rec", "wb" )) == NULL )
{ printf("\nCan't open file agents.rec"); exit(1); }
do
{
printf( "\nEnter name: " ); gets( agent.name );
printf( "Enter number: " ); gets( numstr );
agent.agnumb = atoi( numstr );
printf( "Enter height: " ); gets( numstr );
agent.height = atof( numstr );
// write struct to the file
fwrite ( &agent, sizeof(agent), 1, fptr );
printf("Add another agent (y/n)? ");
}
while(getchar() == 'y');
fclose(fptr);
return(0);
}

//WCZYTYWANIE

#include <stdlib.h>
#include <stdio.h>
int main(void) {
struct {
char name[40];
int agnumb;
double height;
} agent;
FILE *fptr;
if( (fptr = fopen("agents.rec", "rb")) == NULL )
{ printf("Can't open file agents.rec"); exit(1); }
while( fread ( &agent, sizeof(agent), 1, fptr) )
// dopóki prawda
{
// read the file
printf("\nName: %s\n", agent.name);
printf("Number: %03d\n", agent.agnumb);
printf("Height: %.2lf\n", agent.height);
}
fclose(fptr); return(0); }
0

Aha, widzę że obfuskacje już doprowadziłeś do perfekcji, więc rzeczywiście czas na struktury.

fprintf(fptr,"Name: %s\n", agent.name);
fprintf(fptr,"Number: %03d\n", agent.agnumb);
fprintf(fptr,"Height: %.2lf\n", agent.height);

odczyt odpowiednio - fscanf

0

zamieszczony kod nie jest mój to zwykle copy/paste - aby nie wyjść na złodzieja umieściłem nazwę autora przed kodem - dr inż. Jarosław Gramacki, Instytut Informatyki i El
ektroniki, UZ (ver. 1.11).

Chodzi mi o to że lubię napisać sobie coś trudniejszego gdyż człowiek uczy się wtedy znacznie więcej. Moja wiedza nie pozwala mi pisać tego z głowy. Co chwilę czytam nowe funkcje/biblioteki itp. Zamieszczony tutaj kod odczyt/zapis struktury rozumiem w tej formie. Chce tylko wiedzieć czy istnieje możliwość wczytania tych danych łatwiej ? nie w postaci znaczków do pliku. :( Ponieważ wszystkie moje próby odszukania przykładu sprowadzają się do tego samego fwrite/fread. Przy czym fwrite liczby zapisuje w postaci znaczków w pliku.txt

0

Binarny zapis jest najłatwiejszy (dla programisty).

1 użytkowników online, w tym zalogowanych: 0, gości: 1