a3deluxe Posted August 2, 2016 at 03:23 PM Report #597946 Posted August 2, 2016 at 03:23 PM (edited) Boa tarde, Tenho um ficheiro txt, e dentro dele tem estes valores, agora queria somá-los todas. 1 1 2 3 2 5 10 2 Como posso fazer, usando o File.WriteAllLines para somar os valores que estao dentro deste ficheiro txt? Obrigado Edited August 2, 2016 at 03:23 PM by a3deluxe
ribeiro55 Posted August 2, 2016 at 03:46 PM Report #597951 Posted August 2, 2016 at 03:46 PM Com o WriteAllLines não te safas. Serve literalmente para escrever linhas para o ficheiro. Usas o ReadAllText e um split ou o ReadAllLines para apanhares o array de "números" em texto. Depois basta somar o array tendo o cuidado de fazer o parse do inteiro. Sérgio Ribeiro "Great coders aren't born. They're compiled and released""Expert coders do not need a keyboard. They just throw magnets at the RAM chips"
a3deluxe Posted August 2, 2016 at 07:16 PM Author Report #597956 Posted August 2, 2016 at 07:16 PM Queria dizer ReadAllLines, podias dar mais a ajudinha.
POB Posted August 2, 2016 at 08:47 PM Report #597957 Posted August 2, 2016 at 08:47 PM (edited) Boas, Podes fazer algo deste genero: string[] lines = File.ReadAllLines("PATH DO FICHEIRO"); int total = 0; foreach (string line in lines) { total += int.Parse(line); } Console.WriteLine(total); Edited August 3, 2016 at 10:42 AM by ribeiro55
a3deluxe Posted August 3, 2016 at 09:28 AM Author Report #597962 Posted August 3, 2016 at 09:28 AM (edited) O programa é um Form com uma Label, quando arranca o form mostra a leitura (soma) do ficheiro TXT na Label. Em baixo deixo já alguma coisa que consegui fazer, mas ainda tem alguns erros. mais uma ajudinha... a negrito é onde tenho alguns erros. obrigado // Dim myreader As New StreamReader("c:\calculos.Txt") Dim line As String Do Until myreader.EndOfStream line = myreader.ReadLine() Loop myreader.Close() Dim valor As String = "0" Dim total As Integer = Integer.Parse(valor) For Each line In line total += Integer.Parse(line) Next Console.WriteLine(total) total = Label1.Text End Sub Edited August 3, 2016 at 10:44 AM by ribeiro55
Solution ribeiro55 Posted August 3, 2016 at 11:03 AM Solution Report #597966 Posted August 3, 2016 at 11:03 AM Vários problemas com esse bloco de código, sendo o mais flagrante o facto de estares a iterar as linhas no Loop, mas a não fazer nada com elas. E depois disso, fazes um ciclo For Each com a mesma variável no item e no iterador 🙂 Ali com a variável valor, também estás a fazer parse dela para o total não sei bem para que. Por fim, em vez de colocares o total na Label, estás a colocar o texto da label no total... Step debug e um pouco mais de atenção. Isto são erros que parecem que nem estás a tentar 😞 Para além disso, o POB já te deu uma solução. Em C#, mas uma solução fácil de traduzires. Mas vá... 'O primeiro passo é criares uma variável Integer para guardar o valor total Dim TOTAL As Integer = 0 'Depois vamos criar um StreamReader (podias também fazer com ReadAllLines / ReadAllText, mas tens o exemplo do POB) Dim SR As New System.IO.StreamReader("e:\zag.txt") 'Enquanto o Reader não estiver no fim (enquanto houver informação no ficheiro) While Not SR.EndOfStream 'Lê uma linha Dim linha As String = SR.ReadLine 'Inicializa o valor a zero Dim valor As Integer = 0 'Tenta extraír o valor numérico da linha de texto e coloca na variável valor Integer.TryParse(linha, valor) 'Soma ao total a variável valor. Caso a linha não represente um número, o valor será zero (TOTAL+0 = TOTAL) TOTAL += valor End While 'Fecha o ficheiro SR.Close() 'Por fim, apresenta o resultado na label Label1.Text = TOTAL.ToString() Sérgio Ribeiro "Great coders aren't born. They're compiled and released""Expert coders do not need a keyboard. They just throw magnets at the RAM chips"
a3deluxe Posted August 3, 2016 at 12:07 PM Author Report #597969 Posted August 3, 2016 at 12:07 PM Muito Obrigado ribeiro55. Mais uma vez uma grande ajuda.
a3deluxe Posted August 4, 2016 at 07:53 PM Author Report #597991 Posted August 4, 2016 at 07:53 PM (edited) Boa Noite, precisava de mais uma ajudinha, agora queria contar quantas vezes existe o numero 0. Dim ficheirotxt As String = "c:\file.txt" Dim number0 As String = "0" Dim encontrou As Boolean Dim valor As Integer = 0 For Each line As String In IO.File.ReadAllLines(ficheirotxt) encontrou = False For Each procurar As String In number0 If line.Contains(number0) Then encontrou = True Integer.TryParse(number0, valor) number0 += valor '-----> erro Label14.Text = count.ToString Exit For End If Next If Not encontrou Then End If Next Obrigado Edited August 5, 2016 at 09:11 AM by ribeiro55
ribeiro55 Posted August 5, 2016 at 09:10 AM Report #598000 Posted August 5, 2016 at 09:10 AM Que valente confusão. Se o numero0 serve para manter a frequencia do número zero, porque razão declaras como String? Isto é tão simples como passar essa variável para Integer e no código anterior meter a seguir do parse: If valor = 0 Then numero0+=1 Nem consigo perceber qual a tua confusão com algo deste género 😞 No teu código dá erro porque estás a somar um Integer a uma String. Não te parece estranho? Sérgio Ribeiro "Great coders aren't born. They're compiled and released""Expert coders do not need a keyboard. They just throw magnets at the RAM chips"
a3deluxe Posted August 5, 2016 at 09:39 AM Author Report #598001 Posted August 5, 2016 at 09:39 AM Bom dia, continua a dar erro neste código que substitui. // If valor = 0 Then numero0+=1 dá erro no numero0+=1, diz: (Error BC30512 Option Strict On disallows implicit conversions from 'Double' to 'String'. ) Obrigado
ribeiro55 Posted August 5, 2016 at 09:57 AM Report #598004 Posted August 5, 2016 at 09:57 AM numero0 continua a ser uma String porque? Faz-te algum sentido que um contador seja uma String? A sugestão era introduzir depois do parse, mas no bloco que eu te dei. Encaixares isso no teu deveria depender de ti. Sérgio Ribeiro "Great coders aren't born. They're compiled and released""Expert coders do not need a keyboard. They just throw magnets at the RAM chips"
a3deluxe Posted August 5, 2016 at 10:14 AM Author Report #598007 Posted August 5, 2016 at 10:14 AM Sim não faz sentido, porque é um numero, se fosse uma letra ai já tinha que ser string? Alterei para Integer, agora passou a dar erro aqui TryParse e aqui line.Contains, isto porque era para ser uma string agora passou para integer, como tenho que mudar?
ribeiro55 Posted August 5, 2016 at 11:03 AM Report #598008 Posted August 5, 2016 at 11:03 AM Esquece o line.Contains. Foca-te na finalidade do parse: transformar o valor da linha em número. Se esse valor for zero......... a linha tem zero! 🙂 Desfaz lá o segundo ciclo For que não faz sentido nenhum. O primeiro chega-te bem. Só tens de verificar depois do parse se o valor é zero. Se for, acrescentas um ao contador. Sérgio Ribeiro "Great coders aren't born. They're compiled and released""Expert coders do not need a keyboard. They just throw magnets at the RAM chips"
a3deluxe Posted August 5, 2016 at 02:44 PM Author Report #598011 Posted August 5, 2016 at 02:44 PM Amigo estive tentar mas ainda não cheguei la.
ribeiro55 Posted August 5, 2016 at 03:19 PM Report #598013 Posted August 5, 2016 at 03:19 PM Não entendo a tua dúvida no processo. Desisto 🙂 Dim ficheirotxt As String = "e:\zubzub.txt" Dim numero0_valor As Integer = 0, numero0_algures As Integer = 0 For Each line As String In IO.File.ReadAllLines(ficheirotxt) Dim valor As Integer = 0 If Integer.TryParse(line, valor) Then If valor = 0 Then numero0_valor += 1 End If numero0_algures += line.ToArray().Count(Function(c As Char) c.ToString() = "0") Next MessageBox.Show( "Total de zeros no ficheiro: " & numero0_algures & vbCrLf & "Total de valores a zero: " & numero0_valor ) Sérgio Ribeiro "Great coders aren't born. They're compiled and released""Expert coders do not need a keyboard. They just throw magnets at the RAM chips"
a3deluxe Posted August 5, 2016 at 09:33 PM Author Report #598018 Posted August 5, 2016 at 09:33 PM ribeiro55, mais uma vez obrigado, Existe um pequeno problema, o programa esta a contabilizar também os zeros de por exemplo 100, 200 não contabiliza só os 0 sozinhos, o que pode ser? Obrigado
POB Posted August 6, 2016 at 09:14 AM Report #598020 Posted August 6, 2016 at 09:14 AM (edited) a3deluxe, O programa está tambem a contabilizar outros zeros porque o ribeiro55 deu-te a possibilidade de para alem de saberes apenas quantos zeros (com isto quero dizer, 0 e so 0) tens, deu-te tambem a possibilidade se saber quantos 0 efetivamente tens em todo o ficheiro, contanto tambem os zeros do 10,100,200..etc. Basicamente se olhares para o teu codigo, nesta linha: numero0_algures += line.ToArray().Count(Function(c As Char) c.ToString() = "0") conta-te todos os zeros que tens, contanto tbm com o 100, 200, etc.. se a apagares e apagares a variavel da tua MessageBox, deixas de ver essa contagem. Eu acho que o teu grande problema é não estares mesmo a perceber nada do que estas a fazer, ou então nem olhas-te para o que te deram 😕 Edited August 8, 2016 at 09:05 AM by ribeiro55
a3deluxe Posted August 6, 2016 at 10:15 AM Author Report #598022 Posted August 6, 2016 at 10:15 AM POB, no meu programa substitui a msgbox por uma label1 primeiro tinha colocado assim: // Label1.Text = numero0_algures.ToString e ele contava todos os Zeros dos ficheiro agora coloquei assim, mas ele não contabiliza bem. // Label1.Text = numero0_valor.ToString
POB Posted August 7, 2016 at 08:19 AM Report #598028 Posted August 7, 2016 at 08:19 AM Tens que mostrar o codigo completo para poder-mos ver o que se passa... pq o codigo que o ribeiro55 te deu funciona.
a3deluxe Posted August 7, 2016 at 08:22 AM Author Report #598029 Posted August 7, 2016 at 08:22 AM POB o código é esse. só substitui a msgbox pela Label. Entao o que deve mudar?
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now