|
We all went through that phase. x = y or z is natural in the way of human thinking.
|
|
|
|
|
Hey developers.
Now before i even get to the asking, id like you to know that am a total n00b to programming, so please try to phrase your answers in the simplest form also... (in a form i like to think of as 'idiot-proof' )
THE CHALLENGE
Now, I'm trying to create a small program which is required to locate the occurences of any pre-determined character, word, block of characters, basically any search strings, which is entered by a user in a textbox.The search string should be highlighted in some way in the plain text file (.txt).
When a user instigates a search, all occurences of matching the string should be recorded & stored into suitable array. This array should build up information about the occurences in the text of a number of strings and at any stage in a session, a user may request a summary of all this information to display in such a way to show the frequency in the text of each search string.
I'm using a Rich Text Box control to hold the text and the IndexOf method to for the search function. Am also using the Stream reader function to import the text file and am also planning to use it to write to a separate text file.
MY SOLUTION (which is flopping a whole lot more than i expected... )
Using the above controls and methods (RichTextBox, StreamReader, IndexOf)i've created a simple user interface and in it i've written the following code:
'Import missing system class libraries
Imports System.Text.RegularExpressions
Public Class frmMain
Public Function SearchText(ByVal textToFind As String, _
Optional ByVal startPosition As Integer = 0, Optional _
ByVal endPosition As Integer = 0, Optional _
ByVal highlightText As Boolean = True, Optional _
ByVal matchCase As Boolean = False) As Integer
'
'Contains the return value of the search. IT it returns -1, then a match was not found.
Dim i As Integer
Dim LastWordinRichText As Integer
Dim fromFirstWord As Integer
LastWordinRichText = rtbContent.Text.LastIndexOf(textToFind)
For fromFirstWord = 0 To LastWordinRichText
txtIndexLocation.Text = startPosition
If endPosition < 1 Then
If Not matchCase Then
textToFind = textToFind.ToLower
Dim temp As String = rtbContent.Text.ToLower
i = temp.IndexOf(textToFind, startPosition, Me.Text.Length)
Else
i = rtbContent.Text.IndexOf(textToFind, startPosition, Me.Text.Length)
End If
Else
If matchCase = False Then
textToFind = textToFind.ToLower
Dim temp As String = rtbContent.Text.ToLower
i = temp.IndexOf(textToFind, startPosition, endPosition)
Else
i = rtbContent.Text.IndexOf(textToFind, startPosition, endPosition)
End If
End If
If i > -1 Then
If highlightText Then
rtbContent.Focus()
rtbContent.SelectionStart = i
rtbContent.SelectionLength = textToFind.Length
End If
startPosition = startPosition + 1
End If
'
'Returns the position where the text was found , otherwise it will report -1 which
'means that the search string was not found.
Next
Return i
End Function
Private Sub tsExit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tsExit.Click
Me.Close()
End Sub
Private Sub btnSearch_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSearch.Click
SearchText(txtSearch.Text)
End Sub
Private Sub NewSessionToolStripMenuItem_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles NewSessionToolStripMenuItem.Click
'Open a new file dialog box to browse for a text file which can be opened for analysis.
'Variable declaration
Dim Open As New OpenFileDialog()
Dim myStreamReader As System.IO.StreamReader
Open.Filter = "Plain Text Files (*.txt)|*.txt|All files (*.*)|*.*"
Open.CheckFileExists = True
Open.ShowDialog(Me)
Try
Open.OpenFile()
myStreamReader = System.IO.File.OpenText(Open.FileName)
rtbContent.Text = myStreamReader.ReadToEnd()
Me.Text = "Text Editor - " & Open.FileName
Catch ex As Exception
' Do nothing on Exception
End Try
End Sub
Private Sub SaveCurrentSessionToolStripMenuItem_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles SaveCurrentSessionToolStripMenuItem.Click
'Open a new dialog box to save current session file.
Dim Save As New SaveFileDialog()
Dim myStreamWriter As System.IO.StreamWriter
Save.Filter = "Text Files (*.txt)|*.txt|All files (*.*)|*.*"
Save.CheckPathExists = True
Save.ShowDialog(Me)
Try
myStreamWriter = System.IO.File.AppendText(Save.FileName)
myStreamWriter.Write(txtSearch.Text)
myStreamWriter.Flush()
Me.Text = "Text Editor - " & Save.FileName
Catch ex As Exception
' Do nothing on Exception
End Try
End Sub
End Class
MY PROBLEM
Nothing works. Except for the importing of text files function, nothing else works. I think its something to do with the Public SearchText function which is triggered by clicking on the search button (btnSearch). i've gone over the code again and again, but the thing won't crack.
Someone please examine the code and point me in the right direction, and if possible suggest alternative ways to do using still the same controls and methods. All help, tips, tricks and suggestions will be highly appreciated. And if there is a similar request which i might have missed when i was searching the threads, please give me the link to the thread.
Thanks y'all.
Steve.
You can email me on nexxus89@hotmail.com
Live it. Learn it.
|
|
|
|
|
Have you tried debugging line by line?
Regards,
Thomas Stockwell
Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots. So far, the Universe is winning.
Visit my homepage Oracle Studios
Discounted or Free Software for Students:
DreamSpark - downloads.channel8.msdn.com
MSDN Academic Alliance - www.msdnaa.com
|
|
|
|
|
Hi,
I have to develop application where I need to read a file and create a report and then print it on any printer on LAN. I am free to write in any way. I think of using crystalreport supplying data from incoming file. But the crystal report doesnt take any text file as data source. Also when i print through windows service, it always give default printer not selected. Please advice how should i build this solution ? An eraly reply would be highly appreciated.
Thanks!!!
|
|
|
|
|
I think I would create a "properties/Settings" app that allows you to select the output printer and store the details in the registry.
Then write your windows service that gets the details from the registry for printing, therefore you can tell Crystal what printer to use rather than the default printer.
With regards to the text file, I would load the text into a Typed Dataset then pass the dataset to crystal as the data source.
Steve Jowett
-------------------------
It is offen dangerous to try and see someone else's point of view, without proper training. Douglas Adams (Mostly Harmless)
|
|
|
|
|
Hi Steve,
Thanks for the reply. I am new to VB programming, can you also provide some code to me.
Thnks in advance.
|
|
|
|
|
Jai Bihar wrote: can you also provide some code to me
To do what?
Steve Jowett
-------------------------
It is offen dangerous to try and see someone else's point of view, without proper training. Douglas Adams (Mostly Harmless)
|
|
|
|
|
for selecting ouput printer and writing and reading details from registry
|
|
|
|
|
Use the PrintDialog control from the ToolBox to select your printer.
I have posted an example of reading the registry here[^]. You should be able to work out how to write the selected printer to the registry, if you look at the Microsoft.Win32.Registry namespace and the ReadEntry Function in the link provided.
Steve Jowett
-------------------------
It is offen dangerous to try and see someone else's point of view, without proper training. Douglas Adams (Mostly Harmless)
|
|
|
|
|
Hi to all,
my problem is hopefully not too stupid, but we do not get the following situation solved:
There are several assemblies :
A, B, C and D
B has references to C and D.
If I perform NUNIT testing against assembly B everything works fine.
Now I wish to test assembly A which references assembly B.
The assemly compiles without errors or warnings and terminates at a certain point with a
"FileNotFound" - Exception that is fired by the CLI because assembly D is not found.
If you look in \bin\debug or \bin\release assembly D is missing; from that point of view the exception is OK.
What I really do not understand is the fact that the missing assembly is not copied into the local AppPath as the others.
All references point to the .dll in the \bin\release - path and have the "local copy" option activated.
If I add a reference to assembly D in assembly A everything works fine.
I would have expected to find assembly D automatically in the \bin path for assembly A.
Environment:
VS2005, .Net 2.0, VB.Net
Thanks in advance for any help.
Regards
Thomas
modified on Friday, May 23, 2008 7:36 AM
|
|
|
|
|
Can somebody tell me the code how to scan a registry.
|
|
|
|
|
Assuming you're using VB .Net, seeing as you don't actually say, take a look at the Registry classes in the Microsoft.Win32.Registry namespace.
|
|
|
|
|
Hey frnd i want to know that in VB there is no registry inbuilt fn. Rite???
In Vb.net i import namespace imports.win32
tell me dat how to create the object for registry class.
|
|
|
|
|
I'm sorry, I don't understand what you mean. Are you working with Visual Basic .NET or Visual Basic 6 (or earlier)?
|
|
|
|
|
I m working with .Net, I want to know from where to start as i do not have any idea.After creating the object,what is the next step.
|
|
|
|
|
As I'm not aware of what your trying to achieve, overall, I can't really suggest anything except taking a look at the MSDN documentation for the classes and finding something that meets your needs. Google is also your friend if you have a specific aim in mind that someone might have done before. Then, if you've got a specific question, ask again. Like most people here I won't give out code until you've got something to show you've had a go yourself first.
To give a pointer, though, the Registry Object includes members that encapsulate the various parts of the Registry, and you can loop over them like any other Collection.
|
|
|
|
|
The following code demonstrates how to read a registry entry. You should be able to build on it to incorporate Write, Delete etc.
Public Enum Root As Byte<br />
CurrentUser = 1<br />
LocalMachine = 2<br />
CurrentConfig = 3<br />
ClassesRoot = 4<br />
Users = 5<br />
End Enum<br />
<br />
Function ReadEntry(ByVal RegistryRoot As Root, ByVal Location As String, ByVal Name As String) As String<br />
Dim regKey As Microsoft.Win32.RegistryKey<br />
Select Case RegistryRoot<br />
Case Root.CurrentUser<br />
regKey = Microsoft.Win32.Registry.CurrentUser.OpenSubKey(Location)<br />
Case Root.LocalMachine<br />
regKey = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(Location)<br />
Case Root.CurrentConfig<br />
regKey = Microsoft.Win32.Registry.CurrentConfig.OpenSubKey(Location)<br />
Case Root.ClassesRoot<br />
regKey = Microsoft.Win32.Registry.ClassesRoot.OpenSubKey(Location)<br />
Case Root.Users<br />
regKey = Microsoft.Win32.Registry.Users.OpenSubKey(Location)<br />
Case Else<br />
regKey = Nothing<br />
End Select<br />
If regKey Is Nothing Then<br />
ReadEntry = Nothing<br />
Else<br />
Try<br />
ReadEntry = regKey.GetValue(Name).ToString<br />
regKey.Close()<br />
Catch<br />
Return Nothing<br />
End Try<br />
End If<br />
End Function
Steve Jowett
-------------------------
It is offen dangerous to try and see someone else's point of view, without proper training. Douglas Adams (Mostly Harmless)
|
|
|
|
|
hi
I got problem while retrieving records from the active directives
using ado.net code .There are nearly 5000 records ,but I am getting only
1000 records for any search .What may be reason ..please help.
This is the code used for retrieving..
<br />
Dim command As New OleDbCommand("<" & strSearchADsPath & ">", Con)<br />
Dim adap As New OleDbDataAdapter(Command)<br />
Dim cb As New OleDbCommandBuilder(adap)<br />
Dim ds As New DataSet<br />
adap.Fill(ds, "tabUser") <br />
Thanks
Chaitanya
|
|
|
|
|
Hey Chaitanya,
I think you will find the answer on this page[^].
Looks like the trick is along the lines of specifying a value for command.Properties("Page Size") .
Hope this helps.
|
|
|
|
|
Yeah you are when using VB6 but I want to get it in VB.NET
|
|
|
|
|
I have a database field (SQL Server) which is stored as RTF
(e.g.)
{\rtf1\ansi\ansicpg1252\deff0\deflang1033{\fonttbl{\f0\fnil\fcharset0 Microsoft Sans Serif;}} \viewkind4\uc1\pard\f0\fs17 This is the text string.\par }
The user has to be able to search on this field, but at the moment the WHERE clause in the SQL
(e.g.)
WHERE Field1 LIKE '%view%'
would return the above record.
Is there anyway to search the RTF field, but only match what in in the displayed text???
Thanks,
the_smiths.
|
|
|
|
|
I doubt it very much. I expect you need to add a plain text column to your DB
Christian Graus
Please read this if you don't understand the answer I've given you
"also I don't think "TranslateOneToTwoBillion OneHundredAndFortySevenMillion FourHundredAndEightyThreeThousand SixHundredAndFortySeven()" is a very good choice for a function name" - SpacixOne ( offering help to someone who really needed it ) ( spaces added for the benefit of people running at < 1280x1024 )
|
|
|
|
|
Ask your question in the SQL Server forum. I believe you may be able to incorporate a Regular Expression in a Stored Procedure or View to remove the RTF formatting from the result of the text column containing the RTF code.
You could then search on the raw text.
I may be leading you up a blind alley, in which case I appologise, but I am fairly sure it can be done.
Steve Jowett
-------------------------
It is offen dangerous to try and see someone else's point of view, without proper training. Douglas Adams (Mostly Harmless)
|
|
|
|
|
If the data already exists in a remote SQL database to which you can only connect via a 300-baud modem link, then it may be useful to have a script that can convert the RTF-formatted document into text-only. Otherwise, my strong suspicion would be that while you could search for non-RTF text within the RTF document using a sufficiently-intricately-constructed query, the performance would be so much worse than searching in a text-only field that the approach should be considered infeasible for anything but the smallest databases.
Searching for text within the RTF field would require that the server convert every record's RTF data into text format every time a search was run. The server's inherent caching facilities wouldn't be able to help much. The only way to usefully cache the converted texts would be to create a new table to hold them; if you're going to do that, you may as well hold them in the original table.
Returning to vb:
-1- What is the best way to extract the text from RTF?
-2- Is there any good way to put a huge amount of formatted text into a RichTextBox, or is that control simply unsuitable for dealing with monstrous (multi-megabyte) files? Using a StringBuilder to make an RTF string was reasonably fast, but importing a large RTF into a RichTextBox can take a really long time--there seems to be something that's O(n^3) or worse that kicks in with big files.
|
|
|
|
|
This belongs in the SQL Server forum.
However, one solution (assuming you have full control over the database server) is to use the free-text search functionality available in SQL Server (even in MSDE with the add-on feature pack available nowadays).
You need to download and install an IFilter driver for RTF - there is one available from Microsoft (search for "ifilter" and "rtf").
You also have to:
a) make the field binary (image) and add a "file type" field containing the string ".RTF" on all rows that contain rtf data.
b) enable free-text indexing on the database and the table (specifying the relevant fields).
c) use free-text search predicates instead of "LIKE" (such as FREETEXT, CONTAINS...).
As an added bonus, you can install IFilters for other file formats, such as PDF (available from Adobe).
Look here[^] for information and examples.
Peter the small turnip
(1) It Has To Work. --RFC 1925[^]
|
|
|
|