Forbindelsesstrengparametre for Schema.ini
At lave et schema.ini
at åbne eller linke tekstfiler fra Access er en af to mulige metoder, der kan bruges til at arbejde med data indeholdt i filerne fra Access. I den forrige artikel så vi på tekstfilens forbindelsesstrengparametre. Vi diskuterede også behovet for at have yderligere skemaoplysninger for at hjælpe Access med at analysere tekstfilerne. Microsoft har en side om schema.ini
, men der er få ting, der ikke umiddelbart er klare, så vi vil dække det her.
schema.ini
fil
Hver mappe kan have en enkelt fil med navnet schema.ini
for hvor vi kan definere alle mulige formater af tekstfiler, vi forventer at finde i mappen. For hver tekstfil skal vi starte et afsnit med filnavnet og derefter beskrive strukturen. Vi starter med en minimal prøvesektion og analyserer derefter hver del. Det er ikke nødvendigt at opregne alle tekstfiler. Alle tekstfiler, der ikke er beskrevet af schema.ini
vil simpelthen blive håndteret ved at bruge standardindstillingen på godt og ondt. Lad os se på strukturen af schema.ini
.
[products.txt] Format=CSVDelimited ColNameHeader=True MaxScanRows=0 Col1=Products Text Col2=Count Long
Bemærk, at den første linje, der starter et afsnit, skal referere til en tekstfil. Den skal også have parenteser for at angive starten på sektionen. Som du måske allerede ved, er en schema.ini
kan beskrive mere end én tekstfil, så linjen med parentes hjælper med at holde hver tekstfils skema adskilt.
Det næste sæt linjer omhandler filens overordnede format, og hvordan Access skal behandle tekstfilerne. Vi kan angive, om en tekstfil har overskrifter, hvor mange rækker der skal scannes, hvilken tegntabel der skal bruges og så videre.
Det sidste sæt linjer beskriver de enkelte kolonner, deres navn, datatype og bredde.
Vi vil gennemgå de gyldige muligheder og mulige værdier for disse 2 sæt.
Muligheder for at beskrive den overordnede tekstfils struktur
Du vil se en liste over gyldige muligheder for at beskrive tekstfilens overordnede format. Det er typisk at specificere som minimum Format
og ColNameHeader
men alt muligt indhold er valgfrit. Når de udelades, vil standardværdierne blive brugt som angivet nedenfor. Lad os se, hvordan vi kan beskrive en given tekstfils format.
Overordnede strukturmuligheder
Som nævnt er disse valgfrie, men sjældent udeladt. Ikke desto mindre kommer standardindstillingerne fra tekstmotorens registreringsnøgler. Flere detaljer om registreringsdatabasenøglerne kan findes her.
Format
:Angiver formatet på tekstfilerne. Hvis den udelades, bruger registreringsnøglen til tekstmotoren,Format
. Gyldige værdier er:TabDelimited
:Faneblade afgrænser kolonnerne.CSVDelimited
:Kommaer afgrænser kolonnerne som en CSV-fil.Delimited(*)
:Et enkelt tegn afgrænser kolonnerne. Kan være et hvilket som helst tegn undtagen"
Karakter. For eksempel en tekstfil afgrænset med|
karakter skal rapportereFormat=Delimited(|)
.FixedLength
:Søjlerne har fast længde; indholdet skal polstres i overensstemmelse hermed. Alle kolonner skal have en defineret bredde.
CharacterSet
:Bruger en bestemt tegntabel til at læse tekstfilen. Mulige værdier kan væreANSI
,OEM
,Unicode
eller eventuelle numeriske værdier, der repræsenterer de ønskede tegntabel. For at finde alle mulige tegntabeller, der understøttes på din Windows-maskine, skal du kigge i registreringsdatabasenøglenComputer\HKEY_CLASSES_ROOT\MIME\Database\Codepage\
. For eksempel, hvis du vil bruge utf-8-kodning, kan du angiveCharacterSet=65001
.ColNameHeader
:Angiver om den første linje indeholder kolonnenavnene. Når den udelades, bruger registreringsnøglen for tekstmotoren,FirstRowHasNames
. Værdier kan enten væreTrue
ellerFalse
.MaxScanRows
:Antal rækker Access skal scanne en tekstfil ind for at gætte den mulige datatype. Hvis indstillet til 0, vil Access scanne hele filen. Tekstmotorens registreringsnøgleMaxScanRows
bruges, når den udelades.
Lokaliseringsmuligheder
Disse muligheder omhandler hovedsageligt lokalisering af data indkodet i datoer, klokkeslæt eller valuta. Alle disse muligheder er valgfrie, og når de udelades, bruges Windows' regionsindstillinger.
DateTimeFormat
:Dato/tidsformatet, der skal bruges.DecimalSymbol
:Ethvert enkelt tegn, der bruges som separator mellem integral- og brøkdele af et tal.NumberDigits
:Antal cifre brugt i brøkdelen af et tal.NumberLeadingZeroes
:Angiver, om der skal være et indledende nul for tal mere end -1 og mindre end 1. Skal enten væreTrue
ellerFalse
.CurrencySymbol
:Identificerer symbolet, der skal fortolkes som en valuta.CurrencyPosFormat
:Beskriver, hvordan pengebeløb skal indberettes i tekstfilen. Der er fire gyldige værdier at bruge for denne indstilling repræsenteret ved tallet 0 til 3. Bemærk, at eksemplet bruger$
men i faktisk brug vil den bruge det faktiske valutasymbol defineret afCurrencySymbol
eller efter Windows' indstilling.0
:Præfiks uden mellemrum (f.eks. $1)1
:Suffiks uden mellemrum (1$)
2
:Præfiks med et mellemrum imellem ($ 1)3
:Suffiks med et mellemrum imellem (1 $)
CurrencyDigits
:Antal cifre i en brøkdel af et valutabeløb.CurrencyNegFormat
:Angiver formateringen af et negativt valutabeløb. Det er en værdi mellem 0-15 som vist nedenfor. Bemærk, at eksemplet bruger$
men i faktisk brug vil den bruge det faktiske valutasymbol defineret afCurrencySymbol
eller efter Windows' indstilling.0
:($1)1
:-$12
:$-13
:$1-
4
:(1$)5
:-$16
:1-$7
:1$-
8
:-1 $9
:-$ 110
:1 $-11
:$ 1-
12
:$ -113
:1- $14
:($1)15
:(1 $)
CurrencyThousandSymbol
:Et enkelt tegn for at angive adskillelse af tusinder i et valutabeløb. Hvis den udelades, bruges Windows-indstillingen.CurrencyDecimalSymbol
:Et enkelt tegn til at angive decimalen for et valutabeløb.
Indstillinger for kolonnedefinition
Vi så, hvordan vi kan håndtere det overordnede format af filen, men vi er nødt til at give flere oplysninger om den enkelte kolonne. Endnu vigtigere er det, at vi skal være i stand til at kortlægge de forventede datatyper af kolonner. Ergo, den tredje sektion af schema.ini
skal beskrive hver kolonne med lige så mange rækker, som der er kolonner i måltekstfilen. Det generelle format for kolonnedefinitionen kan se sådan ud:
ColN=Name Type Width #
Det er vigtigt at bemærke, at bortset fra præfikset ColN=
, alle delene er valgfri, men om du kan udelade det, afhænger af andre faktorer som diskuteret nedenfor.
ColN=
:Et obligatorisk præfiks, der skal være på hver start af linjen.N
skal være et tal, der starter ved 1 og stigende.Name
:Giver en kolonne navnet. HvisColNameHeader
er indstillet tilTrue
,Name
parameter kan udelades. Men hvis det erFalse
, så skal du angiveName
for at undgå fejl.Type
:Angiver datatypen. Hvis den udelades, vil Access bruge sit bedste gæt baseret på de scannede rækker, styret afMaxScanRows
mulighed.type
skal indstilles til en af disse gyldige værdier. Synonymer er anført efter det kanoniske søgeord:Bit
,Boolean
Byte
Short
,Integer
Long
Currency
Single
Double
,Float
DateTime
Text
,Char
Memo
,LongChar
Date
Width #
:Angiver kolonnens bredde. Hvis dette er angivet, er den bogstaveligeWidth
skal medtages og derefter efterfølges af et tal. Hvis du vil angive, at en kolonne er 50 tegn bred, skal du skrive:
Col17=ProductDescription Text Width 50
For filer med fast bredde erWidth
er obligatorisk. Med afgrænsede filer kan du udelade det. Access vil dog bruge disse oplysninger til tekstfelter for at begrænse længden og muligvis afkorte indholdet. For andre datatyper har bredden ingen effekt.
Konklusion
Du har set, hvordan du kan styre en tekstfils skema ved hjælp af en schema.ini
som du kan oprette i en mappe, hvor tekstfilen(erne) ligger. Du kan også se, at schema.ini
giver dig mere detaljeret kontrol over regionale indstillinger, hvilket kan være nyttigt, hvis du har med internationale data at gøre, og du ikke kan kontrollere valuta- eller datoformateringen. I den næste artikel vil du se på den alternative metode til at beskrive tekstfilens struktur ved hjælp af Access' systemtabeller.