Newsgroup: it.comp.lang.visual-basic
Titolo: [?] line input

magari e' una cosa scema, ma vorrei saltarci fuori in un modo pulito... e se
possibile senza passarmi a mano il txt...
dunque: devo importare in un mdb un file di testo (filing, assist2)
strutturato in questo modo:
TITOLO: Dottor
NOME: Pinco
COGNOME: PALLINO
QUALIFICA: Direttore
ENTE: Comitato Italo-Europeo
INDIRIZZO: Via Bellini 90
CITTA': 00100 ROMA
TELEFONO: 999
CODICE: M P 6
NOTE: queste sarebbero le note
nessun problema con line input, salvo un caso. filing i campi lunghi li
salva tipo newsreader, mandando a capo con un crlf duro. quindi ci puo'
essere una situazione tipo:
ENTE: Comitato Italo-Europeo per l'Assistenza agli
Europei in Italia e Italiani in Europa
INDIRIZZO: Via Bellini 90, scala 1, interno 5,
stanza 12, scrivania 1
CITTA': 00100 ROMA
io l'avevo pensata in questo modo:
    Do While Not EOF(iFile)
        Line Input #1, sLine
        If LCase(Left(sLine, 7)) = "titolo:" Then
            cnt = cnt + 1
            lblImport = cnt
            With rs
                .AddNew
                    nCut = Len("titolo:")
' scusate l'obbrobrio, ero troppo stanco anche solo per contare
' le lettere dei campi...
                    !TITOLO = Trim(Right(sLine, Len(sLine) - nCut))
                Line Input #1, sLine
                    nCut = Len("nome:")
                    !NOME = Trim(Right(sLine, Len(sLine) - nCut))
                Line Input #1, sLine
                    nCut = Len("cognome:")
                    !COGNOME = Trim(Right(sLine, Len(sLine) - nCut))
ecc.
pero' se ente e indirizzo sforano sulla linea dopo, ben che vada mi trovo un
errore perche' l'acapo e' piu' corto del nome del campo; mal che vada mi
inserisce un record con i dati completamente sballinati.
qualcuno fa un'offerta ?
debbo premettere che NON dispongo di $50, solo di sempiterna riconoscenza
per evitarmi il passaggio del txt per ricomporre le linee :)
grazie in anticipo,
a.

per evitarmi il passaggio del txt per ricomporre le linee :)
dai, almeno 40$ per il mio nuovo ocx che fa anche le parole crociate del vecchio
Bartezzaghi !
ot a parte, hai provato, prima dell' addnew, e previo verifica dell' eof, a fare un successivo
line input ? o meglio: tanti successivi line input finche' non incontri un tag riconosciuto.
E dillo che se il file fosse stato in xml sarebbe stato piu' comodo :)
ciao, hal (il transilvano)

> pal:

Frettolosamente:
Option Explicit
Type RECORD_TYPE
  Campo1 As String
  Campo2 As String
  Campo3 As String
End Type
Private Const mc_strCampo1 As String = "Campo1"
Private Const mc_strCampo2 As String = "Campo2"
Private Const mc_strCampo3 As String = "Campo3"
Private Function NewFieldValue( _
  ByVal FieldName As String _
, ByVal FieldValue As String _
) As String
  NewFieldValue = Mid$(FieldValue, Len(FieldName))
End Function
Sub Main( _
)
  Const c_strFullFileName As String _
    = "c:\windows\desktop\indirizzi.txt"
  Dim intFile       As Integer
  Dim strBuffer     As String
  Dim strFieldName  As String
  Dim udtRecord     As RECORD_TYPE
  intFile = FreeFile(0)
  Open c_strFullFileName For Input As intFile
  Debug.Print "AddNew"
  While Not EOF(intFile)
    Line Input #intFile, strBuffer
    strBuffer = Trim$(strBuffer)
    If Len(strBuffer) = 0 Then
      With udtRecord
        Debug.Print .Campo1
        Debug.Print .Campo2
        Debug.Print .Campo3
      End With
      Debug.Print "Update"
      With udtRecord
        .Campo1 = ""
        .Campo2 = ""
        .Campo3 = ""
      End With
      Debug.Print "AddNew"
    Else
      Select Case True
      Case strBuffer Like mc_strCampo1 & ":*"
        strFieldName = mc_strCampo1
        udtRecord.Campo1 _
          = NewFieldValue( _
                FieldName:=strFieldName _
              , FieldValue:=strBuffer)
      Case strBuffer Like mc_strCampo2 & ":*"
        strFieldName = mc_strCampo2
        udtRecord.Campo2 _
          = NewFieldValue( _
                FieldName:=strFieldName _
              , FieldValue:=strBuffer)
      Case strBuffer Like mc_strCampo3 & ":*"
        strFieldName = mc_strCampo3
        udtRecord.Campo3 _
          = NewFieldValue( _
                FieldName:=strFieldName _
              , FieldValue:=strBuffer)
      Case Else
        Select Case strFieldName
        Case mc_strCampo1
          With udtRecord
            .Campo1 = .Campo1 & strBuffer
          End With
        Case mc_strCampo2
          With udtRecord
            .Campo2 = .Campo2 & strBuffer
          End With
        Case mc_strCampo3
          With udtRecord
            .Campo3 = .Campo3 & strBuffer
          End With
        Case Else
          Debug.Print "?"
        End Select
      End Select
    End If
  Wend
  Close
End Sub
Testato con il file:
Campo1: 11_abc_11
Campo2: 12_def_12
Campo3: 13_ghi_13
Campo1: 21_jklmn
opqr_21
Campo2: 22_stu_22
Campo3: 23_vwx_23
Campo1: 31_yz_31
Campo2: 32_1234_32
Campo3: 33_56_33
Campo1: 41_yz_41
Campo2: 42_1234
5678901
2345678_42
Campo3: 43_90_43
Da` questo output:
AddNew
1: 11_abc_11
2: 12_def_12
3: 13_ghi_13
Update
AddNew
1: 21_jklmnopqr_21
2: 22_stu_22
3: 23_vwx_23
Update
AddNew
1: 31_yz_31
2: 32_1234_32
3: 33_56_33
Update
AddNew
1: 41_yz_41
2: 42_123456789012345678_42
3: 43_90_43
Update
AddNew
--
Ciao.
Maurizio
--------
?SPQR(C)
 X
--------