|
This one is tricky, that's for sure. I'm looking for a way to generate strings based on a regular expression.
I tried several searches on google and the only stuff that turned up was a library called Grail+ and some perl module genex.
Before I'm going to hack my way into integrating perl into my C# application I want to make sure that I haven't missed a library that does what I need.
Is there anyone who has done this before or knows a library which can help me with this?
WM.
What about weapons of mass-construction?
"What? Its an Apple MacBook Pro. They are sexy!" - Paul Watson
My blog
|
|
|
|
|
Are you just trying to generate random strings that match the regex? What could this possibly be used for? I doubt such functionality is already in the .Net framework, but I am not certain. You could create your own state machine based on a regex, then getting a random string is done trivially by randomly choosing paths from one state to another until you arrive at one of the success states (unless you want to bound or specify the resulting string's length). Anyway, good luck, and let us know if you find a solution elsewhere.
Sounds like somebody's got a case of the Mondays
-Jeff
|
|
|
|
|
Indeed, I want to generate random strings that match the regex. I'm generating random data for a database which has some fields that need to match to a specific pattern. I'm pretty sure .NET doesn't have the functionality I'm looking for.
I think creating my own state machine is indeed the best way to go around this, however it's not going to be easy and there is a problem with the max length of strings. I need to find a way to limit the length of the data generated by the * and + operator otherwise this is impossible to do.
Thanks nonetheless
WM.
What about weapons of mass-construction?
"What? Its an Apple MacBook Pro. They are sexy!" - Paul Watson
My blog
|
|
|
|
|
Here is how I would implement it, if I were going to do what you describe (where 'n' is the desired length of the result):
1. Build a directed graph of your regex with nodes==state and edges==allowed state transitions
2. Build a structure containing the number of steps that can be made from
any one state to any other that is <= the length of your result (2d matrix of lists)
3. Randomly choose an acceptance state (named 'as') where your connectivity matrix
indicates you can go from the start state to the final state in exactly n transitions.
4. Iterate through the following (initialize cur = startStateNode) until your string is found:
a. Set 'n' to 'n-1'
b. Out of all of the nodes reachable from 'cur' in one move,
eliminate those that can not reach 'as' in 'n' moves
c. Choose one of the resulting nodes in the collection found in (b) Once you finish with this process, you will have a randomly generated string matching your regex. Note, however, that strings produced do NOT have equal probability of being chosen. For example, if your regex is, say "(Becky|a\w*)", then "Becky" will result half of the time, whereas words beginning with the letter "a" (this set is clearly much larger) would take the other half. Choosing one at random with equal probability would require you to find ALL matching strings of your given length first, then choosing one of those strings at random (or, you could use graph theory and weight each choice by the number of possible ways to arrive at the destination in the required number of moves). Whatever you decide, I hope you can see that this is clearly not a trivial computation, and it will require a significant (IMO) source of man-hours to code. Good luck,
Sounds like somebody's got a case of the Mondays
-Jeff
|
|
|
|
|
Thanks for the outline, it got me thinking about how regex parsers are actually build. I found some old material on how to write your own regex parser and I'm going to use that for my library.
My plan is to implement a partial regex parser. This parser will be constructing an NFA of the regex expression and convert it to a DFA.
After that I'm going to determine which parts of the DFA will have a fixed length, those parts will need to be generated first. When these parts are generated I will be filling up the rest of the string with the other variable length parts, starting with the operator + (You need at least one if these) and after that the * operator.
WM.
What about weapons of mass-construction?
"What? Its an Apple MacBook Pro. They are sexy!" - Paul Watson
My blog
|
|
|
|
|
Does anybody have sample project of code for creating simple TaskDialogs in framework 2.0, without any unsafe/unmanaged code?
Thanks.
|
|
|
|
|
If you are referring to the TaskDialog provided by Vista, the only way to do this in .NET is to use interop to the Win32 APIs. There are several examples of how to do that here on CP. There are also some examples that show how to make a TaskDialog-like dialog. Search Results[^]
Scott.
—In just two days, tomorrow will be yesterday.
—Hey, hey, hey. Don't be mean. We don't have to be mean because, remember, no matter where you go, there you are. - Buckaroo Banzai
[ Forum Guidelines] [ Articles] [ Blog]
|
|
|
|
|
I am trying to read the columns in a selected gridview row. The column value is 760 but when I rund it I get "Blaaaaa". I also tryed doing a while statement before the if statement but that didnt' work either. Below is the code:
public void GridView1_SelectedIndexChanged(Object sender, EventArgs e)
{
GridViewRow row = GridView1.SelectedRow;
string cmopid = row.Cells[1].Text;
string Packageid = row.Cells[2].Text;
string carrier = row.Cells[3].Text;
if (cmopid == "760")
{
Labeltest.Text = "Good to Go";
}
else
{
Labeltest.Text = "Blaaaaaa";
}
}
|
|
|
|
|
change the following line as indicated:
Labeltest.Text = "Blaaaaaa";
Labeltest.Text = string.Format("{0}; {1}; {2}", cmopid, Packageid, carrier); Then debug by seeing what results you get, and where they are comming from.
Sounds like somebody's got a case of the Mondays
-Jeff
|
|
|
|
|
I did that and I got the right values:
xxx;sss;zzz
|
|
|
|
|
So it is working?
Sounds like somebody's got a case of the Mondays
-Jeff
|
|
|
|
|
Well, it does seem to be working but there is something wrong. The first value is 760 so why don't I get "Good to Go".
|
|
|
|
|
My guess is that the value is not really "760". I bet there is an extra character in there, like a space or a tab or something. Check the ".Length" property on the value that looks like it is "760", and I bet it is not 3. If this is correct, then just call the ".Trim()" method on the string prior to comparison to remove extraneous whitespace.
Sounds like somebody's got a case of the Mondays
-Jeff
|
|
|
|
|
You are a life saver, thanks so much. It just needed trimmed.
|
|
|
|
|
I want to know more about C#, I have a project about the "Website Mapper", Use C# language, I don't know how to realizing the function. How to use C# realizing graphic website map, This is my Question. Thank you very much.
Project Description:Represent in a graphical form the hyper linking of web pages and evaluate the status of all links from a web site.
WebSite Mapper analyzes the contents of a web site, and create the hyperlinked sitemap
|
|
|
|
|
If I understand your question you wish to automatically create a site map?
If so - this[^] is written in PHP, but it may be a good starting point.
|
|
|
|
|
My Question is: Which C# Controls will use realize the graphic website map? at Vs2003 or VS2005 development tool.
the controls can show the Static or 3D GRAPHIC ?
Question description: When you scan any website map, search the website map, and than show the graphic(static or 3D) website map?
Thanks
I don't know the PHP, I just know the C# or asp.Net
|
|
|
|
|
Hi, all:
I'm using a PrintPreviewControl to create a thumbnail document view for users. Everything works fine, except for the small MessageBox that gives the page count flashes.
Is there a way to suppress this MessageBox (or, at least, a clever work around to hide it)? This is w/VS2008 (if that matters).
(Also, where do I go to find out this stuff on my own?)
Thanks,
Balboos
"The difference between genius and stupidity is that genius has its limits." - Albert Einstein
"How do you find out if you're unwanted if everyone you try to ask tells you to go away?" - Balboos HaGadol
|
|
|
|
|
hi
unfortunately you can not.
PrintPreviewControl uses System.WindowsForms.PrintControllerWithStatusDialog initialized with System.Drawing.Printing.PreviewPrintController as underlying Controller to display the Preview.
the only thing you could do would be to write your own PrintPreview - Control.
you can find this out by using Reflector. it's a great tool if you want to take a look how things are done in the framework. it's frustrating sometimes but always very helpful
greets
m@u
|
|
|
|
|
Thanks for the news, even if it's bad. At least I needn't keep looking for an answer.
Your suggestion about creating my own printPreviewControl. Makes me wonder what I can use to show the mini-facsimile of the screen. Also makes me wonder why MS doesn't let these things be under programmer control.
A strategy I'm consider is to pixelize the image and then draw on the Form. It doesn't seem worth it - especially since I'm reasonably sure I'd not have accesss to the printPreviewControl bitmap, either.
Balboos
"The difference between genius and stupidity is that genius has its limits." - Albert Einstein
"How do you find out if you're unwanted if everyone you try to ask tells you to go away?" - Balboos HaGadol
|
|
|
|
|
Hi,
I want to serialize a List<int> so that it looks like:
<br />
<ArrayOfProductIds><br />
<ProductId>1</ProductId>><br />
</ArrayOfProductIds><br />
Or if this is too difficult:
<br />
<ArrayOfProductIds><br />
<int>1</int>><br />
</ArrayOfProductIds><br />
But...I want to be able to deserialize the XML back to a List<int>.
|
|
|
|
|
Create a new class that inherits from List<int>, has the attribute [Serializable], and implements either IXmlSerializable or ISerializable (depending on how you will serialize it). This will enable you to control the xml created/read when serializing or deserializing. Hope this helps,
Sounds like somebody's got a case of the Mondays
-Jeff
|
|
|
|
|
I have written this code to read the XML
<br />
public void ReadXml(System.Xml.XmlReader reader)<br />
{<br />
reader.ReadStartElement();<br />
<br />
while (reader.ReadToNextSibling("ShoppingListItemId"))<br />
{<br />
this.Add(reader.ReadElementContentAsInt());<br />
}<br />
}<br />
When I read the following it works fine:
"<ArrayOfShoppingListItemId>\r\n<ShoppingListItemId>1</ShoppingListItemId>\r\n</ArrayOfShoppingListItemId>"
But when I get back a string from the database without the '\n' and '\r' it skips the while loop? Why is it doing that?
"<ArrayOfShoppingListItemId><ShoppingListItemId>1</ShoppingListItemId></ArrayOfShoppingListItemId>"
|
|
|
|
|
Would it be a problem if I installed .Net 1.0 and 2.0 on the same machine?
thanx
|
|
|
|
|
Hi,
you can install all .NET versions side-by-side, they don't interact.
Vista comes with most of them preinstalled.
You can install several Visual Studio versions side-by-side; they don't interact except
the one installed last will be launched when double-clicking one of the relevant
file extensions (such as .cs).
|
|
|
|