Functii si metode pentru siruri de caractere


    Majoritatea calculatoarelor au instalat cel putin un editor de text. Functiile referitoare la siruri de caractere, respectiv la texte au deci o importanta capitala in implementarea diferitelor aplicatii de procesare texte. Sirurile de caractere sunt realizate din "insiruirea" mai multor caractere.

  • Functii pentru siruri de caractere

        In programarea clasica Visual Basic, sirurile de caractere erau prelucrate folosind diverse functii. De exemplu, pentru a extrage un subsir dintr-un sir de caractere, se utilizeaza functia Mid

    Module Module1
        'Programul utilizeaza siruri de caractere
        'Se utilizeaza functia Mid pentru a extrage un subsir dintr-un sir de caractere
    
        Sub Main()
            Dim sir1 As String = "Distributie"
            Dim sir2 As String
            sir2 = Mid(sir1, 4, 6)
            Console.WriteLine("Sirul 1 este: " & sir1)
            Console.WriteLine("SubSirul obtinut prin extragerea a 6 litere din sirul1 incepand cu pozitia 4 este: " & sir2)
            Console.ReadKey()
        End Sub
    End Module
    


    Pentru prelucrarea sirurilor de caractere este mult mai usoara utilizarea metodelor.
        Odata definit un string, el se comporta ca un obiect. Se pot invoca deci o serie de metode refertoare la obiectul de tip string, metode care permit diverse actiuni asupra siruli de caractere.
        Vom incerca sa utilizam cateva metode referitoare la sirurile de caractere, disponibile in limbajul Visual Basic.

  • Metode pentru siruri de caractere

        Determinarea lungimii unui sir

        Pentru determinarea lungimii unui sir de caractere, se invoca metoda Length

        Forma generala: nume_sir.Length
        Metoda determina lungimea unui sir. Metoda returneaza un numar întreg ce reprezinta lungimea unui sir de caractere, fara a numara terminatorul de sir.
        Urmatoarea aplicatie determina lungimea unui sir de caractere.

    Module Module1
        'Programul utilizeaza siruri de caractere
        'Determinarea lungimii unui sir
    
        Sub Main()
            Dim fc As String = "Facultatea de Inginerie"
            Dim lung As Integer
            lung = fc.Length
            Console.WriteLine("Lungimea sirului de caractere: " & fc & " este: " & lung)
            Console.ReadKey()
        End Sub
    End Module
    


        Metoda Length poate fi folosita de asemenea pentru a determina lungimea unui sir preluat de la utilizator.

    Module Module1
        'Programul utilizeaza siruri de caractere
        'Programul afiseaza lungimea unui sir de caractere introdus de la tastatura.
    
        Sub Main()
            Dim n_pr As String
            Dim lung As Integer
            Console.Write("Introduceti numele d-voastra: ")
            n_pr = Console.ReadLine()
            lung = n_pr.Length
            Console.WriteLine("Lungimea sirului de caractere: " & n_pr & " este: " & lung)
            Console.ReadKey()
        End Sub
    End Module
    
    

        Folosind nume_sir.Contains vom verifica daca un sir este introdus corect. Sa luam de exemplu o adresa de mail. Vom verifica daca are cel putin 5 caractere si contine caracterele . @.

    Module Module1
        'Programul utilizeaza siruri de caractere
        'Validarea unui sir preluat.
        ' Programul cere adresa de mail si verifica daca:
        ' - adresa are cel putin 5 caractere
        ' - adresa contine caracterul @
        ' - adresa contine caracterul .
    
        Sub Main()
            Dim adresa As String
            Console.Write(" Introduceti adresa de mail: ")
            adresa = Console.ReadLine()
            If (adresa.Length > 5) And adresa.Contains(".") And adresa.Contains("@") Then
                Console.WriteLine("Adresa este corecta ! ")
            Else
                Console.WriteLine("Adresa nu este corecta ! ")
            End If
            Console.ReadKey()
        End Sub
    End Module
    

        Operatia efectuata anterior se numeste operatia de validare camp.

        Copierea unui sir intr-un alt sir

        Nu exista metoda pentru copierea unui sir intr-un alt sir, insa Visual Basic, pune la dispozitia programatorilor metode partajate ale clase "String".Vom folosi deci metoda Copy, metoda partajata a clasei String astfel:

        Forma generala: s String.Copy()
        Metoda copiaza sirul sursa în sirul destinatie.
        Sa luam o aplicatie de geniul:

    Module Module1
        'Programul utilizeaza siruri de caractere
        'Copierea unui sir intr-un alt sir.
        Sub Main()
            Dim sir1 As String = "Alfa"
            Console.WriteLine(" Sirul 1 este: " & sir1)
            Dim sir2 As String = "Beta"
            Console.WriteLine(" Sirul 2 este : " & sir2)
            sir2 = String.Copy(sir1)
            Console.WriteLine(" Dupa copiere, Sirul 2 este: " & sir2)
            Console.ReadKey()
        End Sub
    End Module
    


        Concatenarea a doua siruri

        Pentru concatenare, vom folosi metoda partajata a clasei "String": Concat
        Forma generala: String.Concat(sir1, sir2)
        Operatia de adunare a doua siruri adica operatia de a copia un sir la sfarsitul altui sir se numeste concatenare.
        Metoda String.Concat(sir1, sir2) concateneaza cele doua siruri: sirul sursa este adaugat la sfârsitul sirului destinatie. Tabloul care contine sirul destinatie trebuie sa aiba cel putin dimensiunea celor doua siruri.
        Pentru a concatena doua siruri, procedam astfel:

    Module Module1
        'Programul utilizeaza siruri de caractere
        'Adaugarea unui sir la un alt sir
    
        Sub Main()
            Dim sir1 As String = "Alfa-Soft-"
            Dim sir2 As String = "Beta"
            Console.WriteLine("Sirul 1 este: " & sir1)
            Console.WriteLine("Sirul 2 este: " & sir2)
            sir1 = String.Concat(sir1, sir2)
            Console.WriteLine("Dupa concatenarea sirului1 cu sirul2, sirul 2 devine: " & sir1)
            Console.ReadKey()
        End Sub
    End Module
    


        Raspunsul aplicatiei va fi de data aceasta: "Alfa-Soft-Beta".

        Compararea a doua siruri

        Pentru concatenare, vom folosi metoda partajata a clasei "String": Compare
        Forma generala: String.Compare(sir1,sir2)
        Functia compara cele doua siruri date ca argument si returneaza o valoare întreaga egala diferenta dintre codurile ASCII ale primelor caractere care nu coincid.
        Metoda returneaza 0 daca sirurile sunt egale, un numar negativ daca primul sir2 <> sir1 respectiv pozitiv daca primul sir2 inclus in sir1.

    Module Module1
        'Programul utilizeaza siruri de caractere
        'Adaugarea unui sir la un alt sir
    
        Sub Main()
            Dim sir1 As String = "Alfa1"
            Dim sir2 As String = "Alfa"
            Dim poz As Integer
            Console.WriteLine("Sirul 1 este: " & sir1)
            Console.WriteLine("Sirul 2 este: " & sir2)
            poz = String.Compare(sir1, sir2)
            If poz < 0 Then
                Console.WriteLine("Sir2 <>Sir1")
            End If
            If poz = 0 Then
                Console.WriteLine("Sir2 = Sir1")
            End If
            If poz > 0 Then
                Console.WriteLine("Sir2 inclus in Sir1")
            End If
            Console.ReadKey()
        End Sub
    End Module
    


        Raspunsul este 1 adica sir2 inclus in sir1.

        Extragerea unui subsir dintr-un sir

        Forma generala: nume_sir.Substring(p1,n)
        Metoda returneaza subsirul rezultat din extragerea dn nume_sir incepand cu pozitia p1+1, urmatoarele n caractere

    Module Module1
        'Programul utilizeaza siruri de caractere
        'Extragerea unui subsir dintr-un sir
        Sub Main()
            Dim sir1 As String = "Alfa-Soft-"
            Dim sir2 As String
            Console.WriteLine("Sirul 1 este: " & sir1)
            sir2 = sir1.Substring(5, 4)
            Console.WriteLine("Sirul extras este: " & sir2)
            Console.ReadKey()
        End Sub
    End Module
    
    


        Raspunsul programului in acest caz fiind "Soft"
    Siruri de caracere in spatiul System

         Metode pentru siruri utilizate in WFA

        Vom utiliza in continuare cateva metode referitoare la siruri de caractere. Vom realiza o aplicatie WFA care afiseaza in mod continuu numarul de caractere introduse de la tastatura. In cadrul acestei aplicatii vom utiliza un obiect label care ne va permite sa afisam numarul de caractere introdus de la tastatura prin intermediul unui obiect de tip TextBox. Vom utiliza un obiect ProgressBar care ne va permite sa afisam grafic procentul de caractere introdus. Afisarea se va face procentual relativ la numarul maxim de 300 de caractere setat pentru aceasta aplicatie. Se va afisa de asemenea si procentul sub forma numerica, atat pe 15 caractere cat si pe maxim 5 caractere.
        Vor fi folosite printre altele metodele :
        Deschidem un nou proiect Windows Forms Application intitulat "text_bar" pe care plasam:     Completam procedura deschisa pe evenimentul Tick al obiectului timer1 cu :

        Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
            Dim nr_car As Double = Me.TextBox1.Text.Length
            Dim proc As Double = 100 * nr_car / 300
            Dim proc_s5 As String
            Me.Label2.Text = nr_car
            Me.Label4.Text = proc
            proc_s5 = proc
            If (proc_s5.Length > 5) Then
                proc_s5 = proc_s5.Substring(0, 5)
            Else
                proc_s5 = proc
            End If
            If (proc > 100) Then
                proc = 100
            End If
            Me.Label6.Text = proc_s5
            Me.ProgressBar1.Value = proc
        End Sub
    


        Rulam aplicatia si obtinem:



    Operatii cu fisiere

        Un fisier, este o colectie de date stocata pe un mediu permanent de stocare (hard disk, memory stik, CD etc)
        Datele inscrise in fisiere sunt persistente, pastrandu-se si dupa inchiderea calculatorului.

         Tipuri de fisiere

        Un fisier este identificat prin nume si extensie. Numele poate fi dat arbitrar iar extensia reflecta de obicei tipul de date si aplicatia ce foloseste datele din fisier. In functie de tipul de date, se pot defini doua tipuri de fisiere: fisiere text sau binare.

  • Fisiere text

        Un fisier text contine informatii sub forma text. Textele contin litere codificate ASCII

  • Fisiere binare

        Un fisier binar poate stoca, pe langa informatii de tip text, orice alt fel de informatii, cum ar fi imagini, baze de date programe executabile etc. Fisierele binare sunt accesate in mod diferit in functie de aplicatia care le deschide. Pentru programatori, cele mai importante fisiere sunt fisierele text, acestea , ofera o metoda standard de accesare fiind simplu de utilizat.

         Citirea unui fisier txt

        

    Module Module1
        'Programul utilizeaza fisiere
        'Citirea unui fisier
        Sub Main()
            Dim text_cit As String
            text_cit = My.Computer.FileSystem.ReadAllText("C:\beta.txt")
            Console.WriteLine(text_cit)
            Console.ReadKey()
        End Sub
    End Module
    


         Scrierea intr-un fisier

        Adaugarea la continutul fisierului se face astfel:

    Module Module1
        'Programul utilizeaza fisiere
        'Citirea unui fisier
        Sub Main()
            Dim text_cit As String
            Dim text_w As String = "Acest text va fi adaugat la continutul fisierului"
            Console.WriteLine("Continutul fisierului C:\beta.txt, este:")
            text_cit = My.Computer.FileSystem.ReadAllText("C:\beta.txt")
            Console.WriteLine(text_cit)
            My.Computer.FileSystem.WriteAllText("C:\beta.txt", text_w, True)
            Console.WriteLine("Dupa adaugare la Continutul fisierului C:\beta.txt, acesta devine:")
            text_cit = My.Computer.FileSystem.ReadAllText("C:\beta.txt")
            Console.WriteLine(text_cit)
            Console.ReadKey()
        End Sub
    End Module
    


        Fara adaugarea la continutul fisierului se face setand variabila parametru la False:

    Module Module1
        'Programul utilizeaza fisiere
        'Citirea unui fisier
        Sub Main()
            Dim text_cit As String
            Dim text_w As String = "Noul continut al fisierului"
            Console.WriteLine("Continutul fisierului C:\beta.txt, este:")
            text_cit = My.Computer.FileSystem.ReadAllText("C:\beta.txt")
            Console.WriteLine(text_cit)
            My.Computer.FileSystem.WriteAllText("C:\beta.txt", text_w, False)
            Console.WriteLine("Dupa scrierea fisierului C:\beta.txt, acesta devine:")
            text_cit = My.Computer.FileSystem.ReadAllText("C:\beta.txt")
            Console.WriteLine(text_cit)
            Console.ReadKey()
        End Sub
    End Module
    


         Fisiere in System

        In aplicatiile in care se doreste deschiderea unui fisier si afisarea continutului ar fi util sa completam aplicatia cu o aplicatie ce ne permite cautarea fisierului. Acest lucru este posibil numai in aplicatii de genul Windows Forms Application in care se poate crea o instanta a unei clase care realizeaza cautarea fisierelor in mod interactiv. Vom realiza deci o aplicatie Windows Forms Application numita fisier_v1 care permite cautarea fisierului si afisarea continutului acestuia (primele 500 de caractere).
         - Plasam un obiect de tip button numit button1 apoi schimbam proprietatea "Text" in "Citire fisier"
         - Plasam un obiect de tip openFileDialog numit openFileDialog1.
         - Plasam un obiect de tip label numit label1, in care vom afisa continutul fisierului.
        Pe evenimentul click al obiectului button1 punem procedura :

     Public Class Form1
        Dim txt As String
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            Dim OpenFileDialog1 As OpenFileDialog = New OpenFileDialog
            OpenFileDialog1.InitialDirectory = "c:\\"
            OpenFileDialog1.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*"
            OpenFileDialog1.FilterIndex = 2
            OpenFileDialog1.RestoreDirectory = True
            OpenFileDialog1.ShowDialog()
            txt = My.Computer.FileSystem.ReadAllText(OpenFileDialog1.FileName())
            Me.Label1.Text = txt
        End Sub
    End Class
    


        Dupa rularea aplicatiei si apasarea butonului citire fisier, obtinem o fereastra de dialog ce ne permite sa selectam fisierul dorit.



        Sa presupunem ca am selectat un fisier text "alfa.txt". Dupa selectia fisierulii, se afiseaza continutul acestuia :