Dúvida para gravar 2 Structs ao mesmo tempo [RESOLVIDO]

1. Dúvida para gravar 2 Structs ao mesmo tempo [RESOLVIDO]

Nick Us
Nick-us

(usa Slackware)

Enviado em 07/05/2020 - 11:14h

Tenho 3 Structs diferentes
struct A... + variáveis internas...
struct B... + variáveis internas...
struct C... + variáveis internas...

É possível eu conseguir gravar as 3 Structs ao mesmo tempo no mesmo arquivo com o fwrite?
E se possível neste caso, eu poderia ler apenas 1 das Structs para modificá-la? Usaria o fseek neste caso? (OBS Modificar 1 sem estragar as outras claro)


  


2. MELHOR RESPOSTA

Mauricio Ferrari
maurixnovatrento

(usa Slackware)

Enviado em 07/05/2020 - 13:17h

Cada struct deve ser manipulada individualmente, pelo que eu aprendi. Gravar as três simultaneamente com o mesmo comando, creio que não tem como, eu não conheço um método a não ser gravar as informações nas structs sequencialmente e não simultaneamente. você pode usar o fwrite para gravar uma por uma de forma sequencial.

Não importa o método de gravação ou manipulação, cada struct pode ser alterada individualmente.

___________________________________
Conhecimento não se Leva para o Túmulo.

3. Re: Dúvida para gravar 2 Structs ao mesmo tempo [RESOLVIDO]

Paulo
paulo1205

(usa Ubuntu)

Enviado em 08/05/2020 - 19:25h

As estruturas são do mesmo tipo, ou são de tipos distintos?


... Então Jesus afirmou de novo: “(...) eu vim para que tenham vida, e a tenham plenamente.” (João 10:7-10)


4. Re: Dúvida para gravar 2 Structs ao mesmo tempo

Nick Us
Nick-us

(usa Slackware)

Enviado em 09/05/2020 - 14:41h

paulo1205 escreveu:As estruturas são do mesmo tipo, ou são de tipos distintos?

Boa Pergunta, esqueçi de informar. As Structs são diferentes, Umas terão mais variáveis outras não, inclusive são usadas para propósitos totalmente diferentes, elas nada tem a ver uma com as outras nem em tamanho e nem em nada a não ser por coincidência. Tipo um exemplo abaixo.
struct {
char Cod[15];
char Registered[17];
char Modified[17];
} Contacts[10] = {0};

struct {
char T1234[9];
int T1234[14];
} Contacts2[10] = {0};

struct {
char A123[20];
char B123[23];
} Contacts3[10] = {0};

A pergunta que fiz é baseada na seguinte idéia que pensei! Inicialmente eu fiz um programa com apenas 1 Struct que eu salvo no arquivo! Porém agora eu quero colocar outras 2 Structs no programa. Que são usadas para coisas diferentes. Mas seria interessante eu salvá-las no mesmo arquivo, assim apenas 1 comando Save salvaria tudo para acessar depois.

No Momento atual esse programinha que fiz não salva em binário, optei por salvar os dados como texto, criei um sistema para separar configurações através de linhas específicas, e Salvo 1 Struct a partir da Linha 5. Uso Caracteres especiais da Tecla ASCII como SOH, STX, ETX, GS, RS, US para separar Registros, Configurações, Campos e etc... E o que faço é varrer o arquivo para obter os dados.

Salvo como texto para analisar visualmente o arquivo enquanto desenvolvo o programa, até porque mais na frente, antes de salvar eu criptografarei os dados.

Porém, Embora eu goste da forma como inventei, me sinto seguro vendo e tendo 100% de certeza que está tudo lá, quero também ter capacidade para confiar em gravação binária, o que ainda estou estudando o fwrite de minha última pergunta. E me deparei com o problema do fwrite gravar apenas 1 Struct, o que com certeza não me serviria em nada, visto que como disse, eu salvo tanto a Struct como outras coisas e configurações, logo se eu fosse usar o fwrite neste caso, eu teria que criar 1 Struct para configurações, outra Struct para os Dados, Outra para dados secundários... E é aqui que fiquei perdido em como salvar tantas structs e 1 arquivo de uma só vez, e poder ler tudo novamente certinho do arquivo para o programa!

Uma idéia do meu arquivo atual usando um sistema de texto:
STXchar Cod[15];char Registered[17];char Modified[17];char Photo[251];char Name[251];char Phone[1001];char Address[1001];char Sexy[2];char Gender[2];char Sign[12];char Group[21];char Indicated[101];char LastContact[17];char Internet[251];char Career[101];char Connections[101];char Update[101];char Mark[2];char Pendency[2];char ReasonPendency[251];char Folder[251];char Personality[50001];char Family[50001];char Note[50001];char Docs[50001];char Pcs[50001];char Hist[50001];ETX

STX US> Add/Remove/EditETX

RS09052020120507US09/05/2020 12:05US09/05/2020 12:05US/home/nick/Desktop/Contacts/3x4.pngUSJynx MazeUSUSUS0USUSUSUSUSUSUSUSUSUS0US0USUSUSUSUSUSUSUSUS


RS09052020120523US09/05/2020 12:05US09/05/2020 12:05US/mnt/dados/nick/Images/Avatars/Daenerys.pngUSDaenerysUSUSUS0USUSUSUSUSUSUSUSUSUS0US0USUSUSUSUSUSUSUSUS

Nesse arquivo se lê:
STX = Inicio de um Registro Especial que nada tem a ver com a Struct | Caracter 2 da tabela ASCII
ETX = Fim de um Registro Especial que nada tem a ver com a Struct | Caracter 3 da tabela ASCII
US = Separador de Campos | Caracter 31 da tabela ASCII
RS = Inicio de Registros da Struct | Caracter 30 da tabela ASCII

1ª Linha = Informações da Struct atual usada para salvar o arquivo naquele momento.
3ª Linha = Tabela de Grupos
5ª Linha para frente os dados da Struct
SEMPRE seguindo as regras acima

Então no Caso desse arquivo se eu fosse salvar usando o fwrite por exemplo, eu teria que usar 2 Structs. Uma para a Struct normal e outra para salvar a Linha 1 e a Linha 3. Por isso a pergunta se consigo salvar mais de uma Struct em 1 arquivo e poder ler elas separadamente.


5. Re: Dúvida para gravar 2 Structs ao mesmo tempo [RESOLVIDO]

Nick Us
Nick-us

(usa Slackware)

Enviado em 09/05/2020 - 15:03h

mauricio123 escreveu:

Cada struct deve ser manipulada individualmente, pelo que eu aprendi. Gravar as três simultaneamente com o mesmo comando, creio que não tem como, eu não conheço um método a não ser gravar as informações nas structs sequencialmente e não simultaneamente. você pode usar o fwrite para gravar uma por uma de forma sequencial.

Não importa o método de gravação ou manipulação, cada struct pode ser alterada individualmente.

___________________________________
Conhecimento não se Leva para o Túmulo.

Talvez eu tenha dito de forma errada! Mas baseado no que vc sabe, Mesmo que eu usa-se 3 comandos para gravar cada Struct, minha dúvida é: Posso salvar as 3 no mesmo arquivo? Meu objetivo é ter 1 Arquivo para ser usado para minhas 3 Structs. Não seria um problema ao Salvar re-construir o arquivo. Pois quando o programa carrega é quando ele lê o arquivo e coloca os dados nas Structs. Então qdo eu for salvar no arquivo, todos os dados estão na memória, logo posso salvar eles no arquivo substituindo o existente!

O Problema é que o fwrite separa seu espaço pra usar, e não sei ainda bem como isso funciona, se tipo abro o arquivo em Modo Append, e vou gravando uma Struct de cada vez, e então eu teria 3 gravadas no arquivo, e nem faço idéia de como ler cada Struct desse arquivo que possue 3, até porque ele grava em Modo binário, e não consigo ver nada para estudar a forma como ele grava no arquivo!








Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts