Jak wyświetlić ilość zliczonych już linijek w richTextBoxie?

0

Mam taki oto fragment kodu:

 
for (int i = 0; i < richTextBox1.Lines.Length; i++)
                        {
                            string linijki = richTextBox1.Lines[i];
                            string[] slowa = Linia.Split(new Char[] { ' ', ',', '.', '!', '?', '\t' });

                            
                        }
 string linijka = richTextBox1.Lines[i]; 

Kod zlicza linie i moje pytanie: Jak wyświetlić ilość zliczonych już linijek? Gdy próbuję zrobic coś takiego: label1.Text = linijki; wtedy pisze: "The name 'linijki' does not exist in the current context"

I następne pytanie: jak wyświetlić dany element z tablicy o nazwie "słowa" - tak aby tą tablicę przeszukiwać w poszukiwaniu danego wyrazu?

1

Nie masz dostępu do linijki, bo deklarujesz ją w ciele pętli for. Zadeklaruj ją przed nią. Nie rozumiem drugiego pytania? Chcesz znaleźć jakiś wyraz w tablicy slowa? Poza tym co ma zmienna linijki deklarowana za każdym razem w for i ustawiana na linijkę z licznika do ilości pętli?

0

Mam teraz coś takiego:

string linijki;
            for (int i = 0; i < richTextBox1.Lines.Length; i++)
            {
                linijki = richTextBox1.Lines[i];
                string[] slowa = linijki.Split(new Char[] { ' ', ',', '.', '!', '?', '\t' });


            }
            textBox1.Text = linijki;

Jak przepisać ilość linii do textboxa/labela? W ten sposób "textBox1.Text = linijki;" Pisze "Error Use of unassigned local variable 'linijki'". Wytłumaczy ktoś?

1
string linijki;
int licznik=0;
for (int i = 0; i < richTextBox1.Lines.Length; i++)
{
                linijki = richTextBox1.Lines[i];
                string[] slowa = linijki.Split(new Char[] { ' ', ',', '.', '!', '?', '\t' });
   if (slowa.Length>0) licznik++; else break;
 
}
textBox1.Text = licznik.ToString();//wypisuje ilość linii tekstu

O to CI chodziło? Poddaję się, przecież richTextBox1.Lines.Length zwraca ilość linii ;/ Kompletnie nie kapuję o co ci chodzi.

1

Mam pewien problem ze zrozumieniem, czego dokładnie potrzebujesz.

Error Use of unassigned local variable 'linijki'

string linijki = String.Empty;
for (int i = 0; i < richTextBox1.Lines.Length; i++)
{
    linijki = richTextBox1.Lines[i];
    string[] slowa = linijki.Split(new Char[] { ' ', ',', '.', '!', '?', '\t' });
}
textBox1.Text = linijki;
1

Error Use of unassigned local variable 'linijki' dostajesz ten błąd, bo twoja pętla nie musi się wykonać, więc jak się nie wykona, to jak chcesz przypisać coś co nie ma wartości? Zrób tak: string linijki = "";, wtedy w razie nie wykonania pętli nic się nie doda. Ale już mówiłem co ma ta zmienna do liczby linijek? Wstaw sobie przed pętlą zmienną int linijki = 0; i w pętli ją inkrementuj linijki++. Za pętlą po prostu przypisz textBox1.Text = linijki.ToString();.

0

Perfect! Dziękuję bardzo o to mi chodziło. Chcę teraz znaleźć jakiś wyraz w tablicy słowa. Przeszukuję normalnie tablicę w ten sposób?

 if (slowa[i]=zmianna;) [...]

Czy jest może jakaś funkcja która mi to ułatwi?

1
slowa.Contains("dupa");
 
0

Po dodaniu:

 slowa.Contains("dupa"); 

wyskakuje błąd "The name 'slowa' does not exist in the current context". Rozumiem że trzeba to gdzieś zadeklarować? Można przeszukiwać tablicę inny sposób? Miesza mi się z PHP ten cały C#.

0

Pokaż kod,bo może źle to umieściłeś. slowa to zadeklarowane już masz w pętli for

0

zadeklaruj slowa przed pętlą

1
for (int i = 0; i < richTextBox1.Lines.Length; i++)
{
    linijki = richTextBox1.Lines[i];
    // V tutaj zmienna slowa zaczyna swoje życie
    string[] slowa = linijki.Split(new Char[] { ' ', ',', '.', '!', '?', '\t' });
} // <-- tu je kończy, i tak z każdą pętlą...

---------------------------------------------------------------
Chyba chodzi Ci o coś takiego:

private bool isWord(char firstChar)
{
    // Jeśli pierwszy znak w łańcuchu należy do zbioru liter a..z lub A..Z
    // wtedy można uznać, że dany łańcuch jest słowem.
    return (firstChar >= 65 && firstChar <= 90) || (firstChar >= 97 && firstChar <= 122);
    // Ten kod nie daje 100% gwarancji, ale zawsze coś ;)
}
// Liczba słów
int wordCount = 0;

string[] words = richTextBox1.Text.Trim().Split(new Char[] { ' ', '\t', '\n' });

// Jeśli dany element nie jest pusty i spełnia warunek funkcji isWord
// to zwiększamy licznik o 1.
foreach (string word in words)
    wordCount += word != "" && isWord(word[0]) ? 1 : 0;
            
textBox1.Text = String.Format("Ilość słów: {0} | Ilość linii: {1} | Zawiera \"dupa\": {2}",
    wordCount, richTextBox1.Lines.Length, words.Contains("dupa"));
0
if (slowa.Contains("dupa") == true)
            {
                textBox1.Text = "Wyraz istnieje";
            }
if (slowa.Contains("dupa") == richTextBox1.Lines[0])
            {
                
                textBox1.Text = "Wyraz istnieje";
            }

Jak sprawdzić czy w danej linijce, wyraz lub litera istnieje?

0
string[] words = richTextBox1.Lines[0].Trim().Split(new Char[] { ' ', '\t', '\n' });

textBox1.Text = words.Contains("dupa") ? "Wyraz dupa jest w tej linii (1)" : "Nie ma";
0
 int a = richTextBox1.Lines.Length;
            string[] slowa = new string[a];
            string linijki;
            int licznik = 0;

            for (int i = 0; i < richTextBox1.Lines.Length; i++)
            {
                linijki = richTextBox1.Lines[i];
                slowa = linijki.Split(new Char[] { ' ', ',', '.', '!', '?', '\t' });
                if (slowa.Length > 0) licznik++; else break;
            }

            label1.Text = richTextBox1.Text.Length.ToString() + " znaków";
            label3.Text = licznik.ToString() + " linii"; // wypisuje ilość linii tekstu 

Chcę by wypisywało ilość słów do label2. Macie jakiś pomysł?

textBox1.Text = words.Contains(szukaj) ? "Wyraz jest w lini:" +linia_w_ktorej_jest_wyraz: "Nie ma"; 

I następne pytanie moi drodzy. Da się zrobić coś takiego zapisując to w jednej lini? Czy trzeba utworzyć inną zmienną?

1
Szarp napisał(a)

Chyba chodzi Ci o coś takiego:

private bool isWord(char firstChar)
{
    // Jeśli pierwszy znak w łańcuchu należy do zbioru liter a..z lub A..Z
    // wtedy można uznać, że dany łańcuch jest słowem.
    return (firstChar >= 65 && firstChar <= 90) || (firstChar >= 97 && firstChar <= 122);
    // Ten kod nie daje 100% gwarancji, ale zawsze coś ;)
}

Ten kod jest tak c****, że aż się smutno robi. Co to za magiczne cyferki? Nie można użyć char.IsLetter jak cywilizowani ludzie?

jakistampan napisał(a)
 int a = richTextBox1.Lines.Length;
            string[] slowa = new string[a];
            string linijki;
            int licznik = 0;

            for (int i = 0; i < richTextBox1.Lines.Length; i++)
            {
                linijki = richTextBox1.Lines[i];
                slowa = linijki.Split(new Char[] { ' ', ',', '.', '!', '?', '\t' });
                if (slowa.Length > 0) licznik++; else break;
            }

            label1.Text = richTextBox1.Text.Length.ToString() + " znaków";
            label3.Text = licznik.ToString() + " linii"; // wypisuje ilość linii tekstu 

Znowu jest jakiś konkurs na najbardziej nieczytelny kod i ja nic nie wiem? :( Ten else break; to z jakiej choinki i po co? :|

Jeśli chodzi o policzenie linijek zawierających choćby jedno słowo, to sugeruję tak:

char[] separatory = " .,;:!?\t".ToCharArray();
int linijkiZTekstem = 0;

foreach (string linia in this.richTextBox1.Lines)
{
    if (linia.Split(separatory, StringSplitOptions.RemoveEmptyEntries).Length > 0)
    {
        linijkiZTekstem++;
    }
}

this.label1.Text = linijkiZTekstem.ToString();
1

return (firstChar >= 65 && firstChar <= 90) || (firstChar >= 97 && firstChar <= 122);

Ten kod jest tak c****, że aż się smutno robi. Co to za magiczne cyferki?

ale po co w ogóle kombinować z cyferkami, można przecież WPROST:

return (firstChar >= 'a' && firstChar <= 'z') || (firstChar >= 'A' && firstChar <= 'Z');
0

Już rozumiem. Podziękowania i fanfary będą potem. Powiedzcie mi jeszcze do czego służy "\t" "\n" w kodzie:

 "string[] words = richTextBox1.Text.Trim().Split(new Char[] { ' ', '\t', '\n' });"
0

Czy istnieje jakaś funkcja która pomogłaby mi znaleźć podany ciąg znaków?

1
  1. string.Contains - określa, czy podciąg zawiera się w ciągu;
  2. string.IndexOf - określa pozycję, na której podciąg występuje w ciągu;
  3. string.LastIndexOf - określa pozycję, na której podciąg występuje w ciągu po raz ostatni.
0
for (int l = 0; l < richTextBox1.Lines.Length; l++)
            {
                words = richTextBox1.Lines[l].Trim().Split(new Char[] { ' ', '\t', '\n' });

                result = words.Contains(szukaj) ? "Znaleziono" : "Nie znaleziono";

                if (result == "Znaleziono")
                {
                    znalezionych = znalezionych + 1;
                    znalezione[l] = l;
                    puf = " wyraz ";
                    listBox1.Items.Add("Znaleziono w linii " +znalezione[l] +puf +szukaj);
                }
                else
                {
                    znalezione[l] = -1; //zamiast nulla
                }
                
            }

Moje pytanie: Jak zrobić aby funkcja Contains znajdowała określony fragment tekstu?

0
result = words.Contains(szukaj) ? "Znaleziono" : "Nie znaleziono";

 if (result == "Znaleziono")

Perełka. :D

Moje pytanie: Jak zrobić aby funkcja Contains znajdowała określony fragment tekstu?

Podaj jej w argumencie ten fragment tekstu i ona go znajdzie.
Sugeruję zadać pytanie jeszcze raz, po polsku, w sposób zrozumiały.

0

Jak przerobić powyższą funkcję tak aby znajdywała nie jedno słowo ale dwa, trzy (określony fragment tekstu). Np. jak chcę wyszukać fragment "ma kot" to mi to znajdzie w zdaniu "Ala ma kota".

0

sprawdzaj czy tuż za wyszukanym fragmentem jest nie-litera albo koniec stringa.

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