|
|
vijay2482 wrote: Do While Not sa.ReadToEnd
That's where its going wrong. Readtoend returns a string. When doing a check with 'not' in it you need to have a boolean type.
For reading the text file you have to use the code you already had. (nothing changes there) but instead of trying to do your alterations (delete/new/alter) inside that loop you just put your data (from the textfile) in the correct column in the datatable.
Then after you'v read the text file, you can do all your alterations on the datatable.
(A datatable is basicly the same as a table in sql or access)
|
|
|
|
|
|
You already wrote the code to read your text file and split every line in several parts (columns). You posted that a few post below.
Use that code but instead off altering your text you add the specific text to the correct column in the datatable.
After that you can start with doing your checks / alterations.
You have all the code you need to do this in front off you, you just need to put it together.
|
|
|
|
|
|
First off all this:
vijay2482 wrote: Dim dt As New DataTable("TextFile")
dt.Columns.Add(New DataColumn("column1", GetType(String)))
dt.Columns.Add(New DataColumn("column2", GetType(String)))
dt.Columns.Add(New DataColumn("column3", GetType(String)))
dt.Columns.Add(New DataColumn("column4", GetType(String)))
dt.Columns.Add(New DataColumn("column5", GetType(String)))
dt.Columns.Add(New DataColumn("column6", GetType(String)))
dt.Columns.Add(New DataColumn("column7", GetType(String)))
dt.Columns.Add(New DataColumn("column8", GetType(String)))
dt.Columns.Add(New DataColumn("column9", GetType(String)))
dt.Columns.Add(New DataColumn("column10", GetType(String)))
Has to go outside off your loop so before:
vijay2482 wrote: While sa.Peek() >= 0
the way you do it now you'll end up with only 1 line, since you recreate the datatable every new line
Second you haven't changed what I told you in last reply
vijay2482 wrote: Do While Not sa.ReadToEnd
This is giving you the error, you can not do this.
This should be close to what you need, you might have to some changes but search a little bit.
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim temp As String
Dim name As String
Dim comp As String
Dim desF As String
Dim desAF As String
Dim desA As String
Dim desAA As String
Dim ecn As String
Dim dnf As String
Dim repDNF As String
Dim repASM As String
Dim dt As New DataTable("TextFile")
dt.Columns.Add(New DataColumn("column1", GetType(String)))
dt.Columns.Add(New DataColumn("column2", GetType(String)))
dt.Columns.Add(New DataColumn("column3", GetType(String)))
dt.Columns.Add(New DataColumn("column4", GetType(String)))
dt.Columns.Add(New DataColumn("column5", GetType(String)))
dt.Columns.Add(New DataColumn("column6", GetType(String)))
dt.Columns.Add(New DataColumn("column7", GetType(String)))
dt.Columns.Add(New DataColumn("column8", GetType(String)))
dt.Columns.Add(New DataColumn("column9", GetType(String)))
dt.Columns.Add(New DataColumn("column10", GetType(String)))
'now that you have your datatable
'read your textfile line by line
Try
Using sw As StreamWriter = New StreamWriter("c:\DB\output222.txt")
Using sa As StreamReader = New StreamReader("c:\DB\01530501.txt")
temp = sa.ReadLine()
name = temp.Substring(0, 29)
comp = temp.Substring(30, 18)
desF = temp.Substring(49, 32)
desAF = temp.Substring(82, 38)
desA = temp.Substring(120, 35)
desAA = temp.Substring(156, 33)
ecn = temp.Substring(190, 10)
dnf = temp.Substring(201, 7)
repDNF = temp.Substring(208, 9)
repASM = temp.Substring(217, 8)
sw.WriteLine(name & comp & desF & desAF & desA & desAA & ecn & dnf & repDNF & repASM)
sw.WriteLine(sa.ReadLine())
While sa.Peek() >= 0
temp = sa.ReadLine()
dim dr as datarow = dt.newrow
dr.Item("column1") = temp.Substring(0, 29)
dr.Item("column2") = temp.Substring(30, 18)
dr.Item("column3") = temp.Substring(49, 32)
dr.Item("column4") = temp.Substring(82, 38)
dr.Item("column5") = temp.Substring(120, 35)
dr.Item("column6") = temp.Substring(156, 33)
dr.Item("column7") = temp.Substring(190, 10)
dr.Item("column8") = temp.Substring(201, 7)
dr.Item("column9") = temp.Substring(208, 9)
dr.Item("column10") = temp.Substring(217, 8)
'DO NOT DO THIS HERE
'sw.WriteLine()
End While
End Using
End Using
'go over your datatable
For Each dr As DataRow In dt.Rows
'do your alterations here
'warning you cannot do a delete row inside this loop so if you
'need to delete the row store it in a list (dim bla as new list(of datarow))
'and after this loop go over that list to delete the rows you don't need
Next
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub
|
|
|
|
|
|
vijay2482 wrote: what does this part of the code do?
that goes over every line in your datatable (so every line in your textfile)
You'll have to do some research into datatables
Here are a few methods from a datatable that you'll need:
0: datatable.select
1: datatable.Rows.remove
2: datatable.Rows.removeat
3: datatable.Rows.InsertAt
4: datatable.Rows.IndexOf
5: datatable.Rows(index).item("columnname")
These are just a few but should get you close to your desired end result.
Research them (use google), test them, and use them.
|
|
|
|
|
thanks for that..
will comeback soon after going through datatable...
thanks for all ur help...
|
|
|
|
|
You have more patience than I do, Tom!
|
|
|
|
|
Well it was a slow day at work yesterday, and I was in a good mood (unfortunately that has changed to a bad mood today)so...
|
|
|
|
|
i have similar problem of yours, reading txt file.
what i did is i import first the text file to database using Microsoft Text Driver
then thats the time u can have a query string. u use StreamWriter and its a very long process.
try this:
Dim constring as string = "Driver={Microsoft Text Driver (*.txt; *.csv)};Dbq=" & c:\DB\output222.txt & "\;Extensions=asc,csv,tab,txt;"
ssql = "SELECT yourField FROM yourTexFile
txtcon= New ADODB.Connection
txtcon.ConnectionString = constring
txtcon.CursorLocation = ADODB.CursorLocationEnum.adUseClient
txtcon.Open()
C# コードMicrosoft End User
2000-2008
「「「「「「「「「「「「「「「「「「「「「「「「「「「「
The best things in life are free
」」」」」」」」」」」」」」」」」」」」」」」」」」」」
|
|
|
|
|
i have similar problem of yours, reading txt file.
what i did is i import first the text file to database using Microsoft Text Driver
then thats the time u can have a query string. u use StreamWriter and its a very long process.
try this:
Dim constring as string = "Driver={Microsoft Text Driver (*.txt; *.csv)};Dbq=" &c:\DB\output222.txt & "\;Extensions=asc,csv,tab,txt;"
ssql = "SELECT yourField FROM yourTexFile
txtcon= New ADODB.Connection
txtcon.ConnectionString = constring
txtcon.CursorLocation = ADODB.CursorLocationEnum.adUseClient
txtcon.Open()
C# コードMicrosoft End User
2000-2008
「「「「「「「「「「「「「「「「「「「「「「「「「「「「
The best things in life are free
」」」」」」」」」」」」」」」」」」」」」」」」」」」」
|
|
|
|
|
thanks for that code...
but i cannot use Ms Access for my development...
anyways will definitly give it a try..
|
|
|
|
|
Break it apart in simpeler tasks, and start by reading the textfile. There are lots of ways to solve this, but you'll have to make a start somewhere, so why not by reading the text?
Once you can post that code, we can look where we're going to put step 2
I are troll
|
|
|
|
|
this is the code i have written sofar.
Private Function Groupe_Flex_Cable()
Dim temp As String
Dim name As String
Dim comp As String
Dim desF As String
Dim desAF As String
Dim desA As String
Dim desAA As String
Dim ecn As String
Dim dnf As String
Dim repDNF As String
Dim repASM As String
Dim NbOfSpaces As Integer = 0
Dim Grp As Boolean = False
Dim a As String = " "
Dim b As String = " "
Dim l As Integer
Dim lpFlex As Integer = 0
Dim lpCable As Integer = 0
Dim Nb As Integer = 2
Dim Current_desf As String = ""
Try
Using sw As StreamWriter = New StreamWriter("c:\DB\output11.txt")
Using sa As StreamReader = New StreamReader("c:\DB\01530501.txt")
temp = sa.ReadLine()
name = temp.Substring(0, 29)
comp = temp.Substring(30, 18)
desF = temp.Substring(49, 32)
desAF = temp.Substring(82, 38)
desA = temp.Substring(120, 35)
desAA = temp.Substring(156, 33)
ecn = temp.Substring(190, 10)
dnf = temp.Substring(201, 7)
repDNF = temp.Substring(208, 9)
repASM = temp.Substring(217, 8)
sw.WriteLine(name & comp & desF & desAF & desA & desAA & ecn & dnf & repDNF & repASM)
sw.WriteLine(sa.ReadLine())
While sa.Peek() >= 0
temp = sa.ReadLine()
name = temp.Substring(0, 29)
comp = temp.Substring(30, 18)
desF = temp.Substring(49, 32)
desAF = temp.Substring(82, 38)
desA = temp.Substring(120, 35)
desAA = temp.Substring(156, 33)
ecn = temp.Substring(190, 10)
dnf = temp.Substring(201, 7)
repDNF = temp.Substring(208, 9)
repASM = temp.Substring(217, 8)
If name.Contains("Groupe") Then
Grp = True
NbOfSpaces = NbOfCar(name, " ") + 2
ElseIf Grp And NbOfCar(name, " ") = NbOfSpaces Then
sw.WriteLine(name.Remove(0, 2) & comp.Insert(0, a) & desF & desAF & desA & desAA & ecn & dnf & repDNF & repASM)
Else
Grp = False
lpFlex = name.IndexOf("_FLEX")
lpCable = name.IndexOf("_CABLE")
If lpFlex <> -1 Or lpCable <> -1 Then
l = name.IndexOf(".")
If lpCable = -1 Then
sw.WriteLine(name.Substring(0, lpFlex) & name.Substring(l, (name.Length - l)) & comp.Insert(0, b) & desF & desAF & desA & desAA & ecn & dnf & repDNF & repASM)
Else
sw.WriteLine(name.Substring(0, lpCable) & name.Substring(l, (name.Length - l)) & comp.Insert(0, b) & desF & desAF & desA & desAA & ecn & dnf & repDNF & repASM)
End If
Current_desf = Trim(desF)
temp = sa.ReadLine()
Do While Current_desf = Trim(desF)
name = temp.Substring(0, 29)
desAF = temp.Substring(82, 38)
desA = temp.Substring(120, 35)
desAA = temp.Substring(156, 33)
ecn = temp.Substring(190, 10)
dnf = temp.Substring(201, 7)
repDNF = temp.Substring(208, 9)
repASM = temp.Substring(217, 8)
comp = temp.Substring(30, 18)
desF = temp.Substring(49, 32)
temp = sa.ReadLine()
Loop
l = name.IndexOf(".")
If l <> -1 Then
sw.WriteLine(name.Substring(0, l) & name.Substring(l, (name.Length - l)) & comp & desF & desAF & desA & desAA & ecn & dnf & repDNF & repASM)
Else
sw.WriteLine(name)
End If
Else
l = name.IndexOf(".")
If l <> -1 Then
sw.WriteLine(name.Substring(0, l) & name.Substring(l, (name.Length - l)) & comp & desF & desAF & desA & desAA & ecn & dnf & repDNF & repASM)
End If
End If
End If
End While
End Using
End Using
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Function
it will read a file, search for the word "Groupe" move the lines below "Groupe" towards left by 2 space characters...
then checks for _Flex or _Cable and deletes the lines below that line...
so reading a file is not a problem...
i dont know how to put it into a data table and group the similar lines and write it as a single line and enter a new fieldname called Quantity and enter the value of similar lines in the Quantity field...
|
|
|
|
|
Tom's has already posted a detailed idea on how to add the desired functionality. Might I add that it's easier to write small functions that tackle small problems?
If you state that you want "..and.. ..and.. or.. and.." then your thinking about the big picture. That's good when you're architecting things, but it's not helping when you have to write a specific detail. Try breaking the wishes apart and write a method for each
I are troll
|
|
|
|
|
1) count similar lines
2) enter the count of similar lines in a new fieldname called Quantity
3) delete the similar linesleavinng one line with the fieldname Quantity
these are the things i want to do...
there are 4 fields to be considered to find the similarity of the lines
ie.,
the name,dnf,rep_dnf and rep_asm in the lines having same values should be counted and entered in the quantity field...
|
|
|
|
|
1) Load all lines in a datatable
2) count similar lines (select distinct with a group by and a count?)
3) enter the count of similar lines in a new fieldname called Quantity
4) writing the new lines to a file
Tom has given you a starting point to get all the lines in a datatable. I'd focus on achieving that step first
I are troll
|
|
|
|
|
Parse it, line by line. When you put it in the form of an item into a list, check to see if the list already contains the item. If it doesn't, write the line to a MemoryStream or byte array. Every n items, or at the end of the file, write the MemoryStream to the same file with FileMode.Create
|
|
|
|
|
There have been **many** suggestions on how to resolve your problem since you began posting this question almost a month ago (and its numerous reposted versions since 3/9).
Part of being a developer is taking the initiative and actually trying any of the suggestions made by other forum members. Another part of being a dev is knowing when to step back and realize when your making something harder than it really needs to be.
Stop....break the task into smaller tasks.....and concentrate on each of those until the problem is solved. A caffeine refill here and there has never been known to hurt either.
Any suggestions, ideas, or 'constructive criticism' are always welcome.
"There's no such thing as a stupid question, only stupid people." - Mr. Garrison
|
|
|
|
|
I have many items in a Listbox and would like to be able to search through them by simply typing the first couple characters however it looks like only the first char is evaluated. Is there a setting I am missing or a better control to use?
|
|
|
|
|
Yes, it only works with the first char. You'll have to write your own code to do that, and it makes sense if you accept a string, that you show it. The current behaviour doesn't have any possibility of a typo, it just keeps re-searching. But, if you search on more than one char, the user needs to see what they typed and be able to edit it.
Christian Graus
Driven to the arms of OSX by Vista.
"I am new to programming world. I have been learning c# for about past four weeks. I am quite acquainted with the fundamentals of c#. Now I have to work on a project which converts given flat files to XML using the XML serialization method" - SK64 ( but the forums have stuff like this posted every day )
|
|
|
|
|
crap...that's what i feared
|
|
|
|
|
Hi,
After having created a new SQL server database in VB 2008 I am unable to perform a drag and drop for a datagrid of the table. When trying to drop the datagrid on a form it comes back with the following message:
An error occurred while performing the drop:
Illegal characters in path.
I recently followed the instruction videos of MSDN and was able to do it just fine. After a lenghty search for some references I needed I might have changed some setting in the process I am not sure. However I did reset all the environment settings to "factory" default and at witts end even uninstalled/installed VB2008express. I must say that at some point I had an error
on reset telling me it could not find "XML..."(can't remember the exact phrase anymore), but eventually it restored fine.
I do not have any code to show as it already happens just creating an .mdf/ making a table in a new project and trying to drop the datagrid onto the form. If someone could help me out or provide inspiration it would be appreciated.
All the best,
Robbert
|
|
|
|
|