Gambas-it

Gambas3 => Programmazione => Topic aperto da: naderit - 11 Maggio 2016, 14:52:20

Titolo: [RISOLTO] file di testo per windows
Inserito da: naderit - 11 Maggio 2016, 14:52:20
Ciao a tutti, ho un quesito a cui non ne vengo a capo, ho realizzato un programmino di conversione dati , vi allego i file sorgente, cosa fa': legge un file di testo ( dati di rilevo ), salva in un database sqlite, vengono estratti alcuni dati e crea un file *.csv (regolarmente leggibile anche in ambiente win ) e un *.dat, quest'ultimo deve essere letto da un programma di restituzione 3D che gira sotto windows, ora il problema e che il file generato dal mio programma, se viene letto in ambiente linux risulta regolare, quando vado a leggerlo in ambiente Win con notepad è scritto senza ritorni a capo, ho letto che vanno usati i caratteri speciali per gestire la fine di una riga e il ritorno a capo \n e \r.
ma non so proprio come vanno usati nel codice, mi restituisce sempre errore.
Grazie mille

     
Titolo: Re:file di testo per windows
Inserito da: vuott - 11 Maggio 2016, 15:41:11
quando vado a leggerlo in ambiente Win con notepad è scritto senza ritorni a capo, ho letto che vanno usati i caratteri speciali per gestire la fine di una riga e il ritorno a capo \n e \r.
Per avere un'idea, puoi anche vedere il commento alla proprietà .EndOfLine della variabile di tipo File .
Titolo: Re:file di testo per windows
Inserito da: Gianluigi - 11 Maggio 2016, 16:18:15
Non ho guardato il codice ma direi che qualcosa del genere  Replace$(TextArea1.Text, "\n", Chr$(13)) dovrebbe andare bene, laddove TextArea1.Text è riferito al contenitore del testo o al testo che devi passare a Windows.
 :ciao:
Titolo: Re:file di testo per windows
Inserito da: Gianluigi - 11 Maggio 2016, 17:54:22
Non so se succede anche a voi, ma se io scrivo questo codice poi leggo il file di testo con i nomi incolonnati. Mentre con EndOfLine no.
Codice: [Seleziona]
Public Sub Button1_Click()

  Dim i As Integer
  Dim fl As File 
  Dim fileName As String   
  Dim sNomi As String[] = ["PIPPO", "PLUTO", "PAPERINO", "MINNI", "ZIO PAPERONE", "GASTONE", "QUI", "QUO", "QUA"]
 
  fileName = User.Home &/ Application.Name &/ "myFile.txt"
  If Not Exist(fileName) Then
    If Not Exist(User.Home &/ Application.Name) Then
      Mkdir User.Home &/ Application.Name
    Endif     
  Endif 
  fl = Open fileName For Create
  For i = 0 To sNomi.Max
      Write #fl, sNomi[i] & Chr(13) & Chr(10)
      ' Questo invece su Linux non funziona
      'Write #fl, sNomi[i] & fl.EndOfLine
  Next
  fl.Close     
 
End

Nota Bene: Questo codice crea una cartella nella vostra directory home.
 :ciao:
Titolo: Re:file di testo per windows
Inserito da: vuott - 11 Maggio 2016, 18:21:16
Non so se succede anche a voi, ma se io scrivo questo codice poi leggo il file di testo con i nomi incolonnati. Mentre con EndOfLine no.
Codice: [Seleziona]
      ' Questo invece su Linux non funziona
      'Write #fl, sNomi[i] & fl.EndOfLine


La proprietà .EndOfLine è precipuamente utilizzata in lettura:   :-X
http://www.gambas-it.org/smf/index.php?topic=4168.msg36174#msg36174
Titolo: Re:file di testo per windows
Inserito da: Gianluigi - 11 Maggio 2016, 18:32:27

La proprietà .EndOfLine è precipuamente utilizzata in lettura:   :-X
http://www.gambas-it.org/smf/index.php?topic=4168.msg36174#msg36174

Si avevo letto ma la guida dice: Restituisce o imposta il separatore di nuova riga utilizzato dallo stream.
e pertanto qualcosa non quadra.
Oppure sono, come per la matematica, duro di comprendonio  ;D
 :ciao:

Dimenticavo: Scritto così non funziona neanche su Windows!
Titolo: Re:file di testo per windows
Inserito da: Gianluigi - 11 Maggio 2016, 19:48:09
Beh visto che mi sono espresso in modo "ermetico", direi che occorra trarre una conclusione.
EndOf File è utile se dobbiamo leggere (Line Input) file provenienti da non si sa quali sistemi operativi.
Se dobbiamo, come in questo caso, inviare un file a Windows allora occorrerà finire le righe o per meglio dire andare accapo con i caratteri Chr(13) & Chr(10).
Così Windows sarà in grado di interpretarle correttamente.
Come chiosa può andare?
 :ciao:
Titolo: Re:file di testo per windows
Inserito da: naderit - 11 Maggio 2016, 20:32:30
Ciao Gianluigi allego il codice che genera il file.dat, ho provato con chr(10) ed altri metodi come indicato
http://www.gambas-it.org/wiki/index.php?title=%22Andare_a_capo%22_in_un_oggetto_di_testo
ma nulla da fare

Codice: [Seleziona]
Public Sub file_dat()
Dim datfile As Stream
Dim i As Integer
Dim k As Integer

Dim lng As Variant
Dim alt As Variant
Dim bss As Variant
Dim dst As Variant
Dim snt As Variant
Dim buss As Variant
Dim cli As Variant

 datfile = Open mydir & "/" & Label2.Text & ".dat" For Create
 Print #datfile, label2.Text
 Print #datfile, "SURVEY NAME: " & label2.Text
 Print #datfile, "SURVEY DATE: "
 Print #datfile, "SURVEY TEAM: "
 Print #datfile, "?"
 Print #datfile, "DECLINATION:    0.00  FORMAT: DMMDUDRLADLN  CORRECTIONS:  0.00 0.00 0.00"
 Print #datfile, "" 
 Print #datfile, "        FROM" & "           TO" & "   LENGTH" & "  BEARING" & "      INC" & "     LEFT" & "       UP" & "     DOWN" & "    RIGHT" & "   FLAGS" & "  COMMENTS"
 Print #datfile, ""
 
 For i = 0 To GridView3.Rows.Count - 1
    k = i
    lng = Replace$(Format(Val(GridView3[k, 2].Text) / 0.3048, "0.00"), ",", ".")
    buss = Replace$(Format(Val(GridView3[k, 3].Text), "0.00"), ",", ".")
    cli = Replace$(Format(Val(GridView3[k, 4].Text), "0.00"), ",", ".")
    alt = Replace$(Format(Val(GridView3[k, 5].Text) / 0.3048, "0.00"), ",", ".")
    bss = Replace$(Format(Val(GridView3[k, 6].Text) / 0.3048, "0.00"), ",", ".")
    dst = Replace$(Format(Val(GridView3[k, 7].Text) / 0.3048, "0.00"), ",", ".")
    snt = Replace$(Format(Val(GridView3[k, 8].Text) / 0.3048, "0.00"), ",", ".")
         
    Print #datfile, Space$(12 - Len(GridView3[k, 0].Text)) & GridView3[k, 0].Text & Space$(13 - Len(GridView3[k, 1].Text)) & GridView3[k, 1].Text & Space$(9 - Len(lng)) & lng & Space$(9 - Len(buss)) & buss & Space$(9 - Len(cli)) & cli & Space$(9 - Len(snt)) & snt & Space$(9 - Len(alt)) & alt & Space$(9 - Len(bss)) & bss & Space$(9 - Len(dst)) & dst
 Next
 
 Close #datfile

End


continuo a provare  :hard: :hard:
Titolo: Re:file di testo per windows
Inserito da: Gianluigi - 11 Maggio 2016, 20:40:36
Non ho capito, hai provato a leggere in Windows il file che ti ho postato prima?
Titolo: Re:file di testo per windows
Inserito da: naderit - 11 Maggio 2016, 21:02:35
scusa devi aver pazienza, dove l'hai postato? che non lo vedo  :)
Titolo: Re:file di testo per windows
Inserito da: Gianluigi - 11 Maggio 2016, 21:12:47
Il codice che ho postato nella quarta risposta e che crea un file di testo che puoi leggere in Windows per guardare se lo vedi correttamente.
In soldoni se tu usi Write al posto di Print e aggiungi alla fine di ogni riga Chr(13) & Chr(10), bada bene: Entrambi insieme tutti e due  ;D , le righe dovrebbero essere correttamente inserite in colonna.
 :ciao:
Titolo: Re:file di testo per windows
Inserito da: naderit - 11 Maggio 2016, 21:20:33
benissimo, il codice che mi hai postato viene letto correttamente sia da Kate che dal blocco note di win, ora provo ad applicarlo al mio codice quindi devo applicare ritorno a capo + nuova riga . ti faccio sapere per ora grazie
Titolo: Re:file di testo per windows
Inserito da: naderit - 11 Maggio 2016, 22:05:17
Fantastico funziona
il segreto è stato Write, infatti senza usare i caratteri speciali chr(13) e chr(10) viene visualizzato il testo in Kate come con il blocco note il resto è stato facile e funziona anche il programma di restituzione 3D
Grazie ancora  :ciao:   
Titolo: Re:[RISOLTO] file di testo per windows
Inserito da: Gianluigi - 13 Maggio 2016, 09:47:58
Ciao Naderit,
potresti cortesemente spiegare meglio come hai risolto in modo che uno con esigenze simili possa capire a fondo.
Io ad esempio non ho compreso come fai con l’editor di testo a mandare a capo le nuove righe senza l’uso di accapo + nuova riga.
 :ciao:
Titolo: Re:[RISOLTO] file di testo per windows
Inserito da: naderit - 15 Ottobre 2016, 15:32:36
scusate ritardo, ho risolto in questo modo:
Codice: [Seleziona]
Public Sub file_dat()
Dim datfile As Stream
Dim i As Integer
Dim k As Integer

Dim data As String
Dim lng As Variant
Dim alt As Variant
Dim bss As Variant
Dim dst As Variant
Dim snt As Variant
Dim buss As Variant
Dim cli As Variant

data = Format(Now, "mm dd yyyy ")

 datfile = Open mydir & "/" & Label2.Text & ".dat" For Create
 Write #datfile, label2.Text & Chr(13) & Chr(10)
 Write #datfile, "SURVEY NAME: " & label2.Text & Chr(13) & Chr(10)
 Write #datfile, "SURVEY DATE:" & Space$(12 - Len(data)) & data & "COMMENT:" & Chr(13) & Chr(10)
 Write #datfile, "SURVEY TEAM: " & Chr(13) & Chr(10)
 Write #datfile, "?" & Chr(13) & Chr(10)
 Write #datfile, "DECLINATION:    0.00  FORMAT: DMMDUDRLADLN  CORRECTIONS:  0.00 0.00 0.00" & Chr(13) & Chr(10)
 Write #datfile, Chr(13) & Chr(10) 
 Write #datfile, "        FROM" & "           TO" & "   LENGTH" & "  BEARING" & "      INC" & "     LEFT" & "       UP" & "     DOWN" & "    RIGHT" & "   FLAGS" & "  COMMENTS" & Chr(13) & Chr(10)
 Write #datfile, Chr(13) & Chr(10)
 
 For i = 0 To GridView3.Rows.Count - 1
    k = i
    lng = Replace$(Format(Val(GridView3[k, 2].Text) / 0.3048, "0.00"), ",", ".")
    buss = Replace$(Format(Val(GridView3[k, 3].Text), "0.00"), ",", ".")
    cli = Replace$(Format(Val(GridView3[k, 4].Text), "0.00"), ",", ".")
    alt = Replace$(Format(Val(GridView3[k, 5].Text) / 0.3048, "0.00"), ",", ".")
    bss = Replace$(Format(Val(GridView3[k, 6].Text) / 0.3048, "0.00"), ",", ".")
    dst = Replace$(Format(Val(GridView3[k, 7].Text) / 0.3048, "0.00"), ",", ".")
    snt = Replace$(Format(Val(GridView3[k, 8].Text) / 0.3048, "0.00"), ",", ".")
         
   
    Write #datfile, Space$(12 - Len(GridView3[k, 0].Text)) & GridView3[k, 0].Text & Space$(13 - Len(GridView3[k, 1].Text)) & GridView3[k, 1].Text & Space$(9 - Len(lng)) & lng & Space$(9 - Len(buss)) & buss & Space$(9 - Len(cli)) & cli & Space$(9 - Len(snt)) & snt & Space$(9 - Len(alt)) & alt & Space$(9 - Len(bss)) & bss & Space$(9 - Len(dst)) & dst & Chr(13) & Chr(10)
 Next
 
 Close #datfile

 Message.Info("file cretato") 

End

 :ciao:
Titolo: Re:[RISOLTO] file di testo per windows
Inserito da: vuott - 15 Ottobre 2016, 16:19:12
il segreto è stato Write, infatti senza usare i caratteri speciali chr(13) e chr(10)

Non ho capito bene (http://www.timelessgaming.com/timeless/forum/images/smilies/thinking.gif)..... cioè... ma alla fine i caratteri speciali chr(13) e chr(10) li hai dovuti inserire !

Write #datfile, label2.Text & Chr(13) & Chr(10)
....etc....



Titolo: Re:[RISOLTO] file di testo per windows
Inserito da: Gianluigi - 15 Ottobre 2016, 17:07:14
 :ciao: Naderit,
se mi permetti vorrei darti alcuni suggerimenti:
Ricordati che questo è Gambas no VB pertanto i Dim li puoi scrivere così se credi:
Codice: [Seleziona]
Dim lng, alt, bbs, dst, snt, buss, cli As Variant 'e questo lo puoi fare anche con VB perché ciò che non è specificato viene automaticamente cambiato in variant.'
Dim i, k As Integer, datfile As Stream, data As String ' Questo è solo possibile in Gambas
a proposito di k a cosa ti serve il codice i = K puoi usare direttamente i.
Nel ciclo al posto di Count - 1 puoi usare la proprietà Max:
Codice: [Seleziona]
' Al posto di'
For i = 0 To GridView1.Rows.Count - 1
 ' Puoi usare'   
For i = 0 To GridView1.Rows.Max

 :ciao: :ciao:
Titolo: Re:[RISOLTO] file di testo per windows
Inserito da: naderit - 16 Ottobre 2016, 19:14:47
si alla fine ho usato i caratteri speciali Chr(13) & Chr(10), non mi ricordo per quale motivo dissi diversamente  :-[. Hai ragione Gianluigi è un retaggio di VB , come sempre grazie dei suggerimenti  :ciao:
Titolo: Re:[RISOLTO] file di testo per windows
Inserito da: Gianluigi - 16 Ottobre 2016, 20:44:34
Hai ragione Gianluigi è un retaggio di VB , come sempre grazie dei suggerimenti  :ciao:
Prego,
è un vero piacere aiutare (sin dove posso) una persona volonterosa e vogliosa di imparare come te.
 :ciao: :ciao: