Displaying only certain text from file - Visual Basic - visual-studio

I want to only display numbers in a text box that i have. At the moment my code reads the text file and adds all the code to the textbox and not only the needed text(which are numbers).
tbRecipient.Text = My.Computer.FileSystem.ReadAllText("filepath")
if anyone can point me in the right direction and let me know how i would go around this problem, that would be great.
I have a file containing:
Steve, 017876
Alan, 098578
...
I want to list only the numbers into a text box once i have got them from the file.
To do this i am using:
Dim i As Integer
For i = 0 To cbRecipients.CheckedItems.Count - 1
My.Computer.FileSystem.WriteAllText("filepath", cbRecipients.CheckedItems.Item(i) & vbCrLf, True)
Next
frmHome.myFunction()
Then under myFunction() is:
tbRecipient.Text = My.Computer.FileSystem.ReadAllText("filepath")

You can use this function:
Function GetFileColumnContents(s_Path As String, ColumnNumber As Long, ColumnDelimiter As String, Optional s_OutputDelimiter As String) As String
On Error GoTo ErrHandler
Open s_Path For Input As #1 'Open the txt file for readin as Temporary File Number 1
Do While Not EOF(1) 'Read line bu line until end of file
Line Input #1, Mystring 'Store the line value in Mystring
GetFileColumnContents = GetFileColumnContents & s_OutputDelimiter & Split(Mystring, ColumnDelimiter)(ColumnNumber - 1) 'process the string
Loop
ErrHandler:
Close #1
End Function
Call in subrutine:
tbRecipient.Text = GetFileColumnContents("filepath", 2, ",", vbCrLf)
Edit: The linenum = linenum + 1 was not neccesary in the function (edited above)
s_Path : is path to the txt file (like "C:\Test.txt")
ColumnNumber: is the column in the text file. If the data looks like:
A, 123, red
B, 456, blue
then ColumnNumber 1 are letters, ColumnNumber 2 are numbers and 3 are colors.
(ColumnNumber - 1) is there because first part of split has index 0, but the ColumnNumber is 1
split("A, 123, red",",")(0) 'results to "A"
split("A, 123, red",",")(1) 'results to " 123"
If you want to list the items from text file column 2 and in the result separated by comma then call the function with comma as last argument:
tbRecipient.Text = GetFileColumnContents("filepath", 2, ",", ",")

Related

Get number first and second and third from text line

I have the following format in my txt file:
1 1,30705856804525E-7 2,64163961816166E-8
1,12201845645905 1,24157281788939E-7 2,45690063849224E-8
1,25892543792725 1,18248813407718E-7 2,29960868125545E-8
1,41253757476807 1,13006606738963E-7 2,16654658657944E-8
1,58489322662354 1,0842624220686E-7 2,05472137082552E-8
1,77827942371368 1,04479198625995E-7 1,96135836461053E-8
1,99526226520538 1,01119816520168E-7 1,8839035220708E-8
2,23872113227844 9,82917924829962E-8 1,82003176973922E-8
2,51188635826111 9,59338279926669E-8 1,76765304615856E-8
2,81838297843933 9,39840489877497E-8 1,72491425587395E-8
3,16227769851685 9,23831819932275E-8 1,69019571671924E-8
3,54813385009766 9,10766573269939E-8 1,66210121221866E-8
3,98107171058655 9,00157104410937E-8 1,63944182673958E-8
4,46683597564697 8,91577514039454E-8 1,62121711611007E-8
5,01187229156494 8,8466336478632E-8 1,60659361370108E-8
5,6234130859375 8,7910699164695E-8 1,59488209305891E-8
6,30957365036011 8,74651959748007E-8 1,58551749507296E-8
7,07945775985718 8,71086527354237E-8 1,57803938805046E-8
7,94328212738037 8,68237393092386E-8 1,57207402651238E-8
8,91250896453857 8,65963372120859E-8 1,56731942979604E-8
10 8,64150138113473E-8 1,56353241465013E-8
11,2201843261719 8,62705391568852E-8 1,5605175818223E-8
I need to get only value for integers on left and right value so in this example I need to get:
1
2,64163961816166E-8
10
1,56353241465013E-8
This is what I've tried:
' Check Noise Spectral Density.txt exists
Set fso = CreateObject("Scripting.FileSystemObject")
If (fso.FileExists(fso.GetParentFolderName(WScript.ScriptFullName) + "\Projects\Noise Spectral Density.txt")) Then
' Open the file for input.
Set NoiseSpectralDensity = fso.OpenTextFile(fso.GetParentFolderName(WScript.ScriptFullName) + "\Projects\Noise Spectral Density.txt", 1)
' Noise Variables
Dim Noise
' Read from the file and display the results.
Do While NoiseSpectralDensity.AtEndOfStream <> True
' Read Line By Line
TextLine = NoiseSpectralDensity.ReadLine
' Check If Number
'If (IsNumeric(Left(TextLine, 5))) Then
' Get Noise
' Noise # 1kHz
Noise = Right(TextLine, InStr(Mid(TextLine, 2), InStr(TextLine, " ")-1))
x = MsgBox("SNR: " & Split(Left(TextLine, 5), " ")(0) & " NOISE: " & Noise & "",0, "Noise Spectral Density")
'End If
Loop
' Close the file for input.
NoiseSpectralDensity.Close
Else
x = MsgBox("Noise Spectral Density.txt NOT Found!" & vbCrLf & "Wave->Save As Text...", 0, "Noise Spectral Density")
End If
But I could not get left and right numbers in VBScript using Split(TextLine, " ")(0).
Your data seems to be tab-separated, so you could do something like this:
arr = Split(TextLine, vbTab)
If Not (InStr(arr(0), ",") > 0) Then
'first number doesn't have decimals
snr = arr(0)
noise = arr(2)
End If
Though the solution provided by #AnsgarWiechers should work but in case, if it doesn't, you can make use of regular expressions(Replace the whole Do-while loop with the following):
Set objReg = New RegExp
objReg.Pattern = "^(\d+)(?=\s).*\s+([\d,Ee-]+)$" 'See the explanation below
Do While NoiseSpectralDensity.AtEndOfStream <> True
'Read Line By Line
TextLine = NoiseSpectralDensity.ReadLine
' Check If Number
Set objMatches = objReg.Execute(TextLine)
For Each objMatch In objMatches
SNR = objMatch.submatches.item(0)
Noise = objMatch.submatches.item(1)
MsgBox "SNR: "&SNR&"; Noise: "&Noise
Next
Loop
Click for Regex Demo
Regex Explanation:
^ - asserts the start of the string
(\d+) - matches 1+ occurrences of a digit and captures it in Group 1
(?=\s) - positive lookahead to find the position immediately preceded by a white-space. So the digits in the step 2 will be matched until a whitespace(spaces,tabs etc.) is encountered
.* - matches 0+ occurrences of any character except a newline
\s+ - matches 1+ occurrences of a whitespace
([\d,Ee-]+) - matches 1+ occurrences of a digit or , or - or the letter E or e and capture it in group 2
$ - asserts the end of the string

Copying parts of the bar code and write to the file txt

I have a VBScript:
Dim Stuff, myFSO, WriteStuff, dateStamp
Stuff = "Whatever you want written"
Set myFSO = CreateObject("Scripting.FileSystemObject")
Set WriteStuff = myFSO.OpenTextFile("C:\Label_1\yourtextfile.txt", 8, True)
WriteStuff.WriteLine(var1)
WriteStuff.Close
SET WriteStuff = NOTHING
SET myFSO = NOTHING
which is placed in action in the key.
In the variable "var1" is read barcode reader, bar code EAN13 and after pressing a key to a text file "C:\Label_1\yourtextfile.txt"
is written to a new line with a value of "var1", ie. the bar code
2914750018247
Then again, when we will scan the bar code
2914750007463
and press the button
also will be saved in a text file.
Recording will look like this:
2914750018247
2914750007463
Of course, the scanned file "C:\Label_1\yourtextfile.txt" will be more, eg. 70 different codes but always EAN13.
How you can using VBScript copy or distribute 5 characters namely:
01824
00746
...
with previously stored all values (5 characters each) in the file "C:\Label_1\ yourtextfile.txt" and yet they all add up and save a new file txt when codes (with five characters each) will be just 70 in line?
Take a look at the below example, it processes the lines of source file and cut each line to substring:
sSrc = "C:\Users\DELL\Desktop\barcode.txt"
sDst = "C:\Users\DELL\Desktop\barcode_part.txt"
' Read content of the source file
sCont = ReadTextFile(sSrc, 0) ' ASCII
' Split source file string into array of lines
aLines = Split(sCont, vbCrLf)
' Loop through each of the lines in array
For i = 0 To UBound(aLines)
' Change the value of the element to cut substring
aLines(i) = Mid(aLines(i), 8, 5)
Next
' Join processed array into resulting string with line breaks
sCont = Join(aLines, vbCrLf)
' Write content to the destination file
WriteTextFile sCont, sDst, 0 ' ASCII
Function ReadTextFile(sPath, lFormat)
' lFormat -2 - System default, -1 - Unicode, 0 - ASCII
With CreateObject("Scripting.FileSystemObject").OpenTextFile(sPath, 1, False, lFormat)
ReadTextFile = ""
If Not .AtEndOfStream Then ReadTextFile = .ReadAll
.Close
End With
End Function
Sub WriteTextFile(sContent, sPath, lFormat)
' lFormat -2 - System default, -1 - Unicode, 0 - ASCII
With CreateObject("Scripting.FileSystemObject").OpenTextFile(sPath, 2, True, lFormat)
.Write sContent
.Close
End With
End Sub

Reading a specific line in a .txt file using Visual Basic 6

I am currently working on an EDI file and now I want to load and read only a specific line on a .txt file and put that in a textbox. Here is what my data would look like
ISA*00* *00* *01*MKT71 *01*ADEV04 *160331*1001*U*00501*300000001*0*P*>~
GS*IN*MKT71*ADEV04*20160331*1001*300000001*X*005010~
ST*810*300000001~
BIG*20160316*BS13435**NONE~
REF * BM * DHL-2162693540~
REF*CR*5201~
Now I want to put only the data DHL-2162693540 located in line number 5 of the .txt file in my Textbox1.
The easiest and most straightforward way to do this is to read the first however many lines, and only keep the value of the last line read.
Here is some code that accomplishes that:
Private Sub ReadLines()
Dim MyLine As String
Dim DataLineNumber As Integer
DataLineNumber = 5
Open "C:\YourFileNameHere.txt" For Input As DataFile
Do While Not EOF(1) And LineNumber <= DataLineNumber
Line Input #DataFile, MyLine
DataLineNumber = DataLineNumber + 1
Loop
Close DataFile
MsgBox MyLine
End Sub

combine pipe delimited lines of text in multiple lines with vbscript?

I've got a text file of output that looks essentially like this:
SMITHERSON, SMITH|00012345|15-Jan-1999|000885340
619649339|29-Sep-2015 00:09:30|Black|JOHNERSON, JOHN
00067890|02-Dec-1996|000490365|620094551
29-Sep-2015 23:06:01|Green|DAVISON, DAVE|00086543|06-Jun-2001|000938585
226438332|28-Sep-2015 00:12:12|Yellow
Seven pieces of data, they are always in the correct order but unfortunately they run together and onto different lines. There are carriage return + line feeds at the end of each line and there aren't pipe delimiters. The individual pieces of data are never split over multiple lines - I'm having a hard time explaining so here's another example:
DATA 1|DATA 2|DATA 3
DATA 4
DATA 5|DATA 6|DATA 7
DATA 1|DATA 2|DATA 3|DATA 4
DATA 5|DATA 6|DATA 7
etc...
They will have spaces between them but each piece of data will always stay on it's own line.
And I'm trying to turn it into this:
SMITHERSON, SMITH|00012345|15-Jan-1999|000885340|619649339|29-Sep-2015 00:09:30|Black
JOHNERSON, JOHN|00067890|02-Dec-1996|000490365|620094551|29-Sep-2015 23:06:01|Green
DAVISON, DAVE|00086543|06-Jun-2001|000938585|226438332|28-Sep-2015 00:12:12|Yellow
DATA 1|DATA 2|DATA 3|DATA 4|DATA 5|DATA 6|DATA 7
DATA 1|DATA 2|DATA 3|DATA 4|DATA 5|DATA 6|DATA 7
etc.
Seven pieces of data each on their own line, but still seperated by the '|' for another piece of software to read correctly.
I am spending about one hour every day correcting the text files by hand, so I've been trying to find an example I can work from to do this for a while but have not had any luck wrapping my head around this.
This code is ok. I only tested your sample text, not big files.
It will replace line feeds with the delimiter, then convert the entire file into one big array:
Set fso = CreateObject("Scripting.FileSystemObject")
Set input = fso.OpenTextFile("input.txt", 1)
Set output = fso.OpenTextFile("output.txt", 2, True)
Dim data: data = input.ReadAll
input.Close()
data = Replace(data, vbCrlf, "|")
data = Split(data, "|")
For i=0 To UBound(data) Step 7
output.WriteLine data(i) & "|" & data(i+1) & "|" & data(i+2) & "|" & data(i+3) & "|" & data(i+4) & "|" & data(i+5) & "|" & data(i+6)
Next
output.Close()
Untested, but something like this might do it. (Essentially it copies input to output as a stream, but newlines in the input are converted to pipe characters and every seventh pipe in the output is converted to a newline)
Set fs = CreateObject("Scripting.FileSystemObject")
Set f = fs.OpenTextFile("D:\data\thefile.txt", 1)
Set o = fs.OpenTextFile("D:\data\combined.txt", 2, True)
pipecount = 0
Do While f.AtEndOfFile <> True
If f.AtEndOfLine = True Then
c = f.Read(2) ' Skip the CR+LF
c = "|" ' and pretend we got a pipe character
Else
c = f.Read(1)
End If
If c = "|" Then
pipecount = pipecount + 1
If pipecount = 7 Then
pipecount = 0
o.WriteLine()
Else
o.Write("|")
End If
Else
o.Write(c)
End If
End While
o.Close()

File writing : carriage return and Tab

Hi i'm new to VB6 and i want to implement this : when a user is logged he enters his name and password , i should write it in a file.
Here's the file "authentification.txt" : it has the form of username password
bill hope
jessica 1234567
jhon 7654321
Here's the code :
Open "c:\authentification.txt" For Binary As #1
x = txtidentifiant.Text
y = txtmotdepasse.Text
Do While Not EOF(1)
Line Input #1, l
If l <> " " Then
Put 1, i, x & vbNewLine
Put 1, i + 1, y & vbNewLine
Else
//here i want to implement a carriage return in the file #1
End If
Loop
My problem is :that the file if filled like this : bhope
and it writes only the first line
You should use the Input and Print statements. They read and write comma delimited files, and are designed to be used in pairs, for just such an application.
Here's the new code :
Open "c:\authentification.txt" For Append As #1
x = txtidentifiant.Text
y = txtmotdepasse.Text
Print #1, x
Print #1, y
Close #1

Resources