dodawanie tekstu do pliku

Odpowiedz Nowy wątek
2019-03-15 09:36
0

Witam potrzebuję pomocy.
Głównie chodzi o to że mój program ma za zadanie czytać duży blok tekstu, rozdzielać go na poszczególne zdania i te zdania dzielić na części indeksując go od 1 do 10. I tutaj jest moje pytanie, jak to zrobić... Na pewno jest gdzieś to w internecie ale nie mogę tego znaleźć.
I druga część problemu: Jak po każdym wypisaniu zdani (Z podzielonego pliku) na końcu dodać kropkę. Zrobić to jakoś w pętli ?
Za wszelkie odpowiedzi byłbym bardzo wdzięczny.

Pozostało 580 znaków

2019-03-15 15:33
0

A co do numerowania zdań chodziło o to że jest kilka artykułów odseparowanych numerami bądź kilkoma odstępami "spacją" to już do wyboru. I jak zrobić żeby zdania numerowalo tylko do końca danego artykułu a od następnego się żerowalo? Jakaś podpowiedź była by idealna

Pozostało 580 znaków

2019-03-15 15:34
0

Indeksowaniem w stylu 1) zdanie 2) zdanie itp

Przecież już Ci to zrobiłem. Jeśli nie rozumiesz rozwiązania, to zapytaj o konkretne jego części. - ŁF 2019-03-15 22:55

Pozostało 580 znaków

2019-03-15 18:36
0

Wrzuć przykładowy tekst i pokaż jak to ma wyglądać na wyjściu.

Pozostało 580 znaków

2019-03-15 23:03
0

Witam jako nowy na forum.

Z tego co czytam, to masz kilka artykułów odseparowanych "czymś".
Więc pierw rozbij tekst na artykuły, a dopiero potem artykuły na zdania.
Kod poglądowy (nie testowałem), dla uproszczenia na pętlach.

            // Twój plik.
            string wczytanyTekst = "";
            // Zastanów się czym oddzielone są artykuły? Czy jest to unikalne? Bo taki split to może być za mało.
            string separatorArtykulow = "separator";
            // Napisałeś, że masz parę artykułów, więc zacznij od podzielenia tekstu na te artykuły.
            string[] artykuly = wczytanyTekst.Split(new string[] {separatorArtykulow}, StringSplitOptions.None);
            string[] zdaniaArtykulu;
            int numerZdania = 1;
            string indeks;
            string wyjscie = "";
            // Iterujemy po artykułach, żeby móc sobie w obrębie jednego numerować łatwo zdania.
            foreach (var artykul in artykuly)
            {
                // Ale musimy mieć te zdania, więc ten jeden artykuł dzielimy na nie.
                zdaniaArtykulu = artykul.Split(new string[] { ". ", "? ", "! " }, StringSplitOptions.None);
                foreach (var zdanie in zdaniaArtykulu)
                {
                    indeks = numerZdania.ToString() + ")";
                    wyjscie += indeks + zdanie + ". ";
                    numerZdania++;
                }
                // Każdy artykuł ma być od początku numerowany, więc resetujemy licznik.
                numerZdania = 1;
            }
Czytałeś cały temat? Znów tu jest ten sam problem, że z pytań robisz zdania oznajmujące. - Sarrus 2019-03-18 10:34
Dobra uwaga, umknęło mi to, dzięki. - Dyzma 2019-03-18 20:27

Pozostało 580 znaków

2019-03-17 00:26
0

Może wczytaj cały tekst do jednej listy - będziesz miał odniesienie
nastepnie do każdej z list wczytaj osobno zdania z kropką, zdania z pytajnikiem z wykrzyknikiem
Wyświetlaj w kolejności jakie są w liście odniesienia zdania z list z pytajnikiem lub kropką itp

ewentualnie stwórz dictionary
i w dictionary zapisz znaki jakie są dla każdego zdania
oczywiście dictionary będziesz musiał posortować po kolejności zdań, które masz w liście takiej jak na początku mojej wypowiedzi czyli odniesienia

Pozostało 580 znaków

2019-03-18 10:44
0
Sarrus napisał(a):

Spróbuj coś takiego:

List<string> GetSentences(string input)
{
    var regex = new Regex(".*?[\\.!?]");
    var match = regex.Match(input);
    var list = new List<string>();
    while (match.Success)
    {
        var value = match.Value.Trim();
        if (value != string.Empty)
            list.Add(value);
        match = match.NextMatch();
    }
    return list;
}

I nie odpowiadaj na temat w komentarzach bo potem ciężko się połapać. Komentarze są do offtopu

Mariusz Liszewski napisał(a):

Ok i ja jakiej zasadzie to działa? Żebym bezmyślnie nie przepisywał bo to się mija z celem.

To wykorzystuje wyrażenie regularne. W skrócie przy każdym przejściu pętli brane jest wszystko do wystąpienia znaku ., ? lub !. Każde niepuste zdanie dodawane jest do listy.
Widać jednak tutaj wadę, że gdy będą wyjątki typu ?! lub ... to będziesz miał zdania z samym pytajnikiem, albo samymi kropkami. Ten problem zostawiam jako zadanie domowe.

Jeżeli nie chcesz używać wyrażeń regularnych, możesz jeszcze użyć metod String.IndexOf oraz String.Substring

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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