Oppure

Loading
19/03/09 16:03
matteo80
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?
aaa
19/03/09 17:18
Thejuster
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



'parte nella lettura di ogni riga

'mettiamo che nella riga ci sia [c]super prova[/c]

Dim risultato = GetArgument("[c]super prova[/c]")

MsgBox(risultato)




Private Function GetArgument(ByVal cmd As String)


        'elimino i primi 3 caratteri cioè quelli racchiusi in [ ]
        Dim FristSplit As String = cmd.Substring(3, cmd.Length - 3)

        'elimino alla parte finale gl'altri 3 caratteri compreso lo slash
        'quindi sono 4
        Dim count2 As Integer = FristSplit.Length


        Dim FinalSplit As String = FristSplit.Substring(0, count2 - 4)


        Return FinalSplit

    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 19/03/09 17:21
mire.forumfree.it/ - Mire Engine
C# UI Designer
20/03/09 10:00
matteo80
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 20/03/09 14:30
aaa
20/03/09 16:46
Il Totem
Ma potresti usare qualcosa di ancora più generale, che funzioni per tutti i tag di ogni lunghezza, ad esempio:
Dim Tag As String
Dim TagOpened As Boolean = False

For I As Int32 = 0 To Line.Length - 1
  If Line(I) = "[" Then
    TagOpened = True
    Tag = ""
    Continue For
  End If

  If Line(I) = "]" Then
    TagOpened = False
    Select Case Tag
      Case "bold" : ...
      Case "c1" : ...
    End Select
  End If
  
  If TagOpened Then
    Tag &= Line(I)
  End If
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 20/03/09 16:48
aaa
23/03/09 10:00
matteo80
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
aaa
23/03/09 13:50
Il Totem
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.
aaa
24/03/09 10:39
matteo80
Ho cercato e sto continuando a farlo, ma purtroppo "gira" sempre lo stesso esempio fatto da microsoft support.microsoft.com/kb/316383/…
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...
aaa