Solved

Find and replace a text in a.TXT file

Posted on 2008-10-26
4
442 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

Maximize Your Threat Intelligence Reporting

Reporting is one of the most important and least talked about aspects of a world-class threat intelligence program. Here’s how to do it right.

Join & Write a Comment

I’ve seen a number of people looking for examples of how to access web services from VB6.  I’ve been using a test harness I built in VB6 (using many resources I found online) that I use for small projects to work out how to communicate with web serv…
Introduction While answering a recent question (http://www.experts-exchange.com/Q_27402310.html) in the VB classic zone, I wrote some VB code in the (Office) VBA environment, rather than fire up my older PC.  I didn't post completely correct code o…
Get people started with the process of using Access VBA to control Outlook using automation, Microsoft Access can control other applications. An example is the ability to programmatically talk to Microsoft Outlook. Using automation, an Access applic…
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…

746 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

Need Help in Real-Time?

Connect with top rated Experts

13 Experts available now in Live!

Get 1:1 Help Now