using System;
using System.Text.RegularExpressions;
public class Example
{
public static void Main()
{
string pattern = @"^";
string input = @"class FinUrad
{
public string Kod { get; set; }
public string Nazev { get; set; }
public override string ToString()
{
return Nazev;
}
}
<Grid Margin=""20"">
<Grid.RowDefinitions>
<RowDefinition Height=""Auto""/>
<RowDefinition Height=""*""/>
<RowDefinition Height=""Auto""/>
</Grid.RowDefinitions>
<StackPanel Grid.Row=""0"" Margin=""0,0,0,10"">
<TextBlock Text=""Jméno:""/>
<TextBox x:Name=""txtJmeno"" Margin=""0,5,0,10""/>
<TextBlock Text=""Rodné číslo (XXXXXX/XXXX):""/>
<TextBox x:Name=""txtRC"" Margin=""0,5,0,10""/>
<TextBlock Text=""Finanční úřad:""/>
<ComboBox x:Name=""comboFinUrady"" DisplayMemberPath=""Nazev"" Margin=""0,5,0,10""/>
<TextBlock Text=""Zpráva:""/>
<TextBox x:Name=""txtZprava"" AcceptsReturn=""True"" Height=""80"" Margin=""0,5,0,10""/>
</StackPanel>
<StackPanel Grid.Row=""2"" Orientation=""Horizontal"" HorizontalAlignment=""Right"">
<Button x:Name=""btnZobrazitHistorii"" Content=""Zobrazit historii"" Click=""btnZobrazitHistorii_Click""/>
<Button x:Name=""btnOdeslat"" Content=""Odeslat"" Click=""btnOdeslat_Click""/>
</StackPanel>
</Grid>
public partial class MainWindow : Window
{
private ObservableCollection<FinUrad> urady = new();
private const string ApiUrl = ""https://csharp.janjanousek.cz/api/financni-urady/"";
private const string ApiKey = ""VSB"";
public MainWindow()
{
InitializeComponent();
LoadFinUrady();
}
private async void LoadFinUrady()
{
while (true)
{
try
{
using HttpClient client = new();
client.DefaultRequestHeaders.Add(""x-api-key"", ApiKey);
var response = await client.GetAsync(ApiUrl);
if (response.StatusCode == System.Net.HttpStatusCode.TooManyRequests)
{
if (response.Headers.TryGetValues(""Retry-After"", out var values))
{
int secods = int.Parse(values.First());
await Task.Delay(secods * 1000);
continue;
}
}
response.EnsureSuccessStatusCode();
var xmlString = await response.Content.ReadAsStringAsync();
var xml = XDocument.Parse(xmlString);
var polozky = xml.Descendants(""POLOZKA"");
foreach (var elem in polozky)
{
string id = elem.Element(""CHODNOTA"")?.Value;
string name = elem.Element(""ZKRTEXT"")?.Value;
if (!string.IsNullOrEmpty(id) && !string.IsNullOrEmpty(name))
{
urady.Add(new FinUrad { Kod = id, Nazev = name });
}
}
comboFinUrady.ItemsSource = urady;
comboFinUrady.SelectedIndex = 0;
break;
}
catch (Exception ex)
{
MessageBox.Show(""Chyba pri nacitani financnich uradu: "" + ex.Message);
break;
}
}
}
private void btnOdeslat_Click(object sender, RoutedEventArgs e)
{
string jmeno = txtJmeno.Text;
string rc = txtRC.Text;
var urad = comboFinUrady.SelectedItem as FinUrad;
string zprava = txtZprava.Text;
if(string.IsNullOrEmpty(jmeno) || string.IsNullOrEmpty(rc) || urad == null || string.IsNullOrEmpty(zprava) || zprava.Length < 10)
{
MessageBox.Show(""Všechna pole musí být vyplněna a zpráva musí mít alespoň 10 znaků."");
return;
}
if(!System.Text.RegularExpressions.Regex.IsMatch(rc, @""^\d{6}/\d{4}$""))
{
MessageBox.Show(""Rodné číslo musí mít formát 123456/1234."");
return;
}
SaveToDatabase(jmeno, rc, urad.Kod, urad.Nazev, zprava);
new ResultsWindow().Show();
}
private void btnZobrazitHistorii_Click(object sender, RoutedEventArgs e)
{
new ResultsWindow().Show();
}
private void SaveToDatabase(string jmeno, string rc, string idUrad, string nazevUrad, string zprava)
{
string dbPath = ""formulare.db"";
if(!File.Exists(dbPath))
{
using var connection = new SqliteConnection($""Data Source={dbPath}"");
connection.Open();
var cmd = connection.CreateCommand();
cmd.CommandText = @""
CREATE TABLE IF NOT EXISTS Formulare (
Id INTEGER PRIMARY KEY AUTOINCREMENT,
Jmeno TEXT NOT NULL,
RodneCislo TEXT NOT NULL,
IdUrad TEXT NOT NULL,
NazevUrad TEXT NOT NULL,
Zprava TEXT NOT NULL
)"";
cmd.ExecuteNonQuery();
}
using var conn = new SqliteConnection($""Data Source={dbPath}"");
conn.Open();
var insert = conn.CreateCommand();
insert.CommandText = @""
INSERT INTO Formulare (Jmeno, RodneCislo, IdUrad, NazevUrad, Zprava)
VALUES ($jmeno, $rc, $idUrad, $nazevUrad, $zprava)"";
insert.Parameters.AddWithValue(""$jmeno"", jmeno);
insert.Parameters.AddWithValue(""$rc"", rc);
insert.Parameters.AddWithValue(""$idUrad"", idUrad);
insert.Parameters.AddWithValue(""$nazevUrad"", nazevUrad);
insert.Parameters.AddWithValue(""$zprava"", zprava);
insert.ExecuteNonQuery();
}
}
<Grid>
<ListBox x:Name=""lstHistorie""/>
</Grid>
public partial class ResultsWindow : Window
{
public ResultsWindow()
{
InitializeComponent();
LoadData();
}
private void LoadData()
{
string dbPath = ""formulare.db"";
if (!File.Exists(dbPath)) return;
using var conn = new SqliteConnection($""Data Source={dbPath}"");
conn.Open();
var cmd = conn.CreateCommand();
cmd.CommandText = @""
SELECT Jmeno, RodneCislo, IdUrad, NazevUrad, Zprava
FROM Formulare"";
using var reader = cmd.ExecuteReader();
while (reader.Read())
{
lstHistorie.Items.Add($""Jméno: {reader.GetString(0)}, RČ: {reader.GetString(1)}, Úřad: {reader.GetString(2)}, Zpráva: {reader.GetString(3)}"");
}
}
}";
Match m = Regex.Match(input, pattern);
Console.WriteLine("'{0}' found at index {1}", m.Value, m.Index);
}
}
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for C#, please visit: https://msdn.microsoft.com/en-us/library/system.text.regularexpressions.regex(v=vs.110).aspx