Title: Rearrange text and format it to initialize variables in C#
This example takes three columns of strings, rearranges them so the values in each column are together, and reformats the results to produce text that you can use to initialize variables.
The Shakespeare Insult Kit contains a table holding three columns of words. To generate a Shakespeare-style insult, you pick one word from each column and combine them. I wanted to write a program to do this, but the data isn't in the right format to initialize variables. The web page lists the data in three columns of text. I need it in the form of code to initialize variables that are string arrays, one for each column.
The program uses the following code to include the insult data as a large string. (I just copied and pasted this into the program. Many values are omitted here to save space.)
// The data (from http://www.pangloss.com/seidel/shake_rule.html).
private string all =
@"artless base-court apple-john
bawdy bat-fowling baggage
beslubbering beef-witted barnacle
bootless beetle-headed bladder
...
yeasty weather-bitten wagtail";
When you click the Switch button, the following code executes.
// Switch rows and columns.
private void btnSwitch_Click(object sender, EventArgs e)
{
// Split the data into lines.
string[] newline = { "\r\n" };
string[] lines = all.Split(newline,
StringSplitOptions.RemoveEmptyEntries);
// Split the lines into words.
int num_rows = lines.Length;
int num_cols = 3;
string[,] words = new string[num_rows, num_cols];
for (int row = 0; row < num_rows; row++)
{
string[] space = { " " };
string[] line_words = lines[row].Split(space,
StringSplitOptions.RemoveEmptyEntries);
for (int col = 0; col < num_cols; col++)
{
words[row, col] = line_words[col];
}
}
// Generate the output.
string result = "";
for (int col = 0; col < num_cols; col++)
{
result += " private string[] Column" +
col.ToString() + " =\r\n";
result += " {\r\n";
for (int row = 0; row < num_rows; row++)
{
result += " \"" +
words[row, col] + "\",\r\n";
}
result += " };\r\n\r\n";
}
// Display the result.
txtResult.Text = result;
}
First, the code uses the string class's Split method to split the original big string into lines separated by the carriage return line feed combination \r\n.
Next, the program creates a two-dimensional array to hold the three words in each line of text. It loops over each row and save the row's words in the array.
The program then generates C# code to initialize variables to hold the data. For column numbers 0 through 2, it creates code that looks like this:
private string[] Column0 =
{
"artless",
"bawdy",
"beslubbering",
...
};
The code finishes by displaying the result.
My next post will use this code as data for a Shakespeare insult generator.
Download the example to experiment with it and to see additional details.
|