Autore Topic: [RISOLTO] file di testo per windows  (Letto 916 volte)

Offline naderit

  • Grande Gambero
  • ***
  • Post: 140
    • Mostra profilo
[RISOLTO] file di testo per windows
« il: 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

     
« Ultima modifica: 11 Maggio 2016, 22:06:36 da naderit »

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.264
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:file di testo per windows
« Risposta #1 il: 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 .
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.150
  • Tonno verde
    • Mostra profilo
Re:file di testo per windows
« Risposta #2 il: 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:
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.150
  • Tonno verde
    • Mostra profilo
Re:file di testo per windows
« Risposta #3 il: 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:
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.264
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:file di testo per windows
« Risposta #4 il: 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
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.150
  • Tonno verde
    • Mostra profilo
Re:file di testo per windows
« Risposta #5 il: 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!
« Ultima modifica: 11 Maggio 2016, 18:34:55 da Gianluigi »
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.150
  • Tonno verde
    • Mostra profilo
Re:file di testo per windows
« Risposta #6 il: 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:
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline naderit

  • Grande Gambero
  • ***
  • Post: 140
    • Mostra profilo
Re:file di testo per windows
« Risposta #7 il: 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:

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.150
  • Tonno verde
    • Mostra profilo
Re:file di testo per windows
« Risposta #8 il: 11 Maggio 2016, 20:40:36 »
Non ho capito, hai provato a leggere in Windows il file che ti ho postato prima?
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline naderit

  • Grande Gambero
  • ***
  • Post: 140
    • Mostra profilo
Re:file di testo per windows
« Risposta #9 il: 11 Maggio 2016, 21:02:35 »
scusa devi aver pazienza, dove l'hai postato? che non lo vedo  :)

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.150
  • Tonno verde
    • Mostra profilo
Re:file di testo per windows
« Risposta #10 il: 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:
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline naderit

  • Grande Gambero
  • ***
  • Post: 140
    • Mostra profilo
Re:file di testo per windows
« Risposta #11 il: 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

Offline naderit

  • Grande Gambero
  • ***
  • Post: 140
    • Mostra profilo
Re:file di testo per windows
« Risposta #12 il: 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:   

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.150
  • Tonno verde
    • Mostra profilo
Re:[RISOLTO] file di testo per windows
« Risposta #13 il: 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:
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline naderit

  • Grande Gambero
  • ***
  • Post: 140
    • Mostra profilo
Re:[RISOLTO] file di testo per windows
« Risposta #14 il: 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: