Usuário com melhor resposta
Editar linha de arquivo txt

Pergunta
-
Boa Tarde,
Preciso que minha aplicação inclua um caractere no inicio da linha que o label apresentou. por exemplo, eu clico no botao para me apresentar uma pergunta e esta pergunta esta em um arquivo txt onde existem mais perguntas linha a linha. No entanto, eu não quero ler esta pergunta novamente quando abrir a minha aplicação. para isso, eu pensei em colocar um caracter no inicio da pergunta sempre que eu ler e assim coloco uma condição para não ler as linhas que comecem com este carácter.
Não sei se consegui ser claro o suficiente, mas se alguém puder me ajudar eu agradeço.
Ps. Hoje eu leio este text e quando fecho o sistema eu renomeio e ao abrir crio um novo txt, mas tenho que colocar todas as perguntas não lidas na mão.
Um Abraço
Respostas
-
Para retornar uma linha de um arquivo de texto,você precisa do índice da mesma (normalmente é o número da linha subtraindo 1).Para pegar uma aleatória use a função Random.
Armazene a pergunta em uma variável para que possa buscar tal no arquvo e escrever o caractere.
Em outra variável,armazene todo o texto do arquivo.Use a função Replace para substituir a pergunta pela mesma,com um caractere desejado para a diferenciação das perguntas já escolhidas e salve.
Na hora de ler,basta verificar se a pergunta selecionada tem o caractere (Contains).Se tiver,pega uma outra linha aleatória.
- Sugerido como Resposta Giovani Rodrigues terça-feira, 7 de maio de 2013 01:00
- Marcado como Resposta Felipo Gonçalves sexta-feira, 10 de maio de 2013 13:49
-
Não precisa usar um dicionário para isso.Vou explicar mais detalhadamente,passo-a-passo.
1 - Variáveis Globais
'Local do arquivo onde estão as perguntas dim perguntas as string() = io.file.readalllines("caminho do arquivo") dim rdn as random = new random()
dim perguntaaleatoria as string
2 - Função para pegar a pergunta aleatória
private function obterPerguntaAleatoria as string dim tp as string for pa = 0 to perguntas.length - 1 dim indicealeatorio as integer = rnd.next(perguntas.length - 1) if not perguntas(indicealeatorio).startswith("#") then tp = perguntas(indicealeatorio) perguntaaleatoria = perguntas(indicealeatorio) exit for end if next return tp end function
3 - Usando a função
label1.text = obterPerguntaAleatoria
4 - Salvando
private sub salvar dim src as string = "" for s = 0 to perguntas.length - 1 if perguntas(s) = perguntaaleatoria then perguntas(s) = "#" & perguntaaleatoria end if src &= perguntas(s) & vbnewline next dim stw as new streamwriter("caminho do arquivo") stw.write(src) stw.close end sub
Acho que deu pra entender.É um jeito simples e eficiente.Qualquer dúvidas,só responder.
- Marcado como Resposta Felipo Gonçalves sexta-feira, 10 de maio de 2013 13:49
-
Adilson,
Todos um dia também foram iniciantes! Você não pode desistir. Se um caminho pelo qual está tentando ir, não está surtindo efeito, tente outro. Se você ficar atolado de vez, pare e vá resolver outro problema de seus projetos, porque quando você se afasta de um problema que você gastou muito tempo para resolver, você consegue ver o quadro de forma completa e assim, encontrar outro caminho para resolver a solução. Eu lembro quando comecei a querer programar e logo em seguida quando comecei a trabalhar com arquivos PDFs! Tentei fazer algo que nem sabia como e aí quando desisti, achei a solução pesquisando outras coisas.
A solução do Guilherme é bem interessante! Vá estudando com ele isso aí, porque eu também irei acompanhando, pois trabalhar com arquivos é algo normal para mim, e essa solução do Guilherme eu ainda não havia tentado!
Att.
Giovani
- Marcado como Resposta Adilson Borges sábado, 25 de maio de 2013 23:35
-
Tente substituir a função salvar por essa:
private sub salvar dim src as string = io.file.readalltext("caminho do arquivo") src = src.replace(perguntaaleatoria, "#" & perguntaaleatoria) dim stw as new streamwriter("caminho do arquivo") stw.write(src) stw.close end sub
A diferença é que na outra,ela vai checando linha por linha,já esta usa a função replace.
- Marcado como Resposta Adilson Borges sábado, 25 de maio de 2013 23:35
Todas as Respostas
-
Boa tarde!
Nesse link, vai ensinar você a trabalhar com arquivos. Uma abordagem interessante poderia ser o caso de você ao ler a pergunta, já escrever ela em um novo arquivo, chamado por exemplo de "perguntaslidas.txt", e na posição dessa linha no seu arquivo de leitura, já excluir ela. Assim você só teria 2 arquivos para trabalhar. É só uma sugestão!
Outra abordagem, se não for possível rescrever a linha selecionada ou até mesmo apagá-la, seria ao você ler uma pergunta, consultar no arquivo de perguntas lidas. Se você não encontrar essa pergunta, adiciona ela ao arquio não lidas e exibe a pergunta no sistema. Caso você encontre ela no arquivo de leitura, você pula para a próxima linha. Essa é outra sugestão!
Att.
Giovani
-
Para retornar uma linha de um arquivo de texto,você precisa do índice da mesma (normalmente é o número da linha subtraindo 1).Para pegar uma aleatória use a função Random.
Armazene a pergunta em uma variável para que possa buscar tal no arquvo e escrever o caractere.
Em outra variável,armazene todo o texto do arquivo.Use a função Replace para substituir a pergunta pela mesma,com um caractere desejado para a diferenciação das perguntas já escolhidas e salve.
Na hora de ler,basta verificar se a pergunta selecionada tem o caractere (Contains).Se tiver,pega uma outra linha aleatória.
- Sugerido como Resposta Giovani Rodrigues terça-feira, 7 de maio de 2013 01:00
- Marcado como Resposta Felipo Gonçalves sexta-feira, 10 de maio de 2013 13:49
-
Guilherme,
Aproveitando, se você puder me passar um exemplo em código. Sei que pode ser abuso, mas estou pedindo isso, porque estou iniciando este projeto como voluntario e ainda não possuo conhecimento necessário para aplicar estas situações.
Um Abraço
-
Giovani,
Gostei da alternativa 1, mas como estou iniciando em Visual, mesmo com o documento, tenho dificuldade em associar ao meu projeto.
Mas caso o Guilherme consiga me passar um exemplo em código, vou aprender as duas situações e os dois casos são alternativas.
Obrigado
-
dim perguntas as string() = io.file.readalllines("caminho do arquivo") 'arquivo com as perguntas (cada pergunta deve estar em uma linha diferente) dim rdn as random = new random() 'variável do tipo random para pegar uma pergunta aleatória dim perguntaaleatoria as string 'variavel para armazenar a pergunta aleatória '--pegar pergunta aleatoria que ainda nao foi escolhida: for pa = 0 to perguntas.length - 1
dim anum as integer = rnd.next(perguntas.length - 1)if not perguntas(anum).startswith("#") then 'se tiver o caractee #,a pergunta já foi escolhida perguntaaleatoria = perguntas(anum) 'pega uma aleatoria exit for 'sai do loop end if next dim srcperguntas as string = "" 'armazenar o texto na variavel srcperguntas for p = 0 to perguntas.length - 1 srcperguntas &= perguntas(p) next msgbox(perguntaaleatoria) 'mensagem com a pergunta aleatória (mude conforme desejar) '------ depois de responder srcperguntas = srcperguntas.replace(perguntaaleatoria, "#" & perguntaaleatoria) 'coloca o caractere # na frente das perguntas escolhidas dim stw as new streamwriter("caminho do arquivo") stw.write(srcperguntas) stw.close
se não entender,ou não funcionar,basta responder.
- Editado GuiSantoss terça-feira, 7 de maio de 2013 13:47
-
Gulherme,
Já havia consegui uma ajuda na web e estou utilizando a seguinte forma para ler minhas perguntas e respostas. Abaixo o codigo que estou usando. Tentei continuar com o seu na parte de pegar o que esta no label pergunta e substituir no arquivo, mas estou fazendo algo errado.
Dim objDictionary = CreateObject("Scripting.Dictionary")
If lbl_nivel.Text = ("Nível 1") Then
Dim lines = IO.File.ReadAllLines(Application.StartupPath & "\perg_nv1.txt", System.Text.Encoding.Default)
Dim i As Int32
i = 1
For x As Int32 = 0 To lines.Length - 1
If (lines(x).Trim <> "") Then
objDictionary.Add(i, lines(x))
i = i + 1
End If
Next
ElseIf lbl_nivel.Text = ("Nível 2") Then
Dim lines = IO.File.ReadAllLines(Application.StartupPath & "\perg_nv2.txt", System.Text.Encoding.Default)
Dim i As Int32
i = 1
For x As Int32 = 0 To lines.Length - 1
If (lines(x).Trim <> "") Then
objDictionary.Add(i, lines(x))
i = i + 1
End If
Next
ElseIf lbl_nivel.Text = ("Nível 3") Then
Dim lines = IO.File.ReadAllLines(Application.StartupPath & "\perg_nv3.txt", System.Text.Encoding.Default)
Dim i As Int32
i = 1
For x As Int32 = 0 To lines.Length - 1
If (lines(x).Trim <> "") Then
objDictionary.Add(i, lines(x))
i = i + 1
End If
Next
Else
Dim lines = IO.File.ReadAllLines(Application.StartupPath & "\perg_unica.txt", System.Text.Encoding.Default)
Dim i As Int32
i = 1
For x As Int32 = 0 To lines.Length - 1
If (lines(x).Trim <> "") Then
objDictionary.Add(i, lines(x))
i = i + 1
End If
Next
End If
lbl_pergunta.Text = objDictionary(X)
lbl_resposta.Text = objDictionary(X + 1)
X = X + 2 -
Não precisa usar um dicionário para isso.Vou explicar mais detalhadamente,passo-a-passo.
1 - Variáveis Globais
'Local do arquivo onde estão as perguntas dim perguntas as string() = io.file.readalllines("caminho do arquivo") dim rdn as random = new random()
dim perguntaaleatoria as string
2 - Função para pegar a pergunta aleatória
private function obterPerguntaAleatoria as string dim tp as string for pa = 0 to perguntas.length - 1 dim indicealeatorio as integer = rnd.next(perguntas.length - 1) if not perguntas(indicealeatorio).startswith("#") then tp = perguntas(indicealeatorio) perguntaaleatoria = perguntas(indicealeatorio) exit for end if next return tp end function
3 - Usando a função
label1.text = obterPerguntaAleatoria
4 - Salvando
private sub salvar dim src as string = "" for s = 0 to perguntas.length - 1 if perguntas(s) = perguntaaleatoria then perguntas(s) = "#" & perguntaaleatoria end if src &= perguntas(s) & vbnewline next dim stw as new streamwriter("caminho do arquivo") stw.write(src) stw.close end sub
Acho que deu pra entender.É um jeito simples e eficiente.Qualquer dúvidas,só responder.
- Marcado como Resposta Felipo Gonçalves sexta-feira, 10 de maio de 2013 13:49
-
-
Adilson,
Todos um dia também foram iniciantes! Você não pode desistir. Se um caminho pelo qual está tentando ir, não está surtindo efeito, tente outro. Se você ficar atolado de vez, pare e vá resolver outro problema de seus projetos, porque quando você se afasta de um problema que você gastou muito tempo para resolver, você consegue ver o quadro de forma completa e assim, encontrar outro caminho para resolver a solução. Eu lembro quando comecei a querer programar e logo em seguida quando comecei a trabalhar com arquivos PDFs! Tentei fazer algo que nem sabia como e aí quando desisti, achei a solução pesquisando outras coisas.
A solução do Guilherme é bem interessante! Vá estudando com ele isso aí, porque eu também irei acompanhando, pois trabalhar com arquivos é algo normal para mim, e essa solução do Guilherme eu ainda não havia tentado!
Att.
Giovani
- Marcado como Resposta Adilson Borges sábado, 25 de maio de 2013 23:35
-
Tente substituir a função salvar por essa:
private sub salvar dim src as string = io.file.readalltext("caminho do arquivo") src = src.replace(perguntaaleatoria, "#" & perguntaaleatoria) dim stw as new streamwriter("caminho do arquivo") stw.write(src) stw.close end sub
A diferença é que na outra,ela vai checando linha por linha,já esta usa a função replace.
- Marcado como Resposta Adilson Borges sábado, 25 de maio de 2013 23:35