Läs från datafil

Läser data från en öppen datafil.

Tillval 

  • Fil-ID är ett numeriskt uttryck som anger fil-ID för en öppen datafil. Mer information finns i Scriptsteget Öppna datafil.
  • Mängd anger antalet bytes att läsa om Läs som är UTF-8 eller Byte. För UTF-16 är Mängd antalet Unicode-kodenheter att läsa. Om Mängd inte angetts (angetts till ingenting) läses hela filen.
  • Mål är det fält eller den variabel där data som läses från filen ska lagras.
  • Läs som anger filens teckenkodning.
    • UTF-16 är FileMakers standardteckenkodning, 16-bitars Unicode (UTF-16 little endian).
    • UTF-8 är 8-bitars Unicode-teckenkodning.
    • Byte förutsätter ingen särskild teckenkodning, utan läser en byte i taget. Om målet är en variabel eller ett containerfält lagras data som läses från filen som containerdata med samma filnamn som den angivna filen.

Kompatibilitet 

Produkt Stöds
FileMaker Pro Ja
FileMaker Go Ja
FileMaker WebDirect Nej
FileMaker Server Ja
FileMaker Cloud Ja
FileMaker Data API Nej
Anpassad webbpublicering Ja

Ursprungsversion 

18.0

Beskrivning 

Det här scriptsteget läser data som angetts av Mängd med start från den aktuella läs-/skrivpositionen, eller läser hela filen om Mängd inte har angetts. Mer information finns i Ställ in datafilsposition.

Den största mängden data det här scriptsteget kan läsa är 64 MB i taget. Om en fil är större än 64 MB kan du utföra det här scriptsteget flera gånger och läsa en mängd som är högst 64 MB varje gång.

Kommentarer 

  • Du får bäst prestanda om högst 64 kB läses.
  • Vid läsning av Unicode-text från en del av en fil kan det hända att endast en del av tecknet läses om tecknet består av flera kodenheter. Om du förväntar dig att läsa text från en UTF-8- eller UTF-16-fil kan det vara säkrare att läsa hela filen på samma gång, såvida du inte är säker på antalet kodpunkter per tecken.

Exempel 1 

Läser innehållet i en öppen fil med fil-ID 2 och lagrar data i en variabel.

Kopiera
Läs från datafil [ Fil-ID: 2 ; Mängd (byte): ; Mål: $variabel ; Läs som: Byte ]

Exempel 2 

Kontrollerar om det finns en fil med namnet ändring.log i mappen Dokument. Om det gör det läses de första 100 UTF-8-kodenheterna till textfältet Verktyg::Loggpost.

Kopiera
Ange variabel [$fil ; Värde: Get ( Dokumentsökväg ) & "ändring.log" ]
Verifiera att filen existerar [ "$fil" ; Mål: $filFinns ]
If [ not $filFinns ]
    Avsluta script [Textresultat: ]
End If
Öppna datafil [ "$fil" ; Mål: $filID ]
Läs från datafil [ Fil-ID: $filID ; Mängd (byte): 100 ; Mål: Verktyg::Loggpost ; Läs som: UTF-8 ]
Stäng datafil [ Fil-ID: $filID ]

Exempel 3 

Om filen stor.log finns och är stor, läses filen 64 MB i taget till en variabel tills hela filen har lästs. Om filen är mindre läses hela filen på en gång. Data läses in i en variabel för bättre prestanda, sedan lagras dessa data i ett fält.

Kopiera
Manuell felhantering [ På ]
Ange variabel [ $k_FilSaknasFel ; Värde: 100 ] 
Ange variabel [ $k_FilSlutFel ; Värde: 10 ]
Ange variabel [ $k_64kB ; Värde: 64 * 1024 ]
Ange variabel [ $k_64MB ; Värde: 64 * 1024 * 1024 ]
Ange variabel [$fil ; Värde: "stor.log" ]
Verifiera att filen existerar [ "$fil" ; Mål : $filFinns ]
If [ $filFinns = 0 ]
    Avsluta script [ Resultat: $k_FilSaknasFel ]
End If

Öppna datafil [ "$fil" ; Mål: $filID ] 

#Om filen kan öppnas, läs innehållet.
If [ Get ( SenasteFel ) = 0 ]
    Hämta filstorlek [ "$fil" ; Mål: $filstorlek ]

    #Om filstorleken är större än 64 kB, läs 64 MB i taget.
    If [ $filstorlek > $k_64KB ]

        Loop [ Rensa: Alltid ]
            #Läs upp till 64 MB och lagra dem i en variabel.
            Läs från datafil [ Fil-ID: $filID ; Mängd (byte): $k_64MB ; Mål: $styckeData ; Läs som: UTF-8 ]
            Ange variabel [ $läsfel; Värde:Get ( SenasteFel ) ]

            #Om läsning lyckades eller om filens slut nåddes, slå ihop data som lästs i detta pass ($styckeData) med data som lästs tidigare ($filinnehåll).
            If [ ( $läsfel = 0 ) or ( $läsfel = $k_FilSlutFel ) ]
                Ange variabel [ $filinnehåll ; Värde: $filinnehåll & $styckeData ]
            End If

            #Avsluta loop om läsåtgärd misslyckades eller om filens slut nåtts.
            Exit Loop If [ $läsfel ]
        End Loop

    Else
        #Om filstorleken är högst 64 kB, läs hela på en gång.
        Läs från datafil [ Fil-ID: $filID ; Mål: $filinnehåll ; Läs som: UTF-8 ]
    End If

    #Stäng datafilen och lagra innehållet i ett fält.
    Stäng datafil [ Fil-ID: $filID ]
    Tilldela fält [ Tabell::Data ; $filinnehåll ]

End If