Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

lendadomato

Gravar arquivo txt sem duplicidade

Recommended Posts

Pessoal, estou tentando gravar uma linha em um arquivo txt existente, o problema é que eu preciso verificar se existe uma linha igual e se não existir gravar no arquivo, se essa linha já existir ele não grava, segue o código que estou usando:

'O parâmetro forReading é utilizado somente para leitura.
Const forReading = 1, forWriting = 2, forAppending = 8

'Instancia o objeto FSO.
Set Fso = CreateObject("Scripting.FileSystemObject")


'Retorna o arquivo que será usado.
Set ObjFile = Fso.GetFile(caminho)

'Abre o arquivo novamente, agora para a leitura !
Set ObjStream = ObjFile.OpenAsTextStream(forReading,false)

'Looping para varrer todas as linhas do arquivo.
While Not ObjStream.AtEndOfStream
'O método Readline lê uma linha de um arquivo.
Texto = Texto & ObjStream.Readline & "<br>"
Wend

'Mostra o conteúdo.
response.write Texto





'Abre o arquivo com o método OpenTextFile.
Set ArqTxt = Fso.OpenTextFile(caminho,8,True)

'Arquivo aberto, escreve no arquivo

If Texto = linha Then
response.write "linha é igual"
Else
ArqTxt.WriteLine conteudo
response.write "linha gravada!"
End If

'Fecha o arquivo com o método Close.
ArqTxt.Close

'Destrói o objeto. 
Set ArqTxt = nothing

'Destruíndo objetos
Set Fso = nothing
Set objStream = nothing

Compartilhar este post


Link para o post
Compartilhar em outros sites

pelo que andei lendo não é possível, então vou fazer esse procedimento usando bando de dados, primeiro faço a consulta e depois vejo se há duplicidade e se não houver envio os dados para o txt, ainda fico no aguardo de uma solução sem ter que usar o banco de dados.

Compartilhar este post


Link para o post
Compartilhar em outros sites

vc pode ler a linha e comparar o conteúdo, mas o conteúdo tem que ser exatamente igual, 1 vírgula a mais ou acento, já fica diferente. Se for fazer por bd que é melhor, eu coloquei um tópico com funções para ver se existe dados duplicados no bd, tipo assim:

Este código é usado uso para verificar se os dados estão duplicados, e sendo verdadeiro ele remove os dados.

[code]<%@Language="vbscript" %>
<%
Const adOpenForwardOnly = 0
Const adLockReadOnly = 1
Const adCmdText = &H0001
Const adUseClient = 3
%>
<!DOCTYPE HTML Public "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE>Remover registros duplicados</TITLE>
<STYLE TYPE="text/css">
BODY { background-color: #336699; font-family: Verdana; font-size: 10pt; color: #FFFFFF }
TD { font-family: Verdana; font-size: 10pt; color: #000000 }
</STYLE>
</HEAD>
<BODY>
<%
sPassword = "admin" ' password
if Request("password") <> "" Then
Session("Password") = Request("password")
End if
if Session("Password") <> sPassword Then
Response.Write "<HTML><BODY><FORM ACTION=""removeduplicates.asp"" METHOD=""post"">Password: (CaSe SeNsiTivE) <INPUT TYPE=""password"" NAME=""password""><INPUT TYPE=""submit""></FORM>"
Else
delDub = False
File = Request.ServerVariables("SCRIPT_NAME")
File = StrReverse(File)
Posi = Instr(File, "/")
File = Left(File, Posi - 1)
File = StrReverse(File)
if Request.Form("db") <> "" Then
On Error Resume Next
DSNName = Request.Form("db")
sdbTable = Request.Form("tb")
spriKey = Request.Form("pk")
sdbField = Request.Form("fn")
sdbPath = "DBQ=" & Server.Mappath(DSNName) & ";Driver={Microsoft Access Driver (*.mdb)};"
strSQL = "SELECT COUNT(*) AS ttCount FROM " & sdbTable
Set strConn = Server.CreateObject("ADODB.Connection")
strConn.Open sdbPath
Set rs = Server.CreateObject("ADODB.Recordset")
rs.CursorLocation = adUseClient
rs.Open(strSQL), strConn, adOpenForwardOnly, adLockReadOnly, adCmdText
Set rs = strConn.Execute(strSQL)
tempArr = ""
totalFound = rs("ttCount")
rs.Close
Set rs = nothing
totalFound = CInt(totalFound)
Response.Write totalFound
Response.Write " records" & vbcrlf
Response.Write "<HR>" & vbcrlf
strSQL = "SELECT " & sdbField & "," & spriKey & " FROM " & sdbTable & " ORDER BY " & sdbField
Set rs = Server.CreateObject("ADODB.Recordset")
rs.CursorLocation = adUseClient
rs.Open(strSQL), strConn, adOpenForwardOnly, adLockReadOnly, adCmdText
if Err = 0 Then
For i = 0 To (totalFound - 1)
rs.MoveFirst
rs.Move(i)
lookFor = rs.fields(sdbField)
if lookFor = tempVal Then
foundDups = rs.fields(spriKey)
tempArr = tempArr & foundDups & ","
End if
tempVal = lookFor
Next
rs.Close
Set rs = nothing
if tempArr <> "" Then
Response.Write "Primary Key ID contendo dados duplicados no campo selecionado:" & vbcrlf
Response.Write "<BR>" & vbcrlf
End if
if tempArr = "" Then
Response.Write "Não há registros duplicados encontrados." & vbcrlf
Else
tempArr = Left(tempArr, Len(tempArr) - 1)
Response.Write tempArr
tempArr = Split(tempArr, ",", -1, 1)
prCount = UBound(tempArr)
prCount = prCount + 1
Response.Write "<BR>" & vbcrlf
For i = 0 To (prCount - 1)
strSQL = "DELETE FROM " & sdbTable & " WHERE " & spriKey & " = " & tempArr(i)
strConn.Execute(strSQL)
Next
End if
delDub = True
Else
Response.Write Err.Description
End if
strConn.Close
Set strConn = nothing
if Err = 0 And delDub = True Then
if tempArr <> "" Then
Response.Write "<BR><B>" & prCount & "</B> registro duplicado"
if prCount <> 1 Then
Response.Write "s"
End if
Response.Write " excluída com sucesso." & vbcrlf
End if
End if
End if
%>
<HR><BR><DIV ALIGN="center"><SPAN id="result_box"><SPAN title="Remove duplicate database records" closure_hashCode_1phoep="158">Remover duplicado registros de banco de dados</SPAN></SPAN></DIV>
<FORM ACTION="<%=File %>" METHOD="post">
<TABLE CELLPADDING="4" CELLSPACING="1" ALIGN="center" WIDTH="50%" STYLE="border: 1px outset" BGCOLOR="#FFFFFF">
<TR>
<TD WIDTH="50%" BGCOLOR="#E9E9E9">Database:</TD>
<TD WIDTH="50%" BGCOLOR="#E9E9E9">
<INPUT TYPE="text" SIZE="25" NAME="db" STYLE="text-align: right"><B>.mdb</B></TD></TR>
<TR>
<TD WIDTH="50%" BGCOLOR="#E9E9E9"> Nome da Tabela:</TD>
<TD WIDTH="50%" BGCOLOR="#E9E9E9">
<INPUT TYPE="text" SIZE="25" NAME="tb"></TD></TR>
<TR>
<TD WIDTH="50%" BGCOLOR="#E9E9E9">Nome do Campo:</TD>
<TD WIDTH="50%" BGCOLOR="#E9E9E9">
<INPUT TYPE="text" SIZE="25" NAME="fn"></TD></TR>
<TR>
<TD WIDTH="50%" BGCOLOR="#E9E9E9">Primary Key:</TD>
<TD WIDTH="50%" BGCOLOR="#E9E9E9">
<INPUT TYPE="text" SIZE="25" NAME="pk"></TD></TR>
<TR>
<TD WIDTH="50%" BGCOLOR="#E9E9E9"> </TD>
<TD WIDTH="50%" BGCOLOR="#E9E9E9">
<INPUT TYPE="submit" VALUE="Remove Duplicates"></TD></TR></TABLE></FORM>
<HR>
<%
End if
%>
</BODY>
</HTML>[/code]

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.