Liczenie wygranych drużyny na podstawie wyników zapisanych w łańcuchu.

0

Napisałem program , który pobiera z pliku tekstowego wyniku meczów, wiem już jak wydobyć z niego nazwę drużyny. Niestety nie za bardzo wiem w jaki sposób stworzyć z tego algorytm ,który mi wskaże na podstawie wyniku ,która drużyna wygrała. Bardzo proszę o naprowadzenie mnie jak otrzymać takie rozwiązanie.

using System.Threading.Tasks;
using System.Text.RegularExpressions;

namespace konwersja90minut
{
    class Program
    {
        static void Main(string[] args)
        {

            string sezon14_15 = System.IO.File.ReadAllText(@"C:\Users\micha\OneDrive\Pulpit\Sezony\sezon2014_2015.txt");
            string team1 = "Korona Kielce";
            string team2 = "Pogoń Szczecin";
   

            foreach (Match match in Regex.Matches(sezon14_15, team1, RegexOptions.IgnoreCase))
            {
              // tutaj docelowo planowałem zrobić porównywanie wyniku
            }

            Console.ReadKey();
        }

    }

}

Program napisałem na razie w taki sposób ,że liczy wystąpienie słów

Wyniki zapisane są w pliku txt w takiej postaci:

Górnik Łęczna	1-1	Wisła Kraków	18 lipca, 20:30 (5025)
Tomasz Nowak 28 - Maciej Sadlok 41
Górnik Zabrze	2-0	Cracovia	21 lipca, 18:00 (3000)
Błażej Augustyn 5, Mateusz Zachara 90
Jagiellonia Białystok	2-2	Lechia Gdańsk	19 lipca, 18:00 (5782)
Patryk Tuszyński 6, 29 - Piotr Wiśniewski 45, Marek Wasiluk 69 (s)
Lech Poznań	4-0	Piast Gliwice	20 lipca, 15:30
Vojo Ubiparip 19, 84, 90, Dawid Kownacki 36
bez udziału publiczności
Legia Warszawa	0-1	GKS Bełchatów	19 lipca, 20:30 (8699)
Bartosz Ślusarski 45
Podbeskidzie Bielsko-Biała	2-3	Pogoń Szczecin	18 lipca, 18:00 (3250)
0

może zapisz wyniki do dwóch zmiennych
do x1 i x2

i jeśli x1<x2
to wydrukuj, że wygrała drużyna x2
jeśli x1>x2
to drużyna x1
jeśli x1 == x2
to remis

0
Phoryn napisał(a):

może zapisz wyniki do dwóch zmiennych
do x1 i x2

i jeśli x1<x2
to wydrukuj, że wygrała drużyna x2
jeśli x1>x2
to drużyna x1
jeśli x1 == x2
to remis

Tzn samą logikę jak to wykonać jak najbardziej rozumiem tylko nie wiem w jaki sposób się "Dobrać" do tego wyniku. Tzn jak zapisać ten wynik do zmiennej itd.

0
michau0709 napisał(a):
Phoryn napisał(a):

może zapisz wyniki do dwóch zmiennych
do x1 i x2

i jeśli x1<x2
to wydrukuj, że wygrała drużyna x2
jeśli x1>x2
to drużyna x1
jeśli x1 == x2
to remis

Tzn samą logikę jak to wykonać jak najbardziej rozumiem tylko nie wiem w jaki sposób się "Dobrać" do tego wyniku. Tzn jak zapisać ten wynik do zmiennej itd.

Co u ciebie w forze zwraca match? Jaki typ?

0
Phoryn napisał(a):
michau0709 napisał(a):
Phoryn napisał(a):

może zapisz wyniki do dwóch zmiennych
do x1 i x2

i jeśli x1<x2
to wydrukuj, że wygrała drużyna x2
jeśli x1>x2
to drużyna x1
jeśli x1 == x2
to remis

Tzn samą logikę jak to wykonać jak najbardziej rozumiem tylko nie wiem w jaki sposób się "Dobrać" do tego wyniku. Tzn jak zapisać ten wynik do zmiennej itd.

Co u ciebie w forze zwraca match? Jaki typ?

For u mnie szuka w łancuchu wystąpienia zmiennej team1

1

Ja bym zrobił to tak: Każdy wers wrzuciłbym do listy stringów.
Zawsze na na 1 i 2 miejscu masz nazwę pierwszej drużyny, na 3 wynik i na 4 i 5 drugiej drużyny.
wystarczy wtedy, że przekonwertujesz 3 na int i masz(przy konwersji musić zignorować myślnik)

Tu masz fajny temat:

1

Możesz skorzystać z regexa. Na przykład coś na styl takiego rozwiązania:

string months = "stycznia|lutego|marca|kwietnia|maja|czerwca|lipca|sierpnia|września|października|listopada|grudnia";
string pattern = @"(.+?)(\d+)-(\d+)(.+?)\d+\s(" + months + ")";
Regex regex = new Regex(pattern,RegexOptions.IgnoreCase);


string[] lines = input.Split('\n');
foreach(string line in lines)
{
    Match match = regex.Match(line);
    if (!match.Success)
        continue;
    string firstTeam = match.Groups[1].Value;
    bool success = int.TryParse(match.Groups[2].Value, out int firstTeamScore);
    success = int.TryParse(match.Groups[3].Value, out int secondTeamScore);
    string secondTeam = match.Groups[4].Value;

    if (firstTeamScore > secondTeamScore)
        Console.WriteLine($"Wynik spotkania: {firstTeamScore}-{secondTeamScore} w meczu '{firstTeam}' vs '{secondTeam}'. Wygrywa: '{firstTeam}'");
    else if(firstTeamScore < secondTeamScore)
        Console.WriteLine($"Wynik spotkania: {firstTeamScore}-{secondTeamScore} w meczu '{firstTeam}' vs '{secondTeam}'. Wygrywa: '{secondTeam}'");
    else
        Console.WriteLine($"Wynik spotkania: {firstTeamScore}-{secondTeamScore} w meczu '{firstTeam}' vs '{secondTeam}'. Remis");

}

0

A w jaki sposób mógłbym zmienić ten kod aby podawał mi wyniki tylko tych meczu ,które podam za pomocą Console.ReadLine() ?

1
michau0709 napisał(a):

A w jaki sposób mógłbym zmienić ten kod aby podawał mi wyniki tylko tych meczu ,które podam za pomocą Console.ReadLine() ?

Poprawiłem pattern, żeby nie wczytywał białych znaków na początku/końcu nazwy drużyny.

string pattern = @"(.+?)\s+(\d+)-(\d+)\s+(.+?)\s+\d+\s(" + months + ")";
Console.WriteLine("Podaj nazwy drużyn oddzielone przecinkiem");

var searchForTeams = Console.ReadLine().Split(',');
if(searchForTeams.Length!=2)
    Console.WriteLine("Złe dane");
//Dodaj to do pętli przed wypisaniem drużyn:
if (!(searchForTeams[0] == firstTeam && searchForTeams[1] == secondTeam))
    continue;

1 użytkowników online, w tym zalogowanych: 0, gości: 1