Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - Prendere stringhe da file txt
Forum - C# / VB.NET - Prendere stringhe da file txt

Avatar
matteo80 (Normal User)
Newbie


Messaggi: 4
Iscritto: 19/03/2009

Segnala al moderatore
Postato alle 17:03
Giovedì, 19/03/2009
Ciao a tutti, avrei dei dubbi per fare questo programmino...
devo leggere un file txt fatto da stringhe tipo queste e rispendirle in un doc word:
[r0][c1]super prova[r1][c2]
[r1][c0]verifica 1[d2][c1]

bene ogni volta che trovo qualcosa tra parentesi quadre devo cambiare le impostazioni di word, ad es. se c'è [c1]il testo che seguirà sarà in grassetto in questo caso "super prova"

Avevo pensato si usare una select case per le varie opzioni che dovrò far partire in word, un ciclo più grande che mi faccia leggere il file(Do Until fileReader.EndOfStream), uno più piccolo che mi faccia leggere una stringa per volta (stringReader = fileReader.ReadLine()) e uno a suo volta che mi faccia leggere carattere per carattere...
ma ho la sensazione che sto prendendo la via + lunga...

Che ne pensate?

PM Quote
Avatar
Thejuster (Admin)
Guru^2


Messaggi: 2305
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 18:18
Giovedì, 19/03/2009
Credo di no

il fatto di leggere riga per riga e una buona idea

in questo modo puoi verificare se c'è qualche simbolo del tipo

[c]super prova[/c]

guardati il mio esempio


Codice sorgente - presumibilmente VB.NET

  1. 'parte nella lettura di ogni riga
  2.  
  3. 'mettiamo che nella riga ci sia [c]super prova[/c]
  4.  
  5. Dim risultato = GetArgument("[c]super prova[/c]")
  6.  
  7. MsgBox(risultato)
  8.  
  9.  
  10.  
  11.  
  12. Private Function GetArgument(ByVal cmd As String)
  13.  
  14.  
  15.         'elimino i primi 3 caratteri cioè quelli racchiusi in [ ]
  16.         Dim FristSplit As String = cmd.Substring(3, cmd.Length - 3)
  17.  
  18.         'elimino alla parte finale gl'altri 3 caratteri compreso lo slash
  19.         'quindi sono 4
  20.         Dim count2 As Integer = FristSplit.Length
  21.  
  22.  
  23.         Dim FinalSplit As String = FristSplit.Substring(0, count2 - 4)
  24.  
  25.  
  26.         Return FinalSplit
  27.  
  28.     End Function



questo e un esempio di come potresti fare
però devi alebaorarti tutto il percorso
cioè nel senso se in una riga ci sono uno o piu simboli
allora vai diverse verifile con l'if
e una cosa abbastanza lunga da fare ma non impossibile.

spero che questo ti sia d'aiuto
:k:



Edit:

per fare una verifica di piu comandi
devi fare un controllo per ogni carattere dei quella riga letta

Ultima modifica effettuata da Thejuster il 19/03/2009 alle 18:21


https://mire.forumfree.it/ - Mire Engine
C# UI Designer
PM Quote
Avatar
matteo80 (Normal User)
Newbie


Messaggi: 4
Iscritto: 19/03/2009

Segnala al moderatore
Postato alle 11:00
Venerdì, 20/03/2009
Grazie per la tua risposta e per la collaborazione.
Vedi il problema è che oltre che eliminare le cose tra parentesi per spedire su word solo quello che non lo è, devo comunque man mano tenerlo in considerazione in modo che i comandi tra parentesi andranno a cambiare anche i font,tabulazioni ecc in word..
spero di aver spiegato meglio,
cmq ora ti scrivo il codice così come l'avevo pensato...

        Dim oWord As Word.Application
        Dim oDoc As Word.Document

        Dim oPara1 As Word.Paragraph, oPara2 As Word.Paragraph
        Dim Pos As Double
        Dim t As String

        oWord = CreateObject("Word.Application")
        oWord.Visible = True
        oDoc = oWord.Documents.Add

        oPara1 = oDoc.Content.Paragraphs.Add

        Dim fileReader As System.IO.StreamReader
        fileReader = _
        My.Computer.FileSystem.OpenTextFileReader("C:\\test.txt")
        Dim stringReader As String
        Dim lunstr As Integer
        Dim i As Integer
        Dim car As String
        Dim car1 As String
'leggo il file
        Do Until fileReader.EndOfStream
            stringReader = fileReader.ReadLine()
            lunstr = Len(stringReader)

            For i = 1 To lunstr
                car1 = Mid(stringReader, i, 1)
                If car1 = "[" Then
                    car = Mid(stringReader, i + 1, 2)
                    i = i + 3

                    Select Case car
                        Case car = "c0"
                            oPara1.Range.Font.Bold = False
                            car = ""
                            car1 = ""
                            oPara1.Range.InsertBefore(car1)

                        Case car = "c1"
                            oPara1.Range.Font.Bold = True                        
                            car = ""
                            car1 = ""
                            oPara1.Range.InsertBefore(car1)

                     End Select
                End If
                If car1 <> "" Then
                    'oPara1.Range.Text =
                    oPara1.Range.InsertSymbol(car1)
                End If
            Next i
        Loop

Considerate che i parametri racchiusi da quadre saranno sempre 2 quindi per quello aumento i di 3.
bè cosa ne pensate? vado bene? o vado verso un vicolo ceco e ancora non me ne sono accorto?
Scusate ma poi non riesco a trovare l'istruzione per far "sparare" in word carattere per carattere. Please help!

Ultima modifica effettuata da matteo80 il 20/03/2009 alle 15:30
PM Quote
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 17:46
Venerdì, 20/03/2009
Ma potresti usare qualcosa di ancora più generale, che funzioni per tutti i tag di ogni lunghezza, ad esempio:
Codice sorgente - presumibilmente VB.NET

  1. Dim Tag As String
  2. Dim TagOpened As Boolean = False
  3.  
  4. For I As Int32 = 0 To Line.Length - 1
  5.   If Line(I) = "[" Then
  6.     TagOpened = True
  7.     Tag = ""
  8.     Continue For
  9.   End If
  10.  
  11.   If Line(I) = "]" Then
  12.     TagOpened = False
  13.     Select Case Tag
  14.       Case "bold" : ...
  15.       Case "c1" : ...
  16.     End Select
  17.   End If
  18.  
  19.   If TagOpened Then
  20.     Tag &= Line(I)
  21.   End If
  22. Next


Line è la linea in lettura. Tag contiene il nome dell'attributo (nota che se inizia con "/" il tag è chiuso), TagOpened determina se un attributo è aperto.

P.S.: nel tuo esempio il select è usato in maniera errata, guarda il codice qui sopra per vedere quella corretta.

Ultima modifica effettuata da Il Totem il 20/03/2009 alle 17:48
PM Quote
Avatar
matteo80 (Normal User)
Newbie


Messaggi: 4
Iscritto: 19/03/2009

Segnala al moderatore
Postato alle 11:00
Lunedì, 23/03/2009
Decisamente meglio questa soluzione!

Visto che ci sono vi faccio un ultima domanda su questo programmino...
qualcuno di voi mi sa dare dei link con la lista dei comandi per l'uso di word con vb?
usando la guida le spiegazioni lasciano a desiderare e non sempre sono quelle che cerco..

Ancora grazie x le risposte

PM Quote
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 14:50
Lunedì, 23/03/2009
Cerca qualcosa del tipo "vb.net word" e trovi parecchi esempi. A parte msdn, non mi pare ci sia un elenco più completo delle funzioni di libreria.

PM Quote
Avatar
matteo80 (Normal User)
Newbie


Messaggi: 4
Iscritto: 19/03/2009

Segnala al moderatore
Postato alle 11:39
Martedì, 24/03/2009
Ho cercato e sto continuando a farlo, ma purtroppo "gira" sempre lo stesso esempio fatto da microsoft http://support.microsoft.com/kb/316383/en-us
molto utile e fatto bene, ma dato che oltre alla formattazione(font,grassetto,corsivo,sottolineato) e alla creazione di paragrafi che sono riusciuto a trovare, anche grazie all'articolo, non riesco a trovare nulla per cambiare l'interlinea.
Se qualcuno di voi c'ha mai lavorato o si è imbattuto per caso nella modifica di questa attraverso vbnet, fatemelo sapere.
continuo le ricerche...se trovo qualcosa vi faccio sapere...

PM Quote