Lees gegevens uit tekstbestand
allemaal op pagina instorten
Syntaxis
A = fScanf (FileId, formatspec)
A = scanf (fileID, formatspec, maat)
[A, count] = fscanf (___)
Beschrijving
voorbeeld
A = fscanf (fileID,,formatspec))
ReadSData van een open tekstbestand in kolomvectorA
en interpret waarden in het bestand volgens het formaat dat is opgegeven doorformatspec
.DeFSCANF
Functie brengt het formaat opnieuw in het hele bestand toe en positioneert de bestandsaanwijzer aan de einde-van-fileMarker.AlsFSCANF
kan niet overeenkomenformatspec
Naar de gegevens leest het alleen het gedeelte dat overeenkomt met en stopt met verwerking.
Het tekstbestand wordt aangegeven door de bestandsidentifier,fileID
.GebruikFoppen
Om het bestand te openen, de karaktercodes op te geven en defileID
waarde.Wanneer u klaar bent met lezen, sluit u het bestand door te bellenfclose (FileId)
.
voorbeeld
A = fscanf (fileID,,formatspec,,siza))
ReadsFile -gegevens in een array,A
, met afmetingen,siza
en positioneert de bestandsaanwijzer na de laatste waarde gelezen.FSCANF
pompuleertA
INCOLUND BESTELLING.siza
moet een positief gehele getal zijn, hebben de vorm[M n]
, waarM
EnN
zijn positieve gehele getallen.
voorbeeld
[[A,,graaf] = fscanf (___))
Bovendien retourneert het aantal velden datFSCANF
leest inA
. Voor numerieke gegevens is dit het aantal gelezen waarden.U kunt Thissyntax gebruiken met een van de invoerargumenten van de vorige syntaxis.
Voorbeelden
alles inklappen
Lees het bestandsinhoud in kolomvector
Open live script
Maak een voorbeeldtekstbestand dat drijvende-puntnummers bevat.
x = 100*rand(8,1);fileID = fopen('nums1.txt',,'W'); fprintf (fileid,'%4.4f \ n', x); fclose (fileID);
Bekijk de inhoud van het bestand.
typenums1.txt
81.472490.579212.698791.337663.23599.754027.849854.6882
Open het bestand voor het lezen en verkrijg de bestandsidentifier,fileID
.
fileid = fopen ('nums1.txt',,'R');
Definieer het formaat van de te lezen gegevens.Gebruik'%F'
om nummers van drijvende komma op te geven.
formatspec ='%F';
Lees de bestandsgegevens, vuluitvoerarray vullen,A
, in kolomorder.FSCANF
Verbiedt het formaat opnieuw,formatspec
, over het hele bestand.
A = fScanf (FileId, formatspec)
A =8 × 181.4724 90.5792 12.6987 91.3376 63.2359 9.7540 27.8498 54.6882
A
is een kolomvector met gegevens uit het bestand.
Sluit het bestand.
fclose (fileId);
Lees het bestandsinhoud in array
Open live script
Maak een voorbeeldtekstbestand dat gehele getallen en nummers van de drijvende komma bevat.
x = 1: 1: 1; y = [x; rand (1,5)]; fileid = fopen ('nums2.txt',,'W'); fprintf (fileid,' %d %4,4f \ n', y); fclose (fileID);
Bekijk de inhoud van het bestand.
typenums2.txt
1 0.81472 0.90583 0.12704 0.91345 0.6324
Open het bestand voor het lezen en verkrijg de bestandsidentifier,fileID
.
fileid = fopen ('nums2.txt',,'R');
Definieer het formaat van de te lezen gegevens en de vorm van de uitvoerarray.
formatspec =' %d %f'; sizea = [2 inf];
Lees de bestandsgegevens, vuluitvoerarray vullen,A
, in kolomorder.FSCANF
hergebruikt het formaat,formatspec
, over het hele bestand.
A = scanf (fileID, formatspec, maat)
A =2 × 51.0000 2.0000 3.0000 4.0000 5.0000 0.8147 0.9058 0.1270 0.9134 0.6324
fclose (fileId);
Transponeer de array zodatA
komt overeen met de oriëntatie van de gegevens in het bestand.
A = a '
A =5 × 21.0000 0.8147 2.0000 0.9058 3.0000 0.1270 4,0000 0.9134 5.0000 0.6324
Sla specifieke tekens in het bestand over
Sla tot specifieke tekens in een voorbeeldbestand en retourneer alleen numerieke gegevens.
Maak een voorbeeldtekstbestand met temperatuurwaarden.
str ='78 ° C 72 ° C 64 ° C 66 ° C 49 ° C '; fileid = fopen ('temperature.dat',,'W'); fprintf (fileid,'%S', str); fclose (fileID);
Lees de cijfers in het bestand, skip de tekst over, ° C. Retourneer ook het aantal waarden datFSCANF
lezen. De uitgebreide ASCII -code 176 vertegenwoordigt het diploma -teken.
fileid = fopen ('temperature.dat',,'R'); graden = char (176); [a, count] = fscanf (fileId, ['%D'graden'C']) fclose (fileID);
A = 78 72 64 66 49Count = 5
A
is een vector die de numerieke waarden in het bestand bevat.graaf
geeft aan datFSCANF
Readfive -waarden.
Voer argumenten in
alles inklappen
fileID
-Bestandsidentifier
geheel getal
Bestandsidentifier van een open tekstbestand, opgegeven als een integer. Voordat u een bestand leest metFSCANF
, je moet gebruikenFoppen
Om het bestand te openen en defileID
.
Gegevenstypen:dubbele
formatspec
-Formaat van gegevensvelden
karaktervector|String scalair
Formaat van de gegevensvelden in het bestand, gespecificeerd als een tekenvector of tekenreeks scalair van een of meer conversiespecificaties.WanneerFSCANF
Readsa -bestand probeert de gegevens te matchen met het formaat dat is opgegeven doorformatspec
.
Numerieke velden
Deze tabel geeft een overzicht van de beschikbare conversiespecificaties voor numericinputs.FSCANF
converteert waarden naar hun decimale (basis 10) weergave.
Numeriek veldtype | Conversie Specificator | Details |
---|---|---|
Geheel getal, ondertekend |
| Basis 10 |
| De waarden in het bestand bepalen de basis:
| |
| 64-bit waarden, basis 10, 8 of 16 | |
Geheel getal, niet ondertekend |
| Basis 10 |
| Basis 8 (octaal) | |
| Basis 16 (hexadecimaal) | |
| 64-bit waarden, basis 10, 8 of 16 | |
Drijvend puntnummer | | Floating-Point Fields kunnen van het volgende bevatten (niet casusgevoelig): |
| ||
|
Karaktervelden
Deze tabel geeft een overzicht van de beschikbare conversiespecificaties voor karakterinvoer.
Type karakterveld | Conversie Specificator | Beschrijving |
---|---|---|
Karaktervector of string scalair |
| Lees alle tekens met uitzondering van witte ruimtes. |
| Lees een enkel personage, inclusief witte ruimte. | |
Patroonafstemming |
| Lees alleen karakters tussen de beugels tot het eerste toedieningskarakter of de witte ruimte. Voorbeeld: |
Alsformatspec
Bevat dan een combinatie van numerieke tekenspecificatiesFSCANF
ConvertSach -karakter naar zijn numerieke equivalent.Deze conversie vindt plaats zelfs wanneer het formaat expliciet alle numerieke waarden overslaat (bijvoorbeeld, bijvoorbeeldformatspec
is'%*d%s'
).
Optionele operators
Velden en tekens om te negeren
FSCANF
Leest alle numerieke waarden en tekens in uw bestand in volgorde, tenzij u vertelt dat het een bepaald veld of een deel van een veld moet negeren.Voeg een asterisk in om velden over te slaan (*
) Na het percentage teken (Reken
). Bijvoorbeeld om gehele getallen over te slaan, specificeer%*D
.Veldbreedte
Om het maximale aantal cijfers of teksttekens op te geven, voegt u een getal in na het percentage -teken.Bijvoorbeeld,
%10c
Lees op tot 10 tekens tegelijk, inclusief witte ruimte.% 4F
Readsup naar 4 cijfers tegelijk, inclusief het decimale punt.Letterlijke tekst om te negeren
FSCANF
negeer specifieke tekst toegevoegd aan deformatspec
Conversie Specificator.Voorbeeld:
Niveau%u
leest'Niveau 1'
als1
.Voorbeeld:
%ustep
leest'2step'
als2
.
siza
-Afmetingen van output array
Inferen
(standaard) |geheel getal|twee-elementen rijvector
Afmetingen van de uitvoerarray,A
, gespecificeerdea'sInferen
, een geheel getal of een rijvector met twee elementen.
Vorm van desiza Invoer | Beschrijving |
---|---|
Inferen | Lees tot het einde van het bestand. Voor numerieke gegevens, de uitvoer, A , is een kolomvector.Voor tekstgegevens, A is een karaktervector. |
| Hoogop lezenN Numerieke waarden of character -velden.Voor numerieke gegevens, de uitvoer, A , is een kolomvector.Voor tekstgegevens, A , is een karaktervector. |
[[ | Hoogop lezen Numerieke waarden of tekenvelden.N kan zijnInferen ,MaarM kan niet. Het resultaat,A ,isM -door-N , ingevuld in kolomorder. |
Uitvoerargumenten
alles inklappen
A
- Bestandsgegevens
Kolomvector |Matrix |karaktervector |tekenreeks
Bestandsgegevens, geretourneerd als een kolomvector, matrix, teken van tekens vectoror tekens array.De klasse en grootte vanA
afhankelijk van deformatspec
invoer:
Als
formatspec
Bevat dan alleen numericspecificatiesA
is numeriek.Als u hetsiza
argumentA
is een matrix van de opgegeven grootte.Anders,A
ISA -kolomvector.Als de invoer minder dan bevatsiza
waarden danFSCANF
kussensA
met nullen.Als
formatspec
Bevat dan slechts 64-bit ondertekende gehele specificatiesA
is van klasseInt64
.Als
formatspec
Bevat dan slechts 64-bit niet-ondertekende gehele specificatiesA
is van klasseWintshch
.Anders,
A
is van klassedubbele
.
Als
formatspec
Bevat alleen specificaties van tekentekst (%C
of%S
),DanA
is een tekenreeks.Als u opgeeftsiza
en de invoer bevat minder tekens danFSCANF
kussensA
metChar (0)
.Als
formatspec
Bevat dan een combinatie van numerieke en tekenspecificatiesA
Isnumeriek, van klassedubbele
, EnFSCANF
ConvertSach -teksttekens naar het numerieke equivalent.Dit gebeurt zelfs wanneerformatspec
EXPLICITYSKips alle numerieke velden (bijvoorbeeld, bijvoorbeeld,formatspec
is'%*d%s'
).Als Matlab®kan de bestandsgegevens niet overeenkomen met
formatspec
,DanA
kan numeriek zijn of een tekenreeks.De class vanA
hangt af van de waarden dieFSCANF
Lees voordat het wordt gestopt met de verwerking.
graaf
- Aantal gelezen tekens
scalair-
Aantal gelezen tekens, geretourneerd als een scalaire waarde.
Tips
Formaat specificaties voor de leesfuncties
SSCANF
EnFSCANF
verschillen van de formaten voor de schrijffunctiessprintf
Enfprintf
.De leesfuncties ondersteunen geen precisieveld.Het widthfield specificeert een minimum voor het schrijven, maar een maximum voor het lezen.
Algoritmen
Matlab leest tekens met behulp van het coderingsschema dat aan het bestand is gekoppeld.U geeft de codering op wanneer u het bestand opent met behulp van deFoppen
functie.
Uitgebreide mogelijkheden
C/C ++ code -generatie
Genereer C en C ++ code met MATLAB® Coder ™.
Gebruik notities en beperkingen:
Voor het genereren van MEX -codes behandelt de codegenerator
FSCANF
als een extrinsieke functie.ZienGebruik MATLAB-engine om een functieaanroep in gegenereerde code in MATLAB-functieblokken uit te voeren tijdens versnelling van het vaste punt algoritme(MATLAB -coder).Het invoerargument
formatspec
moet een constante zijn.De
%S
En%[...]
Conversie -specificaties worden niet ondersteund.Als u de dynamische geheugentoewijzing uitschakelt, moet u het invoerargument verstrekken
siza
en het moet een constante zijn.In bepaalde gevallen kan het gedrag van de gegenereerde code verschillen van MATLAB.In dergelijke gevallen komt het gedrag van de gegenereerde code overeen met dat van
FSCANF
in de C -taal.Dit zijn enkele voorbeelden:In de gegenereerde code, als
FSCANF
Leest een nul -byte, de geretourneerde waarden kunnen worden afgekapt.Als u een gehele waarde leest
X
in een geheel getal formaat waarvoorIntmax
is kleiner danX
, de MATLAB -uitgang verzadigt opIntmax
.In de gegenereerde code veroorzaakt deze situatie een overloop.In bepaalde gevallen, na
FSCANF
Leest uit een bestand, de locatie van de bestandsaanwijzer kan anders zijn in MATLAB en de gegenereerde code.Stel bijvoorbeeld dat het bestandmyfile.txt
Bevat de karaktervector'1+2i'
.U voert deze opdrachten uit:fid = fopen ('myfile.txt',,'R'); tmp = fscanf (fid,'%F'))
TMP = 1 2
GebruikftellOm de huidige locatie van de positiepointer in het bestand te bepalen
myfile.txt
.ftell (fid)
Ans = 3
In Matlab, daarna
FSCANF
wordt uitgevoerd, de bestandsaanwijzer is gepositioneerd na het derde teken'2'
.In de gegenereerde code, naFSCANF
Uitgevoert, de bestandsaanwijzer bevindt zich aan de onderkant van de file.
Draadgebaseerde omgeving
Voer code op de achtergrond uit met MATLAB®achtergrondpool
of versnellen code met parallelle computing Toolbox ™Jammer
.
Deze functie ondersteunt volledig op middel gebaseerde omgevingen.Zie voor meer informatieVoer MATLAB-functies uit in de op draad gebaseerde omgeving.
Versiegeschiedenis
Geïntroduceerd vóór R2006A
Breid alles uit
Verspilling 022 B:Gebruik de functie in op draad gebaseerde omgevingen
Deze functie ondersteunt op threa gebaseerde omgevingen.
Zie ook
Foppen|fprintf|textcan|SSCANF|fetl|fgets|freading
Onderwerpen
- Tekstgegevensbestanden importeren met I/O op laag niveau
MATLAB -commando
U klikte op een link die overeenkomt met deze MATLAB -opdracht:
Voer de opdracht uit door deze in het matlab -opdrachtvenster in te voeren.Webbrowsers ondersteunen geen MATLAB -opdrachten.
Selecteer een website
Kies een website om vertaalde inhoud te krijgen waar beschikbaar en zie lokale evenementen en aanbiedingen.Op basis van uw locatie raden we u aan te selecteren:.
U kunt ook een website selecteren in de volgende lijst:
Amerika
- Latijns Amerika(Español)
- Canada(Engels)
- Verenigde Staten(Engels)
Europa
- België(Engels)
- Denemarken(Engels)
- Deutschland(Deutsch)
- Ruimte(Español)
- Finland(Engels)
- Frankrijk(Frans)
- Ierland(Engels)
- Italië(Italiaans)
- Luxemburg(Engels)
- Nederland(Engels)
- Noorwegen(Engels)
- Oostenrijk(Deutsch)
- Portugal(Engels)
- Zweden(Engels)
- Zwitserland
- Deutsch
- Engels
- Frans
- Verenigd Koninkrijk(Engels)
Neem contact op met uw plaatselijke kantoor