write content to notepad in specified format with separator - vb.net

i want to create a notepad in this format
100001|10001|1001|91|9942321400|MR|Hari|Q|PUBLIC|249 MUNDON ROAD|MALDON|FL|44|TN|NO_PROVINCE|600004|IN|M|27304|9942321400|test#test.com|nothing|COMMENTS|1|Southeast
100001|10001|1001|91|9865015695|MR|Hari|Q|PUBLIC|249 MUNDON ROAD|MALDON|FL|44|TN|NO_PROVINCE|600004|IN|M|27304|9942321400|test#test.com|nothing|COMMENTS|1|Southeast
100001|10001|1001|91|9894825469|MR|Hari|Q|PUBLIC|249 MUNDON ROAD|MALDON|FL|44|TN|NO_PROVINCE|600004|IN|M|27304|9942321400|test#test.com|nothing|COMMENTS|1|Southeast
am using vb.net,in the above format except phone number remaining values are same.and it would be written in to the notepad with pipeline separator.
phone number values are recieved from dataset and store it in a variable . with in looping am use stream writer statement. but am not able to get the output. please help me to do this? am new to vb.net

Try something like that to write your file.
Import System.IO and add that routine. The Path should be the complete path including the file name and extension of the file you want to generate. If you change False to True it will append the text at the final of the file if you write it again, with false it overwrite it.
Using writer As StreamWriter = New StreamWriter(path, False, System.Text.Encoding.UTF8)
for each ...
writer.writeLine(var1+"|"+var2...)
Next
writer.Close()
End Using

Related

VB writeline writes corrupt lines to text file

Is it possible for the following code to produce NUL values within a text file?
var temp_str = "123456;1234567"
My.Computer.FileSystem.WriteAllText(Path & "stats.txt", temp_str, False)
It seems simple, but it writes quite often and I'm seeing several files that get accessed by the application that have Strings written to as:
When opening the file with Notepad++. Some other editors show just squares, and it seems like each character is represented by a block/NUL.
So far I've been unable to reproduce this on my test system. I just find the files on a COMX module's file system that's been running in the field and comes back faulty, but I've been seeing enough of these files to make it a problem that needs to be solved.
Does anyone have an idea to prevent this behaviour?
Hard to say what the problem is without more code, but try this if you want to replace the existing contents of the file:
Dim fileContent = "My UTF-8 file contents"
Using writer As IO.StreamWriter = IO.File.CreateText(fullPathIncludingExtension)
writer.Write(fileContent)
End Using
Or this if you want to append UTF-8 text:
Dim newLines = "My UTF-8 content to append"
Using writer As IO.StreamWriter = IO.File.AppendAllText(fullPathIncludingExtension)
writer.Write(fileContent)
End Using
If you want to append Unicode text, you must use a different constructor for StreamWriter:
Using writer As IO.StreamWriter = New IO.StreamWriter("full/path/to/file.txt", True, Text.Encoding.Unicode)
writer.Write(MyContentToAppend)
End Using
Note that the True argument to the constructor specifies that you want to append text.

Visual basic write in an opened file (printLine)

So I want to do this:
Open file "this.txt"
Write a line to this file (replacing anything else written to this file)
[Other stuff, irrelevant to the file]
Write a line to this file (replacing anything else written to this file)
Close the file
I thought it would be easy, but I was wrong. I tried many ways, but they all failed. Either they wouldn't let me write in an open file, or they would open the file and immediately close it (WriteAllText).
I ended up using FileOpen(), PrintLine() and FileClose() which lets me write in an open file but PrintLine only writes a new line, it doesn't replace everything in the file. Any help? Either with the printline or the whole thing
It is crucial that the file stays open until the very last moment I want it closed, (cause I have another program checking to see when this file is not open/used).
If this is about VB.NET, then you can use File.Open() with mode = FileMode.Truncate. This clears the file on opening. This assumes that the file exists.
You can also use SetLength() to truncate:
Dim f As FileStream
' FileMode.Truncate also works, but the file needs to exist from before
f = File.Open("test.txt", FileMode.OpenOrCreate, FileAccess.Write)
f.SetLength(0) ' truncate to zero size
Dim line As String = "hello2"
Dim w = New StreamWriter(f)
w.WriteLine(line)
w.Flush()
w.Close()
f.Close()
If this is about VB6, check out this question. One solution there is to import and use a native Windows function that does truncation.
In VB.Net OpenTextFileWriter does exactly what you need (docs):
Dim file As System.IO.StreamWriter
file = My.Computer.FileSystem.OpenTextFileWriter("c:\test.txt", False)
file.WriteLine("Here is the first string.")
file.Close()

Cannot export to .txt whilst it's being used (vb)

I am trying to outside text to a log file for my application. But every time it tries I get the error shown in the image :/
Here is the code I'm using:
Dim exporter As New StreamWriter("C:\log.txt")
exporter = My.Computer.FileSystem.OpenTextFileWriter("c:\log.txt", True)
exporter.WriteLine(log)
exporter.Close()
Try to do that (This code will replace de entire file. if you want to append, you'll need to read de actual value and then write or just use the append function):
Using exporter = New StreamWriter("C:\log.txt")
exporter.WriteLine(log)
End Using
The issue happens because you are using the file two times. The first one when you put New StreamWriter, e the second one when you OpenTextFileWriter before close the first one.

How to search data in a txt file through Visual Basic

I have this txt file with the following information:
National_Insurence_Number;Name;Surname;Hours_Worked;Price_Per_Hour so:
eg.: aa-12-34-56-a;Peter;Smith;36;12
This data has been inputed to the txt file through a VB form which works totally fine, the problem comes when, on another form. This is what I expect it to do:
The user will input into a text box the employees NI Number.
The program will then search through the file that NI Number and, if found;
It will fill in the appropriate text boxes with its data.
(Then the program calculates tax and national insurance which i got working fine)
So basically the problem comes telling the program to search that NI number and introduce each ";" delimited field into its corresponding text box.
Thanks for all.
You just need to parse the file like a csv, you can use Microsoft.VisualBasic.FileIO.TextFieldParser to do this or you can use CSVHelper - https://github.com/JoshClose/CsvHelper
I've used csv helper in the past and it works great, it allows you to create a class with the structure of the records in your data file then imports the data into a list of these for searching.
You can look here for more info on TextFieldParser if you want to go that way -
Parse Delimited CSV in .NET
Dim afile As FileIO.TextFieldParser = New FileIO.TextFieldParser(FileName)
Dim CurrentRecord As String() ' this array will hold each line of data
afile.TextFieldType = FileIO.FieldType.Delimited
afile.Delimiters = New String() {";"}
afile.HasFieldsEnclosedInQuotes = True
' parse the actual file
Do While Not afile.EndOfData
Try
CurrentRecord = afile.ReadFields
Catch ex As FileIO.MalformedLineException
Stop
End Try
Loop
I'd recommend using CsvHelper though, the documentation is pretty good and working with objects is much easier opposed to the raw string data.
Once you have found the record you can then manually set the text of each text box on your form or use a bindingsource.

How to : streamreader in csv file splits to next if lowercase followed by uppercase in line

I am using asp.Net MVC application to upload the excel data from its CSV form to database. While reading the csv file using the Stream Reader, if line contains lower case letter followed by Upper case, it splits in two line . EX.
Line :"1,This is nothing but the Example to explanationIt results wrong, testing example"
This line splits to :
Line 1: 1,This is nothing but the Example to explanation"
Line 2:""
Line 3:It results wrong, testing example
where as CSV file generates right as ""1,This is nothing but the Example to explanationIt results wrong, testing example"
code :
Dim csvFileReader As New StreamReader("my csv file Path")
While Not csvFileReader.EndOfStream()
Dim _line = csvFileReader.ReadLine()
End While
Why should this is happening ? how to resolve this.
When a cell in an excel spreadsheet contains multiple lines, and it is saved to a CSV file, excel separates the lines in the cell with a line-feed character (ASCII value 0x0A). Each row in the spreadsheet is separated with the typical carriage-return/line-feed pair (0x0D 0x0A). When you open the CSV file in notepad, it does not show the lone LF character at all, so it looks like it all runs together on one line. So, in the CSV file, even though notepad doesn't show it, it actually looks like this:
' 1,"This is nothing but the Example to explanation{LF}It results wrong",testing example{CR}{LF}
According to the MSDN documentation on the StreamReader.Readline method:
A line is defined as a sequence of characters followed by a line feed ("\n"), a carriage return ("\r"), or a carriage return immediately followed by a line feed ("\r\n").
Therefore, when you call ReadLine, it will stop reading at the end of the first line in a multi-line cell. To avoid this, you would need to use a different "read" method and then split on CR/LF pairs rather than on either individually.
However, this isn't the only issue you will run into with reading CSV files. For instance, you also need to properly handle the way quotation characters in a cell are escaped in CSV. In such cases, unless it's really necessary to implement it in your own way, it's better to use an existing library to read the file. In this case, Microsoft provides a class in the .NET framework that properly handles reading CSV files (including ones with multi-line cells). The name of the class is TextFieldParser and it's in the Microsoft.VisualBasic.FileIO namespace. Here's the link to a page in the MSDN that explains how to use it to read a CSV file:
http://msdn.microsoft.com/en-us/library/cakac7e6
Here's an example:
Using reader As New TextFieldParser("my csv file Path")
reader.TextFieldType = FieldType.Delimited
reader.SetDelimiters(",")
While Not reader.EndOfData
Try
Dim fields() as String = reader.ReadFields()
' Process fields in this row ...
Catch ex As MalformedLineException
' Handle exception ...
End Try
End While
End Using