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

Jak wyświetlić ilość zliczonych już linijek w richTextBoxie?
JA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 23
0

Mam taki oto fragment kodu:

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

                            
                        }
Kopiuj
 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?

xeo545x39
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Kosmos
  • Postów: 1571
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?

JA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 23
0

Mam teraz coś takiego:

Kopiuj
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ś?

maszynaz
  • Rejestracja: dni
  • Ostatnio: dni
1
Kopiuj
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.

Szarp
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 48
1

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

Error Use of unassigned local variable 'linijki'

Kopiuj
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;
xeo545x39
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Kosmos
  • Postów: 1571
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();.

JA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 23
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?

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

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

maszynaz
  • Rejestracja: dni
  • Ostatnio: dni
1
Kopiuj
slowa.Contains("dupa");
 
JA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 23
0

Po dodaniu:

Kopiuj
 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#.

Sarrus
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2512
0

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

maszynaz
  • Rejestracja: dni
  • Ostatnio: dni
0

zadeklaruj slowa przed pętlą

Szarp
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 48
1
Kopiuj
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:

Kopiuj
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ś ;)
}
Kopiuj
// 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"));
JA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 23
0
Kopiuj
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?

Szarp
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 48
0
Kopiuj
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";
JA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 23
0
Kopiuj
 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ł?

Kopiuj
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ą?

somekind
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
1
Szarp napisał(a)

Chyba chodzi Ci o coś takiego:

Kopiuj
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)
Kopiuj
 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:

Kopiuj
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();
Azarien
  • Rejestracja: dni
  • Ostatnio: dni
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:

Kopiuj
return (firstChar >= 'a' && firstChar <= 'z') || (firstChar >= 'A' && firstChar <= 'Z');
JA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 23
0

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

Kopiuj
 "string[] words = richTextBox1.Text.Trim().Split(new Char[] { ' ', '\t', '\n' });"
JA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 23
0

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

somekind
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
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.
JA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 23
0
Kopiuj
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?

somekind
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
0
Kopiuj
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.

JA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 23
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".

Azarien
  • Rejestracja: dni
  • Ostatnio: dni
0

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

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.