Solved

Find and replace a text in a.TXT file

Posted on 2008-10-26
4
447 Views
Last Modified: 2009-01-03
What i am trying to do here is to CANCEL a subscription of a CLIENT by searching for his email address in a .TXT file and if that email address FOUND THEN start READING the previous line so we can find and REPLACE the text "Subscription: Active" to "Subscription: Cancelled".

I have made a simple example of my .txt file.

My .txt contains the following:

Purch in 11/27/2008 serial: AsDFGH2123456 Subscription: Cancelled Deleted: No Charged: 1
admin1@xxx.com
Purch in 11/28/2008 serial: ns7YBSUjkskj Subscription: Active Deleted: No Charged: 1
admin2@xxx.com
Purch in 11/28/2008 serial: SNus8USHJ Subscription: Active Deleted: No Charged: 1
admin3@xxx.com

How can i cancel the subscription of the admin2@xxx.com ?

I am using vb 6.0!

Thanks
Purch in 11/27/2008 serial: AsDFGH2123456 Subscription: Cancelled Deleted: No Charged: 1
admin1@xxx.com
Purch in 11/28/2008 serial: ns7YBSUjkskj Subscription: Active Deleted: No Charged: 1
admin2@xxx.com
Purch in 11/28/2008 serial: SNus8USHJ Subscription: Active Deleted: No Charged: 1
admin3@xxx.com

Open in new window

0
Comment
Question by:KingSencat
  • 2
4 Comments
 
LVL 45

Expert Comment

by:aikimark
ID: 22807169
1. Does this need to be a .txt file?  It seems more suitable as a database application.

2. How big is this file? (lines)

3a. If the file is relatively small, then you can read the entire contents of the file into a string variable, use InStr() to find the email addres and then InStrRev() to find the prior "Subscription:"

3b. Convert this text file into a database table or a fixed/delimited text file.  Use SQL Update statement to change the Subscription field Where the email field is admin2@xxx.com.  Note, the email address will appear on the same line as the "Subscription:" data.

3c. For larger files, use pairs of Line Input statements in a loop, placing the results in two string variables.  If the email string variable equals the email address you seek, then change the subscription data.
Whether you change a string variable or not, you output both string variables to a new text file.  Upon completion, replace the original text file with the text file you just created.

3d. If you have a fixed length record format, you can open the file as Random and update the 'records' in place.  You will need a TYPE structure with fixed length string components.
0
 

Author Comment

by:KingSencat
ID: 22820374
1) I need to do it with a .txt file
2) It is not big, under 5KB
The file its in fixed length format, i just need to replace the subscription to cancelled, any example please?
0
 
LVL 45

Accepted Solution

by:
aikimark earned 500 total points
ID: 22821663
@KingSencat

1. What I meant was could this txt file be a different format?  If we restructured your txt file, it might serve its current purpose and be accessed with a database driver or VB Open Random statement.  Is the format of the text file used by other programs, not just the originator of the data?

2. it is NOT in fixed length format.  If you open the code snippet window in your original question comment, you will see that each of the three 'first row' records are a different length.  see snippet below for example of what I meant.

3.
Fixed length data format example:
 
Purch in 11/27/2008 AsDFGH2123456 Cancelled  No 1   admin1@xxx.com
Purch in 11/28/2008 ns7YBSUjkskj  Active     No 1   admin2@xxx.com
Purch in 11/28/2008 SNus8USHJ     Active     No 1   admin3@xxx.com
 
=====================
Public Sub ChangeSubStatus(parmFile As String, parmEmail As String, parmNewStatus As String)
    Dim intFN As Integer
    Dim strFileText As String
    Dim strLines() As String
    Dim lngLoop As Long
    Dim lngSubPosn As Long
    Dim lngDelPosn As Long
    
    intFN = FreeFile
    Open parmFile For Input As #intFN
    strFileText = Input(LOF(intFN), #intFN)
    strLines = Split(strFileText, vbCrLf)
    Close intFN
    For lngLoop = 1 To UBound(strLines) Step 2
        If strLines(lngLoop) = parmEmail Then
            lngSubPosn = InStr(strLines(lngLoop - 1), "Subscription:")
            lngDelPosn = InStr(strLines(lngLoop - 1), "Deleted:")
            strLines(lngLoop - 1) = Left$(strLines(lngLoop - 1), lngSubPosn - 1) & "Subscription: " & parmNewStatus & " " & Mid$(strLines(lngLoop - 1), lngDelPosn)
        End If
    Next
    strFileText = Join(strLines, vbCrLf)
    intFN = FreeFile
    Open parmFile For Output As #intFN
    Print #intFN, strFileText
    Close intFN
End Sub

Open in new window

0

Featured Post

Announcing the Most Valuable Experts of 2016

MVEs are more concerned with the satisfaction of those they help than with the considerable points they can earn. They are the types of people you feel privileged to call colleagues. Join us in honoring this amazing group of Experts.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

There are many ways to remove duplicate entries in an SQL or Access database. Most make you temporarily insert an ID field, make a temp table and copy data back and forth, and/or are slow. Here is an easy way in VB6 using ADO to remove duplicate row…
I was working on a PowerPoint add-in the other day and a client asked me "can you implement a feature which processes a chart when it's pasted into a slide from another deck?". It got me wondering how to hook into built-in ribbon events in Office.
Get people started with the process of using Access VBA to control Excel using automation, Microsoft Access can control other applications. An example is the ability to programmatically talk to Excel. Using automation, an Access application can laun…
Get people started with the utilization of class modules. Class modules can be a powerful tool in Microsoft Access. They allow you to create self-contained objects that encapsulate functionality. They can easily hide the complexity of a process from…

808 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question