arquivo txt em lista

1. arquivo txt em lista

Ronilson Brunhara
RBCOL

(usa Outra)

Enviado em 20/05/2015 - 20:02h

OI pessoal sou novo na comunidade e estou tendo dificuldades com um trabalho em c++ que é criar um arquivo txt ANOTAÍ em Lista, pois não estou conseguindo cortar a string com substring, eu teria que digitar o INSERE ('Nota da Prova de BD-I', 'Tirei nota 10') e deverá ser separado em sub string, o INSERE chama a função de insrerir, O 'Nota da Prova de BD-I entra com como titulo e Tirei nota 10 entra como texto, se voces puderem me ajudar eu agradeço, estou enviando o codigo que comecei a montar. desde já agradeço.

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

int incremento = 1;
using namespace std;

struct lista{
int codigo;
char titulo[101];
char texto[501];
struct lista *prox;
};

typedef struct lista *Lista;


Lista inicializa(void){
return NULL;
}

Lista insere (Lista p){
Lista novo = (Lista)malloc(sizeof(lista));
Lista aux = p;
Lista aux2 = aux;

novo->codigo = incremento;
incremento++;

getchar();
cout <<" Digite um titulo: ";
gets(novo->titulo);
cout << " Digite um texto : ";
gets(novo->texto);

novo->prox =NULL;
if(aux == NULL)

return novo;

else{
while(aux->prox != NULL)
aux = aux->prox;
aux->prox = novo;
return p;
}
}

void imprime(Lista p){
Lista aux = p;
if(p == NULL){
cout << " Lista vazia\n";
return ;
}
while(aux != NULL){
cout << " Codigo: " << aux->codigo;
cout << "\n";
cout << " Titulo: " << aux->titulo << "\n Texto: " << " " << aux->texto;
cout << "\n\n";

aux = aux->prox;
}
}

bool vazia (Lista* l){
return(l == NULL);
}

Lista altera (Lista l){
Lista ant = NULL;
Lista p = l;

int codigo;
char titulo[501], titulo2[501];
cout << " Digite o codigo que deseja alterar: ";
cin >> codigo;

while(p != NULL && p->codigo != codigo){
ant = p;
p = p->prox;
}
if(p == NULL){
cout << " Comando nao encontrado";
return l;
}

cout << " Codigo encontrado: ";
cout << " Codigo: " << codigo << "\n" << " " << p->titulo << p->texto;
cout << "\n\n";
cout << " Digite um novo titulo: ";
getchar();
gets(p->titulo);
cout << " Digite um novo texto : ";
gets(p->texto);

return l;
}

Lista exclui (Lista l){
Lista ant = NULL;
Lista p = l;

int codigo;
cout << " Digite o codigo que deseja remover: ";
cin >> codigo;

while(p != NULL && p->codigo != codigo){
ant = p;
p = p->prox;
}
if(p == NULL)
return l;
if(ant == NULL){
l = p->prox;
}
else{
ant->prox = p->prox;
}
free(p);
return l;
}

int main(void){
Lista lista = inicializa();
string comando;
cout << "\n\t\t ANOTAI\n\n\n";

while(comando != "SAIR"){
cout << "\n Linha de comando: ";
//cout << "\n 1 - INSERE \n 2 - ATUALIZA \n 3 - DELETA \n 4 - SELECIONA \n 0 - SAIR\n\n";
cin >> comando;
if (comando == "INSERE"){
lista = insere (lista);
}else if(comando == "ATUALIZA"){
lista = altera(lista);
}else if (comando == "DELETA"){
lista = exclui(lista);
}else if (comando == "SELECIONA"){
imprime(lista);
}else {
cout << " Comando invalido";
}
}
return(0);
}




  


2. Re: arquivo txt em lista

Thiago Henrique Hüpner
Thihup

(usa Manjaro Linux)

Enviado em 20/05/2015 - 21:11h

Amigo, não se utiliza mais o gets por ter chance de overflow de memória, então substitui pelo fgets, que faz a mesma coisa.

Tirei os includes desnecessários e troquei de stdio.h (Padrão C) para cstdio (Padrão C++, o recomendável nesse projeto).Todas as bibliotecas de C foram alteradas para C++ com esse padrão <nome.h> para <cnome>, ou seja, tira o .h do fim e coloca a letra C no começo.

Segue código alterado.


#include <iostream>
#include <cstdio>

int incremento = 1;
using namespace std;

struct lista {
int codigo;
char titulo[101];
char texto[501];
struct lista *prox;
};

typedef struct lista *Lista;


Lista inicializa(void) {
return NULL;
}

Lista insere (Lista p) {
Lista novo = (Lista)malloc(sizeof(lista));
Lista aux = p;
Lista aux2 = aux;

novo->codigo = incremento;
incremento++;

getchar();
cout <<"Digite um titulo: ";
fgets(novo->titulo,101,stdin);
cout << "Digite um texto : ";
fgets(novo->texto,501,stdin);

novo->prox =NULL;
if(aux == NULL)

return novo;

else {
while(aux->prox != NULL)
aux = aux->prox;
aux->prox = novo;
return p;
}
}

void imprime(Lista p) {
Lista aux = p;
if(p == NULL) {
cout << "Lista vazia\n";
return ;
}
while(aux != NULL) {
cout << " Codigo: " << aux->codigo << "\n";
cout << " Titulo: " << aux->titulo << "\n Texto: " << " " << aux->texto << "\n\n";

aux = aux->prox;
}
}

bool vazia (Lista* l) {
return(l == NULL);
}

Lista altera (Lista l) {
Lista ant = NULL;
Lista p = l;

int codigo;
char titulo[501], titulo2[501];
cout << "Digite o codigo que deseja alterar: ";
cin >> codigo;

while(p != NULL && p->codigo != codigo) {
ant = p;
p = p->prox;
}
if(p == NULL) {
cout << "Comando nao encontrado";
return l;
}

cout << "Codigo encontrado: ";
cout << "Codigo: " << codigo << "\n" << " " << p->titulo << p->texto << "\n\n";
cout << "Digite um novo titulo: ";
getchar();
fgets(p->titulo,101,stdin);
cout << "Digite um novo texto : ";
fgets(p->texto,501,stdin);

return l;
}

Lista exclui (Lista l) {
Lista ant = NULL;
Lista p = l;

int codigo;
cout << "Digite o codigo que deseja remover: ";
cin >> codigo;

while(p != NULL && p->codigo != codigo) {
ant = p;
p = p->prox;
}
if(p == NULL)
return l;
if(ant == NULL) {
l = p->prox;
} else {
ant->prox = p->prox;
}
free(p);
return l;
}

int main(void) {
Lista lista = inicializa();
int comando;

while(true) {
cout << "\nLinha de comando: ";
cout << "\n[1] Inserir\n[2] Atualizar\n[3] Deletar\n[4] Selecionar\n[0] Sair\n\nDigite sua escolha: ";
cin >> comando;
if (comando == 1) {
lista = insere (lista);
} else if(comando == 2) {
lista = altera(lista);
} else if (comando == 3) {
lista = exclui(lista);
} else if (comando == 4) {
imprime(lista);
} else if(comando == 0){
break;
}else{
cout << " Comando invalido";
}
}

cout << "Obrigado por utilizar meu aplicativo!\n\n\n\n";

return(0);
}



Qualquer dúvida só dar um toque!

Se ajudei, marque o tópico como resolvido e clique em melhor resposta!

Espero ter ajudado

[]'s

T+

--


Dr. quanto tempo de vida eu tenho?
- 15 minutos.
E o que o Sr. pode fazer por mim?
- No máximo, um miojo. = )




3. Re: arquivo txt em lista

Ronilson Brunhara
RBCOL

(usa Outra)

Enviado em 20/05/2015 - 22:28h

oi, obrigado, mas estou tendo dificuldade em cortar as string's, no caso eu não teria que digitar um comando inteiro mais sim uma linha de caracteres como esta INSERE ('Nota da Prova de BD-I', 'Tirei nota 10'), aí o INSERE entraria como o comando, Nota da Prova de BD-I entraria direto em titulo e Tirei nota 10 entraria direto em texto, mas cortando a frase toda com substring e depois salvar em arquivo txt, o problema que eu não estou conseguindo cortar em substring e salvar em arquivo txt. se puder me ajudar agradeço.


4. Re: arquivo txt em lista

Uilian Ries
uilianries

(usa Linux Mint)

Enviado em 21/05/2015 - 00:36h


Estas a utilizar C++, utilize std::cin pra receber a entrada.

Quanto a substring em C++,

Leia sobre

std::string std::string::substr (size_t pos = 0, size_t len = npos) const;


Onde pos é posição inicial que inicia substring e len é quantos caracteres:


std::string str = "Viva o Linux";
std::cout << str.substr(7, 5); // Terá "Linux" no stdout




5. Re: arquivo txt em lista

Ronilson Brunhara
RBCOL

(usa Outra)

Enviado em 21/05/2015 - 07:03h


mesmo eu usando char, vai dar certo?


6. Re: arquivo txt em lista

Thiago Henrique Hüpner
Thihup

(usa Manjaro Linux)

Enviado em 21/05/2015 - 08:43h

RBCOL escreveu:


mesmo eu usando char, vai dar certo?


Boa sorte então!

std::string veio para FACILITAR o uso de frases. Se tentar com char vai demorar bem mais!

Precisa ser necessáriamente assim? Seu código já não funciona?

De qualquer forma, não será tão dificil assim fazer o que você quer!

[]'s

T+

--


Dr. quanto tempo de vida eu tenho?
- 15 minutos.
E o que o Sr. pode fazer por mim?
- No máximo, um miojo. = )




7. Re: arquivo txt em lista

Thiago Henrique Hüpner
Thihup

(usa Manjaro Linux)

Enviado em 21/05/2015 - 11:22h

Amigo, vou facilitar sua vida.

Consegui fazer o que você quer assim:
O resto é por sua conta ;)

string x,y;
int i,j,k,tam,tam2;

i = comando.find("(")+1;
j = comando.find(",");
k = comando.find(")");

tam = j -i;
tam2 = k - (j+1);
x = comando.substr(i,tam);
y = comando.substr(j+1,tam2);
cout << "( " << x << " " << y << " )"<< endl;



Espero ter ajudado

Se ajudei, marque o topico como resolvido e clique em melhor resposta!

[]'s

T+

--


Dr. quanto tempo de vida eu tenho?
- 15 minutos.
E o que o Sr. pode fazer por mim?
- No máximo, um miojo. = )




8. Re: arquivo txt em lista

Ronilson Brunhara
RBCOL

(usa Outra)

Enviado em 21/05/2015 - 13:01h


obrigado, só que não estou conseguindo colocar a substring dentro do nó da lista.


9. Re: arquivo txt em lista

Ronilson Brunhara
RBCOL

(usa Outra)

Enviado em 22/05/2015 - 07:18h

Amigos eu agradeço a todos pelo esforço para me ajudar, talvez eu não consegui ser claro na minha explicação, vou tentar ser claro.

no momento que eu digitar um texto no comando o texto vai ser mais ou menos assim:

INSERE('MINHA NOTA EM BD','TIREI NOTA 10')

quando eu apertar a tecla enter será cortada a palavra INSERE para o comando inserir, a frase MINHA NOTA EM BD será incluída no titulo e a frase TIREI NOTA 10 será incluída no texto, a minha dificuldade é que eu não estou conseguindo separar as frases com substring e incluí-las no titulo e no texto da struct LISTA, pois a frase trata-se de sttring enquanto na struct eu tenho char, depois disto salvar em arquivo txt. Se alguém conseguir me ajudar eu agradeço. postei novamente os meus códigos. Obrigado.



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

int incremento = 1;
using namespace std;

struct lista{
int codigo;
char titulo[101];
char texto[501];
struct lista *prox;
};

typedef struct lista *Lista;


Lista inicializa(void){
return NULL;
}

Lista insere (Lista p){
Lista novo = (Lista)malloc(sizeof(lista));
Lista aux = p;
Lista aux2 = aux;

novo->codigo = incremento;
incremento++;

a frase deverá entrar aqui separada por substring sem ser digitada neste trecho

//getchar();
//cout <<" Digite um titulo: ";
//gets(novo->titulo);
//cout << " Digite um texto : ";
//gets(novo->texto);

novo->prox =NULL;
if(aux == NULL)

return novo;

else{
while(aux->prox != NULL)
aux = aux->prox;
aux->prox = novo;
return p;
}
}

void imprime(Lista p){
Lista aux = p;
if(p == NULL){
cout << " Lista vazia\n";
return ;
}
while(aux != NULL){
cout << " Codigo: " << aux->codigo;
cout << "\n";
cout << " Titulo: " << aux->titulo << "\n Texto: " << " " << aux->texto;
cout << "\n\n";

aux = aux->prox;
}
}

bool vazia (Lista* l){
return(l == NULL);
}

Lista altera (Lista l){
Lista ant = NULL;
Lista p = l;

int codigo;
char titulo[501], titulo2[501];
cout << " Digite o codigo que deseja alterar: ";
cin >> codigo;

while(p != NULL && p->codigo != codigo){
ant = p;
p = p->prox;
}
if(p == NULL){
cout << " Comando nao encontrado";
return l;
}

cout << " Codigo encontrado: ";
cout << " Codigo: " << codigo << "\n" << " " << p->titulo << p->texto;
cout << "\n\n";
cout << " Digite um novo titulo: ";
getchar();
gets(p->titulo);
cout << " Digite um novo texto : ";
gets(p->texto);

return l;
}

Lista exclui (Lista l){
Lista ant = NULL;
Lista p = l;

int codigo;
cout << " Digite o codigo que deseja remover: ";
cin >> codigo;

while(p != NULL && p->codigo != codigo){
ant = p;
p = p->prox;
}
if(p == NULL)
return l;
if(ant == NULL){
l = p->prox;
}
else{
ant->prox = p->prox;
}
free(p);
return l;
}

int main(void){
Lista lista = inicializa();
string comando;
cout << "\n\t\t ANOTAI\n\n\n";

while(comando != "SAIR"){
cout << "\n Linha de comando: ";
//cout << "\n 1 - INSERE \n 2 - ATUALIZA \n 3 - DELETA \n 4 - SELECIONA \n 0 - SAIR\n\n";
cin >> comando;
if (comando == "INSERE"){
lista = insere (lista);
}else if(comando == "ATUALIZA"){
lista = altera(lista);
}else if (comando == "DELETA"){
lista = exclui(lista);
}else if (comando == "SELECIONA"){
imprime(lista);
}else {
cout << " Comando invalido";
}
}
return(0);
}


10. Re: arquivo txt em lista

Thiago Henrique Hüpner
Thihup

(usa Manjaro Linux)

Enviado em 22/05/2015 - 10:27h

Amigo, você quer que eu lhe dê o código pronto?

Eu já mostrei na minha resposta acima como ter as duas frases!
X: Titulo
Y: Mensagem

Dai é só trocar a função de "coloca o titulo e o texto" com mais 2 argumentos e passar eles.

Espero ter ajudado

[]'s

T+

--

Dr. quanto tempo de vida eu tenho?
- 15 minutos.
E o que o Sr. pode fazer por mim?
- No máximo, um miojo. = )




11. Re: arquivo txt em lista

Ronilson Brunhara
RBCOL

(usa Outra)

Enviado em 22/05/2015 - 10:50h


ok, vou verificar com mais atenção, obrigado.


12. Re: arquivo txt em lista

Perfil removido
removido

(usa Nenhuma)

Enviado em 22/05/2015 - 14:39h

RBCOL só um detalhe: Quando colocar os algoritmos, os coloque entre as tags [ code] e [ /code] sem o espaço, assim facilitará as pessoas que te ajudarem a visualizar o código.
____________________________________________
Viver é etecétera - Guimarães Rosa



01 02 03



Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts