ARQUIVO TEXTO

HELIO.COSTA 10/05/2014 11:49:15
#438050
Bom dia,
Estou migrando para VB.net e estão surgindo algumas dúvidas.
Tinha um comando em VB6 e preciso passar para vb.net, segue abaixo:

Private Sub Command2_Click()
Dim Arq1 As Integer
Dim Arq2 As Integer

Dim OrigLine As String [ô] Linha Original
Arq2 = FreeFile
Open [Ô]c:
ovoarquivo.txt[Ô] For Output As #Arq2 [ô] abre o novo arquivo a ser salvo
Arq1 = FreeFile
Open [Ô]c:    este.txt[Ô] For Input As #Arq1 [ô]Abre o arquivo que será lido
Do While Not EOF(Arq1) [ô] inicia um novo Loop dentro do primeiro Loop
Line Input #Arq1, OrigLine [ô] grava a linha em OrigLine - linha de Origem
OrigLine = Replace(OrigLine, [Ô]#pla[Ô], Text1.Text)
OrigLine = Replace(OrigLine, [Ô]#nome[Ô], Text2.Text)
Print #Arq2, OrigLine [ô] grava o novo arquivo com alterações

Loop

Close #Arq1
Close #Arq2
End Sub
PROGRAMADORVB6 10/05/2014 12:23:58
#438051
Resposta escolhida
 Public Class Funcoes
Public Enum OpcaoFicheiro
Ler = 0
Gravar = 1
End Enum
Public Property FazTrabalho As OpcaoFicheiro


Public Function Ficheiro(ByRef IndicarCaminho As String, ByRef FazTrabalho As OpcaoFicheiro, ByRef Opcional As String) As String
Dim Ler_Documento As System.IO.StreamReader
Dim Grava_Documento As System.IO.StreamWriter
If Not System.IO.Directory.Exists(IndicarCaminho) Then
System.IO.Directory.CreateDirectory(IO.Path.GetDirectoryName(IndicarCaminho))
End If

If ExisteFicheiro(IndicarCaminho) = True Then
If FazTrabalho = OpcaoFicheiro.Ler Then
Ler_Documento = New System.IO.StreamReader(IndicarCaminho)
Opcional = Ler_Documento.ReadLine()
Ler_Documento.Close()
Return Opcional
End If
End If
If FazTrabalho = OpcaoFicheiro.Gravar Then
Grava_Documento = New System.IO.StreamWriter(IndicarCaminho)
Grava_Documento.WriteLine(Opcional)
Grava_Documento.Close()
End If

Return Opcional
End Function
End Class

PROGRAMADORVB6 10/05/2014 12:36:04
#438052
Ou então.

 [ô][ô][ô] <summary>
[ô][ô][ô] Conta o nº de linhas em um arquivo de texto
[ô][ô][ô] </summary>
Public Function ContaLinhas(ByRef Nome_Ficheiro As String) As Long
Dim Local_Aquivo As String = Nothing
Local_Aquivo = Application.StartupPath & [Ô]\[Ô] & Nome_Ficheiro
Using Leitura As New StreamReader(Nome_Ficheiro)
Dim QuantasLinhas As Integer = 0

While Leitura.Peek() <> -1
Leitura.ReadLine()
QuantasLinhas += 1
End While
Leitura.Close()
Leitura.Dispose()
Return QuantasLinhas
End Using
End Function

[ô][ô][ô] <summary>
[ô][ô][ô] Indica uma liha especifica de um arquivo de texto, onde se encontra a palavra a procurar
[ô][ô][ô] </summary>
Public Function Apontador(ByRef Nome_Ficheiro As String, ByVal Procura_String As String) As Integer
Dim Local_Aquivo As String = Nothing
Local_Aquivo = Application.StartupPath & [Ô]\[Ô] & Nome_Ficheiro
Dim Linha As Integer = 0
Apontador = Linha

Using Reader As New StreamReader(Local_Aquivo)
Try

While Not Reader.EndOfStream

If Reader.ReadLine.Contains(Procura_String) Then
Apontador = Linha
Return Apontador
Return Linha
Exit While
Reader.Close()
Reader.Dispose()
End If
Linha += 1

End While
Reader.Close()
Reader.Dispose()
Catch ex As Exception
MessageBox.Show([Ô] Erro no apontador. [Ô], [Ô]Informação :[Ô], MessageBoxButtons.OK, MessageBoxIcon.Error)
Finally
Reader.Close()
End Try
End Using
If Apontador <> Linha Then
Apontador = -1

End If
End Function

[ô]========= Alterar =========
[ô][ô][ô] <summary>
[ô][ô][ô] Faz a alteração de um registo em um arquivo de texto, com incindência no nº da linha a substituir
[ô][ô][ô] </summary>
Public Sub AlterarIndex(ByVal PathName_Txt As String, ByVal Text_Replace As String, ByVal lineUpdade As Integer)

Dim Point_Line As Integer = 0
Dim Lines As New List(Of String)
If (String.IsNullOrEmpty(PathName_Txt)) Then
Return
End If
[ô]If file is empty exit
If ContaLinhas(PathName_Txt.ToString) = 0 Then Exit Sub

Using sr As New StreamReader(PathName_Txt.ToString)
While sr.Peek() <> -1
Lines.Add(sr.ReadLine)
End While
sr.Close() [ô]closes the stream
End Using
[ô]make your changes
Using GravaD As New StreamWriter(PathName_Txt.ToString)
For Each line As String In Lines
If (Point_Line).Equals(lineUpdade) Then
line.Remove(lineUpdade + 1)
line = line.Replace(line, Text_Replace.ToString & [Ô]|[Ô])
End If
Point_Line = Point_Line + 1
GravaD.WriteLine(line)
Next
GravaD.Close()
End Using

End Sub

HELIO.COSTA 10/05/2014 12:45:45
#438053
Não entendi muito bem, mas veja o que preciso.

Do While Not EOF(Arq1) [ô] inicia um novo Loop dentro do primeiro Loop
Line Input #Arq1, OrigLine [ô] grava a linha em OrigLine - linha de Origem
OrigLine = Replace(OrigLine, [Ô]#pla[Ô], Text1.Text)
OrigLine = Replace(OrigLine, [Ô]#nome[Ô], Text2.Text)
Print #Arq2, OrigLine [ô] grava o novo arquivo com alterações

Loop

Tenho uma arquivo texto com algumas linhas que o usuário defina, por exemplo:
todos os campos que começarem com #, terei um comentário e depois o que estiver dentro do textbos, assim

#Nome #data #cod
#tipo #tecla
[Ô]será impresso desta forma:

Nome: textbos1.text Data: textbox2.test Código: textbox3.text
Tipo: textbox4.text Tecla: textbox5.text.

Veja neste link como o Marcelo ajudou, assim dá para entender melhor.
http://www.vbmania.com.br/index.php?modulo=forum&metodo=abrir&id=431412&pagina=2

PROGRAMADORVB6 10/05/2014 12:54:16
#438054
Usar:

 Dim value As Integer = Apontador(C:\[Ô]Arq1.txt[Ô], Me.textboxt1.text  & [Ô]|[Ô] & Me.textboxt2.text  & [Ô]|[Ô] &  Me.textboxt3.text & [Ô]|[Ô] &  Me.textboxt4.text  )

AlterarIndex(C:\[Ô]Arq1.txt[Ô], Me.textboxt1.text & [Ô]|[Ô] & Me.textboxt2.text & [Ô]|[Ô] & Me.textboxt3.text & [Ô]|[Ô] & Me.textboxt4.text , Value)


Procura a palavra VBMANIA no arquivo :Arq1.txt, identifica a linha e modifica essa linha por : Texto a ser modificado
HELIO.COSTA 10/05/2014 13:18:18
#438055
Ai temos um problema, para cada caso terei um arquivo texto que terei que modificar para a impressão.
Pode ser que o arquivo tenha 2 linhas com 5 campos no total e em outro arquivo texto terei 20 linhas com 60 campos.
Este arquivo texto é formatado pelo cliente, assim na hora de imprimir abro este arquivo do cliente, e o outro que estou modificando.
Completo os campos com os valors dos textbox e faço a impressão.
HELIO.COSTA 11/05/2014 08:47:58
#438081
Mais ninguem?
HELIO.COSTA 11/05/2014 12:35:42
#438083
Pessoal, tive alguns progressos. Estou deparando com um outro problema, veja abaixo o código:

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Dim FluxoTexto As IO.StreamReader
Dim EscFluxo As IO.StreamWriter
Dim LinhaTexto As String
Dim ArqOrigem As String = Application.StartupPath & [Ô]\[Ô] & [Ô]Teste2.txt[Ô]
Dim ArqDestino = Application.StartupPath & [Ô]\[Ô] & [Ô]Teste3.txt[Ô]
If IO.File.Exists(ArqOrigem) Then
FluxoTexto = New IO.StreamReader(ArqOrigem)
EscFluxo = New IO.StreamWriter(ArqDestino)
LinhaTexto = FluxoTexto.ReadLine
While Not FluxoTexto.EndOfStream
If LinhaTexto.IndexOf([Ô]#1[Ô]) <> -1 Then EscFluxo.WriteLine(Replace(LinhaTexto, [Ô]#1[Ô], [Ô]primeiro passo[Ô]))
If LinhaTexto.IndexOf([Ô]#2[Ô]) <> -1 Then EscFluxo.WriteLine(Replace(LinhaTexto, [Ô]#2[Ô], [Ô]segundo passo[Ô]))
If LinhaTexto.IndexOf([Ô]#3[Ô]) <> -1 Then EscFluxo.WriteLine(Replace(LinhaTexto, [Ô]#3[Ô], [Ô]terceiro passo[Ô]))
If LinhaTexto.IndexOf([Ô]#4[Ô]) <> -1 Then EscFluxo.WriteLine(Replace(LinhaTexto, [Ô]#4[Ô], [Ô]quarto passo[Ô]))
If LinhaTexto = [Ô][Ô] Then EscFluxo.WriteLine([Ô][Ô])
If LinhaTexto.IndexOf([Ô]#[Ô]) = -1 Then EscFluxo.WriteLine(LinhaTexto)
LinhaTexto = FluxoTexto.ReadLine
End While
FluxoTexto.Close()
EscFluxo.Close()
End If
End Sub

Porem se tive em uma linha #1 e #2, estou gravando o arquivo em duas linha, conforme abaixo.
Texto1.txt texto2.txt
TESTANDO TESTANDO
TEST1....:#1 TEST1....:#2 TEST1... : primeiro passo TEST1....:#2
TEST1....:#3 TEST1....:#1 TEST2... : segundo passo
TEST1....:#4 TEST3... : terceiro passo
TEST4... : quarto passo
HELIO.COSTA 11/05/2014 18:31:59
#438090
Se alguem precisar!
Depois de muita tentativa e erros, consegui da seguinte forma:

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Dim FluxoTexto As IO.StreamReader
Dim EscFluxo As IO.StreamWriter
Dim Resultado as string = [Ô][Ô]
Dim LinhaTexto As String
Dim ArqOrigem As String = Application.StartupPath & [Ô]\[Ô] & [Ô]Teste2.txt[Ô]
Dim ArqDestino = Application.StartupPath & [Ô]\[Ô] & [Ô]Teste3.txt[Ô]
If IO.File.Exists(ArqOrigem) Then
FluxoTexto = New IO.StreamReader(ArqOrigem)
EscFluxo = New IO.StreamWriter(ArqDestino)
LinhaTexto = FluxoTexto.ReadLine
While Not FluxoTexto.EndOfStream
If LinhaTexto.IndexOf([Ô]#1[Ô]) <> -1 Then Resultado = Replace(LinhaTexto, [Ô]#1[Ô], [Ô]primeiro passo[Ô])
If LinhaTexto.IndexOf([Ô]#2[Ô]) <> -1 Then Resultado = Replace(LinhaTexto, [Ô]#2[Ô], [Ô]segundo passo[Ô])
If LinhaTexto.IndexOf([Ô]#3[Ô]) <> -1 Then Resultado = Replace(LinhaTexto, [Ô]#3[Ô], [Ô]terceiro passo[Ô])
If LinhaTexto.IndexOf([Ô]#4[Ô]) <> -1 Then Resultado = Replace(LinhaTexto, [Ô]#4[Ô], [Ô]quarto passo[Ô])
If LinhaTexto = [Ô][Ô] Then Resultado = [Ô][Ô]
If LinhaTexto.IndexOf([Ô]#[Ô]) = -1 Then Resutado = LinhaTexto
EscFluxo.WriteLine(Resultado[Ô]
LinhaTexto = FluxoTexto.ReadLine
End While
FluxoTexto.Close()
EscFluxo.Close()
End If
End Sub
Tópico encerrado , respostas não são mais permitidas