Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    193

    [VB6]Unione testo dopo split

    Ciao a tutti
    Ho un problema:
    Splitto il contenuto di un file di testo,poi lavoro le stringhe della matrice e li riunisco in una textbox con il seguente codice:

    Private Sub Command1_Click()

    Dim m_righe() As String
    Dim MyString, MyLen
    Dim AnyStringl, MyStrl
    Dim AnyStringr, MyStrr
    Dim SearchStringl, SearchCharl, MyPosl
    Dim SearchStringr, SearchCharr, MyPosr
    Dim PauseTime, Start, Finish, TotalTime
    Dim stringa As String

    m_righe = Split(Text1.Text, vbCrLf)
    Text1.Text = ""
    For i = 0 To UBound(m_righe)
    MyString = m_righe(i) ' Inizializza la stringa.
    MyLen = Len(MyString) ' Restituisce la lunghezza stringa
    AnyStringl = m_righe(i) ' Definisce la stringa.

    SearchStringl = m_righe(i) ' Stringa in cui eseguire la ricerca.
    SearchCharl = "(" ' Cerca "(".
    MyPosl = InStr(1, SearchStringl, SearchCharl, 1)

    SearchStringr = m_righe(i) ' Stringa in cui eseguire la ricerca.
    SearchCharr = ")" ' Cerca ")".
    MyPosr = InStr(1, SearchStringr, SearchCharr, 1)


    MyStrl = Left(AnyStringl, MyPosl) ' Restituisce la 1 parte della stringa.
    AnyStringr = m_righe(i) ' Definisce la stringa.
    MyStrr = Right(AnyStringr, MyPosr - (MyPosl - 1)) ' Restituisce la 2 parte della stringa

    Dim c As String
    c = 1 + i

    Text1.Text = (Text1.Text + MyStrl + c + " ," + MyStrr + vbCrLf)

    Next

    End Sub
    Il testo è una serie di insert per un db mysql:
    INSERT INTO `comuni` VALUES ('Altino', 1);

    viene splittato giusto nella matrice (15020) righe,poi viene modificato e rimesso nella textbox correttamente;
    INSERT INTO `comuni` VALUES (1 ,'Altino', 1);

    solo che dopo un centinaio di righe rallenta fino alla 1020 riga in cui si blocca e non prosegue più.
    Presumo che sia dovuto al fatto che ogni riga svuota la textbox e ne riscrive il contenuto con 1 riga in + ogni volta:
    Text1.Text = ""
    Text1.Text = (Text1.Text + MyStrl + c + " ," + MyStrr + vbCrLf)
    Però non ho la piu pallida idea di come fare
    Grazie

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Scusa ... al di la' del fatto che non sai come fare, ma qual e' lo scopo del codice?

    In ogni caso, il codice e', a dir poco, inefficiente ...

    Queste righe ad esempio

    Dim c As String
    c = 1 + i

    non hanno senso e quest

    Text1.Text = (Text1.Text + MyStrl + c + " ," + MyStrr + vbCrLf)

    dovrebbe stare fuori dal ciclo, alla fine. Il testo dovrebbe essere accumulato in una stringa.

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    193
    Si forse non sono stato molto chiaro....ma ero stanco..
    Il codice deve inserire un indice numerico all'interno della stringa splittata

    INSERT INTO `comuni` VALUES ('Altino', 1);
    INSERT INTO `comuni` VALUES ('Altedo', 1);
    INSERT INTO `comuni` VALUES ('Altamura', 1);
    INSERT INTO `comuni` VALUES ('Avellino', 1);
    ecc..
    Deve diventare:
    INSERT INTO `comuni` VALUES (1, : 'Altino', 1);
    INSERT INTO `comuni` VALUES (2, : 'Altedo', 1);
    INSERT INTO `comuni` VALUES (3, : 'Altamura', 1);
    INSERT INTO `comuni` VALUES (4, : 'Avellino', 1);
    ecc..

    In ogni caso, il codice e', a dir poco, inefficiente ...
    Diciamo tranquillamente che fà schifo
    Questo:
    Dim c As String c = 1 + i
    L'ho usato per incrementare l'indice di 1 unità.
    Spero di aver spiegato meglio ora.
    Grazie

  4. #4
    Utente di HTML.it L'avatar di Boolean
    Registrato dal
    Oct 2005
    Messaggi
    758
    ovviamente Oregon ha perfettamente ragione, ed il problema sta che man mano che il testo aumenta, continuando a riscriverlo *per intero*nel textbox ovviamente rallenta di molto.

    accumulando il testo in una variabile, come oregon suggerisce, e assegnandola solo dopo al TextBox, dovresti risolvere.

    in alternativa puoi usare la proprietà SelText del TextBox per "accodare" del testo a quello già esistente:

    codice:
    Text1.SelText = MyStrl & c & " ," & MyStrr & vbCrLf
    poi, usa la & come operatore di concatenamento di stringhe, è il più corretto, poichè il + può dare luogo a conversioni implicite indesiderate.

    Boolean

  5. #5
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    193
    Grazie,con SelText effettivamente non rallenta piu ed ho provato con 65000 righe.

    accumulando il testo in una variabile, come oregon suggerisce, e assegnandola solo dopo al TextBox, dovresti risolvere.
    Mi potresti fare un'esempio di come fare in questo modo?
    ho provato ad usare Join ma non sono riuscito.


    poi, usa la & come operatore di concatenamento di stringhe, è il più corretto, poichè il + può dare luogo a conversioni implicite indesiderate.
    Grazie del consiglio

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.