|
From memory :
dim dt as new datatable("a name")
dt.columns.add(new datacolumn("column1",getttype(string)))
dt.columns.add(new datacolumn("column2",getttype(string)))
dt.columns.add(new datacolumn("column3",getttype(string)))
dt.columns.add(new datacolumn("column4",getttype(string)))
...
'now that you have your datatable
'read your textfile line by line
do while not reader.eof
dim dr as datarow = dt.newrow
dr.item("column1")= "your value for that column here"
dr.item("column2")= "your value for that column here"
dr.item("column3")= "your value for that column here"
dr.item("column4")= "your value for that column here"
...
dt.rows.add(dr)
loop
'now you have your entire textfile in a datatable
'you can do all your actions on that datatable now and then overwrite your textfile with a new one
hope this helps
|
|
|
|
|
what tool should i add from the toolbox to use this code???
is it a DataGridView or DataSet or something else.....
i feel like sitting in a dessert where there is nothing available...
my mind is completely blank.....
|
|
|
|
|
If you don't want to display the file on a form you don't need a tool
This
dim dt as new datatable("tablename")
create's the datatable
This
dt.columns.add(new datacolumn("column1",gettype(string)))
Create's a column within that datatable with the name 'column1' and datatype 'string'
this
dim dr as datarow = dt.newrow
create's a new row in the datatable
this
dr.item("column1")= "value goes here"
puts 'value goes here' into this new row in the column 'column1'
so you do the code I send you urlier
while reading your textfile (you already have that code) you fill the datatable.
Every line in your textfile is a new row (dim dr as datarow = dt.newrow) in your datatable.
Every "column" in your textfile is a column in your datatable
Once you have done this you can easily go over the datatable and add / delete / alter rows
for each dr as datarow in dt.rows
if (some check)=true then
'do something here
...
else
'do something else here
...
end if
next
and as last action just run over your datatable again and for every row you write a line to your textfile
|
|
|
|
|
|
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?
|
|
|
|
|