text   zodpovězená otázka

VB.NET

dobrý den mám problém a nevim jak jej řešit jedná se o to ýe chci vytvořit program na češtinu a to tim zpusobem aby sem napsal slovo nebo větu do textboxu a program porovnal každé slovo zvlášt a ne onu celou větu a potom na to reagoval pokud najde nebo nenajde shodu tim myslim kdyš bude slovo napsáno špatně nahlásí to a opraví ho problém je že jsem začátečník a fanda sqeaku ale ten mi není dostupný proto sem zvolil vb na radu kamarada tak prosim o pomoc jediné co umím je porovnan jedno slovo s jinym ale ne celou větu děkuji

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Jde-li vám o rozdělení zapsané věty na slova, pak jsem vymyslel možná obludnost, ale mohlo by vás to trochu nakopnout. Hlavní je metoda Split. Na vychytání znaků, které se zapisují před a za slova bez mezery by mohl existovat lepší způsob, není úplný, ale ukázka Replace se pro opravy možná hodí.

  Private Sub TextBox1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles TextBox1.KeyDown
    If e.KeyValue <> 13 Then Exit Sub
    Dim radek, slova(), zprava As String
    radek = TextBox1.Text.Replace(".", "")
    radek = radek.Replace(",", "")
    radek = radek.Replace("?", "")
    radek = radek.Replace(":", "")
    radek = radek.Replace("!", "")
    radek = radek.Replace("""", "")
    radek = radek.Replace("(", "")
    radek = radek.Replace(")", "")
    slova = radek.Split(" ")
    zprava = ""
    For i As Integer = 0 To slova.Length - 1
      zprava = zprava & slova(i) & vbCrLf
    Next
    MsgBox(zprava)
  End Sub

Jde-li vám o kompletní návod na opravu pravopisu, pak poradit neumím.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

děkuji ale jak říkám sem začátečník a rozumim tomuto co ste napsaljen malinko především mne mate

If e.KeyValue <> 13 Then Exit Sub
    Dim radek, slova(), zprava As String
    radek = TextBox1.Text.Replace(".", "")
    radek = radek.Replace(",", "")
    radek = radek.Replace("?", "")
    radek = radek.Replace(":", "")
    radek = radek.Replace("!", "")
    radek = radek.Replace("""", "")
    radek = radek.Replace("(", "")
    radek = radek.Replace(")", "")
    slova = radek.Split(" ")
    zprava = ""
    For i As Integer = 0 To slova.Length - 1
      zprava = zprava & slova(i) & vbCrLf

takže sem vlastně rozuměl jen tomu že nakonci se něco vypíše msgboxu muže mi to prosim někdo vysvětlit? děkuji

nahlásit spamnahlásit spam 0 odpovědětodpovědět

První řádek, ta podmínka, otestuje, jestli je stisknutá klávesa Enter, tak provede ten následující kód (pokud ne, tak skončí proceduru). Musí to být v proceduře TextBox1_KeyDown, která se spustí při stisknutí klávesy v TextBoxu.

Další řádky s funkcí Replace nahrazují v textu - zkrátka vyháží z textu znaky, které tam nemají co dělat. Slova je pole, do kterého přiřadíme výsledek volání funkce Split, která rozdělí řetězec do pole podle mezer.

Výsledkem je, že máte slova, která nějak ověříte podle nějakého pravopisného slovníku.

Doporučuji přečíst seriál VB.NET pro začátečníky, najdete tam alespoň základy Visual Basic .NET.

Ke kontrole, jestli je dané slovo opravdu slovo, se dá využít kontrola pravopisu např. ve Wordu. Nevím, jestli máte nějaký slovník připravený, nebo jak chcete správnost textu kontrolovat. Chtělo by to napsat.

nahlásit spamnahlásit spam -1 / 1 odpovědětodpovědět

děkuji za vysvětlení moc mi pomohlo ale nevim zda netapu špatnym směrěm výsledek by měl vypadat takto

napíši větu

odentruji a program ji rozloží na jednotlivá slova ty pak porovná s nějakou knihovnou(myslel jsem že bych vytvořil nějakou knihovnu v které budou rozdělěna slova do určitých kategorií)a podle toho v jaké je kategorii vyvolá na něj určitou reakci to bych dořešil ale základ je porovnaní a nasledná reakce pokud ho zná reaguje a napadlo mne ze pokud by ho neznal prostě by se zeptal zda se ho má naučit to slovo (třeba nějaké zapomenu a tohle je pohodlný zpusob jak to napravit)pokud dám svolení třeva napsáním "ano" zeptá se mne do které knihovny ho má zařadit

pokud si myslíte že je nějaký efektivnější zpusob nebo jednodušší tak prosím o radu ale pro mne je tohle nejsrozumitelnější

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Podle mého názoru jste si jako úplný začátečník zvolil dost náročnou úlohu. Napíšete: "…bych dořešil", ale zápasíte se základy - na druhou stranu se dost na problému můžete naučit. Těžko však vás tady někdo povede krok za krokem. Již zde máte doporučení začít kurzem "Začínáme", měl byste to udělat.

Odpuste mi kázání. K vaší poslední otázce mi napadá, zda by nešla využít kontrola pravopisu z MS Office, ale realizaci nedokážu. To, co tvoříte, v podstatě nic jiného než kontrola pravopisu není.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

kázání odpuštěno :o)

vím že je to zřejmě složité ale chtěl bych to zkusit a pioprat se s tim a ten kurz pro začátečníky jsem četl je moc pekně udělanej ale mne de v celku jen o to pomoct jak udělat to že napíšu větu a ono mi to každé slovo vyhledá ve všech knihovnách kupříkladu a porovná pokud najde shodu reaguje pokud ji nenajde zeptá se jestli si ho má pamatovat přemejšlel jsem a poslední článek o vb začátcích je s přidáváním udaju do seznamu jde to udělat i tak že vy se jeden po druhém z těchto udaju (datum,čas,...) vypsali do label v okně a já je zadal přes textbox?

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Jde o to, v jakých knihovnách. Abych mohl poradit, jak zkontrolovat, jestli je slovo správně, musíte vědět, kde takovou informaci zjistíte. Musíte napsat, kde a v jaké podobě máte seznam správných slov. Pokud jej nemáte, chtělo by jej to někde sehnat. Jinak se nemáme od čeho odrazit.

nahlásit spamnahlásit spam -1 / 1 odpovědětodpovědět

seznam slov by měl bejt no teda on je ale ještě ne v elektronické podobě ale právě to potřebuju vědět chtěl bych "něco" nejspíše knihovnu kterou mužu aktualizovat a do které to napíšu ty slova a každé to slovo by mělo pokud je správné vyvolat reakci například abych to uvedl na pravou míru mělo by to bjt něco jako chatovací program pro děti kdyš napíšou "ahoj" program projede knihovny zjistí ze "ahoj" tam je a že se nachází v knihovně kde jsou pozdravy a že na pozdrav by měl odpovědět taky pozdravem

teda pokud si moc nevymejšlim jo a ten zdrojak co tu je nnahoře napsanej mi nefunguje z mě neznámého duvodu se odesílá text okamžitě po napsání 1 písmene do msg boxu i kdyš jsem ho v kodu smazal

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Dalo by se to třeba uložit do souboru - každé slovo na jeden řádek. Při spuštění programu to načíst do paměti atd. A použít na to třeba objekt OrderedList. Ale obávám se, že při větším počtu slov to bude poměrně pomalé. Kolik slov tak odhadujete?

nahlásit spamnahlásit spam -1 / 1 odpovědětodpovědět

Mám obavu, že vám bude těžké radit. Máte vůbec rozmyšlené, co vlastně chcete vytvořit? Položíte otázku z názvem "text" a v ní sdělení mj. "chci vytvořit program na češtinu". Takže to vypadalo na kontrolu pravopisu a problém jste měl s rozdělením věty na slova. To již umíte.

Pak ale upřesníte, že by podle významu slova měla následovat reakce a navíc, že slovo, které program nezná, bude možné doplnit. To by nebyl problém. Ale co s doplněným slovem? Kdo a jak doplní reakci na nové slovo? Program? I když vidíte projekt jednoduše a i když je pro děti, pouštíte se do díla s umělou inteligencí, nebo jsem nepochopil, co vlastně děláte. Napište víc.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

dobry den omlouvam se ale nemammoc casu takze bez diakritiky co ma program umet sem myslimdostatecne popsal jase na tom chci naucita nenito rozmar a zalezitost na chvilku mam v planu tomu venovat cas a kazde slovo naprogramovat zvlast osobne a s umelou iteligenci si nezahravam aby tomu tak bylo muselo by to ...ten program..sam uvazovat aspon malicko to ovsem umet nema presneji nemusi pokud jo je to jen plus ale prozatim ma pouze reagovat tak jak mupredem zadam

mohl by mi prosim nekdo vysvetlit onen orderedlist?

jo a tech slov by melobejt doceladost pro zacatek rekl bych tak 100 a pozdeji vic

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Chápu, že jste začátečník. Ale v tom případě byste právě měl nejdřív myslet a pak programovat. O umělé inteligenci neuvažujte, to se řeší ve výzkumných ústavech a ještě se to nikomu nepovedlo. Pokud jste začátečník, budete rád, když zvládnete kontrolu pravopisu.

100 slov? Pokud se podíváte na stránky českého národního korpusu (což je organizace, která schraňuje ucelený seznam českých slov), dočtete se tam, že se česká slova čítají na miliony (pokud chcete všechny tvary a pády). Protože sto a milion je krapátko rozdíl. Doporučil bych vám pro začátek využít kontrolu pravopisu ve Wordu - je to poměrně jednoduché.

Otevřete si vlastnosti projektu, na záložce References klikněte na tlačítko Add a vyberte knihovnu (asi záložka COM) Microsoft Word 11.0 Object Library (možná budete mít jiné číslo verze). Pak použijte kód jako je na stránce http://vb-helper.com/howto_net_spellchec.... Nemám čas se o tom podrobněji rozepisovat.

nahlásit spamnahlásit spam -1 / 1 odpovědětodpovědět

děkuji ale mezi tom nežli jsem se dostal na tento web pokecal jsem s kamaradama a jeden našel na netu radu zdroják vypadá takto



Function Odpoved(Text As String) As String 
Dim txt As String 
txt = LCase(Text) 

If txt = "ahoj" Then Odpoved = "Zdravim " 
If txt = "dovidenia" Then Odpoved = "Maj sa " 
End Function 

Private Sub Command1_Click() 
Dim Slova() As String 
Dim i As Integer 

Slova() = Split(Text1.Text, " ") 

For i = 0 To UBound(Slova) 
Text2.Text = Text2.Text & Odpoved(Slova(i)) 
Next i 
End Sub

vypadá pro mne srozumitelně a poměrně jednoduše ale jde to předělat tak aby ony slova a odpovědi vyhledal a načetl z nějakého souboru? jak ste poznamenal slov je hodně ale pro začátek jich chci zkusit pár a děkuji za radu to s wordem zkusim jen ho musim nainstalovat

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Zkuste následující:

Založte si projekt podle návodu v ZačínámeAž zvládnete základní úlohy v kurzu, použijte příklad z dílů 8 a 9 se změnami:

- do textového seznamu dle dílu 8 zapište záznamy jen po dvou řádcích; v prvním budou slova, ve druhém odpovědi, např. dle toho, co jste uvedl:

ahoj

Zdravím

dovidenia

Maj sa

Soubor uložte s kódováním UTF8 - k tomu je více v diskuzi pod osmým dílem kurzu

- načítání souboru změňte tak, že místo načítání data a částky dáte jen jednu položku a také typu String

- do ListView přidejte jen na dva sloupce (jak je v kurzu díl 8, odstavec Nastavení komponenty ListView)

- zápis položek (na konci dílu 8) upravte podobně jako načítání na jenom dvě položky a obě textové (as String)

- druhý formulář (díl 9 kurzu) změňte tak, že budete mít jen dva TextBoxy na sebou. Horní na "Slova", druhý na "Odpověď"

- operace přidání a úpravy záznamu změníte všude jen na dvě textové položky, je to jednodušší než příklad v kurzu, odpadá práce s DateTimePicker a NumericUpDown, budete pracovat jenom s TextBoxy.

Když to zvládnete, máte nástroj na vytváření a úpravu záznamů a umíte dost nato, abyste realizoval celý svůj záměr, tj. program nebude startovat do hlavního formuláře načtením všech položek, ale do vašeho vlastního, kde bude mj. TextBox pro vstup. Po odentrování vstupu by jako nejjednodušší reakce mohl následovat MsgBox s odpovědí nebo vložení odpovědi do dalšího TextBoxu. Nebude-li slovo v seznamu, může následovat část přidání záznamu.

Bude vám chybět snad jen jedna funkce a to vyhledání slova zapsaného do vstupu. Když se dostanete až sem, poradím dál.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

omlouvám se ale než jsem dokázal "splodit" to co jsem dělal dle vašeho návodu vyskytla se chyba někde v kodu jsem něco udělal zřejmě a najednou i procedura psaná správně hlásila chybu takže jsem s kamarádem pokoušel a zkoušel a vytvořili jsme toto

Public Class Form1

    Function Odpoved(ByVal Text As String) As String
        'Promenne
        Dim txt As String
        Dim i As Integer, a As Integer, r As Integer
        Dim zoznam() As String, moznost() As String
        txt = LCase(Text) 'prevede zadany text na mala pismena nech nezalezi na velkych a malych
        'Precita subor a kontroluje ci existuje
        Try
            zoznam = System.IO.File.ReadAllLines("zaznam.txt")
        Catch ex As System.IO.FileNotFoundException 'druh chyby
            Windows.Forms.MessageBox.Show("Soubor zmizel nevim kam... (neexistuje)", "Program", MessageBoxButtons.OK, MessageBoxIcon.Warning)
        End Try
        'To tam dole rozlozi retezec na moznosti a porovnava text 
        For i = 0 To UBound(zoznam)
            moznost = Split(zoznam(i), "#") 'dostanes zo stringu pole rozdelene mriezkou (#)
            For a = 0 To UBound(moznost)
                If LCase(moznost(0)) = txt Then
nahoda:
                    Randomize()
                    r = Fix(Rnd() * UBound(moznost) + 1)
                    If r = 0 Then GoTo nahoda 'kdys je nahodne cislo 0 tak se vratime  a generujeme nove cislo pokud to neni nula
                    Odpoved = moznost(r) 'Vratime odpoved
                End If
            Next a
        Next i
        If Odpoved = "" Then

            Nova_odpoved.Text1.Enabled = False
            Nova_odpoved.Text1.Text = txt
            Nova_odpoved.Show()

        End If
    End Function

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim Slova() As String, veta As String
        Dim i As Integer

        Slova = Split(Text1.Text, " ") 'Rozlozime vetu na slova... pokial ratame s tim ze slova su oddelene medzerou " "

        For i = 0 To UBound(Slova) 'porovnava slova se zaznamem a sklada vetu... ps. to treba este nejak domysliet proto ze  pri dotaze "jak sa mas" sa bude porovnavat postupne jak, sa, mas :(
            veta = veta & Odpoved(Slova(i))
        Next i
        Text2.Text = veta
    End Sub

    Private Sub Text2_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Text2.TextChanged

    End Sub

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

    End Sub
End Class

vesměs je to to co jsem chtěl vytvořit ale vyvstal jeden problém:pokud je věta rozdělena porovnává se každě slovo a já bych se chtěl zeptat zda v tomto případě jde nějak vytvořit procedura kterou jsem vymyslel možná ale zbytečně složitě:

bude více textovych souboru a každý v sobě několik slov

textovej soubor bude mít své číslo a tak i každě slovo v něm které se ale nebude nikdy vypisovat a kdyš program náhodně napíše větu automaticky je očísluje:

příklad: knihovna č.3 slovo 10 knihovna č. 6 slovo 4

výsledek by měl vypadat 310.64 (tečka by značila mezeru mezi slovama) ale duležité je že čísla se nesmí sčítat ale poze psát za sebe pak tečka a zase čísla pokud napíšu do textboxu "nelze" program náhodně přehodí slovosled a špatnou kombinaci si zapíše do textového souboru pokud nalezne správnou kombinaci na odpověd (pokud mu ji dříve nenapíšu sám) tak si ji zapíše do jiného souboru a bude pro příště vědět kdyš je prohledá že tento slovosled není moznej

ja vim je to zrějmě dosti složité ale je to jediné co mne napadlo takže pokud to nejde pak se omlouvám

pokud to jde tak budu vděčný za jakoukoli reakci

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Nejprve bych Vás chtěl požádat, abyste si své příspěvky po sobě přečetl. Přes všechny ty chyby a kašlání na čárky a tečky je text jen obtížně čitelný a ještě hůře pochopitelný. Vy to chápete dobře, ale já se v tom orientuji jen velice ztěžka.

Pokud máte soubor se slovy a každé je na jednom řádku, do pole stringů jej načtete velmi snadno:

  Dim soubor1() As String = IO.File.ReadAllLines("sl1.txt");

Pokud chcete tento slovník prohledat, projděte všechny položky pole (nejlepší je na to udělat funkci):

  Function ObsahujeSlovo(slovo As String, Slovnik() As String) As Integer
      For i As Integer = 0 To Slovnik.Length - 1
          If slovo = Slovnik(i) Then Return i + 1
      Next
      Return 0
  End Function

Pokud funkci dáte slovo, které hledáte, a jako druhý parametr proměnnou slovnik1 (pole těch slov ze souboru 1), vrátí vám funkce číslo tohoto slova (pokud ho nenajde, vrátí nulu).

To by vám pro váš smělý program mělo stačit. Doufám, že jsem to pochopil správně.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Nemůžete počítat s tím, že vám zde někdo napíše program, když neúplně a ne zcela srozumitelně popíšete svůj nápad, popř. vložíte kód, který napsal někdo jiný a kterému asi moc nerozumíte. Přiznám se, že mu také moc nerozumím, ale nevím jaké komponenty a jak pojmenované na formuláři máte, nevím, co obsahuje soubor zoznam.txt a nevím, co vlastně děláte.

K čemu chcete dojít náhodně vybíranými slovy? Chcete tak sestavovat smysluplnou větu? Teď bych možná rozuměl vašemu úvodu, že chcete dělat program na češtinu. Čeština však nejsou věty sestavené z náhodně vybraných slov, i když rozdělených do skupin podle jejich významu, bez uplatnění mnoha pravidel. Podle vašeho písemného projevu vám čeština, mám na mysli pravopis a gramatiku, mnoho neříká. Jak to chcete "učit" počítač? Podívejte se, jaký paskvil dokáže z češtiny vytvořit počítačový překladač z angličtiny a překladače jsou díla profesionálů.

Nevím, jestli budete vděčný zrovna za tuto reakci.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Někteří na to ovšem potřebují přijít sami. Nemám pravdu?

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

jak jsem řekl jsem rád za každou reakci a nechci sem vložit nápad který by mi tu někdo "postavil" nicméně příspěvek byl psán ve spěchu a ano mám problémy s češtinou nikoli díky tomu že bych se ji snad ve škole neučil a pane Herceg ano myslim že jste to pochopil správně děkuji

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback