Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Salve a tutti, eccomi tornato con nuovo quesito molto interessante, a cui non riesco ancora a trovare soluzione. (linguaggio VB Net)
Premesso: ho un database mysql e una richtextbox1.. Ogni carattere che io digito nella richtextbox1, viene inserito anche nella tabella TESTO di mysql.. giustamente facendo i dovuti controlli, per evitare che caratteri non validi, mi diano errori nel momento dell'inserimento nel DB.. perche? se ne va la luce, non ho perso nulla.. funziona? beh si..
Problema: in questa richtextbox, qualora l'utente inserisca un Nome, vorrei trovare un modo affinchè venga riconosciuto e in tal caso, aggiungerlo nella tabella NOMI ad esempio (oltre nella tabella TESTO che gia fa).. Ho trovato quindi il comando Like e lo vorrei usare, ma in questo modo non va:
Codice sorgente - presumibilmente VB.NET
Dim sMatch AsString= RichTextBox1.Find(RichTextBox1.TextLike"\\[A-Z]*")
If sMatch <> ""Then
MsgBox("il nome e: "& sMatch)
EndIf
\\[A-Z]* questo significa che appena metto \\ seguito da una lettera grande, deve sapere che è un nome.. In effetti appena scrivo \\F appare sottolineato, come che sappia che quella parola deve indicare qualcosa.. ma al comando msgbox mi appare: il nome e: -1
Come posso risolvere? tenendo conto che ci possono essere piu nomi/cognomi dentro la RichTextBox1, quindi dovrebbe fare un controllo costante.. mi servirebbe un aiutino, anche utilizzando altre tecniche, invece del LIKE. Grazie
p.s. soluzioni del tipo di creare a priori una tabella con lista nomi, non è fattibile..
Ultima modifica effettuata da aragorn76 il 05/05/2020 alle 17:48
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti (uno dei padri fondatori del moderno Calcolo delle probabilità) chiamava il gioco del Lotto Tassa sulla stupidità.
Oltre all'idea che mi sembra veramente pessima da fare, con quel sistema difficilmente funzionerà.
per verificare se in una stringa c'è una lettera maiuscola basta fare ad esempio
Codice sorgente - presumibilmente VB.NET
Dim st AsString="Paolo è un amico"
Dimval= st.Any(Function(x) Char.IsUpper(x))
Ora ponendo invece che hai
\\Paolo è un amico
ma essendoci le doppie barre \\ devi fare un controllo riga per riga se è presente \\
in seguito fare split degli spazi vuoti e cercare il campo nell'array dov'è contenuta la stringa con \\
con un substring elimini i primi 2 caratteri ovvero \\ per ottenere così solo il nome.
dovrai gestire effetti indesiderati, per esempio se torni indietro sul testo e aggiungi/togli parole o spazi le variabili pos1 e pos2 non saranno più corrette.
Ultima modifica effettuata da Carlo il 06/05/2020 alle 17:53
PrivateSub Button4_Click(sender AsObject, e As EventArgs)Handles Button4.Click
'verifichiamo se stiamo inserendo un nome con $
Dim testArray()AsString=Split(RichTextBox1.Text)
Dim lastNonEmpty AsInteger=-1
For i AsInteger= 0 To testArray.Length- 1
If testArray(i) <> ""Then
lastNonEmpty += 1
testArray(lastNonEmpty)= testArray(i)
EndIf
Next
ReDim Preserve testArray(lastNonEmpty)
' adesso mi prendo tutti i nomi, rimuovendo le \\
DimvalAsBoolean
For i AsInteger= 0 To testArray.Length- 1
val= testArray(i)Like"\\[A-Z]*"
Ifval=TrueThen
'qui inserisco solo i nomi in altra tabella
MsgBox("il nome è: "&UCase(Replace(testArray(i), "\\", "")))
EndIf
Next
EndSub
in questo caso mi da tutti i nomi presenti nella richtextbox1.. Speriamo che non rallenti nel caso vi siano, che so, 200 parole.... adesso lo testp e se ho problemi vi farò sapere.. Graziee
in questo caso mi da tutti i nomi presenti nella richtextbox1.. Speriamo che non rallenti nel caso vi siano, che so, 200 parole.... adesso lo testp e se ho problemi vi farò sapere.. Graziee
con 200 parole non avrai problemi, lo stesso codice lo puoi scrivere così, per aumentarne un po' l'efficienza:
Codice sorgente - presumibilmente VB.NET
PrivateSub Button1_Click(sender AsObject, e As EventArgs)Handles Button1.Click
' tutte le parole separate da spazio in testArray
Dim testArray()AsString=Split(RichTextBox1.Text, " ")
' controllo tutte le parole
For i AsInteger= 0 To testArray.Length- 1
If testArray(i) <> ""And testArray(i)Like"\\[A-Z]*"Then
'qui inserisco solo i nomi in altra tabella
MsgBox("il nome è: "&UCase(Replace(testArray(i), "\\", "")))
EndIf
Next
EndSub
Hai anche cambiato il concetto della routine, eri partito che la cosa doveva avvenire mentre digitavi, per non perdere il lavoro se mancasse la corrente, invece ora hai inserito un button.
Grazie per avermi portato a conoscenza dell'istruzione Like.
Ultima modifica effettuata da Carlo il 07/05/2020 alle 9:59
Postato originariamente da Carlo: Hai anche cambiato il concetto della routine, eri partito che la cosa doveva avvenire mentre digitavi, per non perdere il lavoro se mancasse la corrente, invece ora hai inserito un button. Grazie per avermi portato a conoscenza dell'istruzione Like.
Si questo è un pulsante creato per prova... con la sub RichTextBox1_TextChanged comunque ad ogni cambiamento, mi salva il contenuto in una tabella ho provato il tuo codice e funziona alla grande, ma mi sono accorto di un altra cosa
Non capivo perchè se scrivevo \\Fabio veniva sottolineato.. ma se usavo $Fabio (invece delle \\) no.... alla fine ci sono arrivato.. veniva sottolineato perchè lo vede come un hiperlink.. quindi invece del button, potrei usare il click sul link per inserire il nome nella tabella
Adesso il problema è all'inverso..... Quindi adesso mi ritrovo (dopo il salvataggio) del testo \\Fabio e \\Gino nella tabella nomi tutto ok invece.. perche per ogni nome mi crea un record nuovo..
nella tabella "descrizione": \\Fabio e \\Gino (quindi un unico link... quando invece dovrebbe separarli come in origine \\Fabio e \\Gino e quindi non so se posso usare \\ a questo punto.... avete soluzione per farli vedere come 2 link separati?
Se riesco, dato che oltre ai nomi vi sarà pure tabella delle città.. vorrei usare sempre \\ dove cliccando si apre una form con due pulsanti "Nomi" e "Città" per far capire che si sta inserendo un nome o una città.. ma questo lo vedo dopo che risolvo questa parte. Se avete idee o suggerimenti sono Graditi
Certo che se vi era una soluzione che appena uno metteva che so $Milano, sapeva subito col $ che è una città e la mette in automatico nella tabella città senza cliccare nulla.... era meglio, piu professionale e meno click per l'operatore che scrive Grazie
Sta alla tua fantasia e a come vuoi che l'utente operi, se vuoi persegire l'approcio che un utente scrive nella RichTextBox e quando viene digitata la combinazione "magica" (\\) accade qualcosa, potresti far apparire un nuovo form di input.
Per esempio così:
inserire una RichTextBox1 e una ListBox1 su Form1
Codice sorgente - presumibilmente VB.NET
PublicClass Form1
Dim pos1 AsInteger= 0
Dim FormInput AsNew Form
Dim TextInput AsNew TextBox
Dim Accoda AsNew Button
Dim Fatto AsNew Button
Dim Scelta(3)As RadioButton
PrivateSub RichTextBox1_TextChanged(sender AsObject, e As EventArgs)Handles RichTextBox1.TextChanged
If pos1 > RichTextBox1.TextLengthThen pos1 = RichTextBox1.TextLength
Dim pos AsInteger= RichTextBox1.Text.IndexOf("\\", pos1)
If pos <> -1 Then pos1 = pos + 2 : FormInput.Show()
EndSub
PrivateSub Form1_Load(sender AsObject, e As EventArgs)HandlesMyBase.Load
' preparazione form di input
' meglio fare in progettazione complesso quanto vuoi
FormInput.Text="Scegli il tipo di record"
FormInput.Size=New Size(300, 180)
' preparazione text su form di input
TextInput.Location=New Point(10, 10)
TextInput.Size=New Point(260, 20)
FormInput.Controls.Add(TextInput)
' preparazione button su form di input
Accoda.Text="Accoda"
Accoda.Location=New Point(150, 80)
FormInput.Controls.Add(Accoda)
AddHandler Accoda.Click, AddressOf Accoda_OnClick ' permette di avere l'evento click
' preparazione button su form di input
Fatto.Text="Fatto"
Fatto.Location=New Point(150, 110)
FormInput.Controls.Add(Fatto)
AddHandler Fatto.Click, AddressOf Fatto_OnClick ' permette di avere l'evento click
' preparazione radiobutton su form di input
For i = 0 To 3
Scelta(i)=New RadioButton
Scelta(i).Location=New Point(10, 24 * i + 40)
FormInput.Controls.Add(Scelta(i))
Next
Scelta(0).Checked=True
Scelta(0).Text="Nome "
Scelta(1).Text="Cognome "
Scelta(2).Text="Città "
Scelta(3).Text="Tel. "
EndSub
PrivateSub Accoda_OnClick(sender AsObject, e As EventArgs)
Eccomi son tornato... alla fine ho cambiato metodo perchè con le doppie \ mi segnava come hyperlink (e quindi cliccabile) ma nel metterlo in un db mysql e poi riprendere la stringa, mi faceva diventare tutto come un unico link... quindi ho ovviato con il colore, sfruttando la tua idea e trovando uno script carino
Codice sorgente - presumibilmente C#
' preparazione form di input
' meglio fare in progettazione complesso quanto vuoi
cosi facendo, appena si digita < nella richtextbox si apre il form e in base alla scelta, fa terminare la parola con altro segno che viene riconosciuto e poi vi è il controllo il ciclo do until, loop che colora... tutto funziona.. cosi facendo i nomi risultano blu e cognomi rossi.. poi mi prendo i valori pulendo la richtextbox dai caratteri < > e |.....
adesso il poblema è... se tali nomi li ho inseriti in una tabella e quando riprendo i valori mi accorgo che un nome è sbagliato.. vorrei cliccarci sopra per modificarlo.. ma non so se possibile cliccare su una parola colorata e in base al colore prendere il valore, in modo che poi lo modifico anche nella tabella nomi... adesso vedo ma se avete idee o metodo che potrei usare, li accetto volentieri
Ultima modifica effettuata da aragorn76 il 20/05/2020 alle 11:08