1/89 Programação em astronomia: indo além de loops e prints · Pode ser visto como um mapa, onde...

89
Programação em astronomia: indo além de loops e prints 5 – Strings e I/O Paulo Penteado http://www.ppenteado.net/pea (http://www.xkcd.org/844) 1/89

Transcript of 1/89 Programação em astronomia: indo além de loops e prints · Pode ser visto como um mapa, onde...

Programaccedilatildeo emastronomia indoaleacutem de loops e prints

5 ndash Strings e IO

Paulo Penteado

httpwwwppenteadonetpea (httpwwwxkcdorg844)

189

Programa

1 ndash Slides em httpwwwppenteadonetpeapea01_linguagenspdf Motivaccedilatildeo Toacutepicos abordados Toacutepicos omitidos Opccedilotildees e escolha de linguagens Uso de bibliotecas Referecircncias

2 ndash Slides em httpwwwppenteadonetpeapea01_organizacaopdf Organizaccedilatildeo de coacutedigo Documentaccedilatildeo IDEs Debug Unit testing

3 ndash Slides em httpwwwppenteadonetpeapea02_variaveispdf Tipos de variaacuteveis Representaccedilotildees de nuacutemeros e suas consequumlecircncias Ponteiros Estruturas Objetos

289

Programa

4 ndash Slides em httpwwwppenteadonetpeapea03_conteinerspdf Contecirciners Arrays Listas Mapas Outros contecirciners Vetorizaccedilatildeo Escolha de contecirciners

5 ndash Slides em httpwwwppenteadonetpeapea04_strings_iopdf Strings Expressotildees regulares Arquivos

389

Strings ndash definiccedilatildeo e importacircncia

Um string eacute uma variaacutevel que representa texto como um conjunto de caracteres

Haacute um tipo baacutesico com pelo menos um suporte simples em todas as linguagens

Eacute um dos mais necessaacuterios para tudo Exs

informar o usuaacuterio nomes de arquivos identificar coisas (elementos objetos datas nomes programas algoriacutetimos comandos

etc) escrever e gravar arquivos (embora seja comum haver opccedilotildees melhores que arquivos

texto) graacuteficos

Tem o processamento mais complexo entre os tipos fundamentais

Processamento de strings natildeo eacute apenas prints e reads

489

Strings - implementaccedilotildees

Linguagens variam muito na forma como implementam seu(s) tipo(s) para strings

Haacute strings dinacircmicos e estaacuteticos

Strings estaacuteticos tecircm um nuacutemero (ou nuacutemero maacuteximo) predefinido de caracteres que natildeo pode ser mudado Podem ser pensados como arrays estaacuteticos 1D onde cada elemento eacute um caractere

(eacute como agraves vezes satildeo implementados) Tentar acessar caracteres aleacutem do limite pode resultar em apenas truncamento ou

ateacute no encerramento do programa por violaccedilotildees de memoacuteria Exs C Fortran

Strings dinacircmicos onde o nuacutemero de caracteres pode ser alterado a qualquer momento sem limites preestabelecidos Podem ser pensados como listas homogecircneas onde cada elemento eacute um caractere Exs C++ Java IDL R Python Perl

Algumas linguagens tecircm tipos diferentes para caracteres individuais (character) e strings (string de zero ou mais caracteres) C C++ Java

Algumas linguagens tecircm mais de um tipo variando em funcionalidade

Perl eacute a linguagem com melhor suporte a strings principalmente processamento de expressotildees regulares (adiante)

589

Strings - codificaccedilotildees

Do que se constitui um string

Caracteres satildeo um conceito de alto niacutevel e computadores soacute armazenam diacutegitos binaacuterios

Nada faz com que uma variaacutevel ou arquivo ldquosejamrdquo intrinsecamente caracteres

A correspondecircncia eacute determinada pelo uso de codificaccedilotildees da mesma forma que inteiros e reais satildeo tambeacutem codificados de alguma forma

A maior parte das linguagens assume uma codificaccedilatildeo (ou usam um default) algumas tecircm tipos diferentes para diferentes codificaccedilotildees e as que usam objetos podem ter objetos strings com codificaccedilatildeo variaacutevel

Antigamente a codificaccedilatildeo era sempre a mesma ASCII (American Standard Code for Information Interchange)

1 byte (8 bits) por caractere - 28 (256) valores diferentes

Uma tabela define que caractere eacute codificado por que nuacutemero na faixa 0-127

689

Strings - codificaccedilotildees - ASCII789

Strings - codificaccedilotildees - ASCII

Nem todos os caracteres ASCII satildeo visiacuteveis (printable) Alguns satildeo espaccedilos em branco (espaccedilos tabs etc) outros satildeo alguma forma de caractere de controle (CR LF etc)

O zero costuma ser reservado para controle significando um string vazio (se soacute tem 0) ou em algumas codificaccedilotildees (C) o fim do string

Os caracteres codificados por valores 128-255 natildeo satildeo parte do padratildeo ASCII A associaccedilatildeo varia de acordo com a codificaccedilatildeo escolhida

Sistemas que usam ASCII satildeo os mais simples caracteres sempre tecircm o mesmo tamanho em bytes (1 byte) Satildeo facilmente lidos processados e convertidos de para nuacutemeros

ASCII eacute a codificaccedilatildeo de texto mais comum mas

Ao contraacuterio do que muitos assumem ASCII natildeo eacute a uacutenica forma de codificar texto

ASCII natildeo eacute sinocircnimo de arquivo texto

Em anos recentes Unicode em suas vaacuterias formas (adiante) tem se tornado gradativamente mais comum

889

Strings - codificaccedilotildees - ASCII

Por que ASCII natildeo eacute sempre usado

Porque eacute insuficiente Natildeo conteacutem por exemplo

Caracteres modificados (com acentos cedilha)

Siacutembolos matemaacuteticos (aleacutem dos muito baacutesicos + - ^ gt lt = ) Ex part sum int plusmn ge le times infin neℝ ℤ forall exist ∮ ≌ nabla

Siacutembolos fiacutesicos Ex micro Å oplus

Letras gregas

Outros siacutembolos Ex rarr harr euro ordf deg pound yen iquest iexcl

Caracteres de outras liacutenguas (inclusive de muitos siacutembolos como a vaacuterias formas usadas em chinecircs e japonecircs)

989

Strings - codificaccedilotildees - Unicode

O que usar para natildeo ter as limitaccedilotildees do ASCII

O uacutenico padratildeo de uso dominante hoje eacute o Unicode

Desenvolvido para ser um padratildeo universal contendo ldquotodosrdquo os caracteres de ldquotodasrdquo as escritas e dados sobre os caracteres

Natildeo eacute imutaacutevel adiccedilotildees satildeo decididas pelo Unicode Consortium (httpwwwunicodeorg)

1089

Strings - codificaccedilotildees - Unicode

Haacute duas partes no Unicode o cataacutelogo (uacutenico) e as codificaccedilotildees (vaacuterias)

O cataacutelogo eacute definido independente de codificaccedilotildees Pode ser visto como um mapa onde os pontos de coacutedigo (codepoints) satildeo as

chaves e os valores satildeo os dados sobre aquele caractere

ldquoIn Unicode the letter A is a platonic ideal Its just floating in heaven A

This platonic A is different than B and different from a but the same as A and A and A

The idea that A in a Times New Roman font is the same character as the A in a Helvetica font but different from a in lower case does not seem very controversial but in some languages just figuring out what a letter is can cause controversy

Is the German letter szlig a real letter or just a fancy way of writing ss If a letters shape changes at the end of the word is that a different letter Hebrew says yes Arabic says no

Anyway the smart people at the Unicode consortium have been figuring this out for the last decade or so accompanied by a great deal of highly political debate and you dont have to worry about it Theyve figured it all out alreadyrdquo

de The absolute minimum every software developer absolutely positevely must know about Unicode and character sets (no excuses)

httpwwwjoelonsoftwarecomarticlesUnicodehtml

1189

Strings - codificaccedilotildees - UnicodeOs dados sobre um caractere Unicode satildeo importantes para suas buscas e identificaccedilatildeoIncluem nome e propriedades visiacutevel (printable) numeacuterico alfanumeacuterico maiuacutesculo minuacutesculo ldquoespaccedilordquo (blank) liacutengua matemaacutetico etc

ExsUnicode Character LATIN CAPITAL LETTER A (U+0041)Name LATIN CAPITAL LETTER ABlock Basic LatinCategory Letter Uppercase [Lu]Combine 0BIDI Left-to-Right [L]Mirror NIndex entries Latin Uppercase Alphabet Uppercase Alphabet Latin

Capital Letters LatinLower case U+0061Version Unicode 110 (June 1993)

Unicode Character INTEGRAL (U+222B)Name INTEGRALBlock Mathematical OperatorsCategory Symbol Math [Sm]Combine 0BIDI Other Neutrals [ON]Mirror YIndex entries Integral Signs INTEGRALSee Also latin small letter esh U+0283Version Unicode 110 (June 1993)

(resultados de httpwwwfileformatinfoinfounicodecharsearchhtm)

int

A

1289

Strings - codificaccedilotildees - Unicode

Unicode Character ANGSTROM SIGN (U+212B)Name ANGSTROM SIGNBlock Letterlike SymbolsCategory Letter Uppercase [Lu]Combine 0BIDI Left-to-Right [L]Decomposition LATIN CAPITAL LETTER A WITH RING ABOVE (U+00C5)Mirror NOld name ANGSTROM UNITIndex entries ANGSTROM SIGNLower case U+00E5Comments non SI length unit (=01 nm) named after A J ngstroumlm Å

Swedish physicist preferred representation is U+00C5Version Unicode 110 (June 1993)

Unicode Character GREEK SMALL LETTER ZETA (U+03B6)Name GREEK SMALL LETTER ZETABlock Greek and CopticCategory Letter Lowercase [Ll]Combine 0BIDI Left-to-Right [L]Mirror NUpper case U+0396Title case U+0396Version Unicode 110 (June 1993)

(resultados de httpwwwfileformatinfoinfounicodecharsearchhtm)

ζ

1389

Strings - codificaccedilotildees - UnicodeUnicode Character NABLA (U+2207)Name NABLABlock Mathematical OperatorsCategory Symbol Math [Sm]Combine 0BIDI Other Neutrals [ON]Mirror NIndex entries difference backward backward difference del NABLAComments backward difference gradient del used for Laplacian

operator (written with superscript 2)See Also white down-pointing triangle U+25BDVersion Unicode 110 (June 1993)

Java DatastringtoUpperCase() nablastringtoLowerCase() nablaCharacterUnicodeBlock MATHEMATICAL_OPERATORSCharactercharCount() 1CharactergetDirectionality() DIRECTIONALITY_OTHER_NEUTRALS [13]CharactergetNumericValue() -1CharactergetType() 25CharacterisDefined() YesCharacterisDigit() NoCharacterisIdentifierIgnorable() NoCharacterisLetter() NoCharacterisLetterOrDigit() NoCharacterisLowerCase() NoCharacterisWhitespace() No()

(resultados de httpwwwfileformatinfoinfounicodecharsearchhtm)

nabla

1489

Strings ndash Como codificar Unicode

Haacute vaacuterias formas Nenhuma simples como ASCII porque eacute necessaacuterio um nuacutemero muito maior de pontos de coacutedigo (haacute espaccedilo para 1 114 112 hoje haacute 109 449 alocados)

Apenas usar mais bytes com um nuacutemero constante por caractere exigiria pelo menos 21 bits por caractere (221 eacute 2 097 152)

Seria demais considerando que quase todos os caracteres escritos estatildeo entre os 128 do ASCII

Em quase todo texto 20 de cada 21 bits seriam 0

A maior parte das codificaccedilotildees usa formas mais elaboradas com um nuacutemero variaacutevel de bytes por caractere

Todas as codificaccedilotildees de uso comum tem o ASCII como subconjunto os 128 caracteres do ASCII satildeo codificados em forma idecircntica em ASCII e nas codificaccedilotildees usuais de Unicode

O que ajuda na compatibilidade software Unicode escrevendo texto que soacute conteacutem caracteres do ASCII produz texto idecircntico ao que seria produzido em ASCII

1589

Strings - codificaccedilotildees para Unicode

No mundo ocidental haacute apenas duas codificaccedilotildees de uso comum

UTF-8

ISO 8859-1 (tambeacutem chamado de Latin 1)

Por isso eacute necessaacuterio saber que codificaccedilatildeo usar ao trabalhar com Unicode

Alguns softwares formatos de arquivo informam a codificaccedilatildeo usada

Outros assumem que uma eacute usada (sem ter sido informada)

Outros tentam adivinhar quando natildeo satildeo informados qual eacute (esp navegadores)

Outros soacute perguntam para o usuaacuterio (esp editores de texto)

Sistemas operacionais oferecem variadas formas de digitar caracteres especiais

Pelos coacutedigos numeacutericos

Por programas seletores de caracteres Alguns seletores de caracteres (ex kcharselect do KDE) permitem fazer buscas pelo

nome ou propriedades

1689

Strings - Onde haacute suporte a Unicode em programaccedilatildeo

Linguagens variam muito

Desconhecem Unicode (soacute usam ASCII) C Fortran

Usam nativamente ASCII (inclusive no coacutedigo-fonte) mas tecircm tipos para strings Unicode e ou funccedilotildees para processar Unicode (em variados graus) C C++ IDL R

Usam nativamente Unicode (inclusive no coacutedigo-fonte) e tecircm bom suporte a strings Unicode Java Python Perl

Muitas vezes (mesmo quando Unicode pode ser usado em coacutedigo-fonte) caracteres Unicode satildeo escritos atraveacutes de ASCII com coacutedigos de escape para coacutedigos Unicode Exs

IDLgt p=plot(testtitle=Z(00C5222B))

C C++ Java Python u2207

ReferecircnciasCharacters vs byteshttpwwwtbrayorgongoingWhen200x20030426UTFThe absolute minimum every software developer absolutely positively must know about Unicode and character sets (no excuses)httpwwwjoelonsoftwarecomarticlesUnicodehtmlUnicode character searchhttpwwwfileformatinfoinfounicodecharsearchhtm

em IDL produz intÅ

produz nabla

1789

Strings - processamento baacutesico

Operaccedilotildees mais fundamentais que costumam ser suportadas em ldquotodasrdquo as linguagens bibliotecas padratildeo (exemplos usando sintaxe de IDL)

Atribuiccedilatildeo de literais

IDLgt a=some

IDLgt helpaA STRING = some

IDLgt printasome

Concatenaccedilatildeo

IDLgt b=a+ string

IDLgt helpbB STRING = some string

1889

Strings - processamento baacutesico

Valor loacutegico

String vazio (null string) eacute falso o resto eacute verdadeiro

IDLgt c=

IDLgt if c then printc is not empty string else printc is null string ()c is null string ()

IDLgt c=a

IDLgt if c then printc is not empty string else printc is null string ()c is not empty string

Espaccedilo natildeo eacute o mesmo que string vazio

IDLgt c=

IDLgt if c then printc is not empty string else printc is null string ()c is not empty string

1989

Strings - processamento baacutesico Comparaccedilotildees

IDLgt helpabA STRING = someB STRING = some string

IDLgt printb eq a 0

IDLgt printb gt a 1

IDLgt c=[ab9Some somesome other string]

IDLgt printc[sort(c)]format=(A) some9Somesomesome other stringsome string

IDLgt printa eq A 0

IDLgt printstrcmp(aAfold_case) 1

Comparaccedilotildees de ldquotamanhordquo (maior menor etc) satildeo comparaccedilotildees pela ordem de codificaccedilatildeo (ldquoalfabeacuteticardquo)

Algumas linguagens permitem definir o ordenamento (como considerar maiuacutesculasminuacuteculas letras com acentos nuacutemeros e siacutembolos) Exs Python C++ Java Perl

2089

Strings - processamento baacutesico Substrings

IDLgt printstrmid(abcdefg32)de

Algumas linguagens nativamente suportam iacutendices para indicar substrings C C++ Fortran Python Ex (Python)

gtgtgt s=abcdegtgtgt print(s[25])cde

Outras permitem que sejam definidos iacutendices por objetos strings

Busca de caracteres ou substrings

IDLgt printstrpos(abcdefgd) 3

IDLgt printstrpos(abcdefgj) -1

IDLgt printstrpos(abcdefgbc) 1

2189

Strings - processamento baacutesico

Outros

IDLgt printstrlen(1234567) 7

IDLgt printstrlen(1234567 ) 8

IDLgt printstrlen( 1234567 ) 9

IDLgt helpstrtrim( 1234567 2)ltExpressiongt STRING = 1234567

IDLgt helpstrtrim( 1234567 1)ltExpressiongt STRING = 1234567

IDLgt helpstrtrim( 1234567 0)ltExpressiongt STRING = 1234567

IDLgt printstrupcase(abcdEF)ABCDEF

IDLgt printstrlowcase(abcdEF)abcdef

Medindo quantos caracteres tem o string inclui espaccedilos em branco

Remoccedilatildeo dos brancos agrave esquerda agrave direita ou dos dois lados

2289

Strings - conversatildeo de outros tipos para strings

Eacute uma das operaccedilotildees mais comuns para gerar textos informativos e nomes escrever arquivos (aquivos texto discutidos adiante) etc

Eacute natildeo trivial jaacute que a conversatildeo pode ser feita de muitas formas diferentes

Para tipos fundamentais sempre haacute uma conversatildeo default tanto criando um string como usando algo tipo print (para strings terminal ou arquivos)

Todo comando tipo print (print printf sprintf string write etc) e toda escrita para arquivos texto eacute uma conversatildeo para string (terminais e arquivos texto soacute conteacutem strings)

2389

Strings - conversatildeo de outros tipos para strings

Exemplos de conversotildees (IDL)

IDLgt print[-109] -1 0 9

IDLgt print1d01B10 10000000 1 100000

IDLgt helpstring(1d01B10)ltExpressiongt STRING = 10000000 1 100000

IDLgt printfunitdblarr(343)

Tipos mais elaborados podem ou natildeo ter uma forma predefinida Com objetos eacute comum ser possiacutevel definir a conversatildeo (stringification) ao criar a classe

IDLgt h=hash(a109[01]18b)

IDLgt printh9 0 1a 100000180000 b

Strings

Coloca strings em um arquivo (adiante)

Strings criados por um meacutetodo da classe hash satildeo uma forma de representar o hash

2489

Strings - conversatildeo de outros tipos para strings

Algumas linguagens (Python IDL) tecircm mais de uma forma default de gerar strings Em Python uma forma eacute executaacutevel a outra eacute mais legiacutevel

In [30] x=arange(12)reshape(43)

In [31] print(x)[[ 0 1 2] [ 3 4 5] [ 6 7 8] [ 9 10 11]]

In [32] xOut[32]array([[ 0 1 2] [ 3 4 5] [ 6 7 8] [ 9 10 11]])

In [33] y=array([[ 0 1 2] [ 3 4 5] [ 6 7 8] [ 9 10 11]])

In [37] print(array_equal(xy))True

String mais legiacutevel

String executaacutevelPode ser usado para criar um objeto equivalente

2589

Strings ndash formataccedilatildeo expliacutecita

A formataccedilatildeo pode ser especificada se a conversatildeo default natildeo eacute adequada para definir a conversatildeo em um novo tipo

Cada linguagem tem sua sintaxe para formataccedilatildeo

Haacute dois estilos semelhantes em vaacuterias linguagens

Ambos os estilos satildeo sintaxes diferentes para a mesma ideacuteia Um coacutedigo especifica o tipo de dado sendo passado (inteiro real etc) e detalhes de como seraacute feito o string (largura do campo diacutegitos decimais alinhamento etc)

2689

Strings ndash formataccedilatildeo expliacutecita

Estilo Fortran

IDL

IDLgt print1d0+1d-9 10000000

IDLgt print1d0+1d-9format=(E1610)10000000010E+00

IDLgt printx=1d0+1d-9format=(A0F1613)X= 10000000010000

Estilo C (ldquoprintfrdquo)

IDL

IDLgt printformat=(x=1610e)1d0+1d-9x=10000000010e+00

Python

In [20] print(x=1610e (1e0+1e-9))x=10000000010e+00

Nenhum formato expliacutecito (default)

2789

Strings - formatos tipo Fortran

(apenas o principal ver documentaccedilatildeo para detalhes)

Ex (IDL)

IDLgt printx=1d0+1d-9format=(A0F1613)X= 10000000010000

Tambeacutem haacute modificadores para especificar alinhamento (-) se deve haver (ou ser suprimido) avanccedilo para a pŕoxima linha posiccedilatildeo dentro do campo etc

Coacutedigo Significado Exemplo(s)

A String (A) (10A)

I Inteiro decimal (I) (10I)(-2I)

B Inteiro binaacuterio (B) (10B)

Z Inteiro hexadecimal (Z) (10Z)

O Inteiro octal (O) (10O)

F Real ponto fixo (F)(F52)

E D Real ponto flutuante (E)(D1610)

G Real ponto fixo ou flutuante de acordo com o valor (G)(G10)

ldquordquo String literal (ldquox=rdquoI10)

X Caracteres em branco (A10XI)

2889

Strings - formatos tipo C (printf)(apenas o principal ver documentaccedilatildeo para detalhes)String com campos a serem substituiacutedos por valores (passados adiante) marcados por coacutedigos com

Ex (Python)In [20] print(x=1610e (1e0+1e-9))x=10000000010e+00

Haacute modificadores para especificar alinhamento como preencher o espaccedilo que sobra (espaccedilos zeros etc) para imprimir o sinal + etc

Coacutedigo Significado (tipo) Exemplo(s)

di Inteiro decimal (int) d 5d +05d

u Inteiro decimal sem sinal (unsigned int) u 7u

fF Real em ponto fixo (double float) f 136f

eE Real em ponto flutuante (double float) e 1610e

gG Real em ponto fixo ou flutuante decidido pelo valor (double float)

g 73G

xX Inteiro sem sinal hexadecimal (unsigned int) x 10X

o Inteiro sem sinal octal (unsigned int) o 5o

s String (string) s 10s

c Caractere (char) c

p Ponteiro - estilo C - (void ) p

literal

2989

Strings - conversatildeo de strings para outros tipos

Para gerar dados a partir de strings datas identificadores pedaccedilos de nomes valores numeacutericos armazenados em strings

Tambeacutem sempre haacute conversotildees default para os tipos baacutesicos onde o intepretador programa faz o possiacutevel para entender o string como um valor daquele tipo

Tipicamente eacute feito por casts (funccedilotildees de conversatildeo) reads (de strings ou arquivos texto (arquivos texto satildeo strings)) construtores de objetos ou implicitamente

3089

Strings - conversatildeo de strings para outros tipos - impliacutecitas

Exs (IDL)

IDLgt helpfix([17 17 171 -17 9 8])ltExpressiongt INT = Array[5]

IDLgt printfix([17 17 171 -17 9 8]) 17 17 17 -17 9

IDLgt printdouble([17 17 171 -17 9 8]) 17000000 17000000 17100000 -17000000 90000000

IDLgt readfunitabcd

IDLgt a=0d0IDLgt b=00IDLgt c=0IDLgt reads171d0 189d0 -9abcIDLgt helpabcA DOUBLE = 17100000B FLOAT = 189000C INT = -9

Converte o conteuacutedo do string para os tipos das variaacuteveis abcd (explicado adiante)

3189

Strings - conversatildeo de strings para outros tipos

Quando o default natildeo eacute suficiente (ou quando escrevendo o conversor em uma classe) costuma ser possiacutevel o fazer com formatos semelhantes aos formatos para gerar strings Exs (IDL)

IDLgt a=0d0IDLgt b=00IDLgt c=0IDLgt reads171d0 something 189d0-9abc READS Input conversion error Unit 0 File ltstdingt Error occurred at $MAIN$ Execution halted at $MAIN$

Natildeo funcionou porque sozinho ele natildeo conseguiu saber o que fazer com o ldquosomethingrdquo Usando um formato especiacutefico

IDLgt reads171d0 something 189d0-9 abcformat=(D6111XD611XI)

IDLgt helpabcA DOUBLE = 17100000B FLOAT = 189000C INT = -9

Exemplos mais complicados adiante (arquivos texto)

Variaacuteveis tecircm que ser definidas para informar para que tipo seraacute feita a conversatildeo default

3289

Strings - processamento natildeo baacutesicoOperaccedilotildees importantes e muito necessaacuterias mas que natildeo satildeo suportadas em todas as linguagens bibliotecas padratildeo

Testes (ex IDL)

IDLgt str=[afitsaFITSafitsaabfitsabcfits]

IDLgt printstrmatch(strfits) 1 0 0 1 1

IDLgt printstrmatch(strfitsfold_case) 1 1 0 1 1

IDLgt printstrmatch(strfitsfold_case) 1 1 1 1 1

IDLgt printstrmatch(strfits) 1 0 0 0 0

IDLgt printstrmatch(strfits) 0 0 0 1 0

3389

Strings - processamento natildeo baacutesico

Operaccedilotildees importantes e muito necessaacuterias mas que natildeo satildeo suportadas em todas as linguagens bibliotecas padratildeo

Separaccedilatildeo de partes (Ex IDL)

IDLgt printstrsplit(2011- 131 -extract)format=(A)2011131

Processamento de nomes de arquivos diretoacuterios (Ex IDL)

IDLgt printfile_dirname(some_directoryanother_directorysome_filetxt)some_directoryanother_directory

IDLgt printfile_basename(some_directoryanother_directorysome_filetxt)some_filetxt

IDLgt printfile_basename(another_directorysome_filetxttxt)+_alteredtxtsome_file_alteredtxt

3489

Strings - processamento natildeo baacutesico

Codificaccedilotildees (Ex Python 3)

gtgtgt s=infinite money infinNeuro sign

gtgtgt print(s)infinite money infineuro

gtgtgt print(ascii(s))infinite money u221eu20ac

gtgtgt print(sencode(utf-8))binfinite money xe2x88x9exe2x82xac

3589

Strings - processamento natildeo baacutesico

Perl eacute a linguagem mais avanccedilada para processamento de strings tem suporte nativo a muitas outras operaccedilotildees a semacircntica da linguagem eacute voltada principalmente para processar strings expressotildees regulares (de vaacuterios tipos) natildeo satildeo strings fazem parte da semacircntica

Ex (sem o objetivo que seja compreensiacutevel apenas para indicar o estilo)

Ler um arquivo contendo campos com nomes separados de valores por ()

temperature 10008name some modelx_dimension 100y_dimension 100z_dimension 50()

Armazenado-o em um mapa O que pode ser feito com apenas

While (ltgt) Loop over input linesPut pre-colon text into $1 post-colon into $2 if (m (S+) (+) ) Use $1 as key $2 as value $file_data$1 = $2

3689

Expressotildees regulares - definiccedilatildeo

Expressotildees regulares (regular expressions regex) satildeo a mais poderosa ferramenta para fazer buscas e separar substrings

Regex satildeo uma linguagem com o uacutenico objetivo de especificar propriedades de strings

Implementadas em graus diferentes em todas as linguagens modernas e modernizadas facilita encontrar uma expressatildeo jaacute pronta pois satildeo quase iguais em qualquer linguagem

Estatildeo na biblioteca padratildeo em IDL Python R Perl

Em C++ e Java em bibliotecas comuns (Boost Jregex)

Para que servem

Uma expressatildeo regular especifica propriedades de strings

O interpretador de expressotildees regulares (regular expression engine) recebe a expressatildeo e o string a analisar e determina se o string corresponde (matches) agrave expressatildeo regular

Em alguns casos o interpretador pode tambeacutem informar que parte(s) do string corresponde(m) a que parte(s) da expressatildeo regular e realizar processamentos com estas partes

3789

Expressotildees regulares ndash exemplos de usos Separar partes de strings

Encontrar linhas em arquivos que tenham nomes valores e comentaacuterios e separar estes pedaccedilos

Escalar com comentaacuterio

SLITPA = 351979 Slit position angle

Array 1D sem comentaacuterio (se extendendo por vaacuterias linhas)

BAND_BIN_CENTER = (03505400358950036629003732200379490 0387900104598)

Escalares em diferentes formatos

Total Mechanical Luminosity 15310E+03resources_usedwalltime=005603

Pedaccedilos de nomes

6063 17836E-20 2456 T FeIX((3Pe)3d(2PE)4p_1Po-3s2_3p6_1Se)

Datas separando ano mecircs dia hora (em vaacuterios formatos diferentes)

DATE-OBS= 2006-12-18 universal date of observationDATE_TIME = 2010-07-19T161032START_TIME = 2006-182T225102850Z

3889

Expressotildees regulares ndash exemplos de usos

Separar partes de strings Separar partes de nomes de arquivos (por significarem algo como identificar o

conteuacutedo)

specdec18s0041fitsscamdec18i0054fits15_7_mts_hmpixselh_mr15sav15_7_mts_hwpixselh_mr15sav16_3_mts_hwpixselb_mr16savreadmodel5l_-1_000010000_10000_r05_030_08196_0100000_005000000_1000eps

Determinar se um string eacute um nuacutemero (inteiro real fixo flutuante)

Encontrar identificadores Exs nomes de cataacutelogos endereccedilos HTTPFTP endereccedilos de email

Separar campos em arquivos sendo lidos onde as linhas natildeo tecircm a mesma formataccedilatildeo algumas linhas com colunas separadas por espaccedilos outras por tabs outras por

siacutembolos ignorando linhas de comentaacuterios e linhas vazias

3989

Expressotildees regulares - usoEx (IDL) encontrar nomes de arquivos com algumas propriedades

IDLgt printfilesformat=(A)CM_1477475933_1_viscubCM_1477476864_1_ircubCM_1477476864_1_irgcubCM_1477476864_1_viscubCM_1477477826_1_ircubCM_1477477826_1_irgcubCM_1477477826_1_viscubmosaic2cub

IDLgt printstregex(files+irgcubboolean) 0 0 1 0 0 1 0 0

A expressatildeo regular eacute +irgcub Especifica uma ou mais ocorrecircncias seguidas (+) de qualquer caractere () seguido de uma ocorrecircncia de irgcub (o ponto vem precedido do caractere de

escape () para ser entendido literalmente como um ponto e natildeo como o seu significado especial (qualquer caractere)

Esta aplicaccedilatildeo do interpretador (stregex) retorna um valor Booleano (verdadeirofalso) para cada elemento do string passado (files) que informa se aquele elemento correspondia agravequela expressatildeo regular

Este eacute um exemplo artificial Seria mais faacutecil ter usado strmatch(filesirgcub)

4089

Expressotildees regulares - uso

Em casos como este tipicamente o resultado de stregex seria usado como filtro para selecionar apenas os elementos do array de strings que satisfazem agravequela expressatildeo regular

IDLgt w=where(stregex(files+irgcubboolean)null)IDLgt printfiles[w]format=(A)CM_1477476864_1_irgcubCM_1477477826_1_irgcub

Ex (IDL) Determinar que strings conteacutem uma data no formato yyyy-mm-dd

IDLgt strs=[201002012010-02-012010-2-1aaaa-mm-ddT2010-02-01J]IDLgt printstregex(strs[0-9]4-[0-9]2-[0-9]2boolean) 0 1 0 0 1

Esta expressatildeo regular especifica quatro repeticcedilotildees (4) de diacutegitos (caracteres na faixa [0-9]) seguido de um (-) seguido de duas repeticcedilotildees (2) de dois diacutegitos ([0-9]) seguido de um (-) seguido de duas repeticcedilotildees (2) de dois diacutegitos ([0-9])

Uma expressatildeo regular apenas um pouco mais elaborada poderia corresponder aos 3 formatos de data no array acima E poderia se impedir que a uacuteltima (com outros caracteres antes e depois da data) seja aceita

4189

Expressotildees regulares - regras - caracteres ldquonormaisrdquo

Uma expressatildeo regular usa caracteres ldquonormaisrdquo e especiais para especificar o que se vai procurar na ordem em que aparecem na expressatildeo

Se um caractere eacute normal (natildeo eacute um dos especiais mostrados adiante) ele especifica uma ocorrecircncia daquele caractere

Ex J eacute uma expressatildeo regular que corresponde a qualquer string onde ocorra J Jaacute JA soacute corresponde a strings que tenham JA dentro

Exs (IDL)

IDLgt strs=[JJJJJJaJAjaJa]

IDLgt printstregex(strsJboolean) 1 1 1 0 1

IDLgt printstregex(strsJAboolean) 0 0 1 0 0

4289

Expressotildees regulares - regras - caracteres especiaisCaracteres especiais tecircm outros significados Para significar literalmente aquele caractere deve ser escapado (escaped) com um

Siacutembolo significado exemplo Corresponde(m) Escape o caractere seguinte deve ser interpretado

literalmente natildeo como especial aa

Qualquer caractere ab ajb aab abb jafbc

+ Uma ou mais repeticcedilotildees do que vem agrave esquerda a+b ab aab bab baabh

() Subexpressatildeo para agrupar termos afetados por um caractere especial (como parecircnteses em notaccedilatildeo matemaacutetica)

(ab)+c abc ababc dabababcg

Zero ou mais repeticcedilotildees dos termos agrave esquerda ab abbaab caaabg

Zero ou uma repeticcedilatildeo dos termos agrave esquerda ab b ab cabd cbd

| Alternaccedilatildeo qualquer um dos dois agrave esquerda a|bc ac bc jacd jbcd

n Exatamente n repeticcedilotildees do termo agrave esquerda a2b aab daaabg

n1n2 De n1 a n2 repeticcedilotildees do termo agrave esquerda a12b ab aab aaab gaaabbd

^ Acircncora (no comeccedilo) nada agrave esquerda ^ab ab abb

$ Acircncora (no fim) nada agrave direita ab$ abaab

[] Conjunto de valores (explicado adiante)

4389

Expressotildees regulares - regras - conjuntos de valores

[] denota um conjunto de valores que pode conter

Uma lista de coisas que devem corresponder Ex [abc] signfica qualquer caractere no conjunto abc Correspondem a esta

expressatildeo abcabha

Uma lista de coisas que natildeo podem corresponder [^abc] significa qualquer coisa que natildeo seja a b ou c Correspondem a esta

expressatildeo d jgs gg

Faixas de valores [0-9] signfica qualquer diacutegito [0-9a-zA-Z] significa qualquer diacutegito ou letra

Classes de valores como algumas faixas e outros conjuntos ocorrem com muita frequumlecircncia haacute nomes

especiais para eles Estes (em IDL) vecircm entre [] ex [[digit] significa o mesmo que [0-9]

4489

Expressotildees regulares - regras - classes de valores

Classe signficado

alnum Caracteres alfanumeacutericos 0-9a-zA-Z

alpha Caracteres alfabeacuteticos a-zA-Z

cntrl Caracteres de controle ASCII (natildeo visiacuteveis coacutedigos 1 a 31 e 127)

digit Diacutegitos (decimais) 0-9

graph Caracteres visiacuteveis ASCII 33 a 126 (natildeo inclui o espaccedilo)

lower Letras minuacutesculas a-z

print Caracteres ldquoimprimiacuteveisrdquo (visiacuteveis e o espaccedilo) ASCII 32 a 126

punct Caracteres de pontuaccedilatildeo $amprsquo()+-lt=gt[]^_lsquo|~

space Os caracteres ldquoem brancordquo (blank) espaccedilo tab tab vertical CR LF (ASCII 32 e 9-13)

upper Letras maiuacutesculas A-Z

xdigit Diacutegitos hexadecimais 0-9A-Fa-f

lt Comeccedilo de palavra (palavra definida como sequumlecircncia de coisas natildeo space)

gt Fim de palavra (palavra definida como sequumlecircncia de coisas natildeo space)

Estas satildeo apenas as principais Algumas implementaccedilotildees tecircm muito mais (em particular nas linguagens que usam Unicode nativamente)

4589

Expressotildees regulares - exemplos

Determinar se strings satildeo nuacutemeros (Ex IDL)

IDLgt str=[9-18 875-812-45913E9-98d7a188d032f5]

Inteiros

IDLgt intexpr=^[-+][0-9]+$

IDLgt printstregex(strintexprboolean) 1 1 0 0 0 0 0 0 0 0

Ponto flutuante

IDLgt fpexpr=^[-+](([0-9][0-9]+)|([0-9]+[0-9]))([eEdD][-+][0-9]+)$

IDLgt printstregex(strfpexprboolean) 1 1 0 1 1 1 1 1 0 0

Sinal opcional

1 ou mais diacutegitos

Sinal opcional

0 ou mais diacutegitos opcionalmente seguidos de um ponto e 1 ou mais diacutegitos

1 ou mais diacutegitos opcionalmente seguidos de um ponto e 0 ou mais diacutegitos

ou Expoente opcional letra do expoente seguida de sinal opcional seguido de um ou mais diacutegitos

4689

Expressotildees regulares ndash extraccedilatildeo

Interpretadores de expressotildees regulares costumam oferecer mais que apenas testar se um string corresponde a uma expressatildeo

Em geral tambeacutem podem retornar que parte(s) do string corresponde(m) agrave expressatildeo

Ex (IDL) Determinar se um string conteacutem uma data incluindo os formatos

IDLgt dates=[2011-01-312011 1 3120110131something done on y2011m1d31 with something]

E extrair a data de dentro do string

IDLgt expr=[0-9]4[0-9]12[0-9]12

(4 diacutegitos)(qualquer separador)(1 a 2 diacutegitos)(qualquer separador)(1 a 2 diacutegitos)

IDLgt printstregex(datesexprextract)format=(A)2011-01-312011 1 31201101312011m1d31

Como agora separar ano mecircs e dia Com uma busca e uma extraccedilatildeo para cada Poderia ser mais eacute mais faacutecil com uma uacutenica expressatildeo regular

4789

Expressotildees regulares - aleacutem de apenas testes

Tambeacutem podem retornar que parte(s) do string correspondem agrave expressatildeo toda e agraves suas subexpressotildees (partes da expressatildeo delimitadas por parecircnteses)

Ex (IDL) Separar pedaccedilos de datas Neste caso para a expressatildeo ficar menor assumindo um formato simples (yyyy-mm-ddThhmmssfff) Mas poderia ser um formato mais livre como no exemplo anterior

IDLgt str=Stuff observed on 2011-01-31T123924983 with some instrumentIDLgt expr=([0-9]4)-([0-9]2)-([0-9]2)T([0-9]2)([0-9]2)([0-9]2[0-9]3)

(quatro diacutegitos)-(2 diacutegitos)-(2 diacutegitos)T(2 diacutegitos)(2 diacutegitos)(2 diacutegitos3 diacutegitos)

IDLgt pieces=stregex(strexprextractsubexpr)IDLgt printpiecesformat=(A)2011-01-31T12392498320110131123924983IDLgt d=julday(pieces[2]pieces[3]pieces[1]pieces[4]pieces[5]pieces[6])IDLgt printdformat=(F166) 2455593027372

Expressatildeo inteiraPrimeira subexpressatildeoSegunda subexpressatildeoTerceira subexpressatildeoQuarta subexpressatildeoQuinta subexpressatildeoSexta subexpressatildeo

4889

Expressotildees regulares - referecircncias httpxkcdcom208

Viacutedeos do Software Carpentry

httpsoftware-carpentryorg4_0regexp

4989

Arquivos

Quase todo programa precisa armazenar dados em arquivos

Podem ser pequenos arquivos de paracircmetros ou enormes arquivos de dados produzidos ou a processar

Apesar do sugerido pela praacutetica comum arquivos texto natildeo satildeo sempre a melhor escolha para armazenar dados - e haacute muitas formas diferentes de os usar

Qual eacute a melhor escolha

Assim como para linguagens ou contecirciners natildeo existe ldquoo melhor formatordquo Cada um tem suas vantagens e desvantagens

Dados diferentes (mesmo se usados pelos mesmos programas) em geral se adequam melhor a formatos diferentes

5089

Arquivos - texto X binaacuterios

Em qualquer formato arquivos satildeo armazenados como diacutegitos binaacuterios

Mas haacute duas formas principais como eles podem ser codificados

Arquivos baseados em texto (text files)

Dados satildeo transformados em caracteres usando alguma formataccedilatildeo (mesmo se impliacutecita) e escritos com alguma codificaccedilatildeo de texto (comumente mas natildeo necessariamente ASCII)

Um arquivo texto eacute um ou mais strings As mesmas conversotildees tecircm que ser feitas depara outros tipos

Arquivos ldquobinaacuteriosrdquo (binary files)

Embora todo arquivo seja binaacuterio este nome costuma ser usado soacute para aqueles em que os dados natildeo estatildeo na forma de texto

Com frequumlecircncia (nem sempre) os dados satildeo gravados de forma idecircntica a como satildeo armazenados na memoacuteria

Muitos formatos usam uma mistura de partes em texto e partes binaacuterias

Um cabeccedilalho (header) de texto que daacute informaccedilotildees (metadados) sobre os dados armazenados na parte binaacuteria que vem depois

O cabeccedilalho conteacutem em especial informaccedilotildees sobre como ler os dados binaacuterios

5189

Arquivos - texto X binaacuterios

Vantagens de arquivos texto

Legiacuteveis por pessoas (human readable)

Podem ser auto-suficientes todo o necessaacuterio para os ler e entender o que conteacutem pode ser obtido olhando o arquivo

Satildeo os menos especiacuteficos a linguagens software normalmente satildeo escritos em ASCII ou Unicode e sempre haacute algum suporte a ler escrever texto em linguagens software

Haacute alguns formatos padratildeo para texto (exs CSV XML) que satildeo suportados em muitas plataformas diferentes

5289

Arquivos - texto X binaacuterios

Vantagens de arquivos binaacuterios

Em geral natildeo haacute conversotildees entre o os dados como armazenados na memoacuteria O que torna o armazenamento mais eficiente e sem alteraccedilotildees nos valores

A maior parte dos formatos padronizados eacute binaacuteria Exs FITS cube CDF NetCDF HDF HDF5 JPEG JPEG2000 TIFF GeoTIFF MPEG etc

Eacute mais comum que haja bibliotecas prontas (ateacute de alto niacutevel) para consulta leitura e gravaccedilatildeo

Os formatos melhor desenhados satildeo autodocumentados (em texto ou binaacuterio) para os ler natildeo eacute necessaacuterio conhecimento preacutevio sobre como os dados foram armazenados

Toda linguagem plataforma costuma ter seu formato binaacuterio mais nativo que costuma ser o mais faacutecil para leitura gravaccedilatildeo Em particular nas de alto niacutevel que tecircm formatos autodocumentados (especialmente

em IDL R Python Java)

Muitos formatos tecircm opccedilatildeo de compressatildeo dos dados

5389

Arquivos - proprietaacuterios X padratildeo

Independente da escolha texto binaacuterio programas devem escolher entre usar um formato proacuteprio ou um formato padronizado

A principal vantagem de formatos proacuteprios eacute que satildeo definidos da forma mais conveniente para a aplicaccedilatildeo que os usa simplificando leitura e gravaccedilatildeo e potencialmente otimizando recursos (acesso ao disco tamanho do arquivo etc)

A principal desvantagem de formatos proacuteprios eacute ser necessaacuterio escrever todo o coacutedigo para os ler gravar

Pode dar mais trabalho que usar um formato geneacuterico que natildeo seja exatamente o que melhor se encaixa na aplicaccedilatildeo

O coacutedigo para processar o formato em geral vai ser menos completo e conveniente de usar que o de um formato bem estabelecido usado por muitos outros em muitos ambientes

Cada novo software que for usar estes arquivos vai precisar compartilhar do mesmo coacutedigo ou precisar de coacutedigo novo (em particular se em outra linguagem) para ler gravar naquele formato

Eacute necessaacuterio documentar o formato e decidir sobre como ele seraacute definido

Se outros jaacute colocaram muito trabalho desenvolvendo bons formatos padratildeo bem suportados em muitos ambientes por que ter o trabalho de reinventar (e reprogramar redocumentar e retestar) a roda

5489

Arquivos - padrotildees comuns em astronomia (exs adiante)

Texto

CSV Comma-separated values - bem suportado por muitos softwares

ldquoColunas fixasrdquo Natildeo eacute um padratildeo bem definido mas eacute praacutetica comum para tabelas (2D)

XML Extensible Markup Language - O padratildeo texto mais flexiacutevel de grande uso em programaccedilatildeo geral para armazenar qualquer coisa com frequumlecircncia de forma hieraacuterquica Bem suportado por linguagens modernas (e modernizadas) e bibliotecas das principais

linguagens gerais Alta complexidade o torna trabalhoso de usar

5589

Arquivos - padrotildees comuns em astronomia (exs adiante)Binaacuterios

FITS Flexible Image Transport System - o mais comum para observaccedilotildees astronocircmicas Conteacutem os dados (em geral arrays 1D 2D ou 3D) e documentaccedilatildeo (nos cabeccedilalhos) sobre a origem e caracteriacutesticas dos dados Tambeacutem usado para armazenar tabelas de dados quaisquer mesmo que natildeo sejam observaccedilotildees (especialmente pelo STSCI) Variam muito em qualidade de documentaccedilatildeo

NetCDF Network Common Data Form - evoluccedilatildeo do CDF autodocumentado eacute comum e bem suportado para vaacuterios arrays de dados

HDF5 Hierarchical Data Format ndash autodocumentado comum e bem suportado permitindo aleacutem de simples arrays estruturas (eacute um formato hieraacuterquico)

Formatos de imagens JPEG JPEG2000 TIFF GeoTIFF etc - voltados para arrays 2D3D de inteiros ou (em alguns casos) reais com ou sem compressatildeo JPEG2000 tem caracteriacutesticas mais avanccediladas como imagens multiresoluccedilatildeo

Formatos vetoriais PS EPS DXF SHP SVG - variados niacuteveis de suporte a armazenamento de vetores e formas em 2D ou 3D

ISIS Cube semelhante em caracteriacutesticas ao FITS mais usado em sensoriamento remoto geociecircncias e ciecircncias planetaacuterias em geral para observaccedilotildees 1D 2D ou 3D

Formatos nativos de linguagens todo o trabalho de leitura e gravaccedilatildeo eacute feito automagicamente pela biblioteca padratildeo em IDL R Python Java

5689

Arquivos texto - newlines

Apesar do que possa parecer arquivos texto natildeo tecircm intrinsecamente vaacuterias linhas Arquivos texto satildeo soacute uma sequumlecircncia 1D de caracteres em alguma codificaccedilatildeo Separaccedilatildeo em linhas (equivalente a interpretar o arquivo como 2D em linhas e colunas) eacute

especificada por convenccedilotildees Natildeo haacute apenas uma convenccedilatildeo para o fim de linhas

A mais primitiva convenccedilatildeo eacute separaccedilatildeo nenhuma estipula-se que linhas tenham um nuacutemero fixo N de caracteres e cabe ao software que lecirc o arquivo entender que uma linha nova ocorre regularmente a cada N caracteres

Eacute a forma menos portaacutevel e mais inconveniente eacute necessaacuterio o conhecimento preacutevio (ou por inspeccedilatildeo do arquivo) de quantos caracteres haacute por linha

A maior parte dos editores de texto natildeo vai saber separar linhas desta forma (por falta deste conhecimento preacutevio) Exemplo (de um FITS real)

SIMPLE = T Fits standard BITPIX = 16 Bits per pixel NAXIS = 0 Number of axes EXTEND = T File may contain extensions

O que com as linhas quebradas nos lugares certos seria

SIMPLE = T Fits standard BITPIX = 16 Bits per pixel NAXIS = 0 Number of axes EXTEND = T File may contain extensions

5789

Arquivos texto - newlines

A forma mais comum de especificar linhas eacute com um marcador do final de linha (newline)

Eacute um caractere especial natildeo normalmente presente no texto que serve para marcar fim de linhas

Mas natildeo haacute soacute um padratildeo de newline Os mais comuns

LF (Line Feed ASCII 10) ndash Unix Linux Mac OS X

CR - (Carriage Return ASCII 13) - Mac OS lt10

CR+LF (CR seguido de LF) - Windows DOS

Eacute o motivo de o Notepad (Windows) natildeo entender as quebras de linha de arquivos escritos com o formato nativo de Linux o arquivo soacute tem LF enquanto o editor espera CR+LF

Alguns sistemas (strings em vaacuterias linguagens por exemplo) usam o coacutedigo de escape n para indicar newline que eacute codificado de acordo com o padratildeo sendo usado

Em geral bibliotecas de leitura e gravaccedilatildeo de arquivos usam (default pelo menos) o newline nativo do sistema em que satildeo usadas

Programas de conversatildeo entre os sistemas satildeo comuns (ex dos2unix)

O Wordpad identifica se for usado soacute LF e quebra as linhas de acordo

5889

Arquivos - texto - CSV

Comma-separated values

O formato mais padronizado para tabelas (arrays 2D) em texto (frequentemente mas natildeo necessariamente ASCII)

Bem suportado por bibliotecas padratildeo de linguagens e outros softwares (Excel Calc Origin Google Docs etc)

Conteacutem Linhas de cabeccedilalho (opcionais mas recomendadas) linhas com qualquer texto geral

descrevendo o arquivo e em geral uma linha de tiacutetulo para as colunas da tabela Uma (apenas uma) tabela onde todas as linhas tecircm o mesmo nuacutemero de colunas

Colunas separadas por viacutergulas (opcionalmente pode ser outro separador) Linhas terminadas por newline (qualquer que seja) Strings delimitados por ldquo ldquo

Ex

NAMECALMPOSFILNAMEECHLPOSDISPPOSTARGNAMEPOSDIRCLASSMJD-OBSITIMECOADDSdec18s00010NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001dec18s00020NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001dec18s00120NIRSPEC-5-AO635800364500itan140NIRSPEC-5-AOp2 TITAN5408763000001dec18s00140NIRSPEC-5-AO626300364500itan140NIRSPEC-5-AOp1 TITAN5408763000001dec18s00151NIRSPEC-5-AO626300364500itan140NIRSPEC-5-AOp1ARC5408764000001dec18s00160NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001

Natildeo eacute necessaacuterio que as colunas tenham largura constante

Cabeccedilalho

5989

Arquivos - texto - CSVHaacute amplo suporte a leitura e gravaccedilatildeo de CSV sem precisar recorrer a procedimentos de baixo niacutevel

Podem ser diretamente importados em Excel Calc Origin Google Docs ou lido facilmente com bibliotecas padratildeo comuns Ex (IDL)

IDLgt c=read_csv(filesearch_scamcsvheader=h)IDLgt printhNAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS

IDLgt helpc Structure ltc8bca508gt 11 tags length=5256 data length=5248 refs=1 FIELD01 STRING Array[41] FIELD02 LONG Array[41] FIELD03 STRING Array[41] FIELD04 DOUBLE Array[41] FIELD05 DOUBLE Array[41] FIELD06 STRING Array[41] FIELD07 STRING Array[41] FIELD08 STRING Array[41] FIELD09 STRING Array[41] FIELD10 DOUBLE Array[41] FIELD11 LONG Array[41]

IDLgt printcfield01[03]dec18s0001 dec18s0002 dec18s0003 dec18s0004

IDLgt printcfield03[03]NIRSPEC-5-AO NIRSPEC-5-AO NIRSPEC-5-AO NIRSPEC-5-AO

6089

Arquivos - texto - CSVEx (IDL) Criaccedilatildeo de um CSV com uma tabela de valores

Criaccedilatildeo de 3 arrays 1D (12 elementos) um para cada coluna

IDLgt x=dindgen(3)IDLgt y=dindgen(4)IDLgt xx=reform(rebin(x34)12)IDLgt yy=reform(rebin(reform(y14)34)12)IDLgt f=xx+yy10IDLgt helpxxyyfXX DOUBLE = Array[12]YY DOUBLE = Array[12]F DOUBLE = Array[12]

Escrita do arquivo

IDLgt write_csvexamplecsvxxyyfheader=[XYX+10Y]

ResultadoXYX+10Y000000000000000000000000100000000000000010000000200000000000000020000000000000001000000010000000100000001000000011000000()

6189

Arquivos - texto - ldquoColunas regularesrdquoFixed column width

Natildeo eacute exatamente um padratildeo Eacute uma praacutetica comum

Armazena uma tabela (array 2D) de forma regular simples de ser interpretada e lida

Costumam ter linha(s) de cabeccedilalho descrevendo o conteuacutedo do arquivo em geral com uma linha para os nomes das colunas

As demais linhas conteacutem os dados sempre ocupando a mesma largura por coluna e escritos no mesmo formato em cada coluna

Costumam ser simples de ler inclusive interativamente (exs Excel Calc Origin read_ascii)

Ex (IDL) Uma simples tabela soacute de nuacutemeros

wavl CH4=33 wavl CH4=25 wavl CH4=10 wavl CH4=08 wavl CH4=05 wavl CH4=026 wavl CH4=02 477330000 0090130 477330000 0091110 477330000 0089250 477330000 0087000 477330000 0087140 477330000 0090080 477330000 0088110 480040000 0090930 480040000 0091930 480040000 0090160 480040000 0087930 480040000 0088110 480040000 0090950 480040000 0089090 482750000 0091710 482750000 0092730 482750000 0091060 482750000 0088850 482750000 0089080 482750000 0091810 482750000 0090060 485450000 0092530 485450000 0093570 485450000 0092000 485450000 0089810 485450000 0090100 485450000 0092730 485450000 0091090

IDLgt a=read_ascii(specs_27s_ntxtdata_start=1header=header)IDLgt printheader wavl CH4=33 wavl CH4=25 wavl CH4=10 wavl CH4=08 wavl CH4=05 wavl CH4=026 wavl CH4=02 IDLgt helpa Structure ltd423c9a8gt 1 tags length=224 data length=224 refs=1 FIELD01 FLOAT Array[14 4]

6289

Arquivos - texto - ldquoColunas regularesrdquoJaacute um arquivo um pouco mais difiacutecil de ler

NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS dec18s0001 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0002 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0003 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 FLAT 5408757812500 460000 5 dec18s0004 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 DARK 5408757812500 460000 5

Por ter colunas de tipos diferentes (strings inteiros reais) natildeo eacute possiacutevel o ler em um simples array Mas eacute faacutecil o colocar em uma estrutura de arrays onde cada campo eacute uma coluna

Especificando interativamente como interpretar as linhasIDLgt templ=ascii_template(filesearch_scamtxt)

Nome do campo (default mostrado)

Tipo do campo (identificado automaticamente)

Posiccedilatildeo (caracter) do comeccedilo (identificada automaticamente)

Linha de exemplo para verificar as colunas

6389

Arquivos - texto - ldquoColunas regularesrdquoDepois de feito o template o arquivo pode ser lido com apenas

IDLgt a=read_ascii(filesearch_scamtxttemplate=templ)IDLgt helpa Structure ltd4ec4608gt 11 tags length=416 data length=416 refs=1 FIELD01 STRING Array[4] FIELD02 LONG Array[4] FIELD03 STRING Array[4] FIELD04 FLOAT Array[4] FIELD05 FLOAT Array[4] FIELD06 STRING Array[4] FIELD07 STRING Array[4] FIELD08 STRING Array[4] FIELD09 FLOAT Array[4] FIELD10 FLOAT Array[4] FIELD11 LONG Array[4]IDLgt printafield01dec18s0001 dec18s0002 dec18s0003 dec18s0004IDLgt printafield04 626300 626300 626300 626300

O template (uma estrutura contendo dados sobre como ler o arquivo) pode ser usado para outros arquivos no mesmo formato No lugar de ter sido criado interativamente poderia ter sido lido de algum arquivo Poderia ter especificado nomes para os campos que seriam mais amigaacuteveis que coias como FIELD11

6489

Arquivos - texto - XML

Extensible Markup Language

Admite grande flexibilidade e por isso pode ter alta complexidade

Valores satildeo colocados dentro de uma estrutura em hieraacuterquica (em uma aacutervore) com os noacutes identificados pelos seus nomes (chaves)

Largamente usado em muitas aacutereas para armazenar conjuntos arbitraacuterios de quaisquer estruturas de dados

A maioria das aplicaccedilotildees usa um formato que eacute um subconjunto do XML especificado por um Schema comumente em um arquivo XML DTD (Document Type Definition)

6589

Arquivos - texto ndash XML ndash exemplos de usos

Armazenamento de dados de aplicaccedilotildees web (comum para exportar importar dados MediaWiki DokuWiki WordPress ADS Lattes etc)

Documentos Office (docx pptx xlsx) OpenOffice (odt opd ods)

Como versotildees de outros formatos FITSML XDF

ldquoScientific Dataset XML NASAs Astronomical Data Center (ADC) sponsors a number of research projects that

use XML for scientific data representation The XML activities at the ADC are sponsored and supported by the NASA Office of Space Science Applied Information Systems Research Program (AISRP)rdquo - httpxmlcoverpagesorgnasa-adchtml

Astronomical Instrument Markup Language (AIML)

SVG ndash Scalable Vector Graphics

Muitas de outras aplicaccedilotildees listadas em httpxmlcoverpagesorgxmlhtmlapplications

6689

Arquivos - texto ndash XML - exemploltxml version=10 gtltDOCTYPE Xdmf SYSTEM Xdmfdtd []gtltXdmf xmlnsxi=httpwwww3org2001XInclude Version=20gt ltDomaingt lt-- Example of Basic Topologies --gt ltInformation Name=Descriptiongt Example of a Polyvertex Topology ltInformationgt ltGrid Name=Polyvertex GridType=Uniformgt ltTopology TopologyType=Polyvertex Dimensions=3 NodesPerElement=3gt ltDataItem Format=XML Dimensions=3 3 NumberType=Floatgt 0 1 2 4 5 6 8 9 10 ltDataItemgt ltTopologygt ltGeometry Type=XYZgt ltDataItem Format=XML Dimensions=4 4 3gt 00 00 00 10 00 00()Que mostra que a interpretaccedilatildeo (parsing) de XML eacute em geral complexa

6789

Arquivos - texto - XML

Haacute muitas bibliotecas de alto niacutevel para fazer o processamento (parsing) e entregar os dados em uma estrutura conveniente

A complexidade em processar XML estaacute em decidir o que fazer com os dados jaacute que os arquivos podem ser muito complexos

As APIs (Application Programming Interfaces) mais comuns para processar XML que satildeo implementadas em muitas linguagens

DOM (Document Object Model) ndash manteacutem todo o conteuacutedo do em uma estrutura de dados (em geral uma aacutervore) em uma variaacutevel (em geral um objeto) Esta pode ser consultada para obter os valores de interesse para os alterar e usada para escrever um arquivo

SAX (Simple API for XML) ndash Interpretador (parser) por objetos O usuaacuterio escreve uma classe herdando da classe SAX provendo os meacutetodos que vatildeo processar os campos agrave medida em que estes satildeo lidos

6889

Arquivos - binaacuterios - FITSFlexible Image Transport System

O formato mais comum para observaccedilotildees astronocircmicas Tambeacutem usado para armazenar quaisquer dados mesmo natildeo relacionados a observaccedilotildees (especialmente tabelas como eacute praacutetica do STSCI)

Conteacutem um (ou mais) cabeccedilalho(s) de texto com metadados (informaccedilotildees sobre os dados como caracteriacutesticas (necessaacuterias para os ler) origem condiccedilotildees em que foram obtidos processamento realizado etc)

SIMPLE = T image conforms to FITS standard BITPIX = 32 bits per data value NAXIS = 2 number of axes NAXIS1 = 1024 NAXIS2 = 1024 BSCALE = 100000 Scaling factor BZERO = 000000 Scaling zero-point TELESCOP= Keck II Telescope SLITNAME= 0041x226 Slit Name SLITPA = 351979 Slit position angle SLITX = 131500 X pixel of the center of the slit LST = 12010446 local apparent sidereal time (()

Depois do cabeccedilalho haacute uma (ou mais) seccedilatildeo(otildees) de dados binaacuterios Costuma(m) ser array(s) 1D (espectros) 2D (imagens) ou 3D (ldquocubos de dadosrdquo)

De inteiros ou reais inteiros satildeo comuns em contagens de instrumentos reais para valores derivados (fluxos intensidades etc)

6989

Arquivos - binaacuterios - FITSNormalmente FITS satildeo lidos escritos por bibliotecas prontas de (relativamente) alto niacutevel usuaacuterio natildeo tem que saber como os dados satildeo armazenados no arquivo nem como os ler escrever Ex (IDL com a biblioteca idlastro)

IDLgt fits_info2dspectrumfits2dspectrumfits has 3 extensionsPrimary header 288 recordsNo dataExtension 1 -- SCI Header 144 records IMAGE ( 1201 1201 )Extension 2 -- ERR Header 72 records IMAGE ( 1201 1201 )Extension 3 -- DQ Header 72 records IMAGE ( 1201 1201 )

IDLgt mydata=readfits(2dspectrumfitsexten_no=1myheader) READFITS Reading FITS extension of type IMAGE READFITS Now reading 1201 by 1201 array

IDLgt extastmyheadermyastIDLgt sz=size(mydatadimensions)IDLgt xy2ad[1sz[0]][1sz[1]]myastcorners_acorners_dIDLgt printcorners_aCorners of the data array from file 2dspectrumfits are at 14487480 33063480

IDLgt printcorners_d -00041264444 00041402222

Obteacutem os dados de coordenadas (WCS) do header

Coloca os dados no array (2D de floats) mydata e o header no array (1D de strings) myheader

Calcula as coordenadas das quinas da imagem atraveacutes do WCS

Provecirc informaccedilotildees sobre o arquivo

7089

Arquivos - binaacuterios - ISIS Cube

Formatos como FITS se adequam muito a ter uma interface de mais alto niacutevel por objetos

Tambeacutem para dados em tabelas FITS muito mais trabalhosos de ler em baixo niacutevel que se adequam muito mais a mapas ou estruturas

Exemplo (de um formato semelhante a FITS ISIS cube)

O objeto ao ser criado lecirc todo o arquivo

cube=pp_editablecube(CM_1553510065_1_ircub)

Meacutetodos fornecem os dados desejados para obter quando necessaacuterio os dados de interesse

Find out the names of the backplanesprintcubegetproperty(backnames)Get the start time of the cubeprintcubegetfromheader(START_TIME)2007-084T100057286Z

Valores no cabeccedilalho podem ser convenientemente fornecidos como um mapa

header=cubeheader_as_hash()printheader[START_TIME]2007-084T100057286Z

7189

Arquivos - binaacuterios ndash ISIS Cube

Os dados satildeo fornecidos como arraysMake a contour plot of the latitudesc=contour(cubegetsuffixbyname(LATITUDE))Get the band with wavelength nearest to 21 (in the units used in the cube)selband=cubegetbandbywavelength(21wavelengths=selwavs)

Interfaces por overload tornam o acesso ainda mais conveniente

selband=cube[21]

selwavs=cube[21]

Retorna um array com a banda de comprimento de onda mais proacuteximo de 21 (microm)

Retorna o comprimento de onda mais proacuteximo de 21 (microm) da banda retornada acima

7289

Arquivos - binaacuterios ndash ISIS Cube Alteraccedilotildees feitas ao conteuacutedo satildeo automaticamente refletidas em todos os

lugares (cabeccedilalho em particular) afetados mantendo o objeto vaacutelido que pode depois ser gravado em um novo arquivo

IDLgt printcubelinescubesamplescubebands 64 64 256

IDLgt helpcubecoreltExpressiongt FLOAT = Array[64 64 256]

IDLgt cubecore=dblarr(100100256)

A linha acima natildeo eacute uma atribuiccedilatildeo eacute uma invocaccedilatildeo de meacutetodo Eacute equivalente acubesetpropertycore=dblarr(100100256)

Eacute o trabalho da funccedilatildeo setproperty decidir se a propriedade passada (core) faz sentido e se fizer fazer todo o trabalho necessaacuterio a esta mudanccedila Para o usuaacuterio eacute tudo automaacutetico e os dados da classe satildeo vaacutelidos o tempo todo

IDLgt helpcubecoreltExpressiongt DOUBLE = Array[100 100 256]

IDLgt printcubelinescubesamplescubebands 100 100 256

IDLgt cubesaveCM_1553510065_1_ir_editedcub

7389

Arquivos - binaacuterios ndash NetCDF e HDF5

Network Common Data Form e Hierarchical Data Format

Os dois uacutenicos formatos bem estabelecidos para dados cientiacuteficos geneacutericos

Armazenam dados como vaacuterias variaacuteveis e seus metadados Para cada variaacutevel haacute (ou pode haver) os metadados

Nome Dimensotildees (do array) Unidades Comentaacuterios

Ambos permitem arrays multidimensionais

Apenas HDF5 permite estruturas (daiacute vem a hierarquia)

Autodocumentados qualquer software que saiba ler um destes formatos lecirc qualquer arquivo sem precisar de conhecimento preacutevio sobre como o arquivo foi gerado

Muito bem suportados em bibliotecas padratildeo e natildeo padratildeo em softwares interativos e visualizadores (inclusive plugins para navegadores)

httpwwwunidataucaredusoftwarenetcdf httpenwikipediaorgwikiHdf5

NetCDF eacute mais simples de usar por natildeo ter hierarquia dando menos trabalho para ler e escrever dados Se hierarquia natildeo eacute necessaacuteria eacute mais conveniente de usar que HDF5

7489

Arquivos - binaacuterios - NetCDF e HDF5Haacute tambeacutem o formato CDL uma versatildeo ASCII do NetCDF A biblioteca padratildeo do NetCDF inclui conversores entre estes formatos

$ ncdump -h refspec_g01_0ncnetcdf refspec_g01_0 dimensions nlay = 51 nwn = 400 nleg = 33 numu = 2 nlev = 52 nphi = 3 ngas = 2 nwnc = 1 scal = 1 v3 = 3 dnl = 1 nk = 1 tdisr = UNLIMITED (0 currently) na = 16

variables float alb(nwn) float z(nlay) float t(nlay) float p(nlay) float wl(nwn) float iof(nwn) float mtau(nwn) float htau(nwn) float hctaus(nwn) float gtau(nwn) float outcos(scal) float phi(nleg) float phic(scal) float umu(numu) float flux(v3 nwn nlev) float mix(nlay ngas) float c(nlay) float psat(nlay) float ga(nwnc) float wlc(nwnc) float inc(scal) int dm(scal) int ord(scal) float fbeam(scal) float wn(nwn) float tautot(nwn nlay) float htaus(nwn nlay) float htaux(nwn nlay) float taug(nwn nlay) float phase(nwn nlay nleg) float ssa(nwn nlay) float uu(nwn nphi nlev numu) float u0u(nwn nlev numu) float tray(nwn nlay) float gtauo(tdisr nwn nlay)

Haacute 14 variaacuteveis usadas como dimensotildees para as 35 variaacuteveis que satildeo arrays

Ex alb(nwn) indica que alb eacute um array 1D de nwn elementos

nwn estaacute armazenado como uma das dimensotildees e eacute 400 portanto alb tem 400 elementos

Parte do conteuacutedo de um arquivo NetCDF em formato CDL (gerado pelo programa ncdump)

7589

Arquivos - binaacuterios - NetCDF e HDF5Conteuacutedo daquele arquivo visualizado com o ncview (acompanha a biblioteca NetCDF padratildeo)

7689

Arquivos - binaacuterios - NetCDF e HDF5O conteuacutedo de todo o arquivo pode ser lido facilmente com as bibliotecas disponiacuteveis e armazenado em contecirciners convenientes Usando um objeto que gera um resultado um pouco mais conveniente

IDLgt h=pp_readncdf(refspec_g01_0nchash)IDLgt printhvar_dims ltObjHeapVar229(HASH)gtvars ltObjHeapVar152(HASH)gtdims ltObjHeapVar118(HASH)gt

IDLgt printh[vars]T 173203 175459 175848 176001 175975 Z 431869 418858 406067 393403 380464 FLUX 300660 145536 0705180 0341669 0165532 PHASE 100000 0779034 0660858 0542052 0449983 TAUTOT0694377 0693420 0693474 0693540 0693636()

IDLgt help(h[vars])[TAUTOT]ltExpressiongt FLOAT = Array[51 400]

IDLgt print(h[var_dims])[TAUTOT]NLAY NWN

IDLgt print(h[dims])[(h[var_dims])[TAUTOT]]NLAY 51NWN 400

7789

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5)

Visualizaccedilatildeo da variaacutevel selecionada

Metadados e alguns valores da variaacutevel selecionada

Variaacutevel a ser criada com o conteuacutedo desta variaacutevel do arquivo

Hierarquia das variaacuteveis do arquivo

7889

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5) Imported variable az

IDLgt helpaz Structure ltd5723f38gt 13 tags length=448 data length=444 refs=1 _NAME STRING az _ICONTYPE STRING binary _TYPE STRING DATASET _FILE STRING INTENSI_test_409OUTh5 _PATH STRING _DATA DOUBLE Array[38] _NDIMENSIONS LONG 1 _DIMENSIONS ULONG64 Array[1] _NELEMENTS ULONG64 38 _DATATYPE STRING H5T_FLOAT _STORAGESIZE ULONG 8 _PRECISION LONG 64 _SIGN STRING

IDLgt printaz_data 00000000 10000000 20000000 30000000 40000000 50000000 60000000 80000000 ()

7989

Arquivos - binaacuterios - imagens

JPEG JPEG200 TIFF GeoTIFF etc

Os formatos comuns de imagens satildeo bem suportados em muacuteltiplas plataformas para uso dentro de programas e interativamente

Alguns formatos tecircm opccedilatildeo de compressatildeo com perda eou sem perda

Armazenam imagens como arrays 2D ou 3D (3D frequumlentemente limitado a 3 ou 4 em uma das dimensotildees uma imagem em 3 ou 4 bandas) de inteiros ou (em alguns formatos) reais

Alguns formatos permitem armazenar metadados para caracterizar as imagens armazenadas

JPEG2000 e GeoTIFF (um subconjunto de TIFF) comuns em astronomia e aacutereas proacuteximas

8089

Arquivos - binaacuterios ndash imagens ndash exemplo (IDL)IDLgt printquery_tiff(issmap_2009tiffinfogeotiff=geo) 1

IDLgt helpinfo Structure ltd4eca4b8gt 18 tags length=144 data length=132 refs=1 CHANNELS LONG 4 DIMENSIONS LONG Array[2] IMAGE_INDEX LONG 0 NUM_IMAGES LONG 1 PIXEL_TYPE INT 1 TYPE STRING TIFF BITS_PER_SAMPLE LONG 8 POSITION FLOAT Array[2] RESOLUTION FLOAT Array[2] UNITS LONG 2 TILE_SIZE LONG Array[2] DESCRIPTION STRING ISS (2009) DATE_TIME STRING 20100218 012436()

IDLgt helpgeo Structure ltd4efa1b8gt 10 tags length=264 data length=262 refs=1 MODELPIXELSCALETAG DOUBLE Array[3] MODELTIEPOINTTAG DOUBLE Array[6 4] GEOGRAPHICTYPEGEOKEY INT 4035 GEOGSEMIMAJORAXISGEOKEY DOUBLE 25750000 GEOGSEMIMINORAXISGEOKEY DOUBLE 25750000()

IDLgt myimage=read_tiff(issmap_2009tiff) Lecirc a imagem para o array myimage

Obteacutem informaccedilotildees sobre o arquivo

8189

Arquivos - binaacuterios ndash formatos nativosLinguagens como IDL R Python Java tecircm seu formato nativo binaacuterio acessado em alto niacutevel Basta mandar salvar ler variaacuteveis no do arquivo a biblioteca padratildeo automagicamente faz todo o trabalho de decidir como gravar ler os dados

Conveniente de usar na proacutepria linguagem Mas raramente existem bibliotecas para ler gravar o formato nativo de uma linguagem a partir de outra Ex (IDL)

IDLgt savefile=2dspectrumsavmydatamyheadercorners_dcorners_averbosecompress SAVE Portable (XDR) compressed SAVERESTORE file SAVE Saved variable MYDATA SAVE Saved variable MYHEADER()

Pode ser lido com apenas (haacute formas mais elaboradas)

IDLgt restore2dspectrumsavverbose RESTORE Portable (XDR) compressed SAVERESTORE file RESTORE Save file written by ltunknowngtltunknowngt Thu Jan 27 191422 2011 RESTORE IDL version 801 (linux x86_64) RESTORE Restored variable MYDATA RESTORE Restored variable MYHEADER()

IDLgt helpmydatamyheadercorners_dcorners_aMYDATA FLOAT = Array[1201 1201]MYHEADER STRING = Array[144]()

8289

Arquivos - processamento em baixo niacutevel

Nem sempre um formato padratildeo eacute a melhor escolha para o problema

Nem sempre haacute escolha (pode-se ter que trabalhar com arquivos que jaacute foram escritos em algum formato proprietaacuterio)

Agraves vezes o formato eacute padratildeo mas natildeo haacute bom suporte a ele disponiacutevel

Em todos estes casos eacute necessaacuterio escrever rotinas em baixo niacutevel que vatildeo ler processar diretamente o conteuacutedo do arquivo

Preferencialmente criando interfaces de alto niacutevel para o programa que vai as usar

8389

Arquivos - processamento em baixo niacutevel - texto

Tomando o exemplo anterior onde as colunas eram de diferentes tipos

NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS dec18s0001 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0002 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0003 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 FLAT 5408757812500 460000 5 dec18s0004 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 DARK 5408757812500 460000 5

A forma mais simples de o ler diretamente eacute definir uma estrutura para receber cada linha e um array destas estruturas para receber todo o arquivo Ex (IDL)

IDLgt record=namecalmpos0filnameechlpos0d0disppos0d0targnameposdirclassmjd_obsitime0d0coadds0IDLgt nlines=file_lines(filesearch_scamtxt)IDLgt mydata=replicate(recordnlines-1)IDLgt header=

Depois de definidas as variaacuteveis que vatildeo receber os dados o arquivo pode ser lido

IDLgt openrunitfilesearch_scamtxtget_lunIDLgt readfunitheaderIDLgt readfunitmydataformat=(A14I8A15F104F104A18A19A15F158F105I15)IDLgt free_lununit

A gravaccedilatildeo de um arquivo texto poderia ser feita de forma semelhante apenas trocando openr por openw (abrir o arquivo para gravaccedilatildeo natildeo leitura) e readf por printf

O arquivo eacute aberto em uma unidade (unit) usada para especificar de onde eacute feita a leitura

Ao final o arquivo eacute fechado

8489

Arquivos - processamento em baixo niacutevel - texto

O que resulta em

IDLgt printheader NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS

IDLgt helpmydataMYDATA STRUCT = -gt ltAnonymousgt Array[4]

IDLgt helpmydata[0] Structure ltd5e38f68gt 11 tags length=136 data length=124 refs=3 NAME STRING dec18s0001 CALMPOS INT 0 FILNAME STRING NIRSPEC-5-AO ECHLPOS DOUBLE 62630000 DISPPOS DOUBLE 36450000 TARGNAME STRING HD85258 POSDIR STRING NIRSPEC-5-AOp1 CLASS STRING STAR MJD_OBS STRING 54087574 ITIME DOUBLE 10000000 COADDS INT 1

Este caso eacute mais complicado que os mais comuns por haver colunas de strings

Se todas fossem de nuacutemeros natildeo teria sido necessaacuterio especificar o formato explicitamente As colunas teriam sido adivinhadas pela biblioteca que lecirc o arquivo Poderia ter sido lido escrito soacute com um array de nuacutemeros sem estruturas

8589

Arquivos - processamento em baixo niacutevel - binaacuterio

Formatos binaacuterios podem ser definidos de qualquer forma O arquivo eacute apenas um conjunto de bytes Cabe ao software saber como os interpretar

Uma escolha comum para que sejam autodocumentados eacute incluir um cabeccedilalho de texto informando as caracteriacutesticas dos dados necessaacuterias para os ler

Ex (IDL) criar um arquivo que armazene um array de doubles com um cabeccedilalho informando as dimensotildees para que o programa que o lecirc saiba como ler os dados

Inventa dados e abre o arquivo

IDLgt data_to_write=dindgen(34)IDLgt openwunitbinary_exampledatget_lun

Escreve as dimensotildees como texto

IDLgt printfunitdimensions of the double array stored belowIDLgt printfunitsize(data_to_writedimensions)

Escreve os dados binaacuterios

IDLgt writeuunitdata_to_write

Fecha o arquivo

IDLgt free_lununit

Escreve em binaacuterio (write unformatted)

8689

Arquivos - processamento em baixo niacutevel - binaacuterio

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

dimensions of the double array stored below 3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

8789

Arquivos - processamento em baixo niacutevel - binaacuterioA leitura deste arquivo eacute igualmente simples

IDLgt header=IDLgt dims=[00]IDLgt openrunitbinary_exampledatget_lun

Lecirc as dimensotildees (armazenadas como texto)

IDLgt readfunitheaderIDLgt readfunitdims

Lecirc a parte binaacuteria depois de saber as dimensotildees

IDLgt data_read=dblarr(dims)IDLgt readuunitdata_read

Fecha o arquivo

IDLgt free_lununit

Verifica que os dados foram gravados e lidos corretamente

IDLgt printarray_equal(data_to_writedata_read) 1

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Lecirc dados binaacuterios (read unformatted)

8889

Sumaacuterio

5 ndash Slides em httpwwwppenteadonetpeapea04_strings_iopdf Strings Expressotildees regulares Arquivos

httpwwwppenteadonetpea

8989

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89

Programa

1 ndash Slides em httpwwwppenteadonetpeapea01_linguagenspdf Motivaccedilatildeo Toacutepicos abordados Toacutepicos omitidos Opccedilotildees e escolha de linguagens Uso de bibliotecas Referecircncias

2 ndash Slides em httpwwwppenteadonetpeapea01_organizacaopdf Organizaccedilatildeo de coacutedigo Documentaccedilatildeo IDEs Debug Unit testing

3 ndash Slides em httpwwwppenteadonetpeapea02_variaveispdf Tipos de variaacuteveis Representaccedilotildees de nuacutemeros e suas consequumlecircncias Ponteiros Estruturas Objetos

289

Programa

4 ndash Slides em httpwwwppenteadonetpeapea03_conteinerspdf Contecirciners Arrays Listas Mapas Outros contecirciners Vetorizaccedilatildeo Escolha de contecirciners

5 ndash Slides em httpwwwppenteadonetpeapea04_strings_iopdf Strings Expressotildees regulares Arquivos

389

Strings ndash definiccedilatildeo e importacircncia

Um string eacute uma variaacutevel que representa texto como um conjunto de caracteres

Haacute um tipo baacutesico com pelo menos um suporte simples em todas as linguagens

Eacute um dos mais necessaacuterios para tudo Exs

informar o usuaacuterio nomes de arquivos identificar coisas (elementos objetos datas nomes programas algoriacutetimos comandos

etc) escrever e gravar arquivos (embora seja comum haver opccedilotildees melhores que arquivos

texto) graacuteficos

Tem o processamento mais complexo entre os tipos fundamentais

Processamento de strings natildeo eacute apenas prints e reads

489

Strings - implementaccedilotildees

Linguagens variam muito na forma como implementam seu(s) tipo(s) para strings

Haacute strings dinacircmicos e estaacuteticos

Strings estaacuteticos tecircm um nuacutemero (ou nuacutemero maacuteximo) predefinido de caracteres que natildeo pode ser mudado Podem ser pensados como arrays estaacuteticos 1D onde cada elemento eacute um caractere

(eacute como agraves vezes satildeo implementados) Tentar acessar caracteres aleacutem do limite pode resultar em apenas truncamento ou

ateacute no encerramento do programa por violaccedilotildees de memoacuteria Exs C Fortran

Strings dinacircmicos onde o nuacutemero de caracteres pode ser alterado a qualquer momento sem limites preestabelecidos Podem ser pensados como listas homogecircneas onde cada elemento eacute um caractere Exs C++ Java IDL R Python Perl

Algumas linguagens tecircm tipos diferentes para caracteres individuais (character) e strings (string de zero ou mais caracteres) C C++ Java

Algumas linguagens tecircm mais de um tipo variando em funcionalidade

Perl eacute a linguagem com melhor suporte a strings principalmente processamento de expressotildees regulares (adiante)

589

Strings - codificaccedilotildees

Do que se constitui um string

Caracteres satildeo um conceito de alto niacutevel e computadores soacute armazenam diacutegitos binaacuterios

Nada faz com que uma variaacutevel ou arquivo ldquosejamrdquo intrinsecamente caracteres

A correspondecircncia eacute determinada pelo uso de codificaccedilotildees da mesma forma que inteiros e reais satildeo tambeacutem codificados de alguma forma

A maior parte das linguagens assume uma codificaccedilatildeo (ou usam um default) algumas tecircm tipos diferentes para diferentes codificaccedilotildees e as que usam objetos podem ter objetos strings com codificaccedilatildeo variaacutevel

Antigamente a codificaccedilatildeo era sempre a mesma ASCII (American Standard Code for Information Interchange)

1 byte (8 bits) por caractere - 28 (256) valores diferentes

Uma tabela define que caractere eacute codificado por que nuacutemero na faixa 0-127

689

Strings - codificaccedilotildees - ASCII789

Strings - codificaccedilotildees - ASCII

Nem todos os caracteres ASCII satildeo visiacuteveis (printable) Alguns satildeo espaccedilos em branco (espaccedilos tabs etc) outros satildeo alguma forma de caractere de controle (CR LF etc)

O zero costuma ser reservado para controle significando um string vazio (se soacute tem 0) ou em algumas codificaccedilotildees (C) o fim do string

Os caracteres codificados por valores 128-255 natildeo satildeo parte do padratildeo ASCII A associaccedilatildeo varia de acordo com a codificaccedilatildeo escolhida

Sistemas que usam ASCII satildeo os mais simples caracteres sempre tecircm o mesmo tamanho em bytes (1 byte) Satildeo facilmente lidos processados e convertidos de para nuacutemeros

ASCII eacute a codificaccedilatildeo de texto mais comum mas

Ao contraacuterio do que muitos assumem ASCII natildeo eacute a uacutenica forma de codificar texto

ASCII natildeo eacute sinocircnimo de arquivo texto

Em anos recentes Unicode em suas vaacuterias formas (adiante) tem se tornado gradativamente mais comum

889

Strings - codificaccedilotildees - ASCII

Por que ASCII natildeo eacute sempre usado

Porque eacute insuficiente Natildeo conteacutem por exemplo

Caracteres modificados (com acentos cedilha)

Siacutembolos matemaacuteticos (aleacutem dos muito baacutesicos + - ^ gt lt = ) Ex part sum int plusmn ge le times infin neℝ ℤ forall exist ∮ ≌ nabla

Siacutembolos fiacutesicos Ex micro Å oplus

Letras gregas

Outros siacutembolos Ex rarr harr euro ordf deg pound yen iquest iexcl

Caracteres de outras liacutenguas (inclusive de muitos siacutembolos como a vaacuterias formas usadas em chinecircs e japonecircs)

989

Strings - codificaccedilotildees - Unicode

O que usar para natildeo ter as limitaccedilotildees do ASCII

O uacutenico padratildeo de uso dominante hoje eacute o Unicode

Desenvolvido para ser um padratildeo universal contendo ldquotodosrdquo os caracteres de ldquotodasrdquo as escritas e dados sobre os caracteres

Natildeo eacute imutaacutevel adiccedilotildees satildeo decididas pelo Unicode Consortium (httpwwwunicodeorg)

1089

Strings - codificaccedilotildees - Unicode

Haacute duas partes no Unicode o cataacutelogo (uacutenico) e as codificaccedilotildees (vaacuterias)

O cataacutelogo eacute definido independente de codificaccedilotildees Pode ser visto como um mapa onde os pontos de coacutedigo (codepoints) satildeo as

chaves e os valores satildeo os dados sobre aquele caractere

ldquoIn Unicode the letter A is a platonic ideal Its just floating in heaven A

This platonic A is different than B and different from a but the same as A and A and A

The idea that A in a Times New Roman font is the same character as the A in a Helvetica font but different from a in lower case does not seem very controversial but in some languages just figuring out what a letter is can cause controversy

Is the German letter szlig a real letter or just a fancy way of writing ss If a letters shape changes at the end of the word is that a different letter Hebrew says yes Arabic says no

Anyway the smart people at the Unicode consortium have been figuring this out for the last decade or so accompanied by a great deal of highly political debate and you dont have to worry about it Theyve figured it all out alreadyrdquo

de The absolute minimum every software developer absolutely positevely must know about Unicode and character sets (no excuses)

httpwwwjoelonsoftwarecomarticlesUnicodehtml

1189

Strings - codificaccedilotildees - UnicodeOs dados sobre um caractere Unicode satildeo importantes para suas buscas e identificaccedilatildeoIncluem nome e propriedades visiacutevel (printable) numeacuterico alfanumeacuterico maiuacutesculo minuacutesculo ldquoespaccedilordquo (blank) liacutengua matemaacutetico etc

ExsUnicode Character LATIN CAPITAL LETTER A (U+0041)Name LATIN CAPITAL LETTER ABlock Basic LatinCategory Letter Uppercase [Lu]Combine 0BIDI Left-to-Right [L]Mirror NIndex entries Latin Uppercase Alphabet Uppercase Alphabet Latin

Capital Letters LatinLower case U+0061Version Unicode 110 (June 1993)

Unicode Character INTEGRAL (U+222B)Name INTEGRALBlock Mathematical OperatorsCategory Symbol Math [Sm]Combine 0BIDI Other Neutrals [ON]Mirror YIndex entries Integral Signs INTEGRALSee Also latin small letter esh U+0283Version Unicode 110 (June 1993)

(resultados de httpwwwfileformatinfoinfounicodecharsearchhtm)

int

A

1289

Strings - codificaccedilotildees - Unicode

Unicode Character ANGSTROM SIGN (U+212B)Name ANGSTROM SIGNBlock Letterlike SymbolsCategory Letter Uppercase [Lu]Combine 0BIDI Left-to-Right [L]Decomposition LATIN CAPITAL LETTER A WITH RING ABOVE (U+00C5)Mirror NOld name ANGSTROM UNITIndex entries ANGSTROM SIGNLower case U+00E5Comments non SI length unit (=01 nm) named after A J ngstroumlm Å

Swedish physicist preferred representation is U+00C5Version Unicode 110 (June 1993)

Unicode Character GREEK SMALL LETTER ZETA (U+03B6)Name GREEK SMALL LETTER ZETABlock Greek and CopticCategory Letter Lowercase [Ll]Combine 0BIDI Left-to-Right [L]Mirror NUpper case U+0396Title case U+0396Version Unicode 110 (June 1993)

(resultados de httpwwwfileformatinfoinfounicodecharsearchhtm)

ζ

1389

Strings - codificaccedilotildees - UnicodeUnicode Character NABLA (U+2207)Name NABLABlock Mathematical OperatorsCategory Symbol Math [Sm]Combine 0BIDI Other Neutrals [ON]Mirror NIndex entries difference backward backward difference del NABLAComments backward difference gradient del used for Laplacian

operator (written with superscript 2)See Also white down-pointing triangle U+25BDVersion Unicode 110 (June 1993)

Java DatastringtoUpperCase() nablastringtoLowerCase() nablaCharacterUnicodeBlock MATHEMATICAL_OPERATORSCharactercharCount() 1CharactergetDirectionality() DIRECTIONALITY_OTHER_NEUTRALS [13]CharactergetNumericValue() -1CharactergetType() 25CharacterisDefined() YesCharacterisDigit() NoCharacterisIdentifierIgnorable() NoCharacterisLetter() NoCharacterisLetterOrDigit() NoCharacterisLowerCase() NoCharacterisWhitespace() No()

(resultados de httpwwwfileformatinfoinfounicodecharsearchhtm)

nabla

1489

Strings ndash Como codificar Unicode

Haacute vaacuterias formas Nenhuma simples como ASCII porque eacute necessaacuterio um nuacutemero muito maior de pontos de coacutedigo (haacute espaccedilo para 1 114 112 hoje haacute 109 449 alocados)

Apenas usar mais bytes com um nuacutemero constante por caractere exigiria pelo menos 21 bits por caractere (221 eacute 2 097 152)

Seria demais considerando que quase todos os caracteres escritos estatildeo entre os 128 do ASCII

Em quase todo texto 20 de cada 21 bits seriam 0

A maior parte das codificaccedilotildees usa formas mais elaboradas com um nuacutemero variaacutevel de bytes por caractere

Todas as codificaccedilotildees de uso comum tem o ASCII como subconjunto os 128 caracteres do ASCII satildeo codificados em forma idecircntica em ASCII e nas codificaccedilotildees usuais de Unicode

O que ajuda na compatibilidade software Unicode escrevendo texto que soacute conteacutem caracteres do ASCII produz texto idecircntico ao que seria produzido em ASCII

1589

Strings - codificaccedilotildees para Unicode

No mundo ocidental haacute apenas duas codificaccedilotildees de uso comum

UTF-8

ISO 8859-1 (tambeacutem chamado de Latin 1)

Por isso eacute necessaacuterio saber que codificaccedilatildeo usar ao trabalhar com Unicode

Alguns softwares formatos de arquivo informam a codificaccedilatildeo usada

Outros assumem que uma eacute usada (sem ter sido informada)

Outros tentam adivinhar quando natildeo satildeo informados qual eacute (esp navegadores)

Outros soacute perguntam para o usuaacuterio (esp editores de texto)

Sistemas operacionais oferecem variadas formas de digitar caracteres especiais

Pelos coacutedigos numeacutericos

Por programas seletores de caracteres Alguns seletores de caracteres (ex kcharselect do KDE) permitem fazer buscas pelo

nome ou propriedades

1689

Strings - Onde haacute suporte a Unicode em programaccedilatildeo

Linguagens variam muito

Desconhecem Unicode (soacute usam ASCII) C Fortran

Usam nativamente ASCII (inclusive no coacutedigo-fonte) mas tecircm tipos para strings Unicode e ou funccedilotildees para processar Unicode (em variados graus) C C++ IDL R

Usam nativamente Unicode (inclusive no coacutedigo-fonte) e tecircm bom suporte a strings Unicode Java Python Perl

Muitas vezes (mesmo quando Unicode pode ser usado em coacutedigo-fonte) caracteres Unicode satildeo escritos atraveacutes de ASCII com coacutedigos de escape para coacutedigos Unicode Exs

IDLgt p=plot(testtitle=Z(00C5222B))

C C++ Java Python u2207

ReferecircnciasCharacters vs byteshttpwwwtbrayorgongoingWhen200x20030426UTFThe absolute minimum every software developer absolutely positively must know about Unicode and character sets (no excuses)httpwwwjoelonsoftwarecomarticlesUnicodehtmlUnicode character searchhttpwwwfileformatinfoinfounicodecharsearchhtm

em IDL produz intÅ

produz nabla

1789

Strings - processamento baacutesico

Operaccedilotildees mais fundamentais que costumam ser suportadas em ldquotodasrdquo as linguagens bibliotecas padratildeo (exemplos usando sintaxe de IDL)

Atribuiccedilatildeo de literais

IDLgt a=some

IDLgt helpaA STRING = some

IDLgt printasome

Concatenaccedilatildeo

IDLgt b=a+ string

IDLgt helpbB STRING = some string

1889

Strings - processamento baacutesico

Valor loacutegico

String vazio (null string) eacute falso o resto eacute verdadeiro

IDLgt c=

IDLgt if c then printc is not empty string else printc is null string ()c is null string ()

IDLgt c=a

IDLgt if c then printc is not empty string else printc is null string ()c is not empty string

Espaccedilo natildeo eacute o mesmo que string vazio

IDLgt c=

IDLgt if c then printc is not empty string else printc is null string ()c is not empty string

1989

Strings - processamento baacutesico Comparaccedilotildees

IDLgt helpabA STRING = someB STRING = some string

IDLgt printb eq a 0

IDLgt printb gt a 1

IDLgt c=[ab9Some somesome other string]

IDLgt printc[sort(c)]format=(A) some9Somesomesome other stringsome string

IDLgt printa eq A 0

IDLgt printstrcmp(aAfold_case) 1

Comparaccedilotildees de ldquotamanhordquo (maior menor etc) satildeo comparaccedilotildees pela ordem de codificaccedilatildeo (ldquoalfabeacuteticardquo)

Algumas linguagens permitem definir o ordenamento (como considerar maiuacutesculasminuacuteculas letras com acentos nuacutemeros e siacutembolos) Exs Python C++ Java Perl

2089

Strings - processamento baacutesico Substrings

IDLgt printstrmid(abcdefg32)de

Algumas linguagens nativamente suportam iacutendices para indicar substrings C C++ Fortran Python Ex (Python)

gtgtgt s=abcdegtgtgt print(s[25])cde

Outras permitem que sejam definidos iacutendices por objetos strings

Busca de caracteres ou substrings

IDLgt printstrpos(abcdefgd) 3

IDLgt printstrpos(abcdefgj) -1

IDLgt printstrpos(abcdefgbc) 1

2189

Strings - processamento baacutesico

Outros

IDLgt printstrlen(1234567) 7

IDLgt printstrlen(1234567 ) 8

IDLgt printstrlen( 1234567 ) 9

IDLgt helpstrtrim( 1234567 2)ltExpressiongt STRING = 1234567

IDLgt helpstrtrim( 1234567 1)ltExpressiongt STRING = 1234567

IDLgt helpstrtrim( 1234567 0)ltExpressiongt STRING = 1234567

IDLgt printstrupcase(abcdEF)ABCDEF

IDLgt printstrlowcase(abcdEF)abcdef

Medindo quantos caracteres tem o string inclui espaccedilos em branco

Remoccedilatildeo dos brancos agrave esquerda agrave direita ou dos dois lados

2289

Strings - conversatildeo de outros tipos para strings

Eacute uma das operaccedilotildees mais comuns para gerar textos informativos e nomes escrever arquivos (aquivos texto discutidos adiante) etc

Eacute natildeo trivial jaacute que a conversatildeo pode ser feita de muitas formas diferentes

Para tipos fundamentais sempre haacute uma conversatildeo default tanto criando um string como usando algo tipo print (para strings terminal ou arquivos)

Todo comando tipo print (print printf sprintf string write etc) e toda escrita para arquivos texto eacute uma conversatildeo para string (terminais e arquivos texto soacute conteacutem strings)

2389

Strings - conversatildeo de outros tipos para strings

Exemplos de conversotildees (IDL)

IDLgt print[-109] -1 0 9

IDLgt print1d01B10 10000000 1 100000

IDLgt helpstring(1d01B10)ltExpressiongt STRING = 10000000 1 100000

IDLgt printfunitdblarr(343)

Tipos mais elaborados podem ou natildeo ter uma forma predefinida Com objetos eacute comum ser possiacutevel definir a conversatildeo (stringification) ao criar a classe

IDLgt h=hash(a109[01]18b)

IDLgt printh9 0 1a 100000180000 b

Strings

Coloca strings em um arquivo (adiante)

Strings criados por um meacutetodo da classe hash satildeo uma forma de representar o hash

2489

Strings - conversatildeo de outros tipos para strings

Algumas linguagens (Python IDL) tecircm mais de uma forma default de gerar strings Em Python uma forma eacute executaacutevel a outra eacute mais legiacutevel

In [30] x=arange(12)reshape(43)

In [31] print(x)[[ 0 1 2] [ 3 4 5] [ 6 7 8] [ 9 10 11]]

In [32] xOut[32]array([[ 0 1 2] [ 3 4 5] [ 6 7 8] [ 9 10 11]])

In [33] y=array([[ 0 1 2] [ 3 4 5] [ 6 7 8] [ 9 10 11]])

In [37] print(array_equal(xy))True

String mais legiacutevel

String executaacutevelPode ser usado para criar um objeto equivalente

2589

Strings ndash formataccedilatildeo expliacutecita

A formataccedilatildeo pode ser especificada se a conversatildeo default natildeo eacute adequada para definir a conversatildeo em um novo tipo

Cada linguagem tem sua sintaxe para formataccedilatildeo

Haacute dois estilos semelhantes em vaacuterias linguagens

Ambos os estilos satildeo sintaxes diferentes para a mesma ideacuteia Um coacutedigo especifica o tipo de dado sendo passado (inteiro real etc) e detalhes de como seraacute feito o string (largura do campo diacutegitos decimais alinhamento etc)

2689

Strings ndash formataccedilatildeo expliacutecita

Estilo Fortran

IDL

IDLgt print1d0+1d-9 10000000

IDLgt print1d0+1d-9format=(E1610)10000000010E+00

IDLgt printx=1d0+1d-9format=(A0F1613)X= 10000000010000

Estilo C (ldquoprintfrdquo)

IDL

IDLgt printformat=(x=1610e)1d0+1d-9x=10000000010e+00

Python

In [20] print(x=1610e (1e0+1e-9))x=10000000010e+00

Nenhum formato expliacutecito (default)

2789

Strings - formatos tipo Fortran

(apenas o principal ver documentaccedilatildeo para detalhes)

Ex (IDL)

IDLgt printx=1d0+1d-9format=(A0F1613)X= 10000000010000

Tambeacutem haacute modificadores para especificar alinhamento (-) se deve haver (ou ser suprimido) avanccedilo para a pŕoxima linha posiccedilatildeo dentro do campo etc

Coacutedigo Significado Exemplo(s)

A String (A) (10A)

I Inteiro decimal (I) (10I)(-2I)

B Inteiro binaacuterio (B) (10B)

Z Inteiro hexadecimal (Z) (10Z)

O Inteiro octal (O) (10O)

F Real ponto fixo (F)(F52)

E D Real ponto flutuante (E)(D1610)

G Real ponto fixo ou flutuante de acordo com o valor (G)(G10)

ldquordquo String literal (ldquox=rdquoI10)

X Caracteres em branco (A10XI)

2889

Strings - formatos tipo C (printf)(apenas o principal ver documentaccedilatildeo para detalhes)String com campos a serem substituiacutedos por valores (passados adiante) marcados por coacutedigos com

Ex (Python)In [20] print(x=1610e (1e0+1e-9))x=10000000010e+00

Haacute modificadores para especificar alinhamento como preencher o espaccedilo que sobra (espaccedilos zeros etc) para imprimir o sinal + etc

Coacutedigo Significado (tipo) Exemplo(s)

di Inteiro decimal (int) d 5d +05d

u Inteiro decimal sem sinal (unsigned int) u 7u

fF Real em ponto fixo (double float) f 136f

eE Real em ponto flutuante (double float) e 1610e

gG Real em ponto fixo ou flutuante decidido pelo valor (double float)

g 73G

xX Inteiro sem sinal hexadecimal (unsigned int) x 10X

o Inteiro sem sinal octal (unsigned int) o 5o

s String (string) s 10s

c Caractere (char) c

p Ponteiro - estilo C - (void ) p

literal

2989

Strings - conversatildeo de strings para outros tipos

Para gerar dados a partir de strings datas identificadores pedaccedilos de nomes valores numeacutericos armazenados em strings

Tambeacutem sempre haacute conversotildees default para os tipos baacutesicos onde o intepretador programa faz o possiacutevel para entender o string como um valor daquele tipo

Tipicamente eacute feito por casts (funccedilotildees de conversatildeo) reads (de strings ou arquivos texto (arquivos texto satildeo strings)) construtores de objetos ou implicitamente

3089

Strings - conversatildeo de strings para outros tipos - impliacutecitas

Exs (IDL)

IDLgt helpfix([17 17 171 -17 9 8])ltExpressiongt INT = Array[5]

IDLgt printfix([17 17 171 -17 9 8]) 17 17 17 -17 9

IDLgt printdouble([17 17 171 -17 9 8]) 17000000 17000000 17100000 -17000000 90000000

IDLgt readfunitabcd

IDLgt a=0d0IDLgt b=00IDLgt c=0IDLgt reads171d0 189d0 -9abcIDLgt helpabcA DOUBLE = 17100000B FLOAT = 189000C INT = -9

Converte o conteuacutedo do string para os tipos das variaacuteveis abcd (explicado adiante)

3189

Strings - conversatildeo de strings para outros tipos

Quando o default natildeo eacute suficiente (ou quando escrevendo o conversor em uma classe) costuma ser possiacutevel o fazer com formatos semelhantes aos formatos para gerar strings Exs (IDL)

IDLgt a=0d0IDLgt b=00IDLgt c=0IDLgt reads171d0 something 189d0-9abc READS Input conversion error Unit 0 File ltstdingt Error occurred at $MAIN$ Execution halted at $MAIN$

Natildeo funcionou porque sozinho ele natildeo conseguiu saber o que fazer com o ldquosomethingrdquo Usando um formato especiacutefico

IDLgt reads171d0 something 189d0-9 abcformat=(D6111XD611XI)

IDLgt helpabcA DOUBLE = 17100000B FLOAT = 189000C INT = -9

Exemplos mais complicados adiante (arquivos texto)

Variaacuteveis tecircm que ser definidas para informar para que tipo seraacute feita a conversatildeo default

3289

Strings - processamento natildeo baacutesicoOperaccedilotildees importantes e muito necessaacuterias mas que natildeo satildeo suportadas em todas as linguagens bibliotecas padratildeo

Testes (ex IDL)

IDLgt str=[afitsaFITSafitsaabfitsabcfits]

IDLgt printstrmatch(strfits) 1 0 0 1 1

IDLgt printstrmatch(strfitsfold_case) 1 1 0 1 1

IDLgt printstrmatch(strfitsfold_case) 1 1 1 1 1

IDLgt printstrmatch(strfits) 1 0 0 0 0

IDLgt printstrmatch(strfits) 0 0 0 1 0

3389

Strings - processamento natildeo baacutesico

Operaccedilotildees importantes e muito necessaacuterias mas que natildeo satildeo suportadas em todas as linguagens bibliotecas padratildeo

Separaccedilatildeo de partes (Ex IDL)

IDLgt printstrsplit(2011- 131 -extract)format=(A)2011131

Processamento de nomes de arquivos diretoacuterios (Ex IDL)

IDLgt printfile_dirname(some_directoryanother_directorysome_filetxt)some_directoryanother_directory

IDLgt printfile_basename(some_directoryanother_directorysome_filetxt)some_filetxt

IDLgt printfile_basename(another_directorysome_filetxttxt)+_alteredtxtsome_file_alteredtxt

3489

Strings - processamento natildeo baacutesico

Codificaccedilotildees (Ex Python 3)

gtgtgt s=infinite money infinNeuro sign

gtgtgt print(s)infinite money infineuro

gtgtgt print(ascii(s))infinite money u221eu20ac

gtgtgt print(sencode(utf-8))binfinite money xe2x88x9exe2x82xac

3589

Strings - processamento natildeo baacutesico

Perl eacute a linguagem mais avanccedilada para processamento de strings tem suporte nativo a muitas outras operaccedilotildees a semacircntica da linguagem eacute voltada principalmente para processar strings expressotildees regulares (de vaacuterios tipos) natildeo satildeo strings fazem parte da semacircntica

Ex (sem o objetivo que seja compreensiacutevel apenas para indicar o estilo)

Ler um arquivo contendo campos com nomes separados de valores por ()

temperature 10008name some modelx_dimension 100y_dimension 100z_dimension 50()

Armazenado-o em um mapa O que pode ser feito com apenas

While (ltgt) Loop over input linesPut pre-colon text into $1 post-colon into $2 if (m (S+) (+) ) Use $1 as key $2 as value $file_data$1 = $2

3689

Expressotildees regulares - definiccedilatildeo

Expressotildees regulares (regular expressions regex) satildeo a mais poderosa ferramenta para fazer buscas e separar substrings

Regex satildeo uma linguagem com o uacutenico objetivo de especificar propriedades de strings

Implementadas em graus diferentes em todas as linguagens modernas e modernizadas facilita encontrar uma expressatildeo jaacute pronta pois satildeo quase iguais em qualquer linguagem

Estatildeo na biblioteca padratildeo em IDL Python R Perl

Em C++ e Java em bibliotecas comuns (Boost Jregex)

Para que servem

Uma expressatildeo regular especifica propriedades de strings

O interpretador de expressotildees regulares (regular expression engine) recebe a expressatildeo e o string a analisar e determina se o string corresponde (matches) agrave expressatildeo regular

Em alguns casos o interpretador pode tambeacutem informar que parte(s) do string corresponde(m) a que parte(s) da expressatildeo regular e realizar processamentos com estas partes

3789

Expressotildees regulares ndash exemplos de usos Separar partes de strings

Encontrar linhas em arquivos que tenham nomes valores e comentaacuterios e separar estes pedaccedilos

Escalar com comentaacuterio

SLITPA = 351979 Slit position angle

Array 1D sem comentaacuterio (se extendendo por vaacuterias linhas)

BAND_BIN_CENTER = (03505400358950036629003732200379490 0387900104598)

Escalares em diferentes formatos

Total Mechanical Luminosity 15310E+03resources_usedwalltime=005603

Pedaccedilos de nomes

6063 17836E-20 2456 T FeIX((3Pe)3d(2PE)4p_1Po-3s2_3p6_1Se)

Datas separando ano mecircs dia hora (em vaacuterios formatos diferentes)

DATE-OBS= 2006-12-18 universal date of observationDATE_TIME = 2010-07-19T161032START_TIME = 2006-182T225102850Z

3889

Expressotildees regulares ndash exemplos de usos

Separar partes de strings Separar partes de nomes de arquivos (por significarem algo como identificar o

conteuacutedo)

specdec18s0041fitsscamdec18i0054fits15_7_mts_hmpixselh_mr15sav15_7_mts_hwpixselh_mr15sav16_3_mts_hwpixselb_mr16savreadmodel5l_-1_000010000_10000_r05_030_08196_0100000_005000000_1000eps

Determinar se um string eacute um nuacutemero (inteiro real fixo flutuante)

Encontrar identificadores Exs nomes de cataacutelogos endereccedilos HTTPFTP endereccedilos de email

Separar campos em arquivos sendo lidos onde as linhas natildeo tecircm a mesma formataccedilatildeo algumas linhas com colunas separadas por espaccedilos outras por tabs outras por

siacutembolos ignorando linhas de comentaacuterios e linhas vazias

3989

Expressotildees regulares - usoEx (IDL) encontrar nomes de arquivos com algumas propriedades

IDLgt printfilesformat=(A)CM_1477475933_1_viscubCM_1477476864_1_ircubCM_1477476864_1_irgcubCM_1477476864_1_viscubCM_1477477826_1_ircubCM_1477477826_1_irgcubCM_1477477826_1_viscubmosaic2cub

IDLgt printstregex(files+irgcubboolean) 0 0 1 0 0 1 0 0

A expressatildeo regular eacute +irgcub Especifica uma ou mais ocorrecircncias seguidas (+) de qualquer caractere () seguido de uma ocorrecircncia de irgcub (o ponto vem precedido do caractere de

escape () para ser entendido literalmente como um ponto e natildeo como o seu significado especial (qualquer caractere)

Esta aplicaccedilatildeo do interpretador (stregex) retorna um valor Booleano (verdadeirofalso) para cada elemento do string passado (files) que informa se aquele elemento correspondia agravequela expressatildeo regular

Este eacute um exemplo artificial Seria mais faacutecil ter usado strmatch(filesirgcub)

4089

Expressotildees regulares - uso

Em casos como este tipicamente o resultado de stregex seria usado como filtro para selecionar apenas os elementos do array de strings que satisfazem agravequela expressatildeo regular

IDLgt w=where(stregex(files+irgcubboolean)null)IDLgt printfiles[w]format=(A)CM_1477476864_1_irgcubCM_1477477826_1_irgcub

Ex (IDL) Determinar que strings conteacutem uma data no formato yyyy-mm-dd

IDLgt strs=[201002012010-02-012010-2-1aaaa-mm-ddT2010-02-01J]IDLgt printstregex(strs[0-9]4-[0-9]2-[0-9]2boolean) 0 1 0 0 1

Esta expressatildeo regular especifica quatro repeticcedilotildees (4) de diacutegitos (caracteres na faixa [0-9]) seguido de um (-) seguido de duas repeticcedilotildees (2) de dois diacutegitos ([0-9]) seguido de um (-) seguido de duas repeticcedilotildees (2) de dois diacutegitos ([0-9])

Uma expressatildeo regular apenas um pouco mais elaborada poderia corresponder aos 3 formatos de data no array acima E poderia se impedir que a uacuteltima (com outros caracteres antes e depois da data) seja aceita

4189

Expressotildees regulares - regras - caracteres ldquonormaisrdquo

Uma expressatildeo regular usa caracteres ldquonormaisrdquo e especiais para especificar o que se vai procurar na ordem em que aparecem na expressatildeo

Se um caractere eacute normal (natildeo eacute um dos especiais mostrados adiante) ele especifica uma ocorrecircncia daquele caractere

Ex J eacute uma expressatildeo regular que corresponde a qualquer string onde ocorra J Jaacute JA soacute corresponde a strings que tenham JA dentro

Exs (IDL)

IDLgt strs=[JJJJJJaJAjaJa]

IDLgt printstregex(strsJboolean) 1 1 1 0 1

IDLgt printstregex(strsJAboolean) 0 0 1 0 0

4289

Expressotildees regulares - regras - caracteres especiaisCaracteres especiais tecircm outros significados Para significar literalmente aquele caractere deve ser escapado (escaped) com um

Siacutembolo significado exemplo Corresponde(m) Escape o caractere seguinte deve ser interpretado

literalmente natildeo como especial aa

Qualquer caractere ab ajb aab abb jafbc

+ Uma ou mais repeticcedilotildees do que vem agrave esquerda a+b ab aab bab baabh

() Subexpressatildeo para agrupar termos afetados por um caractere especial (como parecircnteses em notaccedilatildeo matemaacutetica)

(ab)+c abc ababc dabababcg

Zero ou mais repeticcedilotildees dos termos agrave esquerda ab abbaab caaabg

Zero ou uma repeticcedilatildeo dos termos agrave esquerda ab b ab cabd cbd

| Alternaccedilatildeo qualquer um dos dois agrave esquerda a|bc ac bc jacd jbcd

n Exatamente n repeticcedilotildees do termo agrave esquerda a2b aab daaabg

n1n2 De n1 a n2 repeticcedilotildees do termo agrave esquerda a12b ab aab aaab gaaabbd

^ Acircncora (no comeccedilo) nada agrave esquerda ^ab ab abb

$ Acircncora (no fim) nada agrave direita ab$ abaab

[] Conjunto de valores (explicado adiante)

4389

Expressotildees regulares - regras - conjuntos de valores

[] denota um conjunto de valores que pode conter

Uma lista de coisas que devem corresponder Ex [abc] signfica qualquer caractere no conjunto abc Correspondem a esta

expressatildeo abcabha

Uma lista de coisas que natildeo podem corresponder [^abc] significa qualquer coisa que natildeo seja a b ou c Correspondem a esta

expressatildeo d jgs gg

Faixas de valores [0-9] signfica qualquer diacutegito [0-9a-zA-Z] significa qualquer diacutegito ou letra

Classes de valores como algumas faixas e outros conjuntos ocorrem com muita frequumlecircncia haacute nomes

especiais para eles Estes (em IDL) vecircm entre [] ex [[digit] significa o mesmo que [0-9]

4489

Expressotildees regulares - regras - classes de valores

Classe signficado

alnum Caracteres alfanumeacutericos 0-9a-zA-Z

alpha Caracteres alfabeacuteticos a-zA-Z

cntrl Caracteres de controle ASCII (natildeo visiacuteveis coacutedigos 1 a 31 e 127)

digit Diacutegitos (decimais) 0-9

graph Caracteres visiacuteveis ASCII 33 a 126 (natildeo inclui o espaccedilo)

lower Letras minuacutesculas a-z

print Caracteres ldquoimprimiacuteveisrdquo (visiacuteveis e o espaccedilo) ASCII 32 a 126

punct Caracteres de pontuaccedilatildeo $amprsquo()+-lt=gt[]^_lsquo|~

space Os caracteres ldquoem brancordquo (blank) espaccedilo tab tab vertical CR LF (ASCII 32 e 9-13)

upper Letras maiuacutesculas A-Z

xdigit Diacutegitos hexadecimais 0-9A-Fa-f

lt Comeccedilo de palavra (palavra definida como sequumlecircncia de coisas natildeo space)

gt Fim de palavra (palavra definida como sequumlecircncia de coisas natildeo space)

Estas satildeo apenas as principais Algumas implementaccedilotildees tecircm muito mais (em particular nas linguagens que usam Unicode nativamente)

4589

Expressotildees regulares - exemplos

Determinar se strings satildeo nuacutemeros (Ex IDL)

IDLgt str=[9-18 875-812-45913E9-98d7a188d032f5]

Inteiros

IDLgt intexpr=^[-+][0-9]+$

IDLgt printstregex(strintexprboolean) 1 1 0 0 0 0 0 0 0 0

Ponto flutuante

IDLgt fpexpr=^[-+](([0-9][0-9]+)|([0-9]+[0-9]))([eEdD][-+][0-9]+)$

IDLgt printstregex(strfpexprboolean) 1 1 0 1 1 1 1 1 0 0

Sinal opcional

1 ou mais diacutegitos

Sinal opcional

0 ou mais diacutegitos opcionalmente seguidos de um ponto e 1 ou mais diacutegitos

1 ou mais diacutegitos opcionalmente seguidos de um ponto e 0 ou mais diacutegitos

ou Expoente opcional letra do expoente seguida de sinal opcional seguido de um ou mais diacutegitos

4689

Expressotildees regulares ndash extraccedilatildeo

Interpretadores de expressotildees regulares costumam oferecer mais que apenas testar se um string corresponde a uma expressatildeo

Em geral tambeacutem podem retornar que parte(s) do string corresponde(m) agrave expressatildeo

Ex (IDL) Determinar se um string conteacutem uma data incluindo os formatos

IDLgt dates=[2011-01-312011 1 3120110131something done on y2011m1d31 with something]

E extrair a data de dentro do string

IDLgt expr=[0-9]4[0-9]12[0-9]12

(4 diacutegitos)(qualquer separador)(1 a 2 diacutegitos)(qualquer separador)(1 a 2 diacutegitos)

IDLgt printstregex(datesexprextract)format=(A)2011-01-312011 1 31201101312011m1d31

Como agora separar ano mecircs e dia Com uma busca e uma extraccedilatildeo para cada Poderia ser mais eacute mais faacutecil com uma uacutenica expressatildeo regular

4789

Expressotildees regulares - aleacutem de apenas testes

Tambeacutem podem retornar que parte(s) do string correspondem agrave expressatildeo toda e agraves suas subexpressotildees (partes da expressatildeo delimitadas por parecircnteses)

Ex (IDL) Separar pedaccedilos de datas Neste caso para a expressatildeo ficar menor assumindo um formato simples (yyyy-mm-ddThhmmssfff) Mas poderia ser um formato mais livre como no exemplo anterior

IDLgt str=Stuff observed on 2011-01-31T123924983 with some instrumentIDLgt expr=([0-9]4)-([0-9]2)-([0-9]2)T([0-9]2)([0-9]2)([0-9]2[0-9]3)

(quatro diacutegitos)-(2 diacutegitos)-(2 diacutegitos)T(2 diacutegitos)(2 diacutegitos)(2 diacutegitos3 diacutegitos)

IDLgt pieces=stregex(strexprextractsubexpr)IDLgt printpiecesformat=(A)2011-01-31T12392498320110131123924983IDLgt d=julday(pieces[2]pieces[3]pieces[1]pieces[4]pieces[5]pieces[6])IDLgt printdformat=(F166) 2455593027372

Expressatildeo inteiraPrimeira subexpressatildeoSegunda subexpressatildeoTerceira subexpressatildeoQuarta subexpressatildeoQuinta subexpressatildeoSexta subexpressatildeo

4889

Expressotildees regulares - referecircncias httpxkcdcom208

Viacutedeos do Software Carpentry

httpsoftware-carpentryorg4_0regexp

4989

Arquivos

Quase todo programa precisa armazenar dados em arquivos

Podem ser pequenos arquivos de paracircmetros ou enormes arquivos de dados produzidos ou a processar

Apesar do sugerido pela praacutetica comum arquivos texto natildeo satildeo sempre a melhor escolha para armazenar dados - e haacute muitas formas diferentes de os usar

Qual eacute a melhor escolha

Assim como para linguagens ou contecirciners natildeo existe ldquoo melhor formatordquo Cada um tem suas vantagens e desvantagens

Dados diferentes (mesmo se usados pelos mesmos programas) em geral se adequam melhor a formatos diferentes

5089

Arquivos - texto X binaacuterios

Em qualquer formato arquivos satildeo armazenados como diacutegitos binaacuterios

Mas haacute duas formas principais como eles podem ser codificados

Arquivos baseados em texto (text files)

Dados satildeo transformados em caracteres usando alguma formataccedilatildeo (mesmo se impliacutecita) e escritos com alguma codificaccedilatildeo de texto (comumente mas natildeo necessariamente ASCII)

Um arquivo texto eacute um ou mais strings As mesmas conversotildees tecircm que ser feitas depara outros tipos

Arquivos ldquobinaacuteriosrdquo (binary files)

Embora todo arquivo seja binaacuterio este nome costuma ser usado soacute para aqueles em que os dados natildeo estatildeo na forma de texto

Com frequumlecircncia (nem sempre) os dados satildeo gravados de forma idecircntica a como satildeo armazenados na memoacuteria

Muitos formatos usam uma mistura de partes em texto e partes binaacuterias

Um cabeccedilalho (header) de texto que daacute informaccedilotildees (metadados) sobre os dados armazenados na parte binaacuteria que vem depois

O cabeccedilalho conteacutem em especial informaccedilotildees sobre como ler os dados binaacuterios

5189

Arquivos - texto X binaacuterios

Vantagens de arquivos texto

Legiacuteveis por pessoas (human readable)

Podem ser auto-suficientes todo o necessaacuterio para os ler e entender o que conteacutem pode ser obtido olhando o arquivo

Satildeo os menos especiacuteficos a linguagens software normalmente satildeo escritos em ASCII ou Unicode e sempre haacute algum suporte a ler escrever texto em linguagens software

Haacute alguns formatos padratildeo para texto (exs CSV XML) que satildeo suportados em muitas plataformas diferentes

5289

Arquivos - texto X binaacuterios

Vantagens de arquivos binaacuterios

Em geral natildeo haacute conversotildees entre o os dados como armazenados na memoacuteria O que torna o armazenamento mais eficiente e sem alteraccedilotildees nos valores

A maior parte dos formatos padronizados eacute binaacuteria Exs FITS cube CDF NetCDF HDF HDF5 JPEG JPEG2000 TIFF GeoTIFF MPEG etc

Eacute mais comum que haja bibliotecas prontas (ateacute de alto niacutevel) para consulta leitura e gravaccedilatildeo

Os formatos melhor desenhados satildeo autodocumentados (em texto ou binaacuterio) para os ler natildeo eacute necessaacuterio conhecimento preacutevio sobre como os dados foram armazenados

Toda linguagem plataforma costuma ter seu formato binaacuterio mais nativo que costuma ser o mais faacutecil para leitura gravaccedilatildeo Em particular nas de alto niacutevel que tecircm formatos autodocumentados (especialmente

em IDL R Python Java)

Muitos formatos tecircm opccedilatildeo de compressatildeo dos dados

5389

Arquivos - proprietaacuterios X padratildeo

Independente da escolha texto binaacuterio programas devem escolher entre usar um formato proacuteprio ou um formato padronizado

A principal vantagem de formatos proacuteprios eacute que satildeo definidos da forma mais conveniente para a aplicaccedilatildeo que os usa simplificando leitura e gravaccedilatildeo e potencialmente otimizando recursos (acesso ao disco tamanho do arquivo etc)

A principal desvantagem de formatos proacuteprios eacute ser necessaacuterio escrever todo o coacutedigo para os ler gravar

Pode dar mais trabalho que usar um formato geneacuterico que natildeo seja exatamente o que melhor se encaixa na aplicaccedilatildeo

O coacutedigo para processar o formato em geral vai ser menos completo e conveniente de usar que o de um formato bem estabelecido usado por muitos outros em muitos ambientes

Cada novo software que for usar estes arquivos vai precisar compartilhar do mesmo coacutedigo ou precisar de coacutedigo novo (em particular se em outra linguagem) para ler gravar naquele formato

Eacute necessaacuterio documentar o formato e decidir sobre como ele seraacute definido

Se outros jaacute colocaram muito trabalho desenvolvendo bons formatos padratildeo bem suportados em muitos ambientes por que ter o trabalho de reinventar (e reprogramar redocumentar e retestar) a roda

5489

Arquivos - padrotildees comuns em astronomia (exs adiante)

Texto

CSV Comma-separated values - bem suportado por muitos softwares

ldquoColunas fixasrdquo Natildeo eacute um padratildeo bem definido mas eacute praacutetica comum para tabelas (2D)

XML Extensible Markup Language - O padratildeo texto mais flexiacutevel de grande uso em programaccedilatildeo geral para armazenar qualquer coisa com frequumlecircncia de forma hieraacuterquica Bem suportado por linguagens modernas (e modernizadas) e bibliotecas das principais

linguagens gerais Alta complexidade o torna trabalhoso de usar

5589

Arquivos - padrotildees comuns em astronomia (exs adiante)Binaacuterios

FITS Flexible Image Transport System - o mais comum para observaccedilotildees astronocircmicas Conteacutem os dados (em geral arrays 1D 2D ou 3D) e documentaccedilatildeo (nos cabeccedilalhos) sobre a origem e caracteriacutesticas dos dados Tambeacutem usado para armazenar tabelas de dados quaisquer mesmo que natildeo sejam observaccedilotildees (especialmente pelo STSCI) Variam muito em qualidade de documentaccedilatildeo

NetCDF Network Common Data Form - evoluccedilatildeo do CDF autodocumentado eacute comum e bem suportado para vaacuterios arrays de dados

HDF5 Hierarchical Data Format ndash autodocumentado comum e bem suportado permitindo aleacutem de simples arrays estruturas (eacute um formato hieraacuterquico)

Formatos de imagens JPEG JPEG2000 TIFF GeoTIFF etc - voltados para arrays 2D3D de inteiros ou (em alguns casos) reais com ou sem compressatildeo JPEG2000 tem caracteriacutesticas mais avanccediladas como imagens multiresoluccedilatildeo

Formatos vetoriais PS EPS DXF SHP SVG - variados niacuteveis de suporte a armazenamento de vetores e formas em 2D ou 3D

ISIS Cube semelhante em caracteriacutesticas ao FITS mais usado em sensoriamento remoto geociecircncias e ciecircncias planetaacuterias em geral para observaccedilotildees 1D 2D ou 3D

Formatos nativos de linguagens todo o trabalho de leitura e gravaccedilatildeo eacute feito automagicamente pela biblioteca padratildeo em IDL R Python Java

5689

Arquivos texto - newlines

Apesar do que possa parecer arquivos texto natildeo tecircm intrinsecamente vaacuterias linhas Arquivos texto satildeo soacute uma sequumlecircncia 1D de caracteres em alguma codificaccedilatildeo Separaccedilatildeo em linhas (equivalente a interpretar o arquivo como 2D em linhas e colunas) eacute

especificada por convenccedilotildees Natildeo haacute apenas uma convenccedilatildeo para o fim de linhas

A mais primitiva convenccedilatildeo eacute separaccedilatildeo nenhuma estipula-se que linhas tenham um nuacutemero fixo N de caracteres e cabe ao software que lecirc o arquivo entender que uma linha nova ocorre regularmente a cada N caracteres

Eacute a forma menos portaacutevel e mais inconveniente eacute necessaacuterio o conhecimento preacutevio (ou por inspeccedilatildeo do arquivo) de quantos caracteres haacute por linha

A maior parte dos editores de texto natildeo vai saber separar linhas desta forma (por falta deste conhecimento preacutevio) Exemplo (de um FITS real)

SIMPLE = T Fits standard BITPIX = 16 Bits per pixel NAXIS = 0 Number of axes EXTEND = T File may contain extensions

O que com as linhas quebradas nos lugares certos seria

SIMPLE = T Fits standard BITPIX = 16 Bits per pixel NAXIS = 0 Number of axes EXTEND = T File may contain extensions

5789

Arquivos texto - newlines

A forma mais comum de especificar linhas eacute com um marcador do final de linha (newline)

Eacute um caractere especial natildeo normalmente presente no texto que serve para marcar fim de linhas

Mas natildeo haacute soacute um padratildeo de newline Os mais comuns

LF (Line Feed ASCII 10) ndash Unix Linux Mac OS X

CR - (Carriage Return ASCII 13) - Mac OS lt10

CR+LF (CR seguido de LF) - Windows DOS

Eacute o motivo de o Notepad (Windows) natildeo entender as quebras de linha de arquivos escritos com o formato nativo de Linux o arquivo soacute tem LF enquanto o editor espera CR+LF

Alguns sistemas (strings em vaacuterias linguagens por exemplo) usam o coacutedigo de escape n para indicar newline que eacute codificado de acordo com o padratildeo sendo usado

Em geral bibliotecas de leitura e gravaccedilatildeo de arquivos usam (default pelo menos) o newline nativo do sistema em que satildeo usadas

Programas de conversatildeo entre os sistemas satildeo comuns (ex dos2unix)

O Wordpad identifica se for usado soacute LF e quebra as linhas de acordo

5889

Arquivos - texto - CSV

Comma-separated values

O formato mais padronizado para tabelas (arrays 2D) em texto (frequentemente mas natildeo necessariamente ASCII)

Bem suportado por bibliotecas padratildeo de linguagens e outros softwares (Excel Calc Origin Google Docs etc)

Conteacutem Linhas de cabeccedilalho (opcionais mas recomendadas) linhas com qualquer texto geral

descrevendo o arquivo e em geral uma linha de tiacutetulo para as colunas da tabela Uma (apenas uma) tabela onde todas as linhas tecircm o mesmo nuacutemero de colunas

Colunas separadas por viacutergulas (opcionalmente pode ser outro separador) Linhas terminadas por newline (qualquer que seja) Strings delimitados por ldquo ldquo

Ex

NAMECALMPOSFILNAMEECHLPOSDISPPOSTARGNAMEPOSDIRCLASSMJD-OBSITIMECOADDSdec18s00010NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001dec18s00020NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001dec18s00120NIRSPEC-5-AO635800364500itan140NIRSPEC-5-AOp2 TITAN5408763000001dec18s00140NIRSPEC-5-AO626300364500itan140NIRSPEC-5-AOp1 TITAN5408763000001dec18s00151NIRSPEC-5-AO626300364500itan140NIRSPEC-5-AOp1ARC5408764000001dec18s00160NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001

Natildeo eacute necessaacuterio que as colunas tenham largura constante

Cabeccedilalho

5989

Arquivos - texto - CSVHaacute amplo suporte a leitura e gravaccedilatildeo de CSV sem precisar recorrer a procedimentos de baixo niacutevel

Podem ser diretamente importados em Excel Calc Origin Google Docs ou lido facilmente com bibliotecas padratildeo comuns Ex (IDL)

IDLgt c=read_csv(filesearch_scamcsvheader=h)IDLgt printhNAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS

IDLgt helpc Structure ltc8bca508gt 11 tags length=5256 data length=5248 refs=1 FIELD01 STRING Array[41] FIELD02 LONG Array[41] FIELD03 STRING Array[41] FIELD04 DOUBLE Array[41] FIELD05 DOUBLE Array[41] FIELD06 STRING Array[41] FIELD07 STRING Array[41] FIELD08 STRING Array[41] FIELD09 STRING Array[41] FIELD10 DOUBLE Array[41] FIELD11 LONG Array[41]

IDLgt printcfield01[03]dec18s0001 dec18s0002 dec18s0003 dec18s0004

IDLgt printcfield03[03]NIRSPEC-5-AO NIRSPEC-5-AO NIRSPEC-5-AO NIRSPEC-5-AO

6089

Arquivos - texto - CSVEx (IDL) Criaccedilatildeo de um CSV com uma tabela de valores

Criaccedilatildeo de 3 arrays 1D (12 elementos) um para cada coluna

IDLgt x=dindgen(3)IDLgt y=dindgen(4)IDLgt xx=reform(rebin(x34)12)IDLgt yy=reform(rebin(reform(y14)34)12)IDLgt f=xx+yy10IDLgt helpxxyyfXX DOUBLE = Array[12]YY DOUBLE = Array[12]F DOUBLE = Array[12]

Escrita do arquivo

IDLgt write_csvexamplecsvxxyyfheader=[XYX+10Y]

ResultadoXYX+10Y000000000000000000000000100000000000000010000000200000000000000020000000000000001000000010000000100000001000000011000000()

6189

Arquivos - texto - ldquoColunas regularesrdquoFixed column width

Natildeo eacute exatamente um padratildeo Eacute uma praacutetica comum

Armazena uma tabela (array 2D) de forma regular simples de ser interpretada e lida

Costumam ter linha(s) de cabeccedilalho descrevendo o conteuacutedo do arquivo em geral com uma linha para os nomes das colunas

As demais linhas conteacutem os dados sempre ocupando a mesma largura por coluna e escritos no mesmo formato em cada coluna

Costumam ser simples de ler inclusive interativamente (exs Excel Calc Origin read_ascii)

Ex (IDL) Uma simples tabela soacute de nuacutemeros

wavl CH4=33 wavl CH4=25 wavl CH4=10 wavl CH4=08 wavl CH4=05 wavl CH4=026 wavl CH4=02 477330000 0090130 477330000 0091110 477330000 0089250 477330000 0087000 477330000 0087140 477330000 0090080 477330000 0088110 480040000 0090930 480040000 0091930 480040000 0090160 480040000 0087930 480040000 0088110 480040000 0090950 480040000 0089090 482750000 0091710 482750000 0092730 482750000 0091060 482750000 0088850 482750000 0089080 482750000 0091810 482750000 0090060 485450000 0092530 485450000 0093570 485450000 0092000 485450000 0089810 485450000 0090100 485450000 0092730 485450000 0091090

IDLgt a=read_ascii(specs_27s_ntxtdata_start=1header=header)IDLgt printheader wavl CH4=33 wavl CH4=25 wavl CH4=10 wavl CH4=08 wavl CH4=05 wavl CH4=026 wavl CH4=02 IDLgt helpa Structure ltd423c9a8gt 1 tags length=224 data length=224 refs=1 FIELD01 FLOAT Array[14 4]

6289

Arquivos - texto - ldquoColunas regularesrdquoJaacute um arquivo um pouco mais difiacutecil de ler

NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS dec18s0001 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0002 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0003 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 FLAT 5408757812500 460000 5 dec18s0004 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 DARK 5408757812500 460000 5

Por ter colunas de tipos diferentes (strings inteiros reais) natildeo eacute possiacutevel o ler em um simples array Mas eacute faacutecil o colocar em uma estrutura de arrays onde cada campo eacute uma coluna

Especificando interativamente como interpretar as linhasIDLgt templ=ascii_template(filesearch_scamtxt)

Nome do campo (default mostrado)

Tipo do campo (identificado automaticamente)

Posiccedilatildeo (caracter) do comeccedilo (identificada automaticamente)

Linha de exemplo para verificar as colunas

6389

Arquivos - texto - ldquoColunas regularesrdquoDepois de feito o template o arquivo pode ser lido com apenas

IDLgt a=read_ascii(filesearch_scamtxttemplate=templ)IDLgt helpa Structure ltd4ec4608gt 11 tags length=416 data length=416 refs=1 FIELD01 STRING Array[4] FIELD02 LONG Array[4] FIELD03 STRING Array[4] FIELD04 FLOAT Array[4] FIELD05 FLOAT Array[4] FIELD06 STRING Array[4] FIELD07 STRING Array[4] FIELD08 STRING Array[4] FIELD09 FLOAT Array[4] FIELD10 FLOAT Array[4] FIELD11 LONG Array[4]IDLgt printafield01dec18s0001 dec18s0002 dec18s0003 dec18s0004IDLgt printafield04 626300 626300 626300 626300

O template (uma estrutura contendo dados sobre como ler o arquivo) pode ser usado para outros arquivos no mesmo formato No lugar de ter sido criado interativamente poderia ter sido lido de algum arquivo Poderia ter especificado nomes para os campos que seriam mais amigaacuteveis que coias como FIELD11

6489

Arquivos - texto - XML

Extensible Markup Language

Admite grande flexibilidade e por isso pode ter alta complexidade

Valores satildeo colocados dentro de uma estrutura em hieraacuterquica (em uma aacutervore) com os noacutes identificados pelos seus nomes (chaves)

Largamente usado em muitas aacutereas para armazenar conjuntos arbitraacuterios de quaisquer estruturas de dados

A maioria das aplicaccedilotildees usa um formato que eacute um subconjunto do XML especificado por um Schema comumente em um arquivo XML DTD (Document Type Definition)

6589

Arquivos - texto ndash XML ndash exemplos de usos

Armazenamento de dados de aplicaccedilotildees web (comum para exportar importar dados MediaWiki DokuWiki WordPress ADS Lattes etc)

Documentos Office (docx pptx xlsx) OpenOffice (odt opd ods)

Como versotildees de outros formatos FITSML XDF

ldquoScientific Dataset XML NASAs Astronomical Data Center (ADC) sponsors a number of research projects that

use XML for scientific data representation The XML activities at the ADC are sponsored and supported by the NASA Office of Space Science Applied Information Systems Research Program (AISRP)rdquo - httpxmlcoverpagesorgnasa-adchtml

Astronomical Instrument Markup Language (AIML)

SVG ndash Scalable Vector Graphics

Muitas de outras aplicaccedilotildees listadas em httpxmlcoverpagesorgxmlhtmlapplications

6689

Arquivos - texto ndash XML - exemploltxml version=10 gtltDOCTYPE Xdmf SYSTEM Xdmfdtd []gtltXdmf xmlnsxi=httpwwww3org2001XInclude Version=20gt ltDomaingt lt-- Example of Basic Topologies --gt ltInformation Name=Descriptiongt Example of a Polyvertex Topology ltInformationgt ltGrid Name=Polyvertex GridType=Uniformgt ltTopology TopologyType=Polyvertex Dimensions=3 NodesPerElement=3gt ltDataItem Format=XML Dimensions=3 3 NumberType=Floatgt 0 1 2 4 5 6 8 9 10 ltDataItemgt ltTopologygt ltGeometry Type=XYZgt ltDataItem Format=XML Dimensions=4 4 3gt 00 00 00 10 00 00()Que mostra que a interpretaccedilatildeo (parsing) de XML eacute em geral complexa

6789

Arquivos - texto - XML

Haacute muitas bibliotecas de alto niacutevel para fazer o processamento (parsing) e entregar os dados em uma estrutura conveniente

A complexidade em processar XML estaacute em decidir o que fazer com os dados jaacute que os arquivos podem ser muito complexos

As APIs (Application Programming Interfaces) mais comuns para processar XML que satildeo implementadas em muitas linguagens

DOM (Document Object Model) ndash manteacutem todo o conteuacutedo do em uma estrutura de dados (em geral uma aacutervore) em uma variaacutevel (em geral um objeto) Esta pode ser consultada para obter os valores de interesse para os alterar e usada para escrever um arquivo

SAX (Simple API for XML) ndash Interpretador (parser) por objetos O usuaacuterio escreve uma classe herdando da classe SAX provendo os meacutetodos que vatildeo processar os campos agrave medida em que estes satildeo lidos

6889

Arquivos - binaacuterios - FITSFlexible Image Transport System

O formato mais comum para observaccedilotildees astronocircmicas Tambeacutem usado para armazenar quaisquer dados mesmo natildeo relacionados a observaccedilotildees (especialmente tabelas como eacute praacutetica do STSCI)

Conteacutem um (ou mais) cabeccedilalho(s) de texto com metadados (informaccedilotildees sobre os dados como caracteriacutesticas (necessaacuterias para os ler) origem condiccedilotildees em que foram obtidos processamento realizado etc)

SIMPLE = T image conforms to FITS standard BITPIX = 32 bits per data value NAXIS = 2 number of axes NAXIS1 = 1024 NAXIS2 = 1024 BSCALE = 100000 Scaling factor BZERO = 000000 Scaling zero-point TELESCOP= Keck II Telescope SLITNAME= 0041x226 Slit Name SLITPA = 351979 Slit position angle SLITX = 131500 X pixel of the center of the slit LST = 12010446 local apparent sidereal time (()

Depois do cabeccedilalho haacute uma (ou mais) seccedilatildeo(otildees) de dados binaacuterios Costuma(m) ser array(s) 1D (espectros) 2D (imagens) ou 3D (ldquocubos de dadosrdquo)

De inteiros ou reais inteiros satildeo comuns em contagens de instrumentos reais para valores derivados (fluxos intensidades etc)

6989

Arquivos - binaacuterios - FITSNormalmente FITS satildeo lidos escritos por bibliotecas prontas de (relativamente) alto niacutevel usuaacuterio natildeo tem que saber como os dados satildeo armazenados no arquivo nem como os ler escrever Ex (IDL com a biblioteca idlastro)

IDLgt fits_info2dspectrumfits2dspectrumfits has 3 extensionsPrimary header 288 recordsNo dataExtension 1 -- SCI Header 144 records IMAGE ( 1201 1201 )Extension 2 -- ERR Header 72 records IMAGE ( 1201 1201 )Extension 3 -- DQ Header 72 records IMAGE ( 1201 1201 )

IDLgt mydata=readfits(2dspectrumfitsexten_no=1myheader) READFITS Reading FITS extension of type IMAGE READFITS Now reading 1201 by 1201 array

IDLgt extastmyheadermyastIDLgt sz=size(mydatadimensions)IDLgt xy2ad[1sz[0]][1sz[1]]myastcorners_acorners_dIDLgt printcorners_aCorners of the data array from file 2dspectrumfits are at 14487480 33063480

IDLgt printcorners_d -00041264444 00041402222

Obteacutem os dados de coordenadas (WCS) do header

Coloca os dados no array (2D de floats) mydata e o header no array (1D de strings) myheader

Calcula as coordenadas das quinas da imagem atraveacutes do WCS

Provecirc informaccedilotildees sobre o arquivo

7089

Arquivos - binaacuterios - ISIS Cube

Formatos como FITS se adequam muito a ter uma interface de mais alto niacutevel por objetos

Tambeacutem para dados em tabelas FITS muito mais trabalhosos de ler em baixo niacutevel que se adequam muito mais a mapas ou estruturas

Exemplo (de um formato semelhante a FITS ISIS cube)

O objeto ao ser criado lecirc todo o arquivo

cube=pp_editablecube(CM_1553510065_1_ircub)

Meacutetodos fornecem os dados desejados para obter quando necessaacuterio os dados de interesse

Find out the names of the backplanesprintcubegetproperty(backnames)Get the start time of the cubeprintcubegetfromheader(START_TIME)2007-084T100057286Z

Valores no cabeccedilalho podem ser convenientemente fornecidos como um mapa

header=cubeheader_as_hash()printheader[START_TIME]2007-084T100057286Z

7189

Arquivos - binaacuterios ndash ISIS Cube

Os dados satildeo fornecidos como arraysMake a contour plot of the latitudesc=contour(cubegetsuffixbyname(LATITUDE))Get the band with wavelength nearest to 21 (in the units used in the cube)selband=cubegetbandbywavelength(21wavelengths=selwavs)

Interfaces por overload tornam o acesso ainda mais conveniente

selband=cube[21]

selwavs=cube[21]

Retorna um array com a banda de comprimento de onda mais proacuteximo de 21 (microm)

Retorna o comprimento de onda mais proacuteximo de 21 (microm) da banda retornada acima

7289

Arquivos - binaacuterios ndash ISIS Cube Alteraccedilotildees feitas ao conteuacutedo satildeo automaticamente refletidas em todos os

lugares (cabeccedilalho em particular) afetados mantendo o objeto vaacutelido que pode depois ser gravado em um novo arquivo

IDLgt printcubelinescubesamplescubebands 64 64 256

IDLgt helpcubecoreltExpressiongt FLOAT = Array[64 64 256]

IDLgt cubecore=dblarr(100100256)

A linha acima natildeo eacute uma atribuiccedilatildeo eacute uma invocaccedilatildeo de meacutetodo Eacute equivalente acubesetpropertycore=dblarr(100100256)

Eacute o trabalho da funccedilatildeo setproperty decidir se a propriedade passada (core) faz sentido e se fizer fazer todo o trabalho necessaacuterio a esta mudanccedila Para o usuaacuterio eacute tudo automaacutetico e os dados da classe satildeo vaacutelidos o tempo todo

IDLgt helpcubecoreltExpressiongt DOUBLE = Array[100 100 256]

IDLgt printcubelinescubesamplescubebands 100 100 256

IDLgt cubesaveCM_1553510065_1_ir_editedcub

7389

Arquivos - binaacuterios ndash NetCDF e HDF5

Network Common Data Form e Hierarchical Data Format

Os dois uacutenicos formatos bem estabelecidos para dados cientiacuteficos geneacutericos

Armazenam dados como vaacuterias variaacuteveis e seus metadados Para cada variaacutevel haacute (ou pode haver) os metadados

Nome Dimensotildees (do array) Unidades Comentaacuterios

Ambos permitem arrays multidimensionais

Apenas HDF5 permite estruturas (daiacute vem a hierarquia)

Autodocumentados qualquer software que saiba ler um destes formatos lecirc qualquer arquivo sem precisar de conhecimento preacutevio sobre como o arquivo foi gerado

Muito bem suportados em bibliotecas padratildeo e natildeo padratildeo em softwares interativos e visualizadores (inclusive plugins para navegadores)

httpwwwunidataucaredusoftwarenetcdf httpenwikipediaorgwikiHdf5

NetCDF eacute mais simples de usar por natildeo ter hierarquia dando menos trabalho para ler e escrever dados Se hierarquia natildeo eacute necessaacuteria eacute mais conveniente de usar que HDF5

7489

Arquivos - binaacuterios - NetCDF e HDF5Haacute tambeacutem o formato CDL uma versatildeo ASCII do NetCDF A biblioteca padratildeo do NetCDF inclui conversores entre estes formatos

$ ncdump -h refspec_g01_0ncnetcdf refspec_g01_0 dimensions nlay = 51 nwn = 400 nleg = 33 numu = 2 nlev = 52 nphi = 3 ngas = 2 nwnc = 1 scal = 1 v3 = 3 dnl = 1 nk = 1 tdisr = UNLIMITED (0 currently) na = 16

variables float alb(nwn) float z(nlay) float t(nlay) float p(nlay) float wl(nwn) float iof(nwn) float mtau(nwn) float htau(nwn) float hctaus(nwn) float gtau(nwn) float outcos(scal) float phi(nleg) float phic(scal) float umu(numu) float flux(v3 nwn nlev) float mix(nlay ngas) float c(nlay) float psat(nlay) float ga(nwnc) float wlc(nwnc) float inc(scal) int dm(scal) int ord(scal) float fbeam(scal) float wn(nwn) float tautot(nwn nlay) float htaus(nwn nlay) float htaux(nwn nlay) float taug(nwn nlay) float phase(nwn nlay nleg) float ssa(nwn nlay) float uu(nwn nphi nlev numu) float u0u(nwn nlev numu) float tray(nwn nlay) float gtauo(tdisr nwn nlay)

Haacute 14 variaacuteveis usadas como dimensotildees para as 35 variaacuteveis que satildeo arrays

Ex alb(nwn) indica que alb eacute um array 1D de nwn elementos

nwn estaacute armazenado como uma das dimensotildees e eacute 400 portanto alb tem 400 elementos

Parte do conteuacutedo de um arquivo NetCDF em formato CDL (gerado pelo programa ncdump)

7589

Arquivos - binaacuterios - NetCDF e HDF5Conteuacutedo daquele arquivo visualizado com o ncview (acompanha a biblioteca NetCDF padratildeo)

7689

Arquivos - binaacuterios - NetCDF e HDF5O conteuacutedo de todo o arquivo pode ser lido facilmente com as bibliotecas disponiacuteveis e armazenado em contecirciners convenientes Usando um objeto que gera um resultado um pouco mais conveniente

IDLgt h=pp_readncdf(refspec_g01_0nchash)IDLgt printhvar_dims ltObjHeapVar229(HASH)gtvars ltObjHeapVar152(HASH)gtdims ltObjHeapVar118(HASH)gt

IDLgt printh[vars]T 173203 175459 175848 176001 175975 Z 431869 418858 406067 393403 380464 FLUX 300660 145536 0705180 0341669 0165532 PHASE 100000 0779034 0660858 0542052 0449983 TAUTOT0694377 0693420 0693474 0693540 0693636()

IDLgt help(h[vars])[TAUTOT]ltExpressiongt FLOAT = Array[51 400]

IDLgt print(h[var_dims])[TAUTOT]NLAY NWN

IDLgt print(h[dims])[(h[var_dims])[TAUTOT]]NLAY 51NWN 400

7789

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5)

Visualizaccedilatildeo da variaacutevel selecionada

Metadados e alguns valores da variaacutevel selecionada

Variaacutevel a ser criada com o conteuacutedo desta variaacutevel do arquivo

Hierarquia das variaacuteveis do arquivo

7889

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5) Imported variable az

IDLgt helpaz Structure ltd5723f38gt 13 tags length=448 data length=444 refs=1 _NAME STRING az _ICONTYPE STRING binary _TYPE STRING DATASET _FILE STRING INTENSI_test_409OUTh5 _PATH STRING _DATA DOUBLE Array[38] _NDIMENSIONS LONG 1 _DIMENSIONS ULONG64 Array[1] _NELEMENTS ULONG64 38 _DATATYPE STRING H5T_FLOAT _STORAGESIZE ULONG 8 _PRECISION LONG 64 _SIGN STRING

IDLgt printaz_data 00000000 10000000 20000000 30000000 40000000 50000000 60000000 80000000 ()

7989

Arquivos - binaacuterios - imagens

JPEG JPEG200 TIFF GeoTIFF etc

Os formatos comuns de imagens satildeo bem suportados em muacuteltiplas plataformas para uso dentro de programas e interativamente

Alguns formatos tecircm opccedilatildeo de compressatildeo com perda eou sem perda

Armazenam imagens como arrays 2D ou 3D (3D frequumlentemente limitado a 3 ou 4 em uma das dimensotildees uma imagem em 3 ou 4 bandas) de inteiros ou (em alguns formatos) reais

Alguns formatos permitem armazenar metadados para caracterizar as imagens armazenadas

JPEG2000 e GeoTIFF (um subconjunto de TIFF) comuns em astronomia e aacutereas proacuteximas

8089

Arquivos - binaacuterios ndash imagens ndash exemplo (IDL)IDLgt printquery_tiff(issmap_2009tiffinfogeotiff=geo) 1

IDLgt helpinfo Structure ltd4eca4b8gt 18 tags length=144 data length=132 refs=1 CHANNELS LONG 4 DIMENSIONS LONG Array[2] IMAGE_INDEX LONG 0 NUM_IMAGES LONG 1 PIXEL_TYPE INT 1 TYPE STRING TIFF BITS_PER_SAMPLE LONG 8 POSITION FLOAT Array[2] RESOLUTION FLOAT Array[2] UNITS LONG 2 TILE_SIZE LONG Array[2] DESCRIPTION STRING ISS (2009) DATE_TIME STRING 20100218 012436()

IDLgt helpgeo Structure ltd4efa1b8gt 10 tags length=264 data length=262 refs=1 MODELPIXELSCALETAG DOUBLE Array[3] MODELTIEPOINTTAG DOUBLE Array[6 4] GEOGRAPHICTYPEGEOKEY INT 4035 GEOGSEMIMAJORAXISGEOKEY DOUBLE 25750000 GEOGSEMIMINORAXISGEOKEY DOUBLE 25750000()

IDLgt myimage=read_tiff(issmap_2009tiff) Lecirc a imagem para o array myimage

Obteacutem informaccedilotildees sobre o arquivo

8189

Arquivos - binaacuterios ndash formatos nativosLinguagens como IDL R Python Java tecircm seu formato nativo binaacuterio acessado em alto niacutevel Basta mandar salvar ler variaacuteveis no do arquivo a biblioteca padratildeo automagicamente faz todo o trabalho de decidir como gravar ler os dados

Conveniente de usar na proacutepria linguagem Mas raramente existem bibliotecas para ler gravar o formato nativo de uma linguagem a partir de outra Ex (IDL)

IDLgt savefile=2dspectrumsavmydatamyheadercorners_dcorners_averbosecompress SAVE Portable (XDR) compressed SAVERESTORE file SAVE Saved variable MYDATA SAVE Saved variable MYHEADER()

Pode ser lido com apenas (haacute formas mais elaboradas)

IDLgt restore2dspectrumsavverbose RESTORE Portable (XDR) compressed SAVERESTORE file RESTORE Save file written by ltunknowngtltunknowngt Thu Jan 27 191422 2011 RESTORE IDL version 801 (linux x86_64) RESTORE Restored variable MYDATA RESTORE Restored variable MYHEADER()

IDLgt helpmydatamyheadercorners_dcorners_aMYDATA FLOAT = Array[1201 1201]MYHEADER STRING = Array[144]()

8289

Arquivos - processamento em baixo niacutevel

Nem sempre um formato padratildeo eacute a melhor escolha para o problema

Nem sempre haacute escolha (pode-se ter que trabalhar com arquivos que jaacute foram escritos em algum formato proprietaacuterio)

Agraves vezes o formato eacute padratildeo mas natildeo haacute bom suporte a ele disponiacutevel

Em todos estes casos eacute necessaacuterio escrever rotinas em baixo niacutevel que vatildeo ler processar diretamente o conteuacutedo do arquivo

Preferencialmente criando interfaces de alto niacutevel para o programa que vai as usar

8389

Arquivos - processamento em baixo niacutevel - texto

Tomando o exemplo anterior onde as colunas eram de diferentes tipos

NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS dec18s0001 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0002 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0003 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 FLAT 5408757812500 460000 5 dec18s0004 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 DARK 5408757812500 460000 5

A forma mais simples de o ler diretamente eacute definir uma estrutura para receber cada linha e um array destas estruturas para receber todo o arquivo Ex (IDL)

IDLgt record=namecalmpos0filnameechlpos0d0disppos0d0targnameposdirclassmjd_obsitime0d0coadds0IDLgt nlines=file_lines(filesearch_scamtxt)IDLgt mydata=replicate(recordnlines-1)IDLgt header=

Depois de definidas as variaacuteveis que vatildeo receber os dados o arquivo pode ser lido

IDLgt openrunitfilesearch_scamtxtget_lunIDLgt readfunitheaderIDLgt readfunitmydataformat=(A14I8A15F104F104A18A19A15F158F105I15)IDLgt free_lununit

A gravaccedilatildeo de um arquivo texto poderia ser feita de forma semelhante apenas trocando openr por openw (abrir o arquivo para gravaccedilatildeo natildeo leitura) e readf por printf

O arquivo eacute aberto em uma unidade (unit) usada para especificar de onde eacute feita a leitura

Ao final o arquivo eacute fechado

8489

Arquivos - processamento em baixo niacutevel - texto

O que resulta em

IDLgt printheader NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS

IDLgt helpmydataMYDATA STRUCT = -gt ltAnonymousgt Array[4]

IDLgt helpmydata[0] Structure ltd5e38f68gt 11 tags length=136 data length=124 refs=3 NAME STRING dec18s0001 CALMPOS INT 0 FILNAME STRING NIRSPEC-5-AO ECHLPOS DOUBLE 62630000 DISPPOS DOUBLE 36450000 TARGNAME STRING HD85258 POSDIR STRING NIRSPEC-5-AOp1 CLASS STRING STAR MJD_OBS STRING 54087574 ITIME DOUBLE 10000000 COADDS INT 1

Este caso eacute mais complicado que os mais comuns por haver colunas de strings

Se todas fossem de nuacutemeros natildeo teria sido necessaacuterio especificar o formato explicitamente As colunas teriam sido adivinhadas pela biblioteca que lecirc o arquivo Poderia ter sido lido escrito soacute com um array de nuacutemeros sem estruturas

8589

Arquivos - processamento em baixo niacutevel - binaacuterio

Formatos binaacuterios podem ser definidos de qualquer forma O arquivo eacute apenas um conjunto de bytes Cabe ao software saber como os interpretar

Uma escolha comum para que sejam autodocumentados eacute incluir um cabeccedilalho de texto informando as caracteriacutesticas dos dados necessaacuterias para os ler

Ex (IDL) criar um arquivo que armazene um array de doubles com um cabeccedilalho informando as dimensotildees para que o programa que o lecirc saiba como ler os dados

Inventa dados e abre o arquivo

IDLgt data_to_write=dindgen(34)IDLgt openwunitbinary_exampledatget_lun

Escreve as dimensotildees como texto

IDLgt printfunitdimensions of the double array stored belowIDLgt printfunitsize(data_to_writedimensions)

Escreve os dados binaacuterios

IDLgt writeuunitdata_to_write

Fecha o arquivo

IDLgt free_lununit

Escreve em binaacuterio (write unformatted)

8689

Arquivos - processamento em baixo niacutevel - binaacuterio

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

dimensions of the double array stored below 3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

8789

Arquivos - processamento em baixo niacutevel - binaacuterioA leitura deste arquivo eacute igualmente simples

IDLgt header=IDLgt dims=[00]IDLgt openrunitbinary_exampledatget_lun

Lecirc as dimensotildees (armazenadas como texto)

IDLgt readfunitheaderIDLgt readfunitdims

Lecirc a parte binaacuteria depois de saber as dimensotildees

IDLgt data_read=dblarr(dims)IDLgt readuunitdata_read

Fecha o arquivo

IDLgt free_lununit

Verifica que os dados foram gravados e lidos corretamente

IDLgt printarray_equal(data_to_writedata_read) 1

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Lecirc dados binaacuterios (read unformatted)

8889

Sumaacuterio

5 ndash Slides em httpwwwppenteadonetpeapea04_strings_iopdf Strings Expressotildees regulares Arquivos

httpwwwppenteadonetpea

8989

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89

Programa

4 ndash Slides em httpwwwppenteadonetpeapea03_conteinerspdf Contecirciners Arrays Listas Mapas Outros contecirciners Vetorizaccedilatildeo Escolha de contecirciners

5 ndash Slides em httpwwwppenteadonetpeapea04_strings_iopdf Strings Expressotildees regulares Arquivos

389

Strings ndash definiccedilatildeo e importacircncia

Um string eacute uma variaacutevel que representa texto como um conjunto de caracteres

Haacute um tipo baacutesico com pelo menos um suporte simples em todas as linguagens

Eacute um dos mais necessaacuterios para tudo Exs

informar o usuaacuterio nomes de arquivos identificar coisas (elementos objetos datas nomes programas algoriacutetimos comandos

etc) escrever e gravar arquivos (embora seja comum haver opccedilotildees melhores que arquivos

texto) graacuteficos

Tem o processamento mais complexo entre os tipos fundamentais

Processamento de strings natildeo eacute apenas prints e reads

489

Strings - implementaccedilotildees

Linguagens variam muito na forma como implementam seu(s) tipo(s) para strings

Haacute strings dinacircmicos e estaacuteticos

Strings estaacuteticos tecircm um nuacutemero (ou nuacutemero maacuteximo) predefinido de caracteres que natildeo pode ser mudado Podem ser pensados como arrays estaacuteticos 1D onde cada elemento eacute um caractere

(eacute como agraves vezes satildeo implementados) Tentar acessar caracteres aleacutem do limite pode resultar em apenas truncamento ou

ateacute no encerramento do programa por violaccedilotildees de memoacuteria Exs C Fortran

Strings dinacircmicos onde o nuacutemero de caracteres pode ser alterado a qualquer momento sem limites preestabelecidos Podem ser pensados como listas homogecircneas onde cada elemento eacute um caractere Exs C++ Java IDL R Python Perl

Algumas linguagens tecircm tipos diferentes para caracteres individuais (character) e strings (string de zero ou mais caracteres) C C++ Java

Algumas linguagens tecircm mais de um tipo variando em funcionalidade

Perl eacute a linguagem com melhor suporte a strings principalmente processamento de expressotildees regulares (adiante)

589

Strings - codificaccedilotildees

Do que se constitui um string

Caracteres satildeo um conceito de alto niacutevel e computadores soacute armazenam diacutegitos binaacuterios

Nada faz com que uma variaacutevel ou arquivo ldquosejamrdquo intrinsecamente caracteres

A correspondecircncia eacute determinada pelo uso de codificaccedilotildees da mesma forma que inteiros e reais satildeo tambeacutem codificados de alguma forma

A maior parte das linguagens assume uma codificaccedilatildeo (ou usam um default) algumas tecircm tipos diferentes para diferentes codificaccedilotildees e as que usam objetos podem ter objetos strings com codificaccedilatildeo variaacutevel

Antigamente a codificaccedilatildeo era sempre a mesma ASCII (American Standard Code for Information Interchange)

1 byte (8 bits) por caractere - 28 (256) valores diferentes

Uma tabela define que caractere eacute codificado por que nuacutemero na faixa 0-127

689

Strings - codificaccedilotildees - ASCII789

Strings - codificaccedilotildees - ASCII

Nem todos os caracteres ASCII satildeo visiacuteveis (printable) Alguns satildeo espaccedilos em branco (espaccedilos tabs etc) outros satildeo alguma forma de caractere de controle (CR LF etc)

O zero costuma ser reservado para controle significando um string vazio (se soacute tem 0) ou em algumas codificaccedilotildees (C) o fim do string

Os caracteres codificados por valores 128-255 natildeo satildeo parte do padratildeo ASCII A associaccedilatildeo varia de acordo com a codificaccedilatildeo escolhida

Sistemas que usam ASCII satildeo os mais simples caracteres sempre tecircm o mesmo tamanho em bytes (1 byte) Satildeo facilmente lidos processados e convertidos de para nuacutemeros

ASCII eacute a codificaccedilatildeo de texto mais comum mas

Ao contraacuterio do que muitos assumem ASCII natildeo eacute a uacutenica forma de codificar texto

ASCII natildeo eacute sinocircnimo de arquivo texto

Em anos recentes Unicode em suas vaacuterias formas (adiante) tem se tornado gradativamente mais comum

889

Strings - codificaccedilotildees - ASCII

Por que ASCII natildeo eacute sempre usado

Porque eacute insuficiente Natildeo conteacutem por exemplo

Caracteres modificados (com acentos cedilha)

Siacutembolos matemaacuteticos (aleacutem dos muito baacutesicos + - ^ gt lt = ) Ex part sum int plusmn ge le times infin neℝ ℤ forall exist ∮ ≌ nabla

Siacutembolos fiacutesicos Ex micro Å oplus

Letras gregas

Outros siacutembolos Ex rarr harr euro ordf deg pound yen iquest iexcl

Caracteres de outras liacutenguas (inclusive de muitos siacutembolos como a vaacuterias formas usadas em chinecircs e japonecircs)

989

Strings - codificaccedilotildees - Unicode

O que usar para natildeo ter as limitaccedilotildees do ASCII

O uacutenico padratildeo de uso dominante hoje eacute o Unicode

Desenvolvido para ser um padratildeo universal contendo ldquotodosrdquo os caracteres de ldquotodasrdquo as escritas e dados sobre os caracteres

Natildeo eacute imutaacutevel adiccedilotildees satildeo decididas pelo Unicode Consortium (httpwwwunicodeorg)

1089

Strings - codificaccedilotildees - Unicode

Haacute duas partes no Unicode o cataacutelogo (uacutenico) e as codificaccedilotildees (vaacuterias)

O cataacutelogo eacute definido independente de codificaccedilotildees Pode ser visto como um mapa onde os pontos de coacutedigo (codepoints) satildeo as

chaves e os valores satildeo os dados sobre aquele caractere

ldquoIn Unicode the letter A is a platonic ideal Its just floating in heaven A

This platonic A is different than B and different from a but the same as A and A and A

The idea that A in a Times New Roman font is the same character as the A in a Helvetica font but different from a in lower case does not seem very controversial but in some languages just figuring out what a letter is can cause controversy

Is the German letter szlig a real letter or just a fancy way of writing ss If a letters shape changes at the end of the word is that a different letter Hebrew says yes Arabic says no

Anyway the smart people at the Unicode consortium have been figuring this out for the last decade or so accompanied by a great deal of highly political debate and you dont have to worry about it Theyve figured it all out alreadyrdquo

de The absolute minimum every software developer absolutely positevely must know about Unicode and character sets (no excuses)

httpwwwjoelonsoftwarecomarticlesUnicodehtml

1189

Strings - codificaccedilotildees - UnicodeOs dados sobre um caractere Unicode satildeo importantes para suas buscas e identificaccedilatildeoIncluem nome e propriedades visiacutevel (printable) numeacuterico alfanumeacuterico maiuacutesculo minuacutesculo ldquoespaccedilordquo (blank) liacutengua matemaacutetico etc

ExsUnicode Character LATIN CAPITAL LETTER A (U+0041)Name LATIN CAPITAL LETTER ABlock Basic LatinCategory Letter Uppercase [Lu]Combine 0BIDI Left-to-Right [L]Mirror NIndex entries Latin Uppercase Alphabet Uppercase Alphabet Latin

Capital Letters LatinLower case U+0061Version Unicode 110 (June 1993)

Unicode Character INTEGRAL (U+222B)Name INTEGRALBlock Mathematical OperatorsCategory Symbol Math [Sm]Combine 0BIDI Other Neutrals [ON]Mirror YIndex entries Integral Signs INTEGRALSee Also latin small letter esh U+0283Version Unicode 110 (June 1993)

(resultados de httpwwwfileformatinfoinfounicodecharsearchhtm)

int

A

1289

Strings - codificaccedilotildees - Unicode

Unicode Character ANGSTROM SIGN (U+212B)Name ANGSTROM SIGNBlock Letterlike SymbolsCategory Letter Uppercase [Lu]Combine 0BIDI Left-to-Right [L]Decomposition LATIN CAPITAL LETTER A WITH RING ABOVE (U+00C5)Mirror NOld name ANGSTROM UNITIndex entries ANGSTROM SIGNLower case U+00E5Comments non SI length unit (=01 nm) named after A J ngstroumlm Å

Swedish physicist preferred representation is U+00C5Version Unicode 110 (June 1993)

Unicode Character GREEK SMALL LETTER ZETA (U+03B6)Name GREEK SMALL LETTER ZETABlock Greek and CopticCategory Letter Lowercase [Ll]Combine 0BIDI Left-to-Right [L]Mirror NUpper case U+0396Title case U+0396Version Unicode 110 (June 1993)

(resultados de httpwwwfileformatinfoinfounicodecharsearchhtm)

ζ

1389

Strings - codificaccedilotildees - UnicodeUnicode Character NABLA (U+2207)Name NABLABlock Mathematical OperatorsCategory Symbol Math [Sm]Combine 0BIDI Other Neutrals [ON]Mirror NIndex entries difference backward backward difference del NABLAComments backward difference gradient del used for Laplacian

operator (written with superscript 2)See Also white down-pointing triangle U+25BDVersion Unicode 110 (June 1993)

Java DatastringtoUpperCase() nablastringtoLowerCase() nablaCharacterUnicodeBlock MATHEMATICAL_OPERATORSCharactercharCount() 1CharactergetDirectionality() DIRECTIONALITY_OTHER_NEUTRALS [13]CharactergetNumericValue() -1CharactergetType() 25CharacterisDefined() YesCharacterisDigit() NoCharacterisIdentifierIgnorable() NoCharacterisLetter() NoCharacterisLetterOrDigit() NoCharacterisLowerCase() NoCharacterisWhitespace() No()

(resultados de httpwwwfileformatinfoinfounicodecharsearchhtm)

nabla

1489

Strings ndash Como codificar Unicode

Haacute vaacuterias formas Nenhuma simples como ASCII porque eacute necessaacuterio um nuacutemero muito maior de pontos de coacutedigo (haacute espaccedilo para 1 114 112 hoje haacute 109 449 alocados)

Apenas usar mais bytes com um nuacutemero constante por caractere exigiria pelo menos 21 bits por caractere (221 eacute 2 097 152)

Seria demais considerando que quase todos os caracteres escritos estatildeo entre os 128 do ASCII

Em quase todo texto 20 de cada 21 bits seriam 0

A maior parte das codificaccedilotildees usa formas mais elaboradas com um nuacutemero variaacutevel de bytes por caractere

Todas as codificaccedilotildees de uso comum tem o ASCII como subconjunto os 128 caracteres do ASCII satildeo codificados em forma idecircntica em ASCII e nas codificaccedilotildees usuais de Unicode

O que ajuda na compatibilidade software Unicode escrevendo texto que soacute conteacutem caracteres do ASCII produz texto idecircntico ao que seria produzido em ASCII

1589

Strings - codificaccedilotildees para Unicode

No mundo ocidental haacute apenas duas codificaccedilotildees de uso comum

UTF-8

ISO 8859-1 (tambeacutem chamado de Latin 1)

Por isso eacute necessaacuterio saber que codificaccedilatildeo usar ao trabalhar com Unicode

Alguns softwares formatos de arquivo informam a codificaccedilatildeo usada

Outros assumem que uma eacute usada (sem ter sido informada)

Outros tentam adivinhar quando natildeo satildeo informados qual eacute (esp navegadores)

Outros soacute perguntam para o usuaacuterio (esp editores de texto)

Sistemas operacionais oferecem variadas formas de digitar caracteres especiais

Pelos coacutedigos numeacutericos

Por programas seletores de caracteres Alguns seletores de caracteres (ex kcharselect do KDE) permitem fazer buscas pelo

nome ou propriedades

1689

Strings - Onde haacute suporte a Unicode em programaccedilatildeo

Linguagens variam muito

Desconhecem Unicode (soacute usam ASCII) C Fortran

Usam nativamente ASCII (inclusive no coacutedigo-fonte) mas tecircm tipos para strings Unicode e ou funccedilotildees para processar Unicode (em variados graus) C C++ IDL R

Usam nativamente Unicode (inclusive no coacutedigo-fonte) e tecircm bom suporte a strings Unicode Java Python Perl

Muitas vezes (mesmo quando Unicode pode ser usado em coacutedigo-fonte) caracteres Unicode satildeo escritos atraveacutes de ASCII com coacutedigos de escape para coacutedigos Unicode Exs

IDLgt p=plot(testtitle=Z(00C5222B))

C C++ Java Python u2207

ReferecircnciasCharacters vs byteshttpwwwtbrayorgongoingWhen200x20030426UTFThe absolute minimum every software developer absolutely positively must know about Unicode and character sets (no excuses)httpwwwjoelonsoftwarecomarticlesUnicodehtmlUnicode character searchhttpwwwfileformatinfoinfounicodecharsearchhtm

em IDL produz intÅ

produz nabla

1789

Strings - processamento baacutesico

Operaccedilotildees mais fundamentais que costumam ser suportadas em ldquotodasrdquo as linguagens bibliotecas padratildeo (exemplos usando sintaxe de IDL)

Atribuiccedilatildeo de literais

IDLgt a=some

IDLgt helpaA STRING = some

IDLgt printasome

Concatenaccedilatildeo

IDLgt b=a+ string

IDLgt helpbB STRING = some string

1889

Strings - processamento baacutesico

Valor loacutegico

String vazio (null string) eacute falso o resto eacute verdadeiro

IDLgt c=

IDLgt if c then printc is not empty string else printc is null string ()c is null string ()

IDLgt c=a

IDLgt if c then printc is not empty string else printc is null string ()c is not empty string

Espaccedilo natildeo eacute o mesmo que string vazio

IDLgt c=

IDLgt if c then printc is not empty string else printc is null string ()c is not empty string

1989

Strings - processamento baacutesico Comparaccedilotildees

IDLgt helpabA STRING = someB STRING = some string

IDLgt printb eq a 0

IDLgt printb gt a 1

IDLgt c=[ab9Some somesome other string]

IDLgt printc[sort(c)]format=(A) some9Somesomesome other stringsome string

IDLgt printa eq A 0

IDLgt printstrcmp(aAfold_case) 1

Comparaccedilotildees de ldquotamanhordquo (maior menor etc) satildeo comparaccedilotildees pela ordem de codificaccedilatildeo (ldquoalfabeacuteticardquo)

Algumas linguagens permitem definir o ordenamento (como considerar maiuacutesculasminuacuteculas letras com acentos nuacutemeros e siacutembolos) Exs Python C++ Java Perl

2089

Strings - processamento baacutesico Substrings

IDLgt printstrmid(abcdefg32)de

Algumas linguagens nativamente suportam iacutendices para indicar substrings C C++ Fortran Python Ex (Python)

gtgtgt s=abcdegtgtgt print(s[25])cde

Outras permitem que sejam definidos iacutendices por objetos strings

Busca de caracteres ou substrings

IDLgt printstrpos(abcdefgd) 3

IDLgt printstrpos(abcdefgj) -1

IDLgt printstrpos(abcdefgbc) 1

2189

Strings - processamento baacutesico

Outros

IDLgt printstrlen(1234567) 7

IDLgt printstrlen(1234567 ) 8

IDLgt printstrlen( 1234567 ) 9

IDLgt helpstrtrim( 1234567 2)ltExpressiongt STRING = 1234567

IDLgt helpstrtrim( 1234567 1)ltExpressiongt STRING = 1234567

IDLgt helpstrtrim( 1234567 0)ltExpressiongt STRING = 1234567

IDLgt printstrupcase(abcdEF)ABCDEF

IDLgt printstrlowcase(abcdEF)abcdef

Medindo quantos caracteres tem o string inclui espaccedilos em branco

Remoccedilatildeo dos brancos agrave esquerda agrave direita ou dos dois lados

2289

Strings - conversatildeo de outros tipos para strings

Eacute uma das operaccedilotildees mais comuns para gerar textos informativos e nomes escrever arquivos (aquivos texto discutidos adiante) etc

Eacute natildeo trivial jaacute que a conversatildeo pode ser feita de muitas formas diferentes

Para tipos fundamentais sempre haacute uma conversatildeo default tanto criando um string como usando algo tipo print (para strings terminal ou arquivos)

Todo comando tipo print (print printf sprintf string write etc) e toda escrita para arquivos texto eacute uma conversatildeo para string (terminais e arquivos texto soacute conteacutem strings)

2389

Strings - conversatildeo de outros tipos para strings

Exemplos de conversotildees (IDL)

IDLgt print[-109] -1 0 9

IDLgt print1d01B10 10000000 1 100000

IDLgt helpstring(1d01B10)ltExpressiongt STRING = 10000000 1 100000

IDLgt printfunitdblarr(343)

Tipos mais elaborados podem ou natildeo ter uma forma predefinida Com objetos eacute comum ser possiacutevel definir a conversatildeo (stringification) ao criar a classe

IDLgt h=hash(a109[01]18b)

IDLgt printh9 0 1a 100000180000 b

Strings

Coloca strings em um arquivo (adiante)

Strings criados por um meacutetodo da classe hash satildeo uma forma de representar o hash

2489

Strings - conversatildeo de outros tipos para strings

Algumas linguagens (Python IDL) tecircm mais de uma forma default de gerar strings Em Python uma forma eacute executaacutevel a outra eacute mais legiacutevel

In [30] x=arange(12)reshape(43)

In [31] print(x)[[ 0 1 2] [ 3 4 5] [ 6 7 8] [ 9 10 11]]

In [32] xOut[32]array([[ 0 1 2] [ 3 4 5] [ 6 7 8] [ 9 10 11]])

In [33] y=array([[ 0 1 2] [ 3 4 5] [ 6 7 8] [ 9 10 11]])

In [37] print(array_equal(xy))True

String mais legiacutevel

String executaacutevelPode ser usado para criar um objeto equivalente

2589

Strings ndash formataccedilatildeo expliacutecita

A formataccedilatildeo pode ser especificada se a conversatildeo default natildeo eacute adequada para definir a conversatildeo em um novo tipo

Cada linguagem tem sua sintaxe para formataccedilatildeo

Haacute dois estilos semelhantes em vaacuterias linguagens

Ambos os estilos satildeo sintaxes diferentes para a mesma ideacuteia Um coacutedigo especifica o tipo de dado sendo passado (inteiro real etc) e detalhes de como seraacute feito o string (largura do campo diacutegitos decimais alinhamento etc)

2689

Strings ndash formataccedilatildeo expliacutecita

Estilo Fortran

IDL

IDLgt print1d0+1d-9 10000000

IDLgt print1d0+1d-9format=(E1610)10000000010E+00

IDLgt printx=1d0+1d-9format=(A0F1613)X= 10000000010000

Estilo C (ldquoprintfrdquo)

IDL

IDLgt printformat=(x=1610e)1d0+1d-9x=10000000010e+00

Python

In [20] print(x=1610e (1e0+1e-9))x=10000000010e+00

Nenhum formato expliacutecito (default)

2789

Strings - formatos tipo Fortran

(apenas o principal ver documentaccedilatildeo para detalhes)

Ex (IDL)

IDLgt printx=1d0+1d-9format=(A0F1613)X= 10000000010000

Tambeacutem haacute modificadores para especificar alinhamento (-) se deve haver (ou ser suprimido) avanccedilo para a pŕoxima linha posiccedilatildeo dentro do campo etc

Coacutedigo Significado Exemplo(s)

A String (A) (10A)

I Inteiro decimal (I) (10I)(-2I)

B Inteiro binaacuterio (B) (10B)

Z Inteiro hexadecimal (Z) (10Z)

O Inteiro octal (O) (10O)

F Real ponto fixo (F)(F52)

E D Real ponto flutuante (E)(D1610)

G Real ponto fixo ou flutuante de acordo com o valor (G)(G10)

ldquordquo String literal (ldquox=rdquoI10)

X Caracteres em branco (A10XI)

2889

Strings - formatos tipo C (printf)(apenas o principal ver documentaccedilatildeo para detalhes)String com campos a serem substituiacutedos por valores (passados adiante) marcados por coacutedigos com

Ex (Python)In [20] print(x=1610e (1e0+1e-9))x=10000000010e+00

Haacute modificadores para especificar alinhamento como preencher o espaccedilo que sobra (espaccedilos zeros etc) para imprimir o sinal + etc

Coacutedigo Significado (tipo) Exemplo(s)

di Inteiro decimal (int) d 5d +05d

u Inteiro decimal sem sinal (unsigned int) u 7u

fF Real em ponto fixo (double float) f 136f

eE Real em ponto flutuante (double float) e 1610e

gG Real em ponto fixo ou flutuante decidido pelo valor (double float)

g 73G

xX Inteiro sem sinal hexadecimal (unsigned int) x 10X

o Inteiro sem sinal octal (unsigned int) o 5o

s String (string) s 10s

c Caractere (char) c

p Ponteiro - estilo C - (void ) p

literal

2989

Strings - conversatildeo de strings para outros tipos

Para gerar dados a partir de strings datas identificadores pedaccedilos de nomes valores numeacutericos armazenados em strings

Tambeacutem sempre haacute conversotildees default para os tipos baacutesicos onde o intepretador programa faz o possiacutevel para entender o string como um valor daquele tipo

Tipicamente eacute feito por casts (funccedilotildees de conversatildeo) reads (de strings ou arquivos texto (arquivos texto satildeo strings)) construtores de objetos ou implicitamente

3089

Strings - conversatildeo de strings para outros tipos - impliacutecitas

Exs (IDL)

IDLgt helpfix([17 17 171 -17 9 8])ltExpressiongt INT = Array[5]

IDLgt printfix([17 17 171 -17 9 8]) 17 17 17 -17 9

IDLgt printdouble([17 17 171 -17 9 8]) 17000000 17000000 17100000 -17000000 90000000

IDLgt readfunitabcd

IDLgt a=0d0IDLgt b=00IDLgt c=0IDLgt reads171d0 189d0 -9abcIDLgt helpabcA DOUBLE = 17100000B FLOAT = 189000C INT = -9

Converte o conteuacutedo do string para os tipos das variaacuteveis abcd (explicado adiante)

3189

Strings - conversatildeo de strings para outros tipos

Quando o default natildeo eacute suficiente (ou quando escrevendo o conversor em uma classe) costuma ser possiacutevel o fazer com formatos semelhantes aos formatos para gerar strings Exs (IDL)

IDLgt a=0d0IDLgt b=00IDLgt c=0IDLgt reads171d0 something 189d0-9abc READS Input conversion error Unit 0 File ltstdingt Error occurred at $MAIN$ Execution halted at $MAIN$

Natildeo funcionou porque sozinho ele natildeo conseguiu saber o que fazer com o ldquosomethingrdquo Usando um formato especiacutefico

IDLgt reads171d0 something 189d0-9 abcformat=(D6111XD611XI)

IDLgt helpabcA DOUBLE = 17100000B FLOAT = 189000C INT = -9

Exemplos mais complicados adiante (arquivos texto)

Variaacuteveis tecircm que ser definidas para informar para que tipo seraacute feita a conversatildeo default

3289

Strings - processamento natildeo baacutesicoOperaccedilotildees importantes e muito necessaacuterias mas que natildeo satildeo suportadas em todas as linguagens bibliotecas padratildeo

Testes (ex IDL)

IDLgt str=[afitsaFITSafitsaabfitsabcfits]

IDLgt printstrmatch(strfits) 1 0 0 1 1

IDLgt printstrmatch(strfitsfold_case) 1 1 0 1 1

IDLgt printstrmatch(strfitsfold_case) 1 1 1 1 1

IDLgt printstrmatch(strfits) 1 0 0 0 0

IDLgt printstrmatch(strfits) 0 0 0 1 0

3389

Strings - processamento natildeo baacutesico

Operaccedilotildees importantes e muito necessaacuterias mas que natildeo satildeo suportadas em todas as linguagens bibliotecas padratildeo

Separaccedilatildeo de partes (Ex IDL)

IDLgt printstrsplit(2011- 131 -extract)format=(A)2011131

Processamento de nomes de arquivos diretoacuterios (Ex IDL)

IDLgt printfile_dirname(some_directoryanother_directorysome_filetxt)some_directoryanother_directory

IDLgt printfile_basename(some_directoryanother_directorysome_filetxt)some_filetxt

IDLgt printfile_basename(another_directorysome_filetxttxt)+_alteredtxtsome_file_alteredtxt

3489

Strings - processamento natildeo baacutesico

Codificaccedilotildees (Ex Python 3)

gtgtgt s=infinite money infinNeuro sign

gtgtgt print(s)infinite money infineuro

gtgtgt print(ascii(s))infinite money u221eu20ac

gtgtgt print(sencode(utf-8))binfinite money xe2x88x9exe2x82xac

3589

Strings - processamento natildeo baacutesico

Perl eacute a linguagem mais avanccedilada para processamento de strings tem suporte nativo a muitas outras operaccedilotildees a semacircntica da linguagem eacute voltada principalmente para processar strings expressotildees regulares (de vaacuterios tipos) natildeo satildeo strings fazem parte da semacircntica

Ex (sem o objetivo que seja compreensiacutevel apenas para indicar o estilo)

Ler um arquivo contendo campos com nomes separados de valores por ()

temperature 10008name some modelx_dimension 100y_dimension 100z_dimension 50()

Armazenado-o em um mapa O que pode ser feito com apenas

While (ltgt) Loop over input linesPut pre-colon text into $1 post-colon into $2 if (m (S+) (+) ) Use $1 as key $2 as value $file_data$1 = $2

3689

Expressotildees regulares - definiccedilatildeo

Expressotildees regulares (regular expressions regex) satildeo a mais poderosa ferramenta para fazer buscas e separar substrings

Regex satildeo uma linguagem com o uacutenico objetivo de especificar propriedades de strings

Implementadas em graus diferentes em todas as linguagens modernas e modernizadas facilita encontrar uma expressatildeo jaacute pronta pois satildeo quase iguais em qualquer linguagem

Estatildeo na biblioteca padratildeo em IDL Python R Perl

Em C++ e Java em bibliotecas comuns (Boost Jregex)

Para que servem

Uma expressatildeo regular especifica propriedades de strings

O interpretador de expressotildees regulares (regular expression engine) recebe a expressatildeo e o string a analisar e determina se o string corresponde (matches) agrave expressatildeo regular

Em alguns casos o interpretador pode tambeacutem informar que parte(s) do string corresponde(m) a que parte(s) da expressatildeo regular e realizar processamentos com estas partes

3789

Expressotildees regulares ndash exemplos de usos Separar partes de strings

Encontrar linhas em arquivos que tenham nomes valores e comentaacuterios e separar estes pedaccedilos

Escalar com comentaacuterio

SLITPA = 351979 Slit position angle

Array 1D sem comentaacuterio (se extendendo por vaacuterias linhas)

BAND_BIN_CENTER = (03505400358950036629003732200379490 0387900104598)

Escalares em diferentes formatos

Total Mechanical Luminosity 15310E+03resources_usedwalltime=005603

Pedaccedilos de nomes

6063 17836E-20 2456 T FeIX((3Pe)3d(2PE)4p_1Po-3s2_3p6_1Se)

Datas separando ano mecircs dia hora (em vaacuterios formatos diferentes)

DATE-OBS= 2006-12-18 universal date of observationDATE_TIME = 2010-07-19T161032START_TIME = 2006-182T225102850Z

3889

Expressotildees regulares ndash exemplos de usos

Separar partes de strings Separar partes de nomes de arquivos (por significarem algo como identificar o

conteuacutedo)

specdec18s0041fitsscamdec18i0054fits15_7_mts_hmpixselh_mr15sav15_7_mts_hwpixselh_mr15sav16_3_mts_hwpixselb_mr16savreadmodel5l_-1_000010000_10000_r05_030_08196_0100000_005000000_1000eps

Determinar se um string eacute um nuacutemero (inteiro real fixo flutuante)

Encontrar identificadores Exs nomes de cataacutelogos endereccedilos HTTPFTP endereccedilos de email

Separar campos em arquivos sendo lidos onde as linhas natildeo tecircm a mesma formataccedilatildeo algumas linhas com colunas separadas por espaccedilos outras por tabs outras por

siacutembolos ignorando linhas de comentaacuterios e linhas vazias

3989

Expressotildees regulares - usoEx (IDL) encontrar nomes de arquivos com algumas propriedades

IDLgt printfilesformat=(A)CM_1477475933_1_viscubCM_1477476864_1_ircubCM_1477476864_1_irgcubCM_1477476864_1_viscubCM_1477477826_1_ircubCM_1477477826_1_irgcubCM_1477477826_1_viscubmosaic2cub

IDLgt printstregex(files+irgcubboolean) 0 0 1 0 0 1 0 0

A expressatildeo regular eacute +irgcub Especifica uma ou mais ocorrecircncias seguidas (+) de qualquer caractere () seguido de uma ocorrecircncia de irgcub (o ponto vem precedido do caractere de

escape () para ser entendido literalmente como um ponto e natildeo como o seu significado especial (qualquer caractere)

Esta aplicaccedilatildeo do interpretador (stregex) retorna um valor Booleano (verdadeirofalso) para cada elemento do string passado (files) que informa se aquele elemento correspondia agravequela expressatildeo regular

Este eacute um exemplo artificial Seria mais faacutecil ter usado strmatch(filesirgcub)

4089

Expressotildees regulares - uso

Em casos como este tipicamente o resultado de stregex seria usado como filtro para selecionar apenas os elementos do array de strings que satisfazem agravequela expressatildeo regular

IDLgt w=where(stregex(files+irgcubboolean)null)IDLgt printfiles[w]format=(A)CM_1477476864_1_irgcubCM_1477477826_1_irgcub

Ex (IDL) Determinar que strings conteacutem uma data no formato yyyy-mm-dd

IDLgt strs=[201002012010-02-012010-2-1aaaa-mm-ddT2010-02-01J]IDLgt printstregex(strs[0-9]4-[0-9]2-[0-9]2boolean) 0 1 0 0 1

Esta expressatildeo regular especifica quatro repeticcedilotildees (4) de diacutegitos (caracteres na faixa [0-9]) seguido de um (-) seguido de duas repeticcedilotildees (2) de dois diacutegitos ([0-9]) seguido de um (-) seguido de duas repeticcedilotildees (2) de dois diacutegitos ([0-9])

Uma expressatildeo regular apenas um pouco mais elaborada poderia corresponder aos 3 formatos de data no array acima E poderia se impedir que a uacuteltima (com outros caracteres antes e depois da data) seja aceita

4189

Expressotildees regulares - regras - caracteres ldquonormaisrdquo

Uma expressatildeo regular usa caracteres ldquonormaisrdquo e especiais para especificar o que se vai procurar na ordem em que aparecem na expressatildeo

Se um caractere eacute normal (natildeo eacute um dos especiais mostrados adiante) ele especifica uma ocorrecircncia daquele caractere

Ex J eacute uma expressatildeo regular que corresponde a qualquer string onde ocorra J Jaacute JA soacute corresponde a strings que tenham JA dentro

Exs (IDL)

IDLgt strs=[JJJJJJaJAjaJa]

IDLgt printstregex(strsJboolean) 1 1 1 0 1

IDLgt printstregex(strsJAboolean) 0 0 1 0 0

4289

Expressotildees regulares - regras - caracteres especiaisCaracteres especiais tecircm outros significados Para significar literalmente aquele caractere deve ser escapado (escaped) com um

Siacutembolo significado exemplo Corresponde(m) Escape o caractere seguinte deve ser interpretado

literalmente natildeo como especial aa

Qualquer caractere ab ajb aab abb jafbc

+ Uma ou mais repeticcedilotildees do que vem agrave esquerda a+b ab aab bab baabh

() Subexpressatildeo para agrupar termos afetados por um caractere especial (como parecircnteses em notaccedilatildeo matemaacutetica)

(ab)+c abc ababc dabababcg

Zero ou mais repeticcedilotildees dos termos agrave esquerda ab abbaab caaabg

Zero ou uma repeticcedilatildeo dos termos agrave esquerda ab b ab cabd cbd

| Alternaccedilatildeo qualquer um dos dois agrave esquerda a|bc ac bc jacd jbcd

n Exatamente n repeticcedilotildees do termo agrave esquerda a2b aab daaabg

n1n2 De n1 a n2 repeticcedilotildees do termo agrave esquerda a12b ab aab aaab gaaabbd

^ Acircncora (no comeccedilo) nada agrave esquerda ^ab ab abb

$ Acircncora (no fim) nada agrave direita ab$ abaab

[] Conjunto de valores (explicado adiante)

4389

Expressotildees regulares - regras - conjuntos de valores

[] denota um conjunto de valores que pode conter

Uma lista de coisas que devem corresponder Ex [abc] signfica qualquer caractere no conjunto abc Correspondem a esta

expressatildeo abcabha

Uma lista de coisas que natildeo podem corresponder [^abc] significa qualquer coisa que natildeo seja a b ou c Correspondem a esta

expressatildeo d jgs gg

Faixas de valores [0-9] signfica qualquer diacutegito [0-9a-zA-Z] significa qualquer diacutegito ou letra

Classes de valores como algumas faixas e outros conjuntos ocorrem com muita frequumlecircncia haacute nomes

especiais para eles Estes (em IDL) vecircm entre [] ex [[digit] significa o mesmo que [0-9]

4489

Expressotildees regulares - regras - classes de valores

Classe signficado

alnum Caracteres alfanumeacutericos 0-9a-zA-Z

alpha Caracteres alfabeacuteticos a-zA-Z

cntrl Caracteres de controle ASCII (natildeo visiacuteveis coacutedigos 1 a 31 e 127)

digit Diacutegitos (decimais) 0-9

graph Caracteres visiacuteveis ASCII 33 a 126 (natildeo inclui o espaccedilo)

lower Letras minuacutesculas a-z

print Caracteres ldquoimprimiacuteveisrdquo (visiacuteveis e o espaccedilo) ASCII 32 a 126

punct Caracteres de pontuaccedilatildeo $amprsquo()+-lt=gt[]^_lsquo|~

space Os caracteres ldquoem brancordquo (blank) espaccedilo tab tab vertical CR LF (ASCII 32 e 9-13)

upper Letras maiuacutesculas A-Z

xdigit Diacutegitos hexadecimais 0-9A-Fa-f

lt Comeccedilo de palavra (palavra definida como sequumlecircncia de coisas natildeo space)

gt Fim de palavra (palavra definida como sequumlecircncia de coisas natildeo space)

Estas satildeo apenas as principais Algumas implementaccedilotildees tecircm muito mais (em particular nas linguagens que usam Unicode nativamente)

4589

Expressotildees regulares - exemplos

Determinar se strings satildeo nuacutemeros (Ex IDL)

IDLgt str=[9-18 875-812-45913E9-98d7a188d032f5]

Inteiros

IDLgt intexpr=^[-+][0-9]+$

IDLgt printstregex(strintexprboolean) 1 1 0 0 0 0 0 0 0 0

Ponto flutuante

IDLgt fpexpr=^[-+](([0-9][0-9]+)|([0-9]+[0-9]))([eEdD][-+][0-9]+)$

IDLgt printstregex(strfpexprboolean) 1 1 0 1 1 1 1 1 0 0

Sinal opcional

1 ou mais diacutegitos

Sinal opcional

0 ou mais diacutegitos opcionalmente seguidos de um ponto e 1 ou mais diacutegitos

1 ou mais diacutegitos opcionalmente seguidos de um ponto e 0 ou mais diacutegitos

ou Expoente opcional letra do expoente seguida de sinal opcional seguido de um ou mais diacutegitos

4689

Expressotildees regulares ndash extraccedilatildeo

Interpretadores de expressotildees regulares costumam oferecer mais que apenas testar se um string corresponde a uma expressatildeo

Em geral tambeacutem podem retornar que parte(s) do string corresponde(m) agrave expressatildeo

Ex (IDL) Determinar se um string conteacutem uma data incluindo os formatos

IDLgt dates=[2011-01-312011 1 3120110131something done on y2011m1d31 with something]

E extrair a data de dentro do string

IDLgt expr=[0-9]4[0-9]12[0-9]12

(4 diacutegitos)(qualquer separador)(1 a 2 diacutegitos)(qualquer separador)(1 a 2 diacutegitos)

IDLgt printstregex(datesexprextract)format=(A)2011-01-312011 1 31201101312011m1d31

Como agora separar ano mecircs e dia Com uma busca e uma extraccedilatildeo para cada Poderia ser mais eacute mais faacutecil com uma uacutenica expressatildeo regular

4789

Expressotildees regulares - aleacutem de apenas testes

Tambeacutem podem retornar que parte(s) do string correspondem agrave expressatildeo toda e agraves suas subexpressotildees (partes da expressatildeo delimitadas por parecircnteses)

Ex (IDL) Separar pedaccedilos de datas Neste caso para a expressatildeo ficar menor assumindo um formato simples (yyyy-mm-ddThhmmssfff) Mas poderia ser um formato mais livre como no exemplo anterior

IDLgt str=Stuff observed on 2011-01-31T123924983 with some instrumentIDLgt expr=([0-9]4)-([0-9]2)-([0-9]2)T([0-9]2)([0-9]2)([0-9]2[0-9]3)

(quatro diacutegitos)-(2 diacutegitos)-(2 diacutegitos)T(2 diacutegitos)(2 diacutegitos)(2 diacutegitos3 diacutegitos)

IDLgt pieces=stregex(strexprextractsubexpr)IDLgt printpiecesformat=(A)2011-01-31T12392498320110131123924983IDLgt d=julday(pieces[2]pieces[3]pieces[1]pieces[4]pieces[5]pieces[6])IDLgt printdformat=(F166) 2455593027372

Expressatildeo inteiraPrimeira subexpressatildeoSegunda subexpressatildeoTerceira subexpressatildeoQuarta subexpressatildeoQuinta subexpressatildeoSexta subexpressatildeo

4889

Expressotildees regulares - referecircncias httpxkcdcom208

Viacutedeos do Software Carpentry

httpsoftware-carpentryorg4_0regexp

4989

Arquivos

Quase todo programa precisa armazenar dados em arquivos

Podem ser pequenos arquivos de paracircmetros ou enormes arquivos de dados produzidos ou a processar

Apesar do sugerido pela praacutetica comum arquivos texto natildeo satildeo sempre a melhor escolha para armazenar dados - e haacute muitas formas diferentes de os usar

Qual eacute a melhor escolha

Assim como para linguagens ou contecirciners natildeo existe ldquoo melhor formatordquo Cada um tem suas vantagens e desvantagens

Dados diferentes (mesmo se usados pelos mesmos programas) em geral se adequam melhor a formatos diferentes

5089

Arquivos - texto X binaacuterios

Em qualquer formato arquivos satildeo armazenados como diacutegitos binaacuterios

Mas haacute duas formas principais como eles podem ser codificados

Arquivos baseados em texto (text files)

Dados satildeo transformados em caracteres usando alguma formataccedilatildeo (mesmo se impliacutecita) e escritos com alguma codificaccedilatildeo de texto (comumente mas natildeo necessariamente ASCII)

Um arquivo texto eacute um ou mais strings As mesmas conversotildees tecircm que ser feitas depara outros tipos

Arquivos ldquobinaacuteriosrdquo (binary files)

Embora todo arquivo seja binaacuterio este nome costuma ser usado soacute para aqueles em que os dados natildeo estatildeo na forma de texto

Com frequumlecircncia (nem sempre) os dados satildeo gravados de forma idecircntica a como satildeo armazenados na memoacuteria

Muitos formatos usam uma mistura de partes em texto e partes binaacuterias

Um cabeccedilalho (header) de texto que daacute informaccedilotildees (metadados) sobre os dados armazenados na parte binaacuteria que vem depois

O cabeccedilalho conteacutem em especial informaccedilotildees sobre como ler os dados binaacuterios

5189

Arquivos - texto X binaacuterios

Vantagens de arquivos texto

Legiacuteveis por pessoas (human readable)

Podem ser auto-suficientes todo o necessaacuterio para os ler e entender o que conteacutem pode ser obtido olhando o arquivo

Satildeo os menos especiacuteficos a linguagens software normalmente satildeo escritos em ASCII ou Unicode e sempre haacute algum suporte a ler escrever texto em linguagens software

Haacute alguns formatos padratildeo para texto (exs CSV XML) que satildeo suportados em muitas plataformas diferentes

5289

Arquivos - texto X binaacuterios

Vantagens de arquivos binaacuterios

Em geral natildeo haacute conversotildees entre o os dados como armazenados na memoacuteria O que torna o armazenamento mais eficiente e sem alteraccedilotildees nos valores

A maior parte dos formatos padronizados eacute binaacuteria Exs FITS cube CDF NetCDF HDF HDF5 JPEG JPEG2000 TIFF GeoTIFF MPEG etc

Eacute mais comum que haja bibliotecas prontas (ateacute de alto niacutevel) para consulta leitura e gravaccedilatildeo

Os formatos melhor desenhados satildeo autodocumentados (em texto ou binaacuterio) para os ler natildeo eacute necessaacuterio conhecimento preacutevio sobre como os dados foram armazenados

Toda linguagem plataforma costuma ter seu formato binaacuterio mais nativo que costuma ser o mais faacutecil para leitura gravaccedilatildeo Em particular nas de alto niacutevel que tecircm formatos autodocumentados (especialmente

em IDL R Python Java)

Muitos formatos tecircm opccedilatildeo de compressatildeo dos dados

5389

Arquivos - proprietaacuterios X padratildeo

Independente da escolha texto binaacuterio programas devem escolher entre usar um formato proacuteprio ou um formato padronizado

A principal vantagem de formatos proacuteprios eacute que satildeo definidos da forma mais conveniente para a aplicaccedilatildeo que os usa simplificando leitura e gravaccedilatildeo e potencialmente otimizando recursos (acesso ao disco tamanho do arquivo etc)

A principal desvantagem de formatos proacuteprios eacute ser necessaacuterio escrever todo o coacutedigo para os ler gravar

Pode dar mais trabalho que usar um formato geneacuterico que natildeo seja exatamente o que melhor se encaixa na aplicaccedilatildeo

O coacutedigo para processar o formato em geral vai ser menos completo e conveniente de usar que o de um formato bem estabelecido usado por muitos outros em muitos ambientes

Cada novo software que for usar estes arquivos vai precisar compartilhar do mesmo coacutedigo ou precisar de coacutedigo novo (em particular se em outra linguagem) para ler gravar naquele formato

Eacute necessaacuterio documentar o formato e decidir sobre como ele seraacute definido

Se outros jaacute colocaram muito trabalho desenvolvendo bons formatos padratildeo bem suportados em muitos ambientes por que ter o trabalho de reinventar (e reprogramar redocumentar e retestar) a roda

5489

Arquivos - padrotildees comuns em astronomia (exs adiante)

Texto

CSV Comma-separated values - bem suportado por muitos softwares

ldquoColunas fixasrdquo Natildeo eacute um padratildeo bem definido mas eacute praacutetica comum para tabelas (2D)

XML Extensible Markup Language - O padratildeo texto mais flexiacutevel de grande uso em programaccedilatildeo geral para armazenar qualquer coisa com frequumlecircncia de forma hieraacuterquica Bem suportado por linguagens modernas (e modernizadas) e bibliotecas das principais

linguagens gerais Alta complexidade o torna trabalhoso de usar

5589

Arquivos - padrotildees comuns em astronomia (exs adiante)Binaacuterios

FITS Flexible Image Transport System - o mais comum para observaccedilotildees astronocircmicas Conteacutem os dados (em geral arrays 1D 2D ou 3D) e documentaccedilatildeo (nos cabeccedilalhos) sobre a origem e caracteriacutesticas dos dados Tambeacutem usado para armazenar tabelas de dados quaisquer mesmo que natildeo sejam observaccedilotildees (especialmente pelo STSCI) Variam muito em qualidade de documentaccedilatildeo

NetCDF Network Common Data Form - evoluccedilatildeo do CDF autodocumentado eacute comum e bem suportado para vaacuterios arrays de dados

HDF5 Hierarchical Data Format ndash autodocumentado comum e bem suportado permitindo aleacutem de simples arrays estruturas (eacute um formato hieraacuterquico)

Formatos de imagens JPEG JPEG2000 TIFF GeoTIFF etc - voltados para arrays 2D3D de inteiros ou (em alguns casos) reais com ou sem compressatildeo JPEG2000 tem caracteriacutesticas mais avanccediladas como imagens multiresoluccedilatildeo

Formatos vetoriais PS EPS DXF SHP SVG - variados niacuteveis de suporte a armazenamento de vetores e formas em 2D ou 3D

ISIS Cube semelhante em caracteriacutesticas ao FITS mais usado em sensoriamento remoto geociecircncias e ciecircncias planetaacuterias em geral para observaccedilotildees 1D 2D ou 3D

Formatos nativos de linguagens todo o trabalho de leitura e gravaccedilatildeo eacute feito automagicamente pela biblioteca padratildeo em IDL R Python Java

5689

Arquivos texto - newlines

Apesar do que possa parecer arquivos texto natildeo tecircm intrinsecamente vaacuterias linhas Arquivos texto satildeo soacute uma sequumlecircncia 1D de caracteres em alguma codificaccedilatildeo Separaccedilatildeo em linhas (equivalente a interpretar o arquivo como 2D em linhas e colunas) eacute

especificada por convenccedilotildees Natildeo haacute apenas uma convenccedilatildeo para o fim de linhas

A mais primitiva convenccedilatildeo eacute separaccedilatildeo nenhuma estipula-se que linhas tenham um nuacutemero fixo N de caracteres e cabe ao software que lecirc o arquivo entender que uma linha nova ocorre regularmente a cada N caracteres

Eacute a forma menos portaacutevel e mais inconveniente eacute necessaacuterio o conhecimento preacutevio (ou por inspeccedilatildeo do arquivo) de quantos caracteres haacute por linha

A maior parte dos editores de texto natildeo vai saber separar linhas desta forma (por falta deste conhecimento preacutevio) Exemplo (de um FITS real)

SIMPLE = T Fits standard BITPIX = 16 Bits per pixel NAXIS = 0 Number of axes EXTEND = T File may contain extensions

O que com as linhas quebradas nos lugares certos seria

SIMPLE = T Fits standard BITPIX = 16 Bits per pixel NAXIS = 0 Number of axes EXTEND = T File may contain extensions

5789

Arquivos texto - newlines

A forma mais comum de especificar linhas eacute com um marcador do final de linha (newline)

Eacute um caractere especial natildeo normalmente presente no texto que serve para marcar fim de linhas

Mas natildeo haacute soacute um padratildeo de newline Os mais comuns

LF (Line Feed ASCII 10) ndash Unix Linux Mac OS X

CR - (Carriage Return ASCII 13) - Mac OS lt10

CR+LF (CR seguido de LF) - Windows DOS

Eacute o motivo de o Notepad (Windows) natildeo entender as quebras de linha de arquivos escritos com o formato nativo de Linux o arquivo soacute tem LF enquanto o editor espera CR+LF

Alguns sistemas (strings em vaacuterias linguagens por exemplo) usam o coacutedigo de escape n para indicar newline que eacute codificado de acordo com o padratildeo sendo usado

Em geral bibliotecas de leitura e gravaccedilatildeo de arquivos usam (default pelo menos) o newline nativo do sistema em que satildeo usadas

Programas de conversatildeo entre os sistemas satildeo comuns (ex dos2unix)

O Wordpad identifica se for usado soacute LF e quebra as linhas de acordo

5889

Arquivos - texto - CSV

Comma-separated values

O formato mais padronizado para tabelas (arrays 2D) em texto (frequentemente mas natildeo necessariamente ASCII)

Bem suportado por bibliotecas padratildeo de linguagens e outros softwares (Excel Calc Origin Google Docs etc)

Conteacutem Linhas de cabeccedilalho (opcionais mas recomendadas) linhas com qualquer texto geral

descrevendo o arquivo e em geral uma linha de tiacutetulo para as colunas da tabela Uma (apenas uma) tabela onde todas as linhas tecircm o mesmo nuacutemero de colunas

Colunas separadas por viacutergulas (opcionalmente pode ser outro separador) Linhas terminadas por newline (qualquer que seja) Strings delimitados por ldquo ldquo

Ex

NAMECALMPOSFILNAMEECHLPOSDISPPOSTARGNAMEPOSDIRCLASSMJD-OBSITIMECOADDSdec18s00010NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001dec18s00020NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001dec18s00120NIRSPEC-5-AO635800364500itan140NIRSPEC-5-AOp2 TITAN5408763000001dec18s00140NIRSPEC-5-AO626300364500itan140NIRSPEC-5-AOp1 TITAN5408763000001dec18s00151NIRSPEC-5-AO626300364500itan140NIRSPEC-5-AOp1ARC5408764000001dec18s00160NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001

Natildeo eacute necessaacuterio que as colunas tenham largura constante

Cabeccedilalho

5989

Arquivos - texto - CSVHaacute amplo suporte a leitura e gravaccedilatildeo de CSV sem precisar recorrer a procedimentos de baixo niacutevel

Podem ser diretamente importados em Excel Calc Origin Google Docs ou lido facilmente com bibliotecas padratildeo comuns Ex (IDL)

IDLgt c=read_csv(filesearch_scamcsvheader=h)IDLgt printhNAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS

IDLgt helpc Structure ltc8bca508gt 11 tags length=5256 data length=5248 refs=1 FIELD01 STRING Array[41] FIELD02 LONG Array[41] FIELD03 STRING Array[41] FIELD04 DOUBLE Array[41] FIELD05 DOUBLE Array[41] FIELD06 STRING Array[41] FIELD07 STRING Array[41] FIELD08 STRING Array[41] FIELD09 STRING Array[41] FIELD10 DOUBLE Array[41] FIELD11 LONG Array[41]

IDLgt printcfield01[03]dec18s0001 dec18s0002 dec18s0003 dec18s0004

IDLgt printcfield03[03]NIRSPEC-5-AO NIRSPEC-5-AO NIRSPEC-5-AO NIRSPEC-5-AO

6089

Arquivos - texto - CSVEx (IDL) Criaccedilatildeo de um CSV com uma tabela de valores

Criaccedilatildeo de 3 arrays 1D (12 elementos) um para cada coluna

IDLgt x=dindgen(3)IDLgt y=dindgen(4)IDLgt xx=reform(rebin(x34)12)IDLgt yy=reform(rebin(reform(y14)34)12)IDLgt f=xx+yy10IDLgt helpxxyyfXX DOUBLE = Array[12]YY DOUBLE = Array[12]F DOUBLE = Array[12]

Escrita do arquivo

IDLgt write_csvexamplecsvxxyyfheader=[XYX+10Y]

ResultadoXYX+10Y000000000000000000000000100000000000000010000000200000000000000020000000000000001000000010000000100000001000000011000000()

6189

Arquivos - texto - ldquoColunas regularesrdquoFixed column width

Natildeo eacute exatamente um padratildeo Eacute uma praacutetica comum

Armazena uma tabela (array 2D) de forma regular simples de ser interpretada e lida

Costumam ter linha(s) de cabeccedilalho descrevendo o conteuacutedo do arquivo em geral com uma linha para os nomes das colunas

As demais linhas conteacutem os dados sempre ocupando a mesma largura por coluna e escritos no mesmo formato em cada coluna

Costumam ser simples de ler inclusive interativamente (exs Excel Calc Origin read_ascii)

Ex (IDL) Uma simples tabela soacute de nuacutemeros

wavl CH4=33 wavl CH4=25 wavl CH4=10 wavl CH4=08 wavl CH4=05 wavl CH4=026 wavl CH4=02 477330000 0090130 477330000 0091110 477330000 0089250 477330000 0087000 477330000 0087140 477330000 0090080 477330000 0088110 480040000 0090930 480040000 0091930 480040000 0090160 480040000 0087930 480040000 0088110 480040000 0090950 480040000 0089090 482750000 0091710 482750000 0092730 482750000 0091060 482750000 0088850 482750000 0089080 482750000 0091810 482750000 0090060 485450000 0092530 485450000 0093570 485450000 0092000 485450000 0089810 485450000 0090100 485450000 0092730 485450000 0091090

IDLgt a=read_ascii(specs_27s_ntxtdata_start=1header=header)IDLgt printheader wavl CH4=33 wavl CH4=25 wavl CH4=10 wavl CH4=08 wavl CH4=05 wavl CH4=026 wavl CH4=02 IDLgt helpa Structure ltd423c9a8gt 1 tags length=224 data length=224 refs=1 FIELD01 FLOAT Array[14 4]

6289

Arquivos - texto - ldquoColunas regularesrdquoJaacute um arquivo um pouco mais difiacutecil de ler

NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS dec18s0001 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0002 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0003 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 FLAT 5408757812500 460000 5 dec18s0004 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 DARK 5408757812500 460000 5

Por ter colunas de tipos diferentes (strings inteiros reais) natildeo eacute possiacutevel o ler em um simples array Mas eacute faacutecil o colocar em uma estrutura de arrays onde cada campo eacute uma coluna

Especificando interativamente como interpretar as linhasIDLgt templ=ascii_template(filesearch_scamtxt)

Nome do campo (default mostrado)

Tipo do campo (identificado automaticamente)

Posiccedilatildeo (caracter) do comeccedilo (identificada automaticamente)

Linha de exemplo para verificar as colunas

6389

Arquivos - texto - ldquoColunas regularesrdquoDepois de feito o template o arquivo pode ser lido com apenas

IDLgt a=read_ascii(filesearch_scamtxttemplate=templ)IDLgt helpa Structure ltd4ec4608gt 11 tags length=416 data length=416 refs=1 FIELD01 STRING Array[4] FIELD02 LONG Array[4] FIELD03 STRING Array[4] FIELD04 FLOAT Array[4] FIELD05 FLOAT Array[4] FIELD06 STRING Array[4] FIELD07 STRING Array[4] FIELD08 STRING Array[4] FIELD09 FLOAT Array[4] FIELD10 FLOAT Array[4] FIELD11 LONG Array[4]IDLgt printafield01dec18s0001 dec18s0002 dec18s0003 dec18s0004IDLgt printafield04 626300 626300 626300 626300

O template (uma estrutura contendo dados sobre como ler o arquivo) pode ser usado para outros arquivos no mesmo formato No lugar de ter sido criado interativamente poderia ter sido lido de algum arquivo Poderia ter especificado nomes para os campos que seriam mais amigaacuteveis que coias como FIELD11

6489

Arquivos - texto - XML

Extensible Markup Language

Admite grande flexibilidade e por isso pode ter alta complexidade

Valores satildeo colocados dentro de uma estrutura em hieraacuterquica (em uma aacutervore) com os noacutes identificados pelos seus nomes (chaves)

Largamente usado em muitas aacutereas para armazenar conjuntos arbitraacuterios de quaisquer estruturas de dados

A maioria das aplicaccedilotildees usa um formato que eacute um subconjunto do XML especificado por um Schema comumente em um arquivo XML DTD (Document Type Definition)

6589

Arquivos - texto ndash XML ndash exemplos de usos

Armazenamento de dados de aplicaccedilotildees web (comum para exportar importar dados MediaWiki DokuWiki WordPress ADS Lattes etc)

Documentos Office (docx pptx xlsx) OpenOffice (odt opd ods)

Como versotildees de outros formatos FITSML XDF

ldquoScientific Dataset XML NASAs Astronomical Data Center (ADC) sponsors a number of research projects that

use XML for scientific data representation The XML activities at the ADC are sponsored and supported by the NASA Office of Space Science Applied Information Systems Research Program (AISRP)rdquo - httpxmlcoverpagesorgnasa-adchtml

Astronomical Instrument Markup Language (AIML)

SVG ndash Scalable Vector Graphics

Muitas de outras aplicaccedilotildees listadas em httpxmlcoverpagesorgxmlhtmlapplications

6689

Arquivos - texto ndash XML - exemploltxml version=10 gtltDOCTYPE Xdmf SYSTEM Xdmfdtd []gtltXdmf xmlnsxi=httpwwww3org2001XInclude Version=20gt ltDomaingt lt-- Example of Basic Topologies --gt ltInformation Name=Descriptiongt Example of a Polyvertex Topology ltInformationgt ltGrid Name=Polyvertex GridType=Uniformgt ltTopology TopologyType=Polyvertex Dimensions=3 NodesPerElement=3gt ltDataItem Format=XML Dimensions=3 3 NumberType=Floatgt 0 1 2 4 5 6 8 9 10 ltDataItemgt ltTopologygt ltGeometry Type=XYZgt ltDataItem Format=XML Dimensions=4 4 3gt 00 00 00 10 00 00()Que mostra que a interpretaccedilatildeo (parsing) de XML eacute em geral complexa

6789

Arquivos - texto - XML

Haacute muitas bibliotecas de alto niacutevel para fazer o processamento (parsing) e entregar os dados em uma estrutura conveniente

A complexidade em processar XML estaacute em decidir o que fazer com os dados jaacute que os arquivos podem ser muito complexos

As APIs (Application Programming Interfaces) mais comuns para processar XML que satildeo implementadas em muitas linguagens

DOM (Document Object Model) ndash manteacutem todo o conteuacutedo do em uma estrutura de dados (em geral uma aacutervore) em uma variaacutevel (em geral um objeto) Esta pode ser consultada para obter os valores de interesse para os alterar e usada para escrever um arquivo

SAX (Simple API for XML) ndash Interpretador (parser) por objetos O usuaacuterio escreve uma classe herdando da classe SAX provendo os meacutetodos que vatildeo processar os campos agrave medida em que estes satildeo lidos

6889

Arquivos - binaacuterios - FITSFlexible Image Transport System

O formato mais comum para observaccedilotildees astronocircmicas Tambeacutem usado para armazenar quaisquer dados mesmo natildeo relacionados a observaccedilotildees (especialmente tabelas como eacute praacutetica do STSCI)

Conteacutem um (ou mais) cabeccedilalho(s) de texto com metadados (informaccedilotildees sobre os dados como caracteriacutesticas (necessaacuterias para os ler) origem condiccedilotildees em que foram obtidos processamento realizado etc)

SIMPLE = T image conforms to FITS standard BITPIX = 32 bits per data value NAXIS = 2 number of axes NAXIS1 = 1024 NAXIS2 = 1024 BSCALE = 100000 Scaling factor BZERO = 000000 Scaling zero-point TELESCOP= Keck II Telescope SLITNAME= 0041x226 Slit Name SLITPA = 351979 Slit position angle SLITX = 131500 X pixel of the center of the slit LST = 12010446 local apparent sidereal time (()

Depois do cabeccedilalho haacute uma (ou mais) seccedilatildeo(otildees) de dados binaacuterios Costuma(m) ser array(s) 1D (espectros) 2D (imagens) ou 3D (ldquocubos de dadosrdquo)

De inteiros ou reais inteiros satildeo comuns em contagens de instrumentos reais para valores derivados (fluxos intensidades etc)

6989

Arquivos - binaacuterios - FITSNormalmente FITS satildeo lidos escritos por bibliotecas prontas de (relativamente) alto niacutevel usuaacuterio natildeo tem que saber como os dados satildeo armazenados no arquivo nem como os ler escrever Ex (IDL com a biblioteca idlastro)

IDLgt fits_info2dspectrumfits2dspectrumfits has 3 extensionsPrimary header 288 recordsNo dataExtension 1 -- SCI Header 144 records IMAGE ( 1201 1201 )Extension 2 -- ERR Header 72 records IMAGE ( 1201 1201 )Extension 3 -- DQ Header 72 records IMAGE ( 1201 1201 )

IDLgt mydata=readfits(2dspectrumfitsexten_no=1myheader) READFITS Reading FITS extension of type IMAGE READFITS Now reading 1201 by 1201 array

IDLgt extastmyheadermyastIDLgt sz=size(mydatadimensions)IDLgt xy2ad[1sz[0]][1sz[1]]myastcorners_acorners_dIDLgt printcorners_aCorners of the data array from file 2dspectrumfits are at 14487480 33063480

IDLgt printcorners_d -00041264444 00041402222

Obteacutem os dados de coordenadas (WCS) do header

Coloca os dados no array (2D de floats) mydata e o header no array (1D de strings) myheader

Calcula as coordenadas das quinas da imagem atraveacutes do WCS

Provecirc informaccedilotildees sobre o arquivo

7089

Arquivos - binaacuterios - ISIS Cube

Formatos como FITS se adequam muito a ter uma interface de mais alto niacutevel por objetos

Tambeacutem para dados em tabelas FITS muito mais trabalhosos de ler em baixo niacutevel que se adequam muito mais a mapas ou estruturas

Exemplo (de um formato semelhante a FITS ISIS cube)

O objeto ao ser criado lecirc todo o arquivo

cube=pp_editablecube(CM_1553510065_1_ircub)

Meacutetodos fornecem os dados desejados para obter quando necessaacuterio os dados de interesse

Find out the names of the backplanesprintcubegetproperty(backnames)Get the start time of the cubeprintcubegetfromheader(START_TIME)2007-084T100057286Z

Valores no cabeccedilalho podem ser convenientemente fornecidos como um mapa

header=cubeheader_as_hash()printheader[START_TIME]2007-084T100057286Z

7189

Arquivos - binaacuterios ndash ISIS Cube

Os dados satildeo fornecidos como arraysMake a contour plot of the latitudesc=contour(cubegetsuffixbyname(LATITUDE))Get the band with wavelength nearest to 21 (in the units used in the cube)selband=cubegetbandbywavelength(21wavelengths=selwavs)

Interfaces por overload tornam o acesso ainda mais conveniente

selband=cube[21]

selwavs=cube[21]

Retorna um array com a banda de comprimento de onda mais proacuteximo de 21 (microm)

Retorna o comprimento de onda mais proacuteximo de 21 (microm) da banda retornada acima

7289

Arquivos - binaacuterios ndash ISIS Cube Alteraccedilotildees feitas ao conteuacutedo satildeo automaticamente refletidas em todos os

lugares (cabeccedilalho em particular) afetados mantendo o objeto vaacutelido que pode depois ser gravado em um novo arquivo

IDLgt printcubelinescubesamplescubebands 64 64 256

IDLgt helpcubecoreltExpressiongt FLOAT = Array[64 64 256]

IDLgt cubecore=dblarr(100100256)

A linha acima natildeo eacute uma atribuiccedilatildeo eacute uma invocaccedilatildeo de meacutetodo Eacute equivalente acubesetpropertycore=dblarr(100100256)

Eacute o trabalho da funccedilatildeo setproperty decidir se a propriedade passada (core) faz sentido e se fizer fazer todo o trabalho necessaacuterio a esta mudanccedila Para o usuaacuterio eacute tudo automaacutetico e os dados da classe satildeo vaacutelidos o tempo todo

IDLgt helpcubecoreltExpressiongt DOUBLE = Array[100 100 256]

IDLgt printcubelinescubesamplescubebands 100 100 256

IDLgt cubesaveCM_1553510065_1_ir_editedcub

7389

Arquivos - binaacuterios ndash NetCDF e HDF5

Network Common Data Form e Hierarchical Data Format

Os dois uacutenicos formatos bem estabelecidos para dados cientiacuteficos geneacutericos

Armazenam dados como vaacuterias variaacuteveis e seus metadados Para cada variaacutevel haacute (ou pode haver) os metadados

Nome Dimensotildees (do array) Unidades Comentaacuterios

Ambos permitem arrays multidimensionais

Apenas HDF5 permite estruturas (daiacute vem a hierarquia)

Autodocumentados qualquer software que saiba ler um destes formatos lecirc qualquer arquivo sem precisar de conhecimento preacutevio sobre como o arquivo foi gerado

Muito bem suportados em bibliotecas padratildeo e natildeo padratildeo em softwares interativos e visualizadores (inclusive plugins para navegadores)

httpwwwunidataucaredusoftwarenetcdf httpenwikipediaorgwikiHdf5

NetCDF eacute mais simples de usar por natildeo ter hierarquia dando menos trabalho para ler e escrever dados Se hierarquia natildeo eacute necessaacuteria eacute mais conveniente de usar que HDF5

7489

Arquivos - binaacuterios - NetCDF e HDF5Haacute tambeacutem o formato CDL uma versatildeo ASCII do NetCDF A biblioteca padratildeo do NetCDF inclui conversores entre estes formatos

$ ncdump -h refspec_g01_0ncnetcdf refspec_g01_0 dimensions nlay = 51 nwn = 400 nleg = 33 numu = 2 nlev = 52 nphi = 3 ngas = 2 nwnc = 1 scal = 1 v3 = 3 dnl = 1 nk = 1 tdisr = UNLIMITED (0 currently) na = 16

variables float alb(nwn) float z(nlay) float t(nlay) float p(nlay) float wl(nwn) float iof(nwn) float mtau(nwn) float htau(nwn) float hctaus(nwn) float gtau(nwn) float outcos(scal) float phi(nleg) float phic(scal) float umu(numu) float flux(v3 nwn nlev) float mix(nlay ngas) float c(nlay) float psat(nlay) float ga(nwnc) float wlc(nwnc) float inc(scal) int dm(scal) int ord(scal) float fbeam(scal) float wn(nwn) float tautot(nwn nlay) float htaus(nwn nlay) float htaux(nwn nlay) float taug(nwn nlay) float phase(nwn nlay nleg) float ssa(nwn nlay) float uu(nwn nphi nlev numu) float u0u(nwn nlev numu) float tray(nwn nlay) float gtauo(tdisr nwn nlay)

Haacute 14 variaacuteveis usadas como dimensotildees para as 35 variaacuteveis que satildeo arrays

Ex alb(nwn) indica que alb eacute um array 1D de nwn elementos

nwn estaacute armazenado como uma das dimensotildees e eacute 400 portanto alb tem 400 elementos

Parte do conteuacutedo de um arquivo NetCDF em formato CDL (gerado pelo programa ncdump)

7589

Arquivos - binaacuterios - NetCDF e HDF5Conteuacutedo daquele arquivo visualizado com o ncview (acompanha a biblioteca NetCDF padratildeo)

7689

Arquivos - binaacuterios - NetCDF e HDF5O conteuacutedo de todo o arquivo pode ser lido facilmente com as bibliotecas disponiacuteveis e armazenado em contecirciners convenientes Usando um objeto que gera um resultado um pouco mais conveniente

IDLgt h=pp_readncdf(refspec_g01_0nchash)IDLgt printhvar_dims ltObjHeapVar229(HASH)gtvars ltObjHeapVar152(HASH)gtdims ltObjHeapVar118(HASH)gt

IDLgt printh[vars]T 173203 175459 175848 176001 175975 Z 431869 418858 406067 393403 380464 FLUX 300660 145536 0705180 0341669 0165532 PHASE 100000 0779034 0660858 0542052 0449983 TAUTOT0694377 0693420 0693474 0693540 0693636()

IDLgt help(h[vars])[TAUTOT]ltExpressiongt FLOAT = Array[51 400]

IDLgt print(h[var_dims])[TAUTOT]NLAY NWN

IDLgt print(h[dims])[(h[var_dims])[TAUTOT]]NLAY 51NWN 400

7789

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5)

Visualizaccedilatildeo da variaacutevel selecionada

Metadados e alguns valores da variaacutevel selecionada

Variaacutevel a ser criada com o conteuacutedo desta variaacutevel do arquivo

Hierarquia das variaacuteveis do arquivo

7889

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5) Imported variable az

IDLgt helpaz Structure ltd5723f38gt 13 tags length=448 data length=444 refs=1 _NAME STRING az _ICONTYPE STRING binary _TYPE STRING DATASET _FILE STRING INTENSI_test_409OUTh5 _PATH STRING _DATA DOUBLE Array[38] _NDIMENSIONS LONG 1 _DIMENSIONS ULONG64 Array[1] _NELEMENTS ULONG64 38 _DATATYPE STRING H5T_FLOAT _STORAGESIZE ULONG 8 _PRECISION LONG 64 _SIGN STRING

IDLgt printaz_data 00000000 10000000 20000000 30000000 40000000 50000000 60000000 80000000 ()

7989

Arquivos - binaacuterios - imagens

JPEG JPEG200 TIFF GeoTIFF etc

Os formatos comuns de imagens satildeo bem suportados em muacuteltiplas plataformas para uso dentro de programas e interativamente

Alguns formatos tecircm opccedilatildeo de compressatildeo com perda eou sem perda

Armazenam imagens como arrays 2D ou 3D (3D frequumlentemente limitado a 3 ou 4 em uma das dimensotildees uma imagem em 3 ou 4 bandas) de inteiros ou (em alguns formatos) reais

Alguns formatos permitem armazenar metadados para caracterizar as imagens armazenadas

JPEG2000 e GeoTIFF (um subconjunto de TIFF) comuns em astronomia e aacutereas proacuteximas

8089

Arquivos - binaacuterios ndash imagens ndash exemplo (IDL)IDLgt printquery_tiff(issmap_2009tiffinfogeotiff=geo) 1

IDLgt helpinfo Structure ltd4eca4b8gt 18 tags length=144 data length=132 refs=1 CHANNELS LONG 4 DIMENSIONS LONG Array[2] IMAGE_INDEX LONG 0 NUM_IMAGES LONG 1 PIXEL_TYPE INT 1 TYPE STRING TIFF BITS_PER_SAMPLE LONG 8 POSITION FLOAT Array[2] RESOLUTION FLOAT Array[2] UNITS LONG 2 TILE_SIZE LONG Array[2] DESCRIPTION STRING ISS (2009) DATE_TIME STRING 20100218 012436()

IDLgt helpgeo Structure ltd4efa1b8gt 10 tags length=264 data length=262 refs=1 MODELPIXELSCALETAG DOUBLE Array[3] MODELTIEPOINTTAG DOUBLE Array[6 4] GEOGRAPHICTYPEGEOKEY INT 4035 GEOGSEMIMAJORAXISGEOKEY DOUBLE 25750000 GEOGSEMIMINORAXISGEOKEY DOUBLE 25750000()

IDLgt myimage=read_tiff(issmap_2009tiff) Lecirc a imagem para o array myimage

Obteacutem informaccedilotildees sobre o arquivo

8189

Arquivos - binaacuterios ndash formatos nativosLinguagens como IDL R Python Java tecircm seu formato nativo binaacuterio acessado em alto niacutevel Basta mandar salvar ler variaacuteveis no do arquivo a biblioteca padratildeo automagicamente faz todo o trabalho de decidir como gravar ler os dados

Conveniente de usar na proacutepria linguagem Mas raramente existem bibliotecas para ler gravar o formato nativo de uma linguagem a partir de outra Ex (IDL)

IDLgt savefile=2dspectrumsavmydatamyheadercorners_dcorners_averbosecompress SAVE Portable (XDR) compressed SAVERESTORE file SAVE Saved variable MYDATA SAVE Saved variable MYHEADER()

Pode ser lido com apenas (haacute formas mais elaboradas)

IDLgt restore2dspectrumsavverbose RESTORE Portable (XDR) compressed SAVERESTORE file RESTORE Save file written by ltunknowngtltunknowngt Thu Jan 27 191422 2011 RESTORE IDL version 801 (linux x86_64) RESTORE Restored variable MYDATA RESTORE Restored variable MYHEADER()

IDLgt helpmydatamyheadercorners_dcorners_aMYDATA FLOAT = Array[1201 1201]MYHEADER STRING = Array[144]()

8289

Arquivos - processamento em baixo niacutevel

Nem sempre um formato padratildeo eacute a melhor escolha para o problema

Nem sempre haacute escolha (pode-se ter que trabalhar com arquivos que jaacute foram escritos em algum formato proprietaacuterio)

Agraves vezes o formato eacute padratildeo mas natildeo haacute bom suporte a ele disponiacutevel

Em todos estes casos eacute necessaacuterio escrever rotinas em baixo niacutevel que vatildeo ler processar diretamente o conteuacutedo do arquivo

Preferencialmente criando interfaces de alto niacutevel para o programa que vai as usar

8389

Arquivos - processamento em baixo niacutevel - texto

Tomando o exemplo anterior onde as colunas eram de diferentes tipos

NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS dec18s0001 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0002 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0003 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 FLAT 5408757812500 460000 5 dec18s0004 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 DARK 5408757812500 460000 5

A forma mais simples de o ler diretamente eacute definir uma estrutura para receber cada linha e um array destas estruturas para receber todo o arquivo Ex (IDL)

IDLgt record=namecalmpos0filnameechlpos0d0disppos0d0targnameposdirclassmjd_obsitime0d0coadds0IDLgt nlines=file_lines(filesearch_scamtxt)IDLgt mydata=replicate(recordnlines-1)IDLgt header=

Depois de definidas as variaacuteveis que vatildeo receber os dados o arquivo pode ser lido

IDLgt openrunitfilesearch_scamtxtget_lunIDLgt readfunitheaderIDLgt readfunitmydataformat=(A14I8A15F104F104A18A19A15F158F105I15)IDLgt free_lununit

A gravaccedilatildeo de um arquivo texto poderia ser feita de forma semelhante apenas trocando openr por openw (abrir o arquivo para gravaccedilatildeo natildeo leitura) e readf por printf

O arquivo eacute aberto em uma unidade (unit) usada para especificar de onde eacute feita a leitura

Ao final o arquivo eacute fechado

8489

Arquivos - processamento em baixo niacutevel - texto

O que resulta em

IDLgt printheader NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS

IDLgt helpmydataMYDATA STRUCT = -gt ltAnonymousgt Array[4]

IDLgt helpmydata[0] Structure ltd5e38f68gt 11 tags length=136 data length=124 refs=3 NAME STRING dec18s0001 CALMPOS INT 0 FILNAME STRING NIRSPEC-5-AO ECHLPOS DOUBLE 62630000 DISPPOS DOUBLE 36450000 TARGNAME STRING HD85258 POSDIR STRING NIRSPEC-5-AOp1 CLASS STRING STAR MJD_OBS STRING 54087574 ITIME DOUBLE 10000000 COADDS INT 1

Este caso eacute mais complicado que os mais comuns por haver colunas de strings

Se todas fossem de nuacutemeros natildeo teria sido necessaacuterio especificar o formato explicitamente As colunas teriam sido adivinhadas pela biblioteca que lecirc o arquivo Poderia ter sido lido escrito soacute com um array de nuacutemeros sem estruturas

8589

Arquivos - processamento em baixo niacutevel - binaacuterio

Formatos binaacuterios podem ser definidos de qualquer forma O arquivo eacute apenas um conjunto de bytes Cabe ao software saber como os interpretar

Uma escolha comum para que sejam autodocumentados eacute incluir um cabeccedilalho de texto informando as caracteriacutesticas dos dados necessaacuterias para os ler

Ex (IDL) criar um arquivo que armazene um array de doubles com um cabeccedilalho informando as dimensotildees para que o programa que o lecirc saiba como ler os dados

Inventa dados e abre o arquivo

IDLgt data_to_write=dindgen(34)IDLgt openwunitbinary_exampledatget_lun

Escreve as dimensotildees como texto

IDLgt printfunitdimensions of the double array stored belowIDLgt printfunitsize(data_to_writedimensions)

Escreve os dados binaacuterios

IDLgt writeuunitdata_to_write

Fecha o arquivo

IDLgt free_lununit

Escreve em binaacuterio (write unformatted)

8689

Arquivos - processamento em baixo niacutevel - binaacuterio

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

dimensions of the double array stored below 3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

8789

Arquivos - processamento em baixo niacutevel - binaacuterioA leitura deste arquivo eacute igualmente simples

IDLgt header=IDLgt dims=[00]IDLgt openrunitbinary_exampledatget_lun

Lecirc as dimensotildees (armazenadas como texto)

IDLgt readfunitheaderIDLgt readfunitdims

Lecirc a parte binaacuteria depois de saber as dimensotildees

IDLgt data_read=dblarr(dims)IDLgt readuunitdata_read

Fecha o arquivo

IDLgt free_lununit

Verifica que os dados foram gravados e lidos corretamente

IDLgt printarray_equal(data_to_writedata_read) 1

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Lecirc dados binaacuterios (read unformatted)

8889

Sumaacuterio

5 ndash Slides em httpwwwppenteadonetpeapea04_strings_iopdf Strings Expressotildees regulares Arquivos

httpwwwppenteadonetpea

8989

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89

Strings ndash definiccedilatildeo e importacircncia

Um string eacute uma variaacutevel que representa texto como um conjunto de caracteres

Haacute um tipo baacutesico com pelo menos um suporte simples em todas as linguagens

Eacute um dos mais necessaacuterios para tudo Exs

informar o usuaacuterio nomes de arquivos identificar coisas (elementos objetos datas nomes programas algoriacutetimos comandos

etc) escrever e gravar arquivos (embora seja comum haver opccedilotildees melhores que arquivos

texto) graacuteficos

Tem o processamento mais complexo entre os tipos fundamentais

Processamento de strings natildeo eacute apenas prints e reads

489

Strings - implementaccedilotildees

Linguagens variam muito na forma como implementam seu(s) tipo(s) para strings

Haacute strings dinacircmicos e estaacuteticos

Strings estaacuteticos tecircm um nuacutemero (ou nuacutemero maacuteximo) predefinido de caracteres que natildeo pode ser mudado Podem ser pensados como arrays estaacuteticos 1D onde cada elemento eacute um caractere

(eacute como agraves vezes satildeo implementados) Tentar acessar caracteres aleacutem do limite pode resultar em apenas truncamento ou

ateacute no encerramento do programa por violaccedilotildees de memoacuteria Exs C Fortran

Strings dinacircmicos onde o nuacutemero de caracteres pode ser alterado a qualquer momento sem limites preestabelecidos Podem ser pensados como listas homogecircneas onde cada elemento eacute um caractere Exs C++ Java IDL R Python Perl

Algumas linguagens tecircm tipos diferentes para caracteres individuais (character) e strings (string de zero ou mais caracteres) C C++ Java

Algumas linguagens tecircm mais de um tipo variando em funcionalidade

Perl eacute a linguagem com melhor suporte a strings principalmente processamento de expressotildees regulares (adiante)

589

Strings - codificaccedilotildees

Do que se constitui um string

Caracteres satildeo um conceito de alto niacutevel e computadores soacute armazenam diacutegitos binaacuterios

Nada faz com que uma variaacutevel ou arquivo ldquosejamrdquo intrinsecamente caracteres

A correspondecircncia eacute determinada pelo uso de codificaccedilotildees da mesma forma que inteiros e reais satildeo tambeacutem codificados de alguma forma

A maior parte das linguagens assume uma codificaccedilatildeo (ou usam um default) algumas tecircm tipos diferentes para diferentes codificaccedilotildees e as que usam objetos podem ter objetos strings com codificaccedilatildeo variaacutevel

Antigamente a codificaccedilatildeo era sempre a mesma ASCII (American Standard Code for Information Interchange)

1 byte (8 bits) por caractere - 28 (256) valores diferentes

Uma tabela define que caractere eacute codificado por que nuacutemero na faixa 0-127

689

Strings - codificaccedilotildees - ASCII789

Strings - codificaccedilotildees - ASCII

Nem todos os caracteres ASCII satildeo visiacuteveis (printable) Alguns satildeo espaccedilos em branco (espaccedilos tabs etc) outros satildeo alguma forma de caractere de controle (CR LF etc)

O zero costuma ser reservado para controle significando um string vazio (se soacute tem 0) ou em algumas codificaccedilotildees (C) o fim do string

Os caracteres codificados por valores 128-255 natildeo satildeo parte do padratildeo ASCII A associaccedilatildeo varia de acordo com a codificaccedilatildeo escolhida

Sistemas que usam ASCII satildeo os mais simples caracteres sempre tecircm o mesmo tamanho em bytes (1 byte) Satildeo facilmente lidos processados e convertidos de para nuacutemeros

ASCII eacute a codificaccedilatildeo de texto mais comum mas

Ao contraacuterio do que muitos assumem ASCII natildeo eacute a uacutenica forma de codificar texto

ASCII natildeo eacute sinocircnimo de arquivo texto

Em anos recentes Unicode em suas vaacuterias formas (adiante) tem se tornado gradativamente mais comum

889

Strings - codificaccedilotildees - ASCII

Por que ASCII natildeo eacute sempre usado

Porque eacute insuficiente Natildeo conteacutem por exemplo

Caracteres modificados (com acentos cedilha)

Siacutembolos matemaacuteticos (aleacutem dos muito baacutesicos + - ^ gt lt = ) Ex part sum int plusmn ge le times infin neℝ ℤ forall exist ∮ ≌ nabla

Siacutembolos fiacutesicos Ex micro Å oplus

Letras gregas

Outros siacutembolos Ex rarr harr euro ordf deg pound yen iquest iexcl

Caracteres de outras liacutenguas (inclusive de muitos siacutembolos como a vaacuterias formas usadas em chinecircs e japonecircs)

989

Strings - codificaccedilotildees - Unicode

O que usar para natildeo ter as limitaccedilotildees do ASCII

O uacutenico padratildeo de uso dominante hoje eacute o Unicode

Desenvolvido para ser um padratildeo universal contendo ldquotodosrdquo os caracteres de ldquotodasrdquo as escritas e dados sobre os caracteres

Natildeo eacute imutaacutevel adiccedilotildees satildeo decididas pelo Unicode Consortium (httpwwwunicodeorg)

1089

Strings - codificaccedilotildees - Unicode

Haacute duas partes no Unicode o cataacutelogo (uacutenico) e as codificaccedilotildees (vaacuterias)

O cataacutelogo eacute definido independente de codificaccedilotildees Pode ser visto como um mapa onde os pontos de coacutedigo (codepoints) satildeo as

chaves e os valores satildeo os dados sobre aquele caractere

ldquoIn Unicode the letter A is a platonic ideal Its just floating in heaven A

This platonic A is different than B and different from a but the same as A and A and A

The idea that A in a Times New Roman font is the same character as the A in a Helvetica font but different from a in lower case does not seem very controversial but in some languages just figuring out what a letter is can cause controversy

Is the German letter szlig a real letter or just a fancy way of writing ss If a letters shape changes at the end of the word is that a different letter Hebrew says yes Arabic says no

Anyway the smart people at the Unicode consortium have been figuring this out for the last decade or so accompanied by a great deal of highly political debate and you dont have to worry about it Theyve figured it all out alreadyrdquo

de The absolute minimum every software developer absolutely positevely must know about Unicode and character sets (no excuses)

httpwwwjoelonsoftwarecomarticlesUnicodehtml

1189

Strings - codificaccedilotildees - UnicodeOs dados sobre um caractere Unicode satildeo importantes para suas buscas e identificaccedilatildeoIncluem nome e propriedades visiacutevel (printable) numeacuterico alfanumeacuterico maiuacutesculo minuacutesculo ldquoespaccedilordquo (blank) liacutengua matemaacutetico etc

ExsUnicode Character LATIN CAPITAL LETTER A (U+0041)Name LATIN CAPITAL LETTER ABlock Basic LatinCategory Letter Uppercase [Lu]Combine 0BIDI Left-to-Right [L]Mirror NIndex entries Latin Uppercase Alphabet Uppercase Alphabet Latin

Capital Letters LatinLower case U+0061Version Unicode 110 (June 1993)

Unicode Character INTEGRAL (U+222B)Name INTEGRALBlock Mathematical OperatorsCategory Symbol Math [Sm]Combine 0BIDI Other Neutrals [ON]Mirror YIndex entries Integral Signs INTEGRALSee Also latin small letter esh U+0283Version Unicode 110 (June 1993)

(resultados de httpwwwfileformatinfoinfounicodecharsearchhtm)

int

A

1289

Strings - codificaccedilotildees - Unicode

Unicode Character ANGSTROM SIGN (U+212B)Name ANGSTROM SIGNBlock Letterlike SymbolsCategory Letter Uppercase [Lu]Combine 0BIDI Left-to-Right [L]Decomposition LATIN CAPITAL LETTER A WITH RING ABOVE (U+00C5)Mirror NOld name ANGSTROM UNITIndex entries ANGSTROM SIGNLower case U+00E5Comments non SI length unit (=01 nm) named after A J ngstroumlm Å

Swedish physicist preferred representation is U+00C5Version Unicode 110 (June 1993)

Unicode Character GREEK SMALL LETTER ZETA (U+03B6)Name GREEK SMALL LETTER ZETABlock Greek and CopticCategory Letter Lowercase [Ll]Combine 0BIDI Left-to-Right [L]Mirror NUpper case U+0396Title case U+0396Version Unicode 110 (June 1993)

(resultados de httpwwwfileformatinfoinfounicodecharsearchhtm)

ζ

1389

Strings - codificaccedilotildees - UnicodeUnicode Character NABLA (U+2207)Name NABLABlock Mathematical OperatorsCategory Symbol Math [Sm]Combine 0BIDI Other Neutrals [ON]Mirror NIndex entries difference backward backward difference del NABLAComments backward difference gradient del used for Laplacian

operator (written with superscript 2)See Also white down-pointing triangle U+25BDVersion Unicode 110 (June 1993)

Java DatastringtoUpperCase() nablastringtoLowerCase() nablaCharacterUnicodeBlock MATHEMATICAL_OPERATORSCharactercharCount() 1CharactergetDirectionality() DIRECTIONALITY_OTHER_NEUTRALS [13]CharactergetNumericValue() -1CharactergetType() 25CharacterisDefined() YesCharacterisDigit() NoCharacterisIdentifierIgnorable() NoCharacterisLetter() NoCharacterisLetterOrDigit() NoCharacterisLowerCase() NoCharacterisWhitespace() No()

(resultados de httpwwwfileformatinfoinfounicodecharsearchhtm)

nabla

1489

Strings ndash Como codificar Unicode

Haacute vaacuterias formas Nenhuma simples como ASCII porque eacute necessaacuterio um nuacutemero muito maior de pontos de coacutedigo (haacute espaccedilo para 1 114 112 hoje haacute 109 449 alocados)

Apenas usar mais bytes com um nuacutemero constante por caractere exigiria pelo menos 21 bits por caractere (221 eacute 2 097 152)

Seria demais considerando que quase todos os caracteres escritos estatildeo entre os 128 do ASCII

Em quase todo texto 20 de cada 21 bits seriam 0

A maior parte das codificaccedilotildees usa formas mais elaboradas com um nuacutemero variaacutevel de bytes por caractere

Todas as codificaccedilotildees de uso comum tem o ASCII como subconjunto os 128 caracteres do ASCII satildeo codificados em forma idecircntica em ASCII e nas codificaccedilotildees usuais de Unicode

O que ajuda na compatibilidade software Unicode escrevendo texto que soacute conteacutem caracteres do ASCII produz texto idecircntico ao que seria produzido em ASCII

1589

Strings - codificaccedilotildees para Unicode

No mundo ocidental haacute apenas duas codificaccedilotildees de uso comum

UTF-8

ISO 8859-1 (tambeacutem chamado de Latin 1)

Por isso eacute necessaacuterio saber que codificaccedilatildeo usar ao trabalhar com Unicode

Alguns softwares formatos de arquivo informam a codificaccedilatildeo usada

Outros assumem que uma eacute usada (sem ter sido informada)

Outros tentam adivinhar quando natildeo satildeo informados qual eacute (esp navegadores)

Outros soacute perguntam para o usuaacuterio (esp editores de texto)

Sistemas operacionais oferecem variadas formas de digitar caracteres especiais

Pelos coacutedigos numeacutericos

Por programas seletores de caracteres Alguns seletores de caracteres (ex kcharselect do KDE) permitem fazer buscas pelo

nome ou propriedades

1689

Strings - Onde haacute suporte a Unicode em programaccedilatildeo

Linguagens variam muito

Desconhecem Unicode (soacute usam ASCII) C Fortran

Usam nativamente ASCII (inclusive no coacutedigo-fonte) mas tecircm tipos para strings Unicode e ou funccedilotildees para processar Unicode (em variados graus) C C++ IDL R

Usam nativamente Unicode (inclusive no coacutedigo-fonte) e tecircm bom suporte a strings Unicode Java Python Perl

Muitas vezes (mesmo quando Unicode pode ser usado em coacutedigo-fonte) caracteres Unicode satildeo escritos atraveacutes de ASCII com coacutedigos de escape para coacutedigos Unicode Exs

IDLgt p=plot(testtitle=Z(00C5222B))

C C++ Java Python u2207

ReferecircnciasCharacters vs byteshttpwwwtbrayorgongoingWhen200x20030426UTFThe absolute minimum every software developer absolutely positively must know about Unicode and character sets (no excuses)httpwwwjoelonsoftwarecomarticlesUnicodehtmlUnicode character searchhttpwwwfileformatinfoinfounicodecharsearchhtm

em IDL produz intÅ

produz nabla

1789

Strings - processamento baacutesico

Operaccedilotildees mais fundamentais que costumam ser suportadas em ldquotodasrdquo as linguagens bibliotecas padratildeo (exemplos usando sintaxe de IDL)

Atribuiccedilatildeo de literais

IDLgt a=some

IDLgt helpaA STRING = some

IDLgt printasome

Concatenaccedilatildeo

IDLgt b=a+ string

IDLgt helpbB STRING = some string

1889

Strings - processamento baacutesico

Valor loacutegico

String vazio (null string) eacute falso o resto eacute verdadeiro

IDLgt c=

IDLgt if c then printc is not empty string else printc is null string ()c is null string ()

IDLgt c=a

IDLgt if c then printc is not empty string else printc is null string ()c is not empty string

Espaccedilo natildeo eacute o mesmo que string vazio

IDLgt c=

IDLgt if c then printc is not empty string else printc is null string ()c is not empty string

1989

Strings - processamento baacutesico Comparaccedilotildees

IDLgt helpabA STRING = someB STRING = some string

IDLgt printb eq a 0

IDLgt printb gt a 1

IDLgt c=[ab9Some somesome other string]

IDLgt printc[sort(c)]format=(A) some9Somesomesome other stringsome string

IDLgt printa eq A 0

IDLgt printstrcmp(aAfold_case) 1

Comparaccedilotildees de ldquotamanhordquo (maior menor etc) satildeo comparaccedilotildees pela ordem de codificaccedilatildeo (ldquoalfabeacuteticardquo)

Algumas linguagens permitem definir o ordenamento (como considerar maiuacutesculasminuacuteculas letras com acentos nuacutemeros e siacutembolos) Exs Python C++ Java Perl

2089

Strings - processamento baacutesico Substrings

IDLgt printstrmid(abcdefg32)de

Algumas linguagens nativamente suportam iacutendices para indicar substrings C C++ Fortran Python Ex (Python)

gtgtgt s=abcdegtgtgt print(s[25])cde

Outras permitem que sejam definidos iacutendices por objetos strings

Busca de caracteres ou substrings

IDLgt printstrpos(abcdefgd) 3

IDLgt printstrpos(abcdefgj) -1

IDLgt printstrpos(abcdefgbc) 1

2189

Strings - processamento baacutesico

Outros

IDLgt printstrlen(1234567) 7

IDLgt printstrlen(1234567 ) 8

IDLgt printstrlen( 1234567 ) 9

IDLgt helpstrtrim( 1234567 2)ltExpressiongt STRING = 1234567

IDLgt helpstrtrim( 1234567 1)ltExpressiongt STRING = 1234567

IDLgt helpstrtrim( 1234567 0)ltExpressiongt STRING = 1234567

IDLgt printstrupcase(abcdEF)ABCDEF

IDLgt printstrlowcase(abcdEF)abcdef

Medindo quantos caracteres tem o string inclui espaccedilos em branco

Remoccedilatildeo dos brancos agrave esquerda agrave direita ou dos dois lados

2289

Strings - conversatildeo de outros tipos para strings

Eacute uma das operaccedilotildees mais comuns para gerar textos informativos e nomes escrever arquivos (aquivos texto discutidos adiante) etc

Eacute natildeo trivial jaacute que a conversatildeo pode ser feita de muitas formas diferentes

Para tipos fundamentais sempre haacute uma conversatildeo default tanto criando um string como usando algo tipo print (para strings terminal ou arquivos)

Todo comando tipo print (print printf sprintf string write etc) e toda escrita para arquivos texto eacute uma conversatildeo para string (terminais e arquivos texto soacute conteacutem strings)

2389

Strings - conversatildeo de outros tipos para strings

Exemplos de conversotildees (IDL)

IDLgt print[-109] -1 0 9

IDLgt print1d01B10 10000000 1 100000

IDLgt helpstring(1d01B10)ltExpressiongt STRING = 10000000 1 100000

IDLgt printfunitdblarr(343)

Tipos mais elaborados podem ou natildeo ter uma forma predefinida Com objetos eacute comum ser possiacutevel definir a conversatildeo (stringification) ao criar a classe

IDLgt h=hash(a109[01]18b)

IDLgt printh9 0 1a 100000180000 b

Strings

Coloca strings em um arquivo (adiante)

Strings criados por um meacutetodo da classe hash satildeo uma forma de representar o hash

2489

Strings - conversatildeo de outros tipos para strings

Algumas linguagens (Python IDL) tecircm mais de uma forma default de gerar strings Em Python uma forma eacute executaacutevel a outra eacute mais legiacutevel

In [30] x=arange(12)reshape(43)

In [31] print(x)[[ 0 1 2] [ 3 4 5] [ 6 7 8] [ 9 10 11]]

In [32] xOut[32]array([[ 0 1 2] [ 3 4 5] [ 6 7 8] [ 9 10 11]])

In [33] y=array([[ 0 1 2] [ 3 4 5] [ 6 7 8] [ 9 10 11]])

In [37] print(array_equal(xy))True

String mais legiacutevel

String executaacutevelPode ser usado para criar um objeto equivalente

2589

Strings ndash formataccedilatildeo expliacutecita

A formataccedilatildeo pode ser especificada se a conversatildeo default natildeo eacute adequada para definir a conversatildeo em um novo tipo

Cada linguagem tem sua sintaxe para formataccedilatildeo

Haacute dois estilos semelhantes em vaacuterias linguagens

Ambos os estilos satildeo sintaxes diferentes para a mesma ideacuteia Um coacutedigo especifica o tipo de dado sendo passado (inteiro real etc) e detalhes de como seraacute feito o string (largura do campo diacutegitos decimais alinhamento etc)

2689

Strings ndash formataccedilatildeo expliacutecita

Estilo Fortran

IDL

IDLgt print1d0+1d-9 10000000

IDLgt print1d0+1d-9format=(E1610)10000000010E+00

IDLgt printx=1d0+1d-9format=(A0F1613)X= 10000000010000

Estilo C (ldquoprintfrdquo)

IDL

IDLgt printformat=(x=1610e)1d0+1d-9x=10000000010e+00

Python

In [20] print(x=1610e (1e0+1e-9))x=10000000010e+00

Nenhum formato expliacutecito (default)

2789

Strings - formatos tipo Fortran

(apenas o principal ver documentaccedilatildeo para detalhes)

Ex (IDL)

IDLgt printx=1d0+1d-9format=(A0F1613)X= 10000000010000

Tambeacutem haacute modificadores para especificar alinhamento (-) se deve haver (ou ser suprimido) avanccedilo para a pŕoxima linha posiccedilatildeo dentro do campo etc

Coacutedigo Significado Exemplo(s)

A String (A) (10A)

I Inteiro decimal (I) (10I)(-2I)

B Inteiro binaacuterio (B) (10B)

Z Inteiro hexadecimal (Z) (10Z)

O Inteiro octal (O) (10O)

F Real ponto fixo (F)(F52)

E D Real ponto flutuante (E)(D1610)

G Real ponto fixo ou flutuante de acordo com o valor (G)(G10)

ldquordquo String literal (ldquox=rdquoI10)

X Caracteres em branco (A10XI)

2889

Strings - formatos tipo C (printf)(apenas o principal ver documentaccedilatildeo para detalhes)String com campos a serem substituiacutedos por valores (passados adiante) marcados por coacutedigos com

Ex (Python)In [20] print(x=1610e (1e0+1e-9))x=10000000010e+00

Haacute modificadores para especificar alinhamento como preencher o espaccedilo que sobra (espaccedilos zeros etc) para imprimir o sinal + etc

Coacutedigo Significado (tipo) Exemplo(s)

di Inteiro decimal (int) d 5d +05d

u Inteiro decimal sem sinal (unsigned int) u 7u

fF Real em ponto fixo (double float) f 136f

eE Real em ponto flutuante (double float) e 1610e

gG Real em ponto fixo ou flutuante decidido pelo valor (double float)

g 73G

xX Inteiro sem sinal hexadecimal (unsigned int) x 10X

o Inteiro sem sinal octal (unsigned int) o 5o

s String (string) s 10s

c Caractere (char) c

p Ponteiro - estilo C - (void ) p

literal

2989

Strings - conversatildeo de strings para outros tipos

Para gerar dados a partir de strings datas identificadores pedaccedilos de nomes valores numeacutericos armazenados em strings

Tambeacutem sempre haacute conversotildees default para os tipos baacutesicos onde o intepretador programa faz o possiacutevel para entender o string como um valor daquele tipo

Tipicamente eacute feito por casts (funccedilotildees de conversatildeo) reads (de strings ou arquivos texto (arquivos texto satildeo strings)) construtores de objetos ou implicitamente

3089

Strings - conversatildeo de strings para outros tipos - impliacutecitas

Exs (IDL)

IDLgt helpfix([17 17 171 -17 9 8])ltExpressiongt INT = Array[5]

IDLgt printfix([17 17 171 -17 9 8]) 17 17 17 -17 9

IDLgt printdouble([17 17 171 -17 9 8]) 17000000 17000000 17100000 -17000000 90000000

IDLgt readfunitabcd

IDLgt a=0d0IDLgt b=00IDLgt c=0IDLgt reads171d0 189d0 -9abcIDLgt helpabcA DOUBLE = 17100000B FLOAT = 189000C INT = -9

Converte o conteuacutedo do string para os tipos das variaacuteveis abcd (explicado adiante)

3189

Strings - conversatildeo de strings para outros tipos

Quando o default natildeo eacute suficiente (ou quando escrevendo o conversor em uma classe) costuma ser possiacutevel o fazer com formatos semelhantes aos formatos para gerar strings Exs (IDL)

IDLgt a=0d0IDLgt b=00IDLgt c=0IDLgt reads171d0 something 189d0-9abc READS Input conversion error Unit 0 File ltstdingt Error occurred at $MAIN$ Execution halted at $MAIN$

Natildeo funcionou porque sozinho ele natildeo conseguiu saber o que fazer com o ldquosomethingrdquo Usando um formato especiacutefico

IDLgt reads171d0 something 189d0-9 abcformat=(D6111XD611XI)

IDLgt helpabcA DOUBLE = 17100000B FLOAT = 189000C INT = -9

Exemplos mais complicados adiante (arquivos texto)

Variaacuteveis tecircm que ser definidas para informar para que tipo seraacute feita a conversatildeo default

3289

Strings - processamento natildeo baacutesicoOperaccedilotildees importantes e muito necessaacuterias mas que natildeo satildeo suportadas em todas as linguagens bibliotecas padratildeo

Testes (ex IDL)

IDLgt str=[afitsaFITSafitsaabfitsabcfits]

IDLgt printstrmatch(strfits) 1 0 0 1 1

IDLgt printstrmatch(strfitsfold_case) 1 1 0 1 1

IDLgt printstrmatch(strfitsfold_case) 1 1 1 1 1

IDLgt printstrmatch(strfits) 1 0 0 0 0

IDLgt printstrmatch(strfits) 0 0 0 1 0

3389

Strings - processamento natildeo baacutesico

Operaccedilotildees importantes e muito necessaacuterias mas que natildeo satildeo suportadas em todas as linguagens bibliotecas padratildeo

Separaccedilatildeo de partes (Ex IDL)

IDLgt printstrsplit(2011- 131 -extract)format=(A)2011131

Processamento de nomes de arquivos diretoacuterios (Ex IDL)

IDLgt printfile_dirname(some_directoryanother_directorysome_filetxt)some_directoryanother_directory

IDLgt printfile_basename(some_directoryanother_directorysome_filetxt)some_filetxt

IDLgt printfile_basename(another_directorysome_filetxttxt)+_alteredtxtsome_file_alteredtxt

3489

Strings - processamento natildeo baacutesico

Codificaccedilotildees (Ex Python 3)

gtgtgt s=infinite money infinNeuro sign

gtgtgt print(s)infinite money infineuro

gtgtgt print(ascii(s))infinite money u221eu20ac

gtgtgt print(sencode(utf-8))binfinite money xe2x88x9exe2x82xac

3589

Strings - processamento natildeo baacutesico

Perl eacute a linguagem mais avanccedilada para processamento de strings tem suporte nativo a muitas outras operaccedilotildees a semacircntica da linguagem eacute voltada principalmente para processar strings expressotildees regulares (de vaacuterios tipos) natildeo satildeo strings fazem parte da semacircntica

Ex (sem o objetivo que seja compreensiacutevel apenas para indicar o estilo)

Ler um arquivo contendo campos com nomes separados de valores por ()

temperature 10008name some modelx_dimension 100y_dimension 100z_dimension 50()

Armazenado-o em um mapa O que pode ser feito com apenas

While (ltgt) Loop over input linesPut pre-colon text into $1 post-colon into $2 if (m (S+) (+) ) Use $1 as key $2 as value $file_data$1 = $2

3689

Expressotildees regulares - definiccedilatildeo

Expressotildees regulares (regular expressions regex) satildeo a mais poderosa ferramenta para fazer buscas e separar substrings

Regex satildeo uma linguagem com o uacutenico objetivo de especificar propriedades de strings

Implementadas em graus diferentes em todas as linguagens modernas e modernizadas facilita encontrar uma expressatildeo jaacute pronta pois satildeo quase iguais em qualquer linguagem

Estatildeo na biblioteca padratildeo em IDL Python R Perl

Em C++ e Java em bibliotecas comuns (Boost Jregex)

Para que servem

Uma expressatildeo regular especifica propriedades de strings

O interpretador de expressotildees regulares (regular expression engine) recebe a expressatildeo e o string a analisar e determina se o string corresponde (matches) agrave expressatildeo regular

Em alguns casos o interpretador pode tambeacutem informar que parte(s) do string corresponde(m) a que parte(s) da expressatildeo regular e realizar processamentos com estas partes

3789

Expressotildees regulares ndash exemplos de usos Separar partes de strings

Encontrar linhas em arquivos que tenham nomes valores e comentaacuterios e separar estes pedaccedilos

Escalar com comentaacuterio

SLITPA = 351979 Slit position angle

Array 1D sem comentaacuterio (se extendendo por vaacuterias linhas)

BAND_BIN_CENTER = (03505400358950036629003732200379490 0387900104598)

Escalares em diferentes formatos

Total Mechanical Luminosity 15310E+03resources_usedwalltime=005603

Pedaccedilos de nomes

6063 17836E-20 2456 T FeIX((3Pe)3d(2PE)4p_1Po-3s2_3p6_1Se)

Datas separando ano mecircs dia hora (em vaacuterios formatos diferentes)

DATE-OBS= 2006-12-18 universal date of observationDATE_TIME = 2010-07-19T161032START_TIME = 2006-182T225102850Z

3889

Expressotildees regulares ndash exemplos de usos

Separar partes de strings Separar partes de nomes de arquivos (por significarem algo como identificar o

conteuacutedo)

specdec18s0041fitsscamdec18i0054fits15_7_mts_hmpixselh_mr15sav15_7_mts_hwpixselh_mr15sav16_3_mts_hwpixselb_mr16savreadmodel5l_-1_000010000_10000_r05_030_08196_0100000_005000000_1000eps

Determinar se um string eacute um nuacutemero (inteiro real fixo flutuante)

Encontrar identificadores Exs nomes de cataacutelogos endereccedilos HTTPFTP endereccedilos de email

Separar campos em arquivos sendo lidos onde as linhas natildeo tecircm a mesma formataccedilatildeo algumas linhas com colunas separadas por espaccedilos outras por tabs outras por

siacutembolos ignorando linhas de comentaacuterios e linhas vazias

3989

Expressotildees regulares - usoEx (IDL) encontrar nomes de arquivos com algumas propriedades

IDLgt printfilesformat=(A)CM_1477475933_1_viscubCM_1477476864_1_ircubCM_1477476864_1_irgcubCM_1477476864_1_viscubCM_1477477826_1_ircubCM_1477477826_1_irgcubCM_1477477826_1_viscubmosaic2cub

IDLgt printstregex(files+irgcubboolean) 0 0 1 0 0 1 0 0

A expressatildeo regular eacute +irgcub Especifica uma ou mais ocorrecircncias seguidas (+) de qualquer caractere () seguido de uma ocorrecircncia de irgcub (o ponto vem precedido do caractere de

escape () para ser entendido literalmente como um ponto e natildeo como o seu significado especial (qualquer caractere)

Esta aplicaccedilatildeo do interpretador (stregex) retorna um valor Booleano (verdadeirofalso) para cada elemento do string passado (files) que informa se aquele elemento correspondia agravequela expressatildeo regular

Este eacute um exemplo artificial Seria mais faacutecil ter usado strmatch(filesirgcub)

4089

Expressotildees regulares - uso

Em casos como este tipicamente o resultado de stregex seria usado como filtro para selecionar apenas os elementos do array de strings que satisfazem agravequela expressatildeo regular

IDLgt w=where(stregex(files+irgcubboolean)null)IDLgt printfiles[w]format=(A)CM_1477476864_1_irgcubCM_1477477826_1_irgcub

Ex (IDL) Determinar que strings conteacutem uma data no formato yyyy-mm-dd

IDLgt strs=[201002012010-02-012010-2-1aaaa-mm-ddT2010-02-01J]IDLgt printstregex(strs[0-9]4-[0-9]2-[0-9]2boolean) 0 1 0 0 1

Esta expressatildeo regular especifica quatro repeticcedilotildees (4) de diacutegitos (caracteres na faixa [0-9]) seguido de um (-) seguido de duas repeticcedilotildees (2) de dois diacutegitos ([0-9]) seguido de um (-) seguido de duas repeticcedilotildees (2) de dois diacutegitos ([0-9])

Uma expressatildeo regular apenas um pouco mais elaborada poderia corresponder aos 3 formatos de data no array acima E poderia se impedir que a uacuteltima (com outros caracteres antes e depois da data) seja aceita

4189

Expressotildees regulares - regras - caracteres ldquonormaisrdquo

Uma expressatildeo regular usa caracteres ldquonormaisrdquo e especiais para especificar o que se vai procurar na ordem em que aparecem na expressatildeo

Se um caractere eacute normal (natildeo eacute um dos especiais mostrados adiante) ele especifica uma ocorrecircncia daquele caractere

Ex J eacute uma expressatildeo regular que corresponde a qualquer string onde ocorra J Jaacute JA soacute corresponde a strings que tenham JA dentro

Exs (IDL)

IDLgt strs=[JJJJJJaJAjaJa]

IDLgt printstregex(strsJboolean) 1 1 1 0 1

IDLgt printstregex(strsJAboolean) 0 0 1 0 0

4289

Expressotildees regulares - regras - caracteres especiaisCaracteres especiais tecircm outros significados Para significar literalmente aquele caractere deve ser escapado (escaped) com um

Siacutembolo significado exemplo Corresponde(m) Escape o caractere seguinte deve ser interpretado

literalmente natildeo como especial aa

Qualquer caractere ab ajb aab abb jafbc

+ Uma ou mais repeticcedilotildees do que vem agrave esquerda a+b ab aab bab baabh

() Subexpressatildeo para agrupar termos afetados por um caractere especial (como parecircnteses em notaccedilatildeo matemaacutetica)

(ab)+c abc ababc dabababcg

Zero ou mais repeticcedilotildees dos termos agrave esquerda ab abbaab caaabg

Zero ou uma repeticcedilatildeo dos termos agrave esquerda ab b ab cabd cbd

| Alternaccedilatildeo qualquer um dos dois agrave esquerda a|bc ac bc jacd jbcd

n Exatamente n repeticcedilotildees do termo agrave esquerda a2b aab daaabg

n1n2 De n1 a n2 repeticcedilotildees do termo agrave esquerda a12b ab aab aaab gaaabbd

^ Acircncora (no comeccedilo) nada agrave esquerda ^ab ab abb

$ Acircncora (no fim) nada agrave direita ab$ abaab

[] Conjunto de valores (explicado adiante)

4389

Expressotildees regulares - regras - conjuntos de valores

[] denota um conjunto de valores que pode conter

Uma lista de coisas que devem corresponder Ex [abc] signfica qualquer caractere no conjunto abc Correspondem a esta

expressatildeo abcabha

Uma lista de coisas que natildeo podem corresponder [^abc] significa qualquer coisa que natildeo seja a b ou c Correspondem a esta

expressatildeo d jgs gg

Faixas de valores [0-9] signfica qualquer diacutegito [0-9a-zA-Z] significa qualquer diacutegito ou letra

Classes de valores como algumas faixas e outros conjuntos ocorrem com muita frequumlecircncia haacute nomes

especiais para eles Estes (em IDL) vecircm entre [] ex [[digit] significa o mesmo que [0-9]

4489

Expressotildees regulares - regras - classes de valores

Classe signficado

alnum Caracteres alfanumeacutericos 0-9a-zA-Z

alpha Caracteres alfabeacuteticos a-zA-Z

cntrl Caracteres de controle ASCII (natildeo visiacuteveis coacutedigos 1 a 31 e 127)

digit Diacutegitos (decimais) 0-9

graph Caracteres visiacuteveis ASCII 33 a 126 (natildeo inclui o espaccedilo)

lower Letras minuacutesculas a-z

print Caracteres ldquoimprimiacuteveisrdquo (visiacuteveis e o espaccedilo) ASCII 32 a 126

punct Caracteres de pontuaccedilatildeo $amprsquo()+-lt=gt[]^_lsquo|~

space Os caracteres ldquoem brancordquo (blank) espaccedilo tab tab vertical CR LF (ASCII 32 e 9-13)

upper Letras maiuacutesculas A-Z

xdigit Diacutegitos hexadecimais 0-9A-Fa-f

lt Comeccedilo de palavra (palavra definida como sequumlecircncia de coisas natildeo space)

gt Fim de palavra (palavra definida como sequumlecircncia de coisas natildeo space)

Estas satildeo apenas as principais Algumas implementaccedilotildees tecircm muito mais (em particular nas linguagens que usam Unicode nativamente)

4589

Expressotildees regulares - exemplos

Determinar se strings satildeo nuacutemeros (Ex IDL)

IDLgt str=[9-18 875-812-45913E9-98d7a188d032f5]

Inteiros

IDLgt intexpr=^[-+][0-9]+$

IDLgt printstregex(strintexprboolean) 1 1 0 0 0 0 0 0 0 0

Ponto flutuante

IDLgt fpexpr=^[-+](([0-9][0-9]+)|([0-9]+[0-9]))([eEdD][-+][0-9]+)$

IDLgt printstregex(strfpexprboolean) 1 1 0 1 1 1 1 1 0 0

Sinal opcional

1 ou mais diacutegitos

Sinal opcional

0 ou mais diacutegitos opcionalmente seguidos de um ponto e 1 ou mais diacutegitos

1 ou mais diacutegitos opcionalmente seguidos de um ponto e 0 ou mais diacutegitos

ou Expoente opcional letra do expoente seguida de sinal opcional seguido de um ou mais diacutegitos

4689

Expressotildees regulares ndash extraccedilatildeo

Interpretadores de expressotildees regulares costumam oferecer mais que apenas testar se um string corresponde a uma expressatildeo

Em geral tambeacutem podem retornar que parte(s) do string corresponde(m) agrave expressatildeo

Ex (IDL) Determinar se um string conteacutem uma data incluindo os formatos

IDLgt dates=[2011-01-312011 1 3120110131something done on y2011m1d31 with something]

E extrair a data de dentro do string

IDLgt expr=[0-9]4[0-9]12[0-9]12

(4 diacutegitos)(qualquer separador)(1 a 2 diacutegitos)(qualquer separador)(1 a 2 diacutegitos)

IDLgt printstregex(datesexprextract)format=(A)2011-01-312011 1 31201101312011m1d31

Como agora separar ano mecircs e dia Com uma busca e uma extraccedilatildeo para cada Poderia ser mais eacute mais faacutecil com uma uacutenica expressatildeo regular

4789

Expressotildees regulares - aleacutem de apenas testes

Tambeacutem podem retornar que parte(s) do string correspondem agrave expressatildeo toda e agraves suas subexpressotildees (partes da expressatildeo delimitadas por parecircnteses)

Ex (IDL) Separar pedaccedilos de datas Neste caso para a expressatildeo ficar menor assumindo um formato simples (yyyy-mm-ddThhmmssfff) Mas poderia ser um formato mais livre como no exemplo anterior

IDLgt str=Stuff observed on 2011-01-31T123924983 with some instrumentIDLgt expr=([0-9]4)-([0-9]2)-([0-9]2)T([0-9]2)([0-9]2)([0-9]2[0-9]3)

(quatro diacutegitos)-(2 diacutegitos)-(2 diacutegitos)T(2 diacutegitos)(2 diacutegitos)(2 diacutegitos3 diacutegitos)

IDLgt pieces=stregex(strexprextractsubexpr)IDLgt printpiecesformat=(A)2011-01-31T12392498320110131123924983IDLgt d=julday(pieces[2]pieces[3]pieces[1]pieces[4]pieces[5]pieces[6])IDLgt printdformat=(F166) 2455593027372

Expressatildeo inteiraPrimeira subexpressatildeoSegunda subexpressatildeoTerceira subexpressatildeoQuarta subexpressatildeoQuinta subexpressatildeoSexta subexpressatildeo

4889

Expressotildees regulares - referecircncias httpxkcdcom208

Viacutedeos do Software Carpentry

httpsoftware-carpentryorg4_0regexp

4989

Arquivos

Quase todo programa precisa armazenar dados em arquivos

Podem ser pequenos arquivos de paracircmetros ou enormes arquivos de dados produzidos ou a processar

Apesar do sugerido pela praacutetica comum arquivos texto natildeo satildeo sempre a melhor escolha para armazenar dados - e haacute muitas formas diferentes de os usar

Qual eacute a melhor escolha

Assim como para linguagens ou contecirciners natildeo existe ldquoo melhor formatordquo Cada um tem suas vantagens e desvantagens

Dados diferentes (mesmo se usados pelos mesmos programas) em geral se adequam melhor a formatos diferentes

5089

Arquivos - texto X binaacuterios

Em qualquer formato arquivos satildeo armazenados como diacutegitos binaacuterios

Mas haacute duas formas principais como eles podem ser codificados

Arquivos baseados em texto (text files)

Dados satildeo transformados em caracteres usando alguma formataccedilatildeo (mesmo se impliacutecita) e escritos com alguma codificaccedilatildeo de texto (comumente mas natildeo necessariamente ASCII)

Um arquivo texto eacute um ou mais strings As mesmas conversotildees tecircm que ser feitas depara outros tipos

Arquivos ldquobinaacuteriosrdquo (binary files)

Embora todo arquivo seja binaacuterio este nome costuma ser usado soacute para aqueles em que os dados natildeo estatildeo na forma de texto

Com frequumlecircncia (nem sempre) os dados satildeo gravados de forma idecircntica a como satildeo armazenados na memoacuteria

Muitos formatos usam uma mistura de partes em texto e partes binaacuterias

Um cabeccedilalho (header) de texto que daacute informaccedilotildees (metadados) sobre os dados armazenados na parte binaacuteria que vem depois

O cabeccedilalho conteacutem em especial informaccedilotildees sobre como ler os dados binaacuterios

5189

Arquivos - texto X binaacuterios

Vantagens de arquivos texto

Legiacuteveis por pessoas (human readable)

Podem ser auto-suficientes todo o necessaacuterio para os ler e entender o que conteacutem pode ser obtido olhando o arquivo

Satildeo os menos especiacuteficos a linguagens software normalmente satildeo escritos em ASCII ou Unicode e sempre haacute algum suporte a ler escrever texto em linguagens software

Haacute alguns formatos padratildeo para texto (exs CSV XML) que satildeo suportados em muitas plataformas diferentes

5289

Arquivos - texto X binaacuterios

Vantagens de arquivos binaacuterios

Em geral natildeo haacute conversotildees entre o os dados como armazenados na memoacuteria O que torna o armazenamento mais eficiente e sem alteraccedilotildees nos valores

A maior parte dos formatos padronizados eacute binaacuteria Exs FITS cube CDF NetCDF HDF HDF5 JPEG JPEG2000 TIFF GeoTIFF MPEG etc

Eacute mais comum que haja bibliotecas prontas (ateacute de alto niacutevel) para consulta leitura e gravaccedilatildeo

Os formatos melhor desenhados satildeo autodocumentados (em texto ou binaacuterio) para os ler natildeo eacute necessaacuterio conhecimento preacutevio sobre como os dados foram armazenados

Toda linguagem plataforma costuma ter seu formato binaacuterio mais nativo que costuma ser o mais faacutecil para leitura gravaccedilatildeo Em particular nas de alto niacutevel que tecircm formatos autodocumentados (especialmente

em IDL R Python Java)

Muitos formatos tecircm opccedilatildeo de compressatildeo dos dados

5389

Arquivos - proprietaacuterios X padratildeo

Independente da escolha texto binaacuterio programas devem escolher entre usar um formato proacuteprio ou um formato padronizado

A principal vantagem de formatos proacuteprios eacute que satildeo definidos da forma mais conveniente para a aplicaccedilatildeo que os usa simplificando leitura e gravaccedilatildeo e potencialmente otimizando recursos (acesso ao disco tamanho do arquivo etc)

A principal desvantagem de formatos proacuteprios eacute ser necessaacuterio escrever todo o coacutedigo para os ler gravar

Pode dar mais trabalho que usar um formato geneacuterico que natildeo seja exatamente o que melhor se encaixa na aplicaccedilatildeo

O coacutedigo para processar o formato em geral vai ser menos completo e conveniente de usar que o de um formato bem estabelecido usado por muitos outros em muitos ambientes

Cada novo software que for usar estes arquivos vai precisar compartilhar do mesmo coacutedigo ou precisar de coacutedigo novo (em particular se em outra linguagem) para ler gravar naquele formato

Eacute necessaacuterio documentar o formato e decidir sobre como ele seraacute definido

Se outros jaacute colocaram muito trabalho desenvolvendo bons formatos padratildeo bem suportados em muitos ambientes por que ter o trabalho de reinventar (e reprogramar redocumentar e retestar) a roda

5489

Arquivos - padrotildees comuns em astronomia (exs adiante)

Texto

CSV Comma-separated values - bem suportado por muitos softwares

ldquoColunas fixasrdquo Natildeo eacute um padratildeo bem definido mas eacute praacutetica comum para tabelas (2D)

XML Extensible Markup Language - O padratildeo texto mais flexiacutevel de grande uso em programaccedilatildeo geral para armazenar qualquer coisa com frequumlecircncia de forma hieraacuterquica Bem suportado por linguagens modernas (e modernizadas) e bibliotecas das principais

linguagens gerais Alta complexidade o torna trabalhoso de usar

5589

Arquivos - padrotildees comuns em astronomia (exs adiante)Binaacuterios

FITS Flexible Image Transport System - o mais comum para observaccedilotildees astronocircmicas Conteacutem os dados (em geral arrays 1D 2D ou 3D) e documentaccedilatildeo (nos cabeccedilalhos) sobre a origem e caracteriacutesticas dos dados Tambeacutem usado para armazenar tabelas de dados quaisquer mesmo que natildeo sejam observaccedilotildees (especialmente pelo STSCI) Variam muito em qualidade de documentaccedilatildeo

NetCDF Network Common Data Form - evoluccedilatildeo do CDF autodocumentado eacute comum e bem suportado para vaacuterios arrays de dados

HDF5 Hierarchical Data Format ndash autodocumentado comum e bem suportado permitindo aleacutem de simples arrays estruturas (eacute um formato hieraacuterquico)

Formatos de imagens JPEG JPEG2000 TIFF GeoTIFF etc - voltados para arrays 2D3D de inteiros ou (em alguns casos) reais com ou sem compressatildeo JPEG2000 tem caracteriacutesticas mais avanccediladas como imagens multiresoluccedilatildeo

Formatos vetoriais PS EPS DXF SHP SVG - variados niacuteveis de suporte a armazenamento de vetores e formas em 2D ou 3D

ISIS Cube semelhante em caracteriacutesticas ao FITS mais usado em sensoriamento remoto geociecircncias e ciecircncias planetaacuterias em geral para observaccedilotildees 1D 2D ou 3D

Formatos nativos de linguagens todo o trabalho de leitura e gravaccedilatildeo eacute feito automagicamente pela biblioteca padratildeo em IDL R Python Java

5689

Arquivos texto - newlines

Apesar do que possa parecer arquivos texto natildeo tecircm intrinsecamente vaacuterias linhas Arquivos texto satildeo soacute uma sequumlecircncia 1D de caracteres em alguma codificaccedilatildeo Separaccedilatildeo em linhas (equivalente a interpretar o arquivo como 2D em linhas e colunas) eacute

especificada por convenccedilotildees Natildeo haacute apenas uma convenccedilatildeo para o fim de linhas

A mais primitiva convenccedilatildeo eacute separaccedilatildeo nenhuma estipula-se que linhas tenham um nuacutemero fixo N de caracteres e cabe ao software que lecirc o arquivo entender que uma linha nova ocorre regularmente a cada N caracteres

Eacute a forma menos portaacutevel e mais inconveniente eacute necessaacuterio o conhecimento preacutevio (ou por inspeccedilatildeo do arquivo) de quantos caracteres haacute por linha

A maior parte dos editores de texto natildeo vai saber separar linhas desta forma (por falta deste conhecimento preacutevio) Exemplo (de um FITS real)

SIMPLE = T Fits standard BITPIX = 16 Bits per pixel NAXIS = 0 Number of axes EXTEND = T File may contain extensions

O que com as linhas quebradas nos lugares certos seria

SIMPLE = T Fits standard BITPIX = 16 Bits per pixel NAXIS = 0 Number of axes EXTEND = T File may contain extensions

5789

Arquivos texto - newlines

A forma mais comum de especificar linhas eacute com um marcador do final de linha (newline)

Eacute um caractere especial natildeo normalmente presente no texto que serve para marcar fim de linhas

Mas natildeo haacute soacute um padratildeo de newline Os mais comuns

LF (Line Feed ASCII 10) ndash Unix Linux Mac OS X

CR - (Carriage Return ASCII 13) - Mac OS lt10

CR+LF (CR seguido de LF) - Windows DOS

Eacute o motivo de o Notepad (Windows) natildeo entender as quebras de linha de arquivos escritos com o formato nativo de Linux o arquivo soacute tem LF enquanto o editor espera CR+LF

Alguns sistemas (strings em vaacuterias linguagens por exemplo) usam o coacutedigo de escape n para indicar newline que eacute codificado de acordo com o padratildeo sendo usado

Em geral bibliotecas de leitura e gravaccedilatildeo de arquivos usam (default pelo menos) o newline nativo do sistema em que satildeo usadas

Programas de conversatildeo entre os sistemas satildeo comuns (ex dos2unix)

O Wordpad identifica se for usado soacute LF e quebra as linhas de acordo

5889

Arquivos - texto - CSV

Comma-separated values

O formato mais padronizado para tabelas (arrays 2D) em texto (frequentemente mas natildeo necessariamente ASCII)

Bem suportado por bibliotecas padratildeo de linguagens e outros softwares (Excel Calc Origin Google Docs etc)

Conteacutem Linhas de cabeccedilalho (opcionais mas recomendadas) linhas com qualquer texto geral

descrevendo o arquivo e em geral uma linha de tiacutetulo para as colunas da tabela Uma (apenas uma) tabela onde todas as linhas tecircm o mesmo nuacutemero de colunas

Colunas separadas por viacutergulas (opcionalmente pode ser outro separador) Linhas terminadas por newline (qualquer que seja) Strings delimitados por ldquo ldquo

Ex

NAMECALMPOSFILNAMEECHLPOSDISPPOSTARGNAMEPOSDIRCLASSMJD-OBSITIMECOADDSdec18s00010NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001dec18s00020NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001dec18s00120NIRSPEC-5-AO635800364500itan140NIRSPEC-5-AOp2 TITAN5408763000001dec18s00140NIRSPEC-5-AO626300364500itan140NIRSPEC-5-AOp1 TITAN5408763000001dec18s00151NIRSPEC-5-AO626300364500itan140NIRSPEC-5-AOp1ARC5408764000001dec18s00160NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001

Natildeo eacute necessaacuterio que as colunas tenham largura constante

Cabeccedilalho

5989

Arquivos - texto - CSVHaacute amplo suporte a leitura e gravaccedilatildeo de CSV sem precisar recorrer a procedimentos de baixo niacutevel

Podem ser diretamente importados em Excel Calc Origin Google Docs ou lido facilmente com bibliotecas padratildeo comuns Ex (IDL)

IDLgt c=read_csv(filesearch_scamcsvheader=h)IDLgt printhNAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS

IDLgt helpc Structure ltc8bca508gt 11 tags length=5256 data length=5248 refs=1 FIELD01 STRING Array[41] FIELD02 LONG Array[41] FIELD03 STRING Array[41] FIELD04 DOUBLE Array[41] FIELD05 DOUBLE Array[41] FIELD06 STRING Array[41] FIELD07 STRING Array[41] FIELD08 STRING Array[41] FIELD09 STRING Array[41] FIELD10 DOUBLE Array[41] FIELD11 LONG Array[41]

IDLgt printcfield01[03]dec18s0001 dec18s0002 dec18s0003 dec18s0004

IDLgt printcfield03[03]NIRSPEC-5-AO NIRSPEC-5-AO NIRSPEC-5-AO NIRSPEC-5-AO

6089

Arquivos - texto - CSVEx (IDL) Criaccedilatildeo de um CSV com uma tabela de valores

Criaccedilatildeo de 3 arrays 1D (12 elementos) um para cada coluna

IDLgt x=dindgen(3)IDLgt y=dindgen(4)IDLgt xx=reform(rebin(x34)12)IDLgt yy=reform(rebin(reform(y14)34)12)IDLgt f=xx+yy10IDLgt helpxxyyfXX DOUBLE = Array[12]YY DOUBLE = Array[12]F DOUBLE = Array[12]

Escrita do arquivo

IDLgt write_csvexamplecsvxxyyfheader=[XYX+10Y]

ResultadoXYX+10Y000000000000000000000000100000000000000010000000200000000000000020000000000000001000000010000000100000001000000011000000()

6189

Arquivos - texto - ldquoColunas regularesrdquoFixed column width

Natildeo eacute exatamente um padratildeo Eacute uma praacutetica comum

Armazena uma tabela (array 2D) de forma regular simples de ser interpretada e lida

Costumam ter linha(s) de cabeccedilalho descrevendo o conteuacutedo do arquivo em geral com uma linha para os nomes das colunas

As demais linhas conteacutem os dados sempre ocupando a mesma largura por coluna e escritos no mesmo formato em cada coluna

Costumam ser simples de ler inclusive interativamente (exs Excel Calc Origin read_ascii)

Ex (IDL) Uma simples tabela soacute de nuacutemeros

wavl CH4=33 wavl CH4=25 wavl CH4=10 wavl CH4=08 wavl CH4=05 wavl CH4=026 wavl CH4=02 477330000 0090130 477330000 0091110 477330000 0089250 477330000 0087000 477330000 0087140 477330000 0090080 477330000 0088110 480040000 0090930 480040000 0091930 480040000 0090160 480040000 0087930 480040000 0088110 480040000 0090950 480040000 0089090 482750000 0091710 482750000 0092730 482750000 0091060 482750000 0088850 482750000 0089080 482750000 0091810 482750000 0090060 485450000 0092530 485450000 0093570 485450000 0092000 485450000 0089810 485450000 0090100 485450000 0092730 485450000 0091090

IDLgt a=read_ascii(specs_27s_ntxtdata_start=1header=header)IDLgt printheader wavl CH4=33 wavl CH4=25 wavl CH4=10 wavl CH4=08 wavl CH4=05 wavl CH4=026 wavl CH4=02 IDLgt helpa Structure ltd423c9a8gt 1 tags length=224 data length=224 refs=1 FIELD01 FLOAT Array[14 4]

6289

Arquivos - texto - ldquoColunas regularesrdquoJaacute um arquivo um pouco mais difiacutecil de ler

NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS dec18s0001 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0002 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0003 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 FLAT 5408757812500 460000 5 dec18s0004 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 DARK 5408757812500 460000 5

Por ter colunas de tipos diferentes (strings inteiros reais) natildeo eacute possiacutevel o ler em um simples array Mas eacute faacutecil o colocar em uma estrutura de arrays onde cada campo eacute uma coluna

Especificando interativamente como interpretar as linhasIDLgt templ=ascii_template(filesearch_scamtxt)

Nome do campo (default mostrado)

Tipo do campo (identificado automaticamente)

Posiccedilatildeo (caracter) do comeccedilo (identificada automaticamente)

Linha de exemplo para verificar as colunas

6389

Arquivos - texto - ldquoColunas regularesrdquoDepois de feito o template o arquivo pode ser lido com apenas

IDLgt a=read_ascii(filesearch_scamtxttemplate=templ)IDLgt helpa Structure ltd4ec4608gt 11 tags length=416 data length=416 refs=1 FIELD01 STRING Array[4] FIELD02 LONG Array[4] FIELD03 STRING Array[4] FIELD04 FLOAT Array[4] FIELD05 FLOAT Array[4] FIELD06 STRING Array[4] FIELD07 STRING Array[4] FIELD08 STRING Array[4] FIELD09 FLOAT Array[4] FIELD10 FLOAT Array[4] FIELD11 LONG Array[4]IDLgt printafield01dec18s0001 dec18s0002 dec18s0003 dec18s0004IDLgt printafield04 626300 626300 626300 626300

O template (uma estrutura contendo dados sobre como ler o arquivo) pode ser usado para outros arquivos no mesmo formato No lugar de ter sido criado interativamente poderia ter sido lido de algum arquivo Poderia ter especificado nomes para os campos que seriam mais amigaacuteveis que coias como FIELD11

6489

Arquivos - texto - XML

Extensible Markup Language

Admite grande flexibilidade e por isso pode ter alta complexidade

Valores satildeo colocados dentro de uma estrutura em hieraacuterquica (em uma aacutervore) com os noacutes identificados pelos seus nomes (chaves)

Largamente usado em muitas aacutereas para armazenar conjuntos arbitraacuterios de quaisquer estruturas de dados

A maioria das aplicaccedilotildees usa um formato que eacute um subconjunto do XML especificado por um Schema comumente em um arquivo XML DTD (Document Type Definition)

6589

Arquivos - texto ndash XML ndash exemplos de usos

Armazenamento de dados de aplicaccedilotildees web (comum para exportar importar dados MediaWiki DokuWiki WordPress ADS Lattes etc)

Documentos Office (docx pptx xlsx) OpenOffice (odt opd ods)

Como versotildees de outros formatos FITSML XDF

ldquoScientific Dataset XML NASAs Astronomical Data Center (ADC) sponsors a number of research projects that

use XML for scientific data representation The XML activities at the ADC are sponsored and supported by the NASA Office of Space Science Applied Information Systems Research Program (AISRP)rdquo - httpxmlcoverpagesorgnasa-adchtml

Astronomical Instrument Markup Language (AIML)

SVG ndash Scalable Vector Graphics

Muitas de outras aplicaccedilotildees listadas em httpxmlcoverpagesorgxmlhtmlapplications

6689

Arquivos - texto ndash XML - exemploltxml version=10 gtltDOCTYPE Xdmf SYSTEM Xdmfdtd []gtltXdmf xmlnsxi=httpwwww3org2001XInclude Version=20gt ltDomaingt lt-- Example of Basic Topologies --gt ltInformation Name=Descriptiongt Example of a Polyvertex Topology ltInformationgt ltGrid Name=Polyvertex GridType=Uniformgt ltTopology TopologyType=Polyvertex Dimensions=3 NodesPerElement=3gt ltDataItem Format=XML Dimensions=3 3 NumberType=Floatgt 0 1 2 4 5 6 8 9 10 ltDataItemgt ltTopologygt ltGeometry Type=XYZgt ltDataItem Format=XML Dimensions=4 4 3gt 00 00 00 10 00 00()Que mostra que a interpretaccedilatildeo (parsing) de XML eacute em geral complexa

6789

Arquivos - texto - XML

Haacute muitas bibliotecas de alto niacutevel para fazer o processamento (parsing) e entregar os dados em uma estrutura conveniente

A complexidade em processar XML estaacute em decidir o que fazer com os dados jaacute que os arquivos podem ser muito complexos

As APIs (Application Programming Interfaces) mais comuns para processar XML que satildeo implementadas em muitas linguagens

DOM (Document Object Model) ndash manteacutem todo o conteuacutedo do em uma estrutura de dados (em geral uma aacutervore) em uma variaacutevel (em geral um objeto) Esta pode ser consultada para obter os valores de interesse para os alterar e usada para escrever um arquivo

SAX (Simple API for XML) ndash Interpretador (parser) por objetos O usuaacuterio escreve uma classe herdando da classe SAX provendo os meacutetodos que vatildeo processar os campos agrave medida em que estes satildeo lidos

6889

Arquivos - binaacuterios - FITSFlexible Image Transport System

O formato mais comum para observaccedilotildees astronocircmicas Tambeacutem usado para armazenar quaisquer dados mesmo natildeo relacionados a observaccedilotildees (especialmente tabelas como eacute praacutetica do STSCI)

Conteacutem um (ou mais) cabeccedilalho(s) de texto com metadados (informaccedilotildees sobre os dados como caracteriacutesticas (necessaacuterias para os ler) origem condiccedilotildees em que foram obtidos processamento realizado etc)

SIMPLE = T image conforms to FITS standard BITPIX = 32 bits per data value NAXIS = 2 number of axes NAXIS1 = 1024 NAXIS2 = 1024 BSCALE = 100000 Scaling factor BZERO = 000000 Scaling zero-point TELESCOP= Keck II Telescope SLITNAME= 0041x226 Slit Name SLITPA = 351979 Slit position angle SLITX = 131500 X pixel of the center of the slit LST = 12010446 local apparent sidereal time (()

Depois do cabeccedilalho haacute uma (ou mais) seccedilatildeo(otildees) de dados binaacuterios Costuma(m) ser array(s) 1D (espectros) 2D (imagens) ou 3D (ldquocubos de dadosrdquo)

De inteiros ou reais inteiros satildeo comuns em contagens de instrumentos reais para valores derivados (fluxos intensidades etc)

6989

Arquivos - binaacuterios - FITSNormalmente FITS satildeo lidos escritos por bibliotecas prontas de (relativamente) alto niacutevel usuaacuterio natildeo tem que saber como os dados satildeo armazenados no arquivo nem como os ler escrever Ex (IDL com a biblioteca idlastro)

IDLgt fits_info2dspectrumfits2dspectrumfits has 3 extensionsPrimary header 288 recordsNo dataExtension 1 -- SCI Header 144 records IMAGE ( 1201 1201 )Extension 2 -- ERR Header 72 records IMAGE ( 1201 1201 )Extension 3 -- DQ Header 72 records IMAGE ( 1201 1201 )

IDLgt mydata=readfits(2dspectrumfitsexten_no=1myheader) READFITS Reading FITS extension of type IMAGE READFITS Now reading 1201 by 1201 array

IDLgt extastmyheadermyastIDLgt sz=size(mydatadimensions)IDLgt xy2ad[1sz[0]][1sz[1]]myastcorners_acorners_dIDLgt printcorners_aCorners of the data array from file 2dspectrumfits are at 14487480 33063480

IDLgt printcorners_d -00041264444 00041402222

Obteacutem os dados de coordenadas (WCS) do header

Coloca os dados no array (2D de floats) mydata e o header no array (1D de strings) myheader

Calcula as coordenadas das quinas da imagem atraveacutes do WCS

Provecirc informaccedilotildees sobre o arquivo

7089

Arquivos - binaacuterios - ISIS Cube

Formatos como FITS se adequam muito a ter uma interface de mais alto niacutevel por objetos

Tambeacutem para dados em tabelas FITS muito mais trabalhosos de ler em baixo niacutevel que se adequam muito mais a mapas ou estruturas

Exemplo (de um formato semelhante a FITS ISIS cube)

O objeto ao ser criado lecirc todo o arquivo

cube=pp_editablecube(CM_1553510065_1_ircub)

Meacutetodos fornecem os dados desejados para obter quando necessaacuterio os dados de interesse

Find out the names of the backplanesprintcubegetproperty(backnames)Get the start time of the cubeprintcubegetfromheader(START_TIME)2007-084T100057286Z

Valores no cabeccedilalho podem ser convenientemente fornecidos como um mapa

header=cubeheader_as_hash()printheader[START_TIME]2007-084T100057286Z

7189

Arquivos - binaacuterios ndash ISIS Cube

Os dados satildeo fornecidos como arraysMake a contour plot of the latitudesc=contour(cubegetsuffixbyname(LATITUDE))Get the band with wavelength nearest to 21 (in the units used in the cube)selband=cubegetbandbywavelength(21wavelengths=selwavs)

Interfaces por overload tornam o acesso ainda mais conveniente

selband=cube[21]

selwavs=cube[21]

Retorna um array com a banda de comprimento de onda mais proacuteximo de 21 (microm)

Retorna o comprimento de onda mais proacuteximo de 21 (microm) da banda retornada acima

7289

Arquivos - binaacuterios ndash ISIS Cube Alteraccedilotildees feitas ao conteuacutedo satildeo automaticamente refletidas em todos os

lugares (cabeccedilalho em particular) afetados mantendo o objeto vaacutelido que pode depois ser gravado em um novo arquivo

IDLgt printcubelinescubesamplescubebands 64 64 256

IDLgt helpcubecoreltExpressiongt FLOAT = Array[64 64 256]

IDLgt cubecore=dblarr(100100256)

A linha acima natildeo eacute uma atribuiccedilatildeo eacute uma invocaccedilatildeo de meacutetodo Eacute equivalente acubesetpropertycore=dblarr(100100256)

Eacute o trabalho da funccedilatildeo setproperty decidir se a propriedade passada (core) faz sentido e se fizer fazer todo o trabalho necessaacuterio a esta mudanccedila Para o usuaacuterio eacute tudo automaacutetico e os dados da classe satildeo vaacutelidos o tempo todo

IDLgt helpcubecoreltExpressiongt DOUBLE = Array[100 100 256]

IDLgt printcubelinescubesamplescubebands 100 100 256

IDLgt cubesaveCM_1553510065_1_ir_editedcub

7389

Arquivos - binaacuterios ndash NetCDF e HDF5

Network Common Data Form e Hierarchical Data Format

Os dois uacutenicos formatos bem estabelecidos para dados cientiacuteficos geneacutericos

Armazenam dados como vaacuterias variaacuteveis e seus metadados Para cada variaacutevel haacute (ou pode haver) os metadados

Nome Dimensotildees (do array) Unidades Comentaacuterios

Ambos permitem arrays multidimensionais

Apenas HDF5 permite estruturas (daiacute vem a hierarquia)

Autodocumentados qualquer software que saiba ler um destes formatos lecirc qualquer arquivo sem precisar de conhecimento preacutevio sobre como o arquivo foi gerado

Muito bem suportados em bibliotecas padratildeo e natildeo padratildeo em softwares interativos e visualizadores (inclusive plugins para navegadores)

httpwwwunidataucaredusoftwarenetcdf httpenwikipediaorgwikiHdf5

NetCDF eacute mais simples de usar por natildeo ter hierarquia dando menos trabalho para ler e escrever dados Se hierarquia natildeo eacute necessaacuteria eacute mais conveniente de usar que HDF5

7489

Arquivos - binaacuterios - NetCDF e HDF5Haacute tambeacutem o formato CDL uma versatildeo ASCII do NetCDF A biblioteca padratildeo do NetCDF inclui conversores entre estes formatos

$ ncdump -h refspec_g01_0ncnetcdf refspec_g01_0 dimensions nlay = 51 nwn = 400 nleg = 33 numu = 2 nlev = 52 nphi = 3 ngas = 2 nwnc = 1 scal = 1 v3 = 3 dnl = 1 nk = 1 tdisr = UNLIMITED (0 currently) na = 16

variables float alb(nwn) float z(nlay) float t(nlay) float p(nlay) float wl(nwn) float iof(nwn) float mtau(nwn) float htau(nwn) float hctaus(nwn) float gtau(nwn) float outcos(scal) float phi(nleg) float phic(scal) float umu(numu) float flux(v3 nwn nlev) float mix(nlay ngas) float c(nlay) float psat(nlay) float ga(nwnc) float wlc(nwnc) float inc(scal) int dm(scal) int ord(scal) float fbeam(scal) float wn(nwn) float tautot(nwn nlay) float htaus(nwn nlay) float htaux(nwn nlay) float taug(nwn nlay) float phase(nwn nlay nleg) float ssa(nwn nlay) float uu(nwn nphi nlev numu) float u0u(nwn nlev numu) float tray(nwn nlay) float gtauo(tdisr nwn nlay)

Haacute 14 variaacuteveis usadas como dimensotildees para as 35 variaacuteveis que satildeo arrays

Ex alb(nwn) indica que alb eacute um array 1D de nwn elementos

nwn estaacute armazenado como uma das dimensotildees e eacute 400 portanto alb tem 400 elementos

Parte do conteuacutedo de um arquivo NetCDF em formato CDL (gerado pelo programa ncdump)

7589

Arquivos - binaacuterios - NetCDF e HDF5Conteuacutedo daquele arquivo visualizado com o ncview (acompanha a biblioteca NetCDF padratildeo)

7689

Arquivos - binaacuterios - NetCDF e HDF5O conteuacutedo de todo o arquivo pode ser lido facilmente com as bibliotecas disponiacuteveis e armazenado em contecirciners convenientes Usando um objeto que gera um resultado um pouco mais conveniente

IDLgt h=pp_readncdf(refspec_g01_0nchash)IDLgt printhvar_dims ltObjHeapVar229(HASH)gtvars ltObjHeapVar152(HASH)gtdims ltObjHeapVar118(HASH)gt

IDLgt printh[vars]T 173203 175459 175848 176001 175975 Z 431869 418858 406067 393403 380464 FLUX 300660 145536 0705180 0341669 0165532 PHASE 100000 0779034 0660858 0542052 0449983 TAUTOT0694377 0693420 0693474 0693540 0693636()

IDLgt help(h[vars])[TAUTOT]ltExpressiongt FLOAT = Array[51 400]

IDLgt print(h[var_dims])[TAUTOT]NLAY NWN

IDLgt print(h[dims])[(h[var_dims])[TAUTOT]]NLAY 51NWN 400

7789

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5)

Visualizaccedilatildeo da variaacutevel selecionada

Metadados e alguns valores da variaacutevel selecionada

Variaacutevel a ser criada com o conteuacutedo desta variaacutevel do arquivo

Hierarquia das variaacuteveis do arquivo

7889

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5) Imported variable az

IDLgt helpaz Structure ltd5723f38gt 13 tags length=448 data length=444 refs=1 _NAME STRING az _ICONTYPE STRING binary _TYPE STRING DATASET _FILE STRING INTENSI_test_409OUTh5 _PATH STRING _DATA DOUBLE Array[38] _NDIMENSIONS LONG 1 _DIMENSIONS ULONG64 Array[1] _NELEMENTS ULONG64 38 _DATATYPE STRING H5T_FLOAT _STORAGESIZE ULONG 8 _PRECISION LONG 64 _SIGN STRING

IDLgt printaz_data 00000000 10000000 20000000 30000000 40000000 50000000 60000000 80000000 ()

7989

Arquivos - binaacuterios - imagens

JPEG JPEG200 TIFF GeoTIFF etc

Os formatos comuns de imagens satildeo bem suportados em muacuteltiplas plataformas para uso dentro de programas e interativamente

Alguns formatos tecircm opccedilatildeo de compressatildeo com perda eou sem perda

Armazenam imagens como arrays 2D ou 3D (3D frequumlentemente limitado a 3 ou 4 em uma das dimensotildees uma imagem em 3 ou 4 bandas) de inteiros ou (em alguns formatos) reais

Alguns formatos permitem armazenar metadados para caracterizar as imagens armazenadas

JPEG2000 e GeoTIFF (um subconjunto de TIFF) comuns em astronomia e aacutereas proacuteximas

8089

Arquivos - binaacuterios ndash imagens ndash exemplo (IDL)IDLgt printquery_tiff(issmap_2009tiffinfogeotiff=geo) 1

IDLgt helpinfo Structure ltd4eca4b8gt 18 tags length=144 data length=132 refs=1 CHANNELS LONG 4 DIMENSIONS LONG Array[2] IMAGE_INDEX LONG 0 NUM_IMAGES LONG 1 PIXEL_TYPE INT 1 TYPE STRING TIFF BITS_PER_SAMPLE LONG 8 POSITION FLOAT Array[2] RESOLUTION FLOAT Array[2] UNITS LONG 2 TILE_SIZE LONG Array[2] DESCRIPTION STRING ISS (2009) DATE_TIME STRING 20100218 012436()

IDLgt helpgeo Structure ltd4efa1b8gt 10 tags length=264 data length=262 refs=1 MODELPIXELSCALETAG DOUBLE Array[3] MODELTIEPOINTTAG DOUBLE Array[6 4] GEOGRAPHICTYPEGEOKEY INT 4035 GEOGSEMIMAJORAXISGEOKEY DOUBLE 25750000 GEOGSEMIMINORAXISGEOKEY DOUBLE 25750000()

IDLgt myimage=read_tiff(issmap_2009tiff) Lecirc a imagem para o array myimage

Obteacutem informaccedilotildees sobre o arquivo

8189

Arquivos - binaacuterios ndash formatos nativosLinguagens como IDL R Python Java tecircm seu formato nativo binaacuterio acessado em alto niacutevel Basta mandar salvar ler variaacuteveis no do arquivo a biblioteca padratildeo automagicamente faz todo o trabalho de decidir como gravar ler os dados

Conveniente de usar na proacutepria linguagem Mas raramente existem bibliotecas para ler gravar o formato nativo de uma linguagem a partir de outra Ex (IDL)

IDLgt savefile=2dspectrumsavmydatamyheadercorners_dcorners_averbosecompress SAVE Portable (XDR) compressed SAVERESTORE file SAVE Saved variable MYDATA SAVE Saved variable MYHEADER()

Pode ser lido com apenas (haacute formas mais elaboradas)

IDLgt restore2dspectrumsavverbose RESTORE Portable (XDR) compressed SAVERESTORE file RESTORE Save file written by ltunknowngtltunknowngt Thu Jan 27 191422 2011 RESTORE IDL version 801 (linux x86_64) RESTORE Restored variable MYDATA RESTORE Restored variable MYHEADER()

IDLgt helpmydatamyheadercorners_dcorners_aMYDATA FLOAT = Array[1201 1201]MYHEADER STRING = Array[144]()

8289

Arquivos - processamento em baixo niacutevel

Nem sempre um formato padratildeo eacute a melhor escolha para o problema

Nem sempre haacute escolha (pode-se ter que trabalhar com arquivos que jaacute foram escritos em algum formato proprietaacuterio)

Agraves vezes o formato eacute padratildeo mas natildeo haacute bom suporte a ele disponiacutevel

Em todos estes casos eacute necessaacuterio escrever rotinas em baixo niacutevel que vatildeo ler processar diretamente o conteuacutedo do arquivo

Preferencialmente criando interfaces de alto niacutevel para o programa que vai as usar

8389

Arquivos - processamento em baixo niacutevel - texto

Tomando o exemplo anterior onde as colunas eram de diferentes tipos

NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS dec18s0001 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0002 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0003 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 FLAT 5408757812500 460000 5 dec18s0004 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 DARK 5408757812500 460000 5

A forma mais simples de o ler diretamente eacute definir uma estrutura para receber cada linha e um array destas estruturas para receber todo o arquivo Ex (IDL)

IDLgt record=namecalmpos0filnameechlpos0d0disppos0d0targnameposdirclassmjd_obsitime0d0coadds0IDLgt nlines=file_lines(filesearch_scamtxt)IDLgt mydata=replicate(recordnlines-1)IDLgt header=

Depois de definidas as variaacuteveis que vatildeo receber os dados o arquivo pode ser lido

IDLgt openrunitfilesearch_scamtxtget_lunIDLgt readfunitheaderIDLgt readfunitmydataformat=(A14I8A15F104F104A18A19A15F158F105I15)IDLgt free_lununit

A gravaccedilatildeo de um arquivo texto poderia ser feita de forma semelhante apenas trocando openr por openw (abrir o arquivo para gravaccedilatildeo natildeo leitura) e readf por printf

O arquivo eacute aberto em uma unidade (unit) usada para especificar de onde eacute feita a leitura

Ao final o arquivo eacute fechado

8489

Arquivos - processamento em baixo niacutevel - texto

O que resulta em

IDLgt printheader NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS

IDLgt helpmydataMYDATA STRUCT = -gt ltAnonymousgt Array[4]

IDLgt helpmydata[0] Structure ltd5e38f68gt 11 tags length=136 data length=124 refs=3 NAME STRING dec18s0001 CALMPOS INT 0 FILNAME STRING NIRSPEC-5-AO ECHLPOS DOUBLE 62630000 DISPPOS DOUBLE 36450000 TARGNAME STRING HD85258 POSDIR STRING NIRSPEC-5-AOp1 CLASS STRING STAR MJD_OBS STRING 54087574 ITIME DOUBLE 10000000 COADDS INT 1

Este caso eacute mais complicado que os mais comuns por haver colunas de strings

Se todas fossem de nuacutemeros natildeo teria sido necessaacuterio especificar o formato explicitamente As colunas teriam sido adivinhadas pela biblioteca que lecirc o arquivo Poderia ter sido lido escrito soacute com um array de nuacutemeros sem estruturas

8589

Arquivos - processamento em baixo niacutevel - binaacuterio

Formatos binaacuterios podem ser definidos de qualquer forma O arquivo eacute apenas um conjunto de bytes Cabe ao software saber como os interpretar

Uma escolha comum para que sejam autodocumentados eacute incluir um cabeccedilalho de texto informando as caracteriacutesticas dos dados necessaacuterias para os ler

Ex (IDL) criar um arquivo que armazene um array de doubles com um cabeccedilalho informando as dimensotildees para que o programa que o lecirc saiba como ler os dados

Inventa dados e abre o arquivo

IDLgt data_to_write=dindgen(34)IDLgt openwunitbinary_exampledatget_lun

Escreve as dimensotildees como texto

IDLgt printfunitdimensions of the double array stored belowIDLgt printfunitsize(data_to_writedimensions)

Escreve os dados binaacuterios

IDLgt writeuunitdata_to_write

Fecha o arquivo

IDLgt free_lununit

Escreve em binaacuterio (write unformatted)

8689

Arquivos - processamento em baixo niacutevel - binaacuterio

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

dimensions of the double array stored below 3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

8789

Arquivos - processamento em baixo niacutevel - binaacuterioA leitura deste arquivo eacute igualmente simples

IDLgt header=IDLgt dims=[00]IDLgt openrunitbinary_exampledatget_lun

Lecirc as dimensotildees (armazenadas como texto)

IDLgt readfunitheaderIDLgt readfunitdims

Lecirc a parte binaacuteria depois de saber as dimensotildees

IDLgt data_read=dblarr(dims)IDLgt readuunitdata_read

Fecha o arquivo

IDLgt free_lununit

Verifica que os dados foram gravados e lidos corretamente

IDLgt printarray_equal(data_to_writedata_read) 1

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Lecirc dados binaacuterios (read unformatted)

8889

Sumaacuterio

5 ndash Slides em httpwwwppenteadonetpeapea04_strings_iopdf Strings Expressotildees regulares Arquivos

httpwwwppenteadonetpea

8989

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89

Strings - implementaccedilotildees

Linguagens variam muito na forma como implementam seu(s) tipo(s) para strings

Haacute strings dinacircmicos e estaacuteticos

Strings estaacuteticos tecircm um nuacutemero (ou nuacutemero maacuteximo) predefinido de caracteres que natildeo pode ser mudado Podem ser pensados como arrays estaacuteticos 1D onde cada elemento eacute um caractere

(eacute como agraves vezes satildeo implementados) Tentar acessar caracteres aleacutem do limite pode resultar em apenas truncamento ou

ateacute no encerramento do programa por violaccedilotildees de memoacuteria Exs C Fortran

Strings dinacircmicos onde o nuacutemero de caracteres pode ser alterado a qualquer momento sem limites preestabelecidos Podem ser pensados como listas homogecircneas onde cada elemento eacute um caractere Exs C++ Java IDL R Python Perl

Algumas linguagens tecircm tipos diferentes para caracteres individuais (character) e strings (string de zero ou mais caracteres) C C++ Java

Algumas linguagens tecircm mais de um tipo variando em funcionalidade

Perl eacute a linguagem com melhor suporte a strings principalmente processamento de expressotildees regulares (adiante)

589

Strings - codificaccedilotildees

Do que se constitui um string

Caracteres satildeo um conceito de alto niacutevel e computadores soacute armazenam diacutegitos binaacuterios

Nada faz com que uma variaacutevel ou arquivo ldquosejamrdquo intrinsecamente caracteres

A correspondecircncia eacute determinada pelo uso de codificaccedilotildees da mesma forma que inteiros e reais satildeo tambeacutem codificados de alguma forma

A maior parte das linguagens assume uma codificaccedilatildeo (ou usam um default) algumas tecircm tipos diferentes para diferentes codificaccedilotildees e as que usam objetos podem ter objetos strings com codificaccedilatildeo variaacutevel

Antigamente a codificaccedilatildeo era sempre a mesma ASCII (American Standard Code for Information Interchange)

1 byte (8 bits) por caractere - 28 (256) valores diferentes

Uma tabela define que caractere eacute codificado por que nuacutemero na faixa 0-127

689

Strings - codificaccedilotildees - ASCII789

Strings - codificaccedilotildees - ASCII

Nem todos os caracteres ASCII satildeo visiacuteveis (printable) Alguns satildeo espaccedilos em branco (espaccedilos tabs etc) outros satildeo alguma forma de caractere de controle (CR LF etc)

O zero costuma ser reservado para controle significando um string vazio (se soacute tem 0) ou em algumas codificaccedilotildees (C) o fim do string

Os caracteres codificados por valores 128-255 natildeo satildeo parte do padratildeo ASCII A associaccedilatildeo varia de acordo com a codificaccedilatildeo escolhida

Sistemas que usam ASCII satildeo os mais simples caracteres sempre tecircm o mesmo tamanho em bytes (1 byte) Satildeo facilmente lidos processados e convertidos de para nuacutemeros

ASCII eacute a codificaccedilatildeo de texto mais comum mas

Ao contraacuterio do que muitos assumem ASCII natildeo eacute a uacutenica forma de codificar texto

ASCII natildeo eacute sinocircnimo de arquivo texto

Em anos recentes Unicode em suas vaacuterias formas (adiante) tem se tornado gradativamente mais comum

889

Strings - codificaccedilotildees - ASCII

Por que ASCII natildeo eacute sempre usado

Porque eacute insuficiente Natildeo conteacutem por exemplo

Caracteres modificados (com acentos cedilha)

Siacutembolos matemaacuteticos (aleacutem dos muito baacutesicos + - ^ gt lt = ) Ex part sum int plusmn ge le times infin neℝ ℤ forall exist ∮ ≌ nabla

Siacutembolos fiacutesicos Ex micro Å oplus

Letras gregas

Outros siacutembolos Ex rarr harr euro ordf deg pound yen iquest iexcl

Caracteres de outras liacutenguas (inclusive de muitos siacutembolos como a vaacuterias formas usadas em chinecircs e japonecircs)

989

Strings - codificaccedilotildees - Unicode

O que usar para natildeo ter as limitaccedilotildees do ASCII

O uacutenico padratildeo de uso dominante hoje eacute o Unicode

Desenvolvido para ser um padratildeo universal contendo ldquotodosrdquo os caracteres de ldquotodasrdquo as escritas e dados sobre os caracteres

Natildeo eacute imutaacutevel adiccedilotildees satildeo decididas pelo Unicode Consortium (httpwwwunicodeorg)

1089

Strings - codificaccedilotildees - Unicode

Haacute duas partes no Unicode o cataacutelogo (uacutenico) e as codificaccedilotildees (vaacuterias)

O cataacutelogo eacute definido independente de codificaccedilotildees Pode ser visto como um mapa onde os pontos de coacutedigo (codepoints) satildeo as

chaves e os valores satildeo os dados sobre aquele caractere

ldquoIn Unicode the letter A is a platonic ideal Its just floating in heaven A

This platonic A is different than B and different from a but the same as A and A and A

The idea that A in a Times New Roman font is the same character as the A in a Helvetica font but different from a in lower case does not seem very controversial but in some languages just figuring out what a letter is can cause controversy

Is the German letter szlig a real letter or just a fancy way of writing ss If a letters shape changes at the end of the word is that a different letter Hebrew says yes Arabic says no

Anyway the smart people at the Unicode consortium have been figuring this out for the last decade or so accompanied by a great deal of highly political debate and you dont have to worry about it Theyve figured it all out alreadyrdquo

de The absolute minimum every software developer absolutely positevely must know about Unicode and character sets (no excuses)

httpwwwjoelonsoftwarecomarticlesUnicodehtml

1189

Strings - codificaccedilotildees - UnicodeOs dados sobre um caractere Unicode satildeo importantes para suas buscas e identificaccedilatildeoIncluem nome e propriedades visiacutevel (printable) numeacuterico alfanumeacuterico maiuacutesculo minuacutesculo ldquoespaccedilordquo (blank) liacutengua matemaacutetico etc

ExsUnicode Character LATIN CAPITAL LETTER A (U+0041)Name LATIN CAPITAL LETTER ABlock Basic LatinCategory Letter Uppercase [Lu]Combine 0BIDI Left-to-Right [L]Mirror NIndex entries Latin Uppercase Alphabet Uppercase Alphabet Latin

Capital Letters LatinLower case U+0061Version Unicode 110 (June 1993)

Unicode Character INTEGRAL (U+222B)Name INTEGRALBlock Mathematical OperatorsCategory Symbol Math [Sm]Combine 0BIDI Other Neutrals [ON]Mirror YIndex entries Integral Signs INTEGRALSee Also latin small letter esh U+0283Version Unicode 110 (June 1993)

(resultados de httpwwwfileformatinfoinfounicodecharsearchhtm)

int

A

1289

Strings - codificaccedilotildees - Unicode

Unicode Character ANGSTROM SIGN (U+212B)Name ANGSTROM SIGNBlock Letterlike SymbolsCategory Letter Uppercase [Lu]Combine 0BIDI Left-to-Right [L]Decomposition LATIN CAPITAL LETTER A WITH RING ABOVE (U+00C5)Mirror NOld name ANGSTROM UNITIndex entries ANGSTROM SIGNLower case U+00E5Comments non SI length unit (=01 nm) named after A J ngstroumlm Å

Swedish physicist preferred representation is U+00C5Version Unicode 110 (June 1993)

Unicode Character GREEK SMALL LETTER ZETA (U+03B6)Name GREEK SMALL LETTER ZETABlock Greek and CopticCategory Letter Lowercase [Ll]Combine 0BIDI Left-to-Right [L]Mirror NUpper case U+0396Title case U+0396Version Unicode 110 (June 1993)

(resultados de httpwwwfileformatinfoinfounicodecharsearchhtm)

ζ

1389

Strings - codificaccedilotildees - UnicodeUnicode Character NABLA (U+2207)Name NABLABlock Mathematical OperatorsCategory Symbol Math [Sm]Combine 0BIDI Other Neutrals [ON]Mirror NIndex entries difference backward backward difference del NABLAComments backward difference gradient del used for Laplacian

operator (written with superscript 2)See Also white down-pointing triangle U+25BDVersion Unicode 110 (June 1993)

Java DatastringtoUpperCase() nablastringtoLowerCase() nablaCharacterUnicodeBlock MATHEMATICAL_OPERATORSCharactercharCount() 1CharactergetDirectionality() DIRECTIONALITY_OTHER_NEUTRALS [13]CharactergetNumericValue() -1CharactergetType() 25CharacterisDefined() YesCharacterisDigit() NoCharacterisIdentifierIgnorable() NoCharacterisLetter() NoCharacterisLetterOrDigit() NoCharacterisLowerCase() NoCharacterisWhitespace() No()

(resultados de httpwwwfileformatinfoinfounicodecharsearchhtm)

nabla

1489

Strings ndash Como codificar Unicode

Haacute vaacuterias formas Nenhuma simples como ASCII porque eacute necessaacuterio um nuacutemero muito maior de pontos de coacutedigo (haacute espaccedilo para 1 114 112 hoje haacute 109 449 alocados)

Apenas usar mais bytes com um nuacutemero constante por caractere exigiria pelo menos 21 bits por caractere (221 eacute 2 097 152)

Seria demais considerando que quase todos os caracteres escritos estatildeo entre os 128 do ASCII

Em quase todo texto 20 de cada 21 bits seriam 0

A maior parte das codificaccedilotildees usa formas mais elaboradas com um nuacutemero variaacutevel de bytes por caractere

Todas as codificaccedilotildees de uso comum tem o ASCII como subconjunto os 128 caracteres do ASCII satildeo codificados em forma idecircntica em ASCII e nas codificaccedilotildees usuais de Unicode

O que ajuda na compatibilidade software Unicode escrevendo texto que soacute conteacutem caracteres do ASCII produz texto idecircntico ao que seria produzido em ASCII

1589

Strings - codificaccedilotildees para Unicode

No mundo ocidental haacute apenas duas codificaccedilotildees de uso comum

UTF-8

ISO 8859-1 (tambeacutem chamado de Latin 1)

Por isso eacute necessaacuterio saber que codificaccedilatildeo usar ao trabalhar com Unicode

Alguns softwares formatos de arquivo informam a codificaccedilatildeo usada

Outros assumem que uma eacute usada (sem ter sido informada)

Outros tentam adivinhar quando natildeo satildeo informados qual eacute (esp navegadores)

Outros soacute perguntam para o usuaacuterio (esp editores de texto)

Sistemas operacionais oferecem variadas formas de digitar caracteres especiais

Pelos coacutedigos numeacutericos

Por programas seletores de caracteres Alguns seletores de caracteres (ex kcharselect do KDE) permitem fazer buscas pelo

nome ou propriedades

1689

Strings - Onde haacute suporte a Unicode em programaccedilatildeo

Linguagens variam muito

Desconhecem Unicode (soacute usam ASCII) C Fortran

Usam nativamente ASCII (inclusive no coacutedigo-fonte) mas tecircm tipos para strings Unicode e ou funccedilotildees para processar Unicode (em variados graus) C C++ IDL R

Usam nativamente Unicode (inclusive no coacutedigo-fonte) e tecircm bom suporte a strings Unicode Java Python Perl

Muitas vezes (mesmo quando Unicode pode ser usado em coacutedigo-fonte) caracteres Unicode satildeo escritos atraveacutes de ASCII com coacutedigos de escape para coacutedigos Unicode Exs

IDLgt p=plot(testtitle=Z(00C5222B))

C C++ Java Python u2207

ReferecircnciasCharacters vs byteshttpwwwtbrayorgongoingWhen200x20030426UTFThe absolute minimum every software developer absolutely positively must know about Unicode and character sets (no excuses)httpwwwjoelonsoftwarecomarticlesUnicodehtmlUnicode character searchhttpwwwfileformatinfoinfounicodecharsearchhtm

em IDL produz intÅ

produz nabla

1789

Strings - processamento baacutesico

Operaccedilotildees mais fundamentais que costumam ser suportadas em ldquotodasrdquo as linguagens bibliotecas padratildeo (exemplos usando sintaxe de IDL)

Atribuiccedilatildeo de literais

IDLgt a=some

IDLgt helpaA STRING = some

IDLgt printasome

Concatenaccedilatildeo

IDLgt b=a+ string

IDLgt helpbB STRING = some string

1889

Strings - processamento baacutesico

Valor loacutegico

String vazio (null string) eacute falso o resto eacute verdadeiro

IDLgt c=

IDLgt if c then printc is not empty string else printc is null string ()c is null string ()

IDLgt c=a

IDLgt if c then printc is not empty string else printc is null string ()c is not empty string

Espaccedilo natildeo eacute o mesmo que string vazio

IDLgt c=

IDLgt if c then printc is not empty string else printc is null string ()c is not empty string

1989

Strings - processamento baacutesico Comparaccedilotildees

IDLgt helpabA STRING = someB STRING = some string

IDLgt printb eq a 0

IDLgt printb gt a 1

IDLgt c=[ab9Some somesome other string]

IDLgt printc[sort(c)]format=(A) some9Somesomesome other stringsome string

IDLgt printa eq A 0

IDLgt printstrcmp(aAfold_case) 1

Comparaccedilotildees de ldquotamanhordquo (maior menor etc) satildeo comparaccedilotildees pela ordem de codificaccedilatildeo (ldquoalfabeacuteticardquo)

Algumas linguagens permitem definir o ordenamento (como considerar maiuacutesculasminuacuteculas letras com acentos nuacutemeros e siacutembolos) Exs Python C++ Java Perl

2089

Strings - processamento baacutesico Substrings

IDLgt printstrmid(abcdefg32)de

Algumas linguagens nativamente suportam iacutendices para indicar substrings C C++ Fortran Python Ex (Python)

gtgtgt s=abcdegtgtgt print(s[25])cde

Outras permitem que sejam definidos iacutendices por objetos strings

Busca de caracteres ou substrings

IDLgt printstrpos(abcdefgd) 3

IDLgt printstrpos(abcdefgj) -1

IDLgt printstrpos(abcdefgbc) 1

2189

Strings - processamento baacutesico

Outros

IDLgt printstrlen(1234567) 7

IDLgt printstrlen(1234567 ) 8

IDLgt printstrlen( 1234567 ) 9

IDLgt helpstrtrim( 1234567 2)ltExpressiongt STRING = 1234567

IDLgt helpstrtrim( 1234567 1)ltExpressiongt STRING = 1234567

IDLgt helpstrtrim( 1234567 0)ltExpressiongt STRING = 1234567

IDLgt printstrupcase(abcdEF)ABCDEF

IDLgt printstrlowcase(abcdEF)abcdef

Medindo quantos caracteres tem o string inclui espaccedilos em branco

Remoccedilatildeo dos brancos agrave esquerda agrave direita ou dos dois lados

2289

Strings - conversatildeo de outros tipos para strings

Eacute uma das operaccedilotildees mais comuns para gerar textos informativos e nomes escrever arquivos (aquivos texto discutidos adiante) etc

Eacute natildeo trivial jaacute que a conversatildeo pode ser feita de muitas formas diferentes

Para tipos fundamentais sempre haacute uma conversatildeo default tanto criando um string como usando algo tipo print (para strings terminal ou arquivos)

Todo comando tipo print (print printf sprintf string write etc) e toda escrita para arquivos texto eacute uma conversatildeo para string (terminais e arquivos texto soacute conteacutem strings)

2389

Strings - conversatildeo de outros tipos para strings

Exemplos de conversotildees (IDL)

IDLgt print[-109] -1 0 9

IDLgt print1d01B10 10000000 1 100000

IDLgt helpstring(1d01B10)ltExpressiongt STRING = 10000000 1 100000

IDLgt printfunitdblarr(343)

Tipos mais elaborados podem ou natildeo ter uma forma predefinida Com objetos eacute comum ser possiacutevel definir a conversatildeo (stringification) ao criar a classe

IDLgt h=hash(a109[01]18b)

IDLgt printh9 0 1a 100000180000 b

Strings

Coloca strings em um arquivo (adiante)

Strings criados por um meacutetodo da classe hash satildeo uma forma de representar o hash

2489

Strings - conversatildeo de outros tipos para strings

Algumas linguagens (Python IDL) tecircm mais de uma forma default de gerar strings Em Python uma forma eacute executaacutevel a outra eacute mais legiacutevel

In [30] x=arange(12)reshape(43)

In [31] print(x)[[ 0 1 2] [ 3 4 5] [ 6 7 8] [ 9 10 11]]

In [32] xOut[32]array([[ 0 1 2] [ 3 4 5] [ 6 7 8] [ 9 10 11]])

In [33] y=array([[ 0 1 2] [ 3 4 5] [ 6 7 8] [ 9 10 11]])

In [37] print(array_equal(xy))True

String mais legiacutevel

String executaacutevelPode ser usado para criar um objeto equivalente

2589

Strings ndash formataccedilatildeo expliacutecita

A formataccedilatildeo pode ser especificada se a conversatildeo default natildeo eacute adequada para definir a conversatildeo em um novo tipo

Cada linguagem tem sua sintaxe para formataccedilatildeo

Haacute dois estilos semelhantes em vaacuterias linguagens

Ambos os estilos satildeo sintaxes diferentes para a mesma ideacuteia Um coacutedigo especifica o tipo de dado sendo passado (inteiro real etc) e detalhes de como seraacute feito o string (largura do campo diacutegitos decimais alinhamento etc)

2689

Strings ndash formataccedilatildeo expliacutecita

Estilo Fortran

IDL

IDLgt print1d0+1d-9 10000000

IDLgt print1d0+1d-9format=(E1610)10000000010E+00

IDLgt printx=1d0+1d-9format=(A0F1613)X= 10000000010000

Estilo C (ldquoprintfrdquo)

IDL

IDLgt printformat=(x=1610e)1d0+1d-9x=10000000010e+00

Python

In [20] print(x=1610e (1e0+1e-9))x=10000000010e+00

Nenhum formato expliacutecito (default)

2789

Strings - formatos tipo Fortran

(apenas o principal ver documentaccedilatildeo para detalhes)

Ex (IDL)

IDLgt printx=1d0+1d-9format=(A0F1613)X= 10000000010000

Tambeacutem haacute modificadores para especificar alinhamento (-) se deve haver (ou ser suprimido) avanccedilo para a pŕoxima linha posiccedilatildeo dentro do campo etc

Coacutedigo Significado Exemplo(s)

A String (A) (10A)

I Inteiro decimal (I) (10I)(-2I)

B Inteiro binaacuterio (B) (10B)

Z Inteiro hexadecimal (Z) (10Z)

O Inteiro octal (O) (10O)

F Real ponto fixo (F)(F52)

E D Real ponto flutuante (E)(D1610)

G Real ponto fixo ou flutuante de acordo com o valor (G)(G10)

ldquordquo String literal (ldquox=rdquoI10)

X Caracteres em branco (A10XI)

2889

Strings - formatos tipo C (printf)(apenas o principal ver documentaccedilatildeo para detalhes)String com campos a serem substituiacutedos por valores (passados adiante) marcados por coacutedigos com

Ex (Python)In [20] print(x=1610e (1e0+1e-9))x=10000000010e+00

Haacute modificadores para especificar alinhamento como preencher o espaccedilo que sobra (espaccedilos zeros etc) para imprimir o sinal + etc

Coacutedigo Significado (tipo) Exemplo(s)

di Inteiro decimal (int) d 5d +05d

u Inteiro decimal sem sinal (unsigned int) u 7u

fF Real em ponto fixo (double float) f 136f

eE Real em ponto flutuante (double float) e 1610e

gG Real em ponto fixo ou flutuante decidido pelo valor (double float)

g 73G

xX Inteiro sem sinal hexadecimal (unsigned int) x 10X

o Inteiro sem sinal octal (unsigned int) o 5o

s String (string) s 10s

c Caractere (char) c

p Ponteiro - estilo C - (void ) p

literal

2989

Strings - conversatildeo de strings para outros tipos

Para gerar dados a partir de strings datas identificadores pedaccedilos de nomes valores numeacutericos armazenados em strings

Tambeacutem sempre haacute conversotildees default para os tipos baacutesicos onde o intepretador programa faz o possiacutevel para entender o string como um valor daquele tipo

Tipicamente eacute feito por casts (funccedilotildees de conversatildeo) reads (de strings ou arquivos texto (arquivos texto satildeo strings)) construtores de objetos ou implicitamente

3089

Strings - conversatildeo de strings para outros tipos - impliacutecitas

Exs (IDL)

IDLgt helpfix([17 17 171 -17 9 8])ltExpressiongt INT = Array[5]

IDLgt printfix([17 17 171 -17 9 8]) 17 17 17 -17 9

IDLgt printdouble([17 17 171 -17 9 8]) 17000000 17000000 17100000 -17000000 90000000

IDLgt readfunitabcd

IDLgt a=0d0IDLgt b=00IDLgt c=0IDLgt reads171d0 189d0 -9abcIDLgt helpabcA DOUBLE = 17100000B FLOAT = 189000C INT = -9

Converte o conteuacutedo do string para os tipos das variaacuteveis abcd (explicado adiante)

3189

Strings - conversatildeo de strings para outros tipos

Quando o default natildeo eacute suficiente (ou quando escrevendo o conversor em uma classe) costuma ser possiacutevel o fazer com formatos semelhantes aos formatos para gerar strings Exs (IDL)

IDLgt a=0d0IDLgt b=00IDLgt c=0IDLgt reads171d0 something 189d0-9abc READS Input conversion error Unit 0 File ltstdingt Error occurred at $MAIN$ Execution halted at $MAIN$

Natildeo funcionou porque sozinho ele natildeo conseguiu saber o que fazer com o ldquosomethingrdquo Usando um formato especiacutefico

IDLgt reads171d0 something 189d0-9 abcformat=(D6111XD611XI)

IDLgt helpabcA DOUBLE = 17100000B FLOAT = 189000C INT = -9

Exemplos mais complicados adiante (arquivos texto)

Variaacuteveis tecircm que ser definidas para informar para que tipo seraacute feita a conversatildeo default

3289

Strings - processamento natildeo baacutesicoOperaccedilotildees importantes e muito necessaacuterias mas que natildeo satildeo suportadas em todas as linguagens bibliotecas padratildeo

Testes (ex IDL)

IDLgt str=[afitsaFITSafitsaabfitsabcfits]

IDLgt printstrmatch(strfits) 1 0 0 1 1

IDLgt printstrmatch(strfitsfold_case) 1 1 0 1 1

IDLgt printstrmatch(strfitsfold_case) 1 1 1 1 1

IDLgt printstrmatch(strfits) 1 0 0 0 0

IDLgt printstrmatch(strfits) 0 0 0 1 0

3389

Strings - processamento natildeo baacutesico

Operaccedilotildees importantes e muito necessaacuterias mas que natildeo satildeo suportadas em todas as linguagens bibliotecas padratildeo

Separaccedilatildeo de partes (Ex IDL)

IDLgt printstrsplit(2011- 131 -extract)format=(A)2011131

Processamento de nomes de arquivos diretoacuterios (Ex IDL)

IDLgt printfile_dirname(some_directoryanother_directorysome_filetxt)some_directoryanother_directory

IDLgt printfile_basename(some_directoryanother_directorysome_filetxt)some_filetxt

IDLgt printfile_basename(another_directorysome_filetxttxt)+_alteredtxtsome_file_alteredtxt

3489

Strings - processamento natildeo baacutesico

Codificaccedilotildees (Ex Python 3)

gtgtgt s=infinite money infinNeuro sign

gtgtgt print(s)infinite money infineuro

gtgtgt print(ascii(s))infinite money u221eu20ac

gtgtgt print(sencode(utf-8))binfinite money xe2x88x9exe2x82xac

3589

Strings - processamento natildeo baacutesico

Perl eacute a linguagem mais avanccedilada para processamento de strings tem suporte nativo a muitas outras operaccedilotildees a semacircntica da linguagem eacute voltada principalmente para processar strings expressotildees regulares (de vaacuterios tipos) natildeo satildeo strings fazem parte da semacircntica

Ex (sem o objetivo que seja compreensiacutevel apenas para indicar o estilo)

Ler um arquivo contendo campos com nomes separados de valores por ()

temperature 10008name some modelx_dimension 100y_dimension 100z_dimension 50()

Armazenado-o em um mapa O que pode ser feito com apenas

While (ltgt) Loop over input linesPut pre-colon text into $1 post-colon into $2 if (m (S+) (+) ) Use $1 as key $2 as value $file_data$1 = $2

3689

Expressotildees regulares - definiccedilatildeo

Expressotildees regulares (regular expressions regex) satildeo a mais poderosa ferramenta para fazer buscas e separar substrings

Regex satildeo uma linguagem com o uacutenico objetivo de especificar propriedades de strings

Implementadas em graus diferentes em todas as linguagens modernas e modernizadas facilita encontrar uma expressatildeo jaacute pronta pois satildeo quase iguais em qualquer linguagem

Estatildeo na biblioteca padratildeo em IDL Python R Perl

Em C++ e Java em bibliotecas comuns (Boost Jregex)

Para que servem

Uma expressatildeo regular especifica propriedades de strings

O interpretador de expressotildees regulares (regular expression engine) recebe a expressatildeo e o string a analisar e determina se o string corresponde (matches) agrave expressatildeo regular

Em alguns casos o interpretador pode tambeacutem informar que parte(s) do string corresponde(m) a que parte(s) da expressatildeo regular e realizar processamentos com estas partes

3789

Expressotildees regulares ndash exemplos de usos Separar partes de strings

Encontrar linhas em arquivos que tenham nomes valores e comentaacuterios e separar estes pedaccedilos

Escalar com comentaacuterio

SLITPA = 351979 Slit position angle

Array 1D sem comentaacuterio (se extendendo por vaacuterias linhas)

BAND_BIN_CENTER = (03505400358950036629003732200379490 0387900104598)

Escalares em diferentes formatos

Total Mechanical Luminosity 15310E+03resources_usedwalltime=005603

Pedaccedilos de nomes

6063 17836E-20 2456 T FeIX((3Pe)3d(2PE)4p_1Po-3s2_3p6_1Se)

Datas separando ano mecircs dia hora (em vaacuterios formatos diferentes)

DATE-OBS= 2006-12-18 universal date of observationDATE_TIME = 2010-07-19T161032START_TIME = 2006-182T225102850Z

3889

Expressotildees regulares ndash exemplos de usos

Separar partes de strings Separar partes de nomes de arquivos (por significarem algo como identificar o

conteuacutedo)

specdec18s0041fitsscamdec18i0054fits15_7_mts_hmpixselh_mr15sav15_7_mts_hwpixselh_mr15sav16_3_mts_hwpixselb_mr16savreadmodel5l_-1_000010000_10000_r05_030_08196_0100000_005000000_1000eps

Determinar se um string eacute um nuacutemero (inteiro real fixo flutuante)

Encontrar identificadores Exs nomes de cataacutelogos endereccedilos HTTPFTP endereccedilos de email

Separar campos em arquivos sendo lidos onde as linhas natildeo tecircm a mesma formataccedilatildeo algumas linhas com colunas separadas por espaccedilos outras por tabs outras por

siacutembolos ignorando linhas de comentaacuterios e linhas vazias

3989

Expressotildees regulares - usoEx (IDL) encontrar nomes de arquivos com algumas propriedades

IDLgt printfilesformat=(A)CM_1477475933_1_viscubCM_1477476864_1_ircubCM_1477476864_1_irgcubCM_1477476864_1_viscubCM_1477477826_1_ircubCM_1477477826_1_irgcubCM_1477477826_1_viscubmosaic2cub

IDLgt printstregex(files+irgcubboolean) 0 0 1 0 0 1 0 0

A expressatildeo regular eacute +irgcub Especifica uma ou mais ocorrecircncias seguidas (+) de qualquer caractere () seguido de uma ocorrecircncia de irgcub (o ponto vem precedido do caractere de

escape () para ser entendido literalmente como um ponto e natildeo como o seu significado especial (qualquer caractere)

Esta aplicaccedilatildeo do interpretador (stregex) retorna um valor Booleano (verdadeirofalso) para cada elemento do string passado (files) que informa se aquele elemento correspondia agravequela expressatildeo regular

Este eacute um exemplo artificial Seria mais faacutecil ter usado strmatch(filesirgcub)

4089

Expressotildees regulares - uso

Em casos como este tipicamente o resultado de stregex seria usado como filtro para selecionar apenas os elementos do array de strings que satisfazem agravequela expressatildeo regular

IDLgt w=where(stregex(files+irgcubboolean)null)IDLgt printfiles[w]format=(A)CM_1477476864_1_irgcubCM_1477477826_1_irgcub

Ex (IDL) Determinar que strings conteacutem uma data no formato yyyy-mm-dd

IDLgt strs=[201002012010-02-012010-2-1aaaa-mm-ddT2010-02-01J]IDLgt printstregex(strs[0-9]4-[0-9]2-[0-9]2boolean) 0 1 0 0 1

Esta expressatildeo regular especifica quatro repeticcedilotildees (4) de diacutegitos (caracteres na faixa [0-9]) seguido de um (-) seguido de duas repeticcedilotildees (2) de dois diacutegitos ([0-9]) seguido de um (-) seguido de duas repeticcedilotildees (2) de dois diacutegitos ([0-9])

Uma expressatildeo regular apenas um pouco mais elaborada poderia corresponder aos 3 formatos de data no array acima E poderia se impedir que a uacuteltima (com outros caracteres antes e depois da data) seja aceita

4189

Expressotildees regulares - regras - caracteres ldquonormaisrdquo

Uma expressatildeo regular usa caracteres ldquonormaisrdquo e especiais para especificar o que se vai procurar na ordem em que aparecem na expressatildeo

Se um caractere eacute normal (natildeo eacute um dos especiais mostrados adiante) ele especifica uma ocorrecircncia daquele caractere

Ex J eacute uma expressatildeo regular que corresponde a qualquer string onde ocorra J Jaacute JA soacute corresponde a strings que tenham JA dentro

Exs (IDL)

IDLgt strs=[JJJJJJaJAjaJa]

IDLgt printstregex(strsJboolean) 1 1 1 0 1

IDLgt printstregex(strsJAboolean) 0 0 1 0 0

4289

Expressotildees regulares - regras - caracteres especiaisCaracteres especiais tecircm outros significados Para significar literalmente aquele caractere deve ser escapado (escaped) com um

Siacutembolo significado exemplo Corresponde(m) Escape o caractere seguinte deve ser interpretado

literalmente natildeo como especial aa

Qualquer caractere ab ajb aab abb jafbc

+ Uma ou mais repeticcedilotildees do que vem agrave esquerda a+b ab aab bab baabh

() Subexpressatildeo para agrupar termos afetados por um caractere especial (como parecircnteses em notaccedilatildeo matemaacutetica)

(ab)+c abc ababc dabababcg

Zero ou mais repeticcedilotildees dos termos agrave esquerda ab abbaab caaabg

Zero ou uma repeticcedilatildeo dos termos agrave esquerda ab b ab cabd cbd

| Alternaccedilatildeo qualquer um dos dois agrave esquerda a|bc ac bc jacd jbcd

n Exatamente n repeticcedilotildees do termo agrave esquerda a2b aab daaabg

n1n2 De n1 a n2 repeticcedilotildees do termo agrave esquerda a12b ab aab aaab gaaabbd

^ Acircncora (no comeccedilo) nada agrave esquerda ^ab ab abb

$ Acircncora (no fim) nada agrave direita ab$ abaab

[] Conjunto de valores (explicado adiante)

4389

Expressotildees regulares - regras - conjuntos de valores

[] denota um conjunto de valores que pode conter

Uma lista de coisas que devem corresponder Ex [abc] signfica qualquer caractere no conjunto abc Correspondem a esta

expressatildeo abcabha

Uma lista de coisas que natildeo podem corresponder [^abc] significa qualquer coisa que natildeo seja a b ou c Correspondem a esta

expressatildeo d jgs gg

Faixas de valores [0-9] signfica qualquer diacutegito [0-9a-zA-Z] significa qualquer diacutegito ou letra

Classes de valores como algumas faixas e outros conjuntos ocorrem com muita frequumlecircncia haacute nomes

especiais para eles Estes (em IDL) vecircm entre [] ex [[digit] significa o mesmo que [0-9]

4489

Expressotildees regulares - regras - classes de valores

Classe signficado

alnum Caracteres alfanumeacutericos 0-9a-zA-Z

alpha Caracteres alfabeacuteticos a-zA-Z

cntrl Caracteres de controle ASCII (natildeo visiacuteveis coacutedigos 1 a 31 e 127)

digit Diacutegitos (decimais) 0-9

graph Caracteres visiacuteveis ASCII 33 a 126 (natildeo inclui o espaccedilo)

lower Letras minuacutesculas a-z

print Caracteres ldquoimprimiacuteveisrdquo (visiacuteveis e o espaccedilo) ASCII 32 a 126

punct Caracteres de pontuaccedilatildeo $amprsquo()+-lt=gt[]^_lsquo|~

space Os caracteres ldquoem brancordquo (blank) espaccedilo tab tab vertical CR LF (ASCII 32 e 9-13)

upper Letras maiuacutesculas A-Z

xdigit Diacutegitos hexadecimais 0-9A-Fa-f

lt Comeccedilo de palavra (palavra definida como sequumlecircncia de coisas natildeo space)

gt Fim de palavra (palavra definida como sequumlecircncia de coisas natildeo space)

Estas satildeo apenas as principais Algumas implementaccedilotildees tecircm muito mais (em particular nas linguagens que usam Unicode nativamente)

4589

Expressotildees regulares - exemplos

Determinar se strings satildeo nuacutemeros (Ex IDL)

IDLgt str=[9-18 875-812-45913E9-98d7a188d032f5]

Inteiros

IDLgt intexpr=^[-+][0-9]+$

IDLgt printstregex(strintexprboolean) 1 1 0 0 0 0 0 0 0 0

Ponto flutuante

IDLgt fpexpr=^[-+](([0-9][0-9]+)|([0-9]+[0-9]))([eEdD][-+][0-9]+)$

IDLgt printstregex(strfpexprboolean) 1 1 0 1 1 1 1 1 0 0

Sinal opcional

1 ou mais diacutegitos

Sinal opcional

0 ou mais diacutegitos opcionalmente seguidos de um ponto e 1 ou mais diacutegitos

1 ou mais diacutegitos opcionalmente seguidos de um ponto e 0 ou mais diacutegitos

ou Expoente opcional letra do expoente seguida de sinal opcional seguido de um ou mais diacutegitos

4689

Expressotildees regulares ndash extraccedilatildeo

Interpretadores de expressotildees regulares costumam oferecer mais que apenas testar se um string corresponde a uma expressatildeo

Em geral tambeacutem podem retornar que parte(s) do string corresponde(m) agrave expressatildeo

Ex (IDL) Determinar se um string conteacutem uma data incluindo os formatos

IDLgt dates=[2011-01-312011 1 3120110131something done on y2011m1d31 with something]

E extrair a data de dentro do string

IDLgt expr=[0-9]4[0-9]12[0-9]12

(4 diacutegitos)(qualquer separador)(1 a 2 diacutegitos)(qualquer separador)(1 a 2 diacutegitos)

IDLgt printstregex(datesexprextract)format=(A)2011-01-312011 1 31201101312011m1d31

Como agora separar ano mecircs e dia Com uma busca e uma extraccedilatildeo para cada Poderia ser mais eacute mais faacutecil com uma uacutenica expressatildeo regular

4789

Expressotildees regulares - aleacutem de apenas testes

Tambeacutem podem retornar que parte(s) do string correspondem agrave expressatildeo toda e agraves suas subexpressotildees (partes da expressatildeo delimitadas por parecircnteses)

Ex (IDL) Separar pedaccedilos de datas Neste caso para a expressatildeo ficar menor assumindo um formato simples (yyyy-mm-ddThhmmssfff) Mas poderia ser um formato mais livre como no exemplo anterior

IDLgt str=Stuff observed on 2011-01-31T123924983 with some instrumentIDLgt expr=([0-9]4)-([0-9]2)-([0-9]2)T([0-9]2)([0-9]2)([0-9]2[0-9]3)

(quatro diacutegitos)-(2 diacutegitos)-(2 diacutegitos)T(2 diacutegitos)(2 diacutegitos)(2 diacutegitos3 diacutegitos)

IDLgt pieces=stregex(strexprextractsubexpr)IDLgt printpiecesformat=(A)2011-01-31T12392498320110131123924983IDLgt d=julday(pieces[2]pieces[3]pieces[1]pieces[4]pieces[5]pieces[6])IDLgt printdformat=(F166) 2455593027372

Expressatildeo inteiraPrimeira subexpressatildeoSegunda subexpressatildeoTerceira subexpressatildeoQuarta subexpressatildeoQuinta subexpressatildeoSexta subexpressatildeo

4889

Expressotildees regulares - referecircncias httpxkcdcom208

Viacutedeos do Software Carpentry

httpsoftware-carpentryorg4_0regexp

4989

Arquivos

Quase todo programa precisa armazenar dados em arquivos

Podem ser pequenos arquivos de paracircmetros ou enormes arquivos de dados produzidos ou a processar

Apesar do sugerido pela praacutetica comum arquivos texto natildeo satildeo sempre a melhor escolha para armazenar dados - e haacute muitas formas diferentes de os usar

Qual eacute a melhor escolha

Assim como para linguagens ou contecirciners natildeo existe ldquoo melhor formatordquo Cada um tem suas vantagens e desvantagens

Dados diferentes (mesmo se usados pelos mesmos programas) em geral se adequam melhor a formatos diferentes

5089

Arquivos - texto X binaacuterios

Em qualquer formato arquivos satildeo armazenados como diacutegitos binaacuterios

Mas haacute duas formas principais como eles podem ser codificados

Arquivos baseados em texto (text files)

Dados satildeo transformados em caracteres usando alguma formataccedilatildeo (mesmo se impliacutecita) e escritos com alguma codificaccedilatildeo de texto (comumente mas natildeo necessariamente ASCII)

Um arquivo texto eacute um ou mais strings As mesmas conversotildees tecircm que ser feitas depara outros tipos

Arquivos ldquobinaacuteriosrdquo (binary files)

Embora todo arquivo seja binaacuterio este nome costuma ser usado soacute para aqueles em que os dados natildeo estatildeo na forma de texto

Com frequumlecircncia (nem sempre) os dados satildeo gravados de forma idecircntica a como satildeo armazenados na memoacuteria

Muitos formatos usam uma mistura de partes em texto e partes binaacuterias

Um cabeccedilalho (header) de texto que daacute informaccedilotildees (metadados) sobre os dados armazenados na parte binaacuteria que vem depois

O cabeccedilalho conteacutem em especial informaccedilotildees sobre como ler os dados binaacuterios

5189

Arquivos - texto X binaacuterios

Vantagens de arquivos texto

Legiacuteveis por pessoas (human readable)

Podem ser auto-suficientes todo o necessaacuterio para os ler e entender o que conteacutem pode ser obtido olhando o arquivo

Satildeo os menos especiacuteficos a linguagens software normalmente satildeo escritos em ASCII ou Unicode e sempre haacute algum suporte a ler escrever texto em linguagens software

Haacute alguns formatos padratildeo para texto (exs CSV XML) que satildeo suportados em muitas plataformas diferentes

5289

Arquivos - texto X binaacuterios

Vantagens de arquivos binaacuterios

Em geral natildeo haacute conversotildees entre o os dados como armazenados na memoacuteria O que torna o armazenamento mais eficiente e sem alteraccedilotildees nos valores

A maior parte dos formatos padronizados eacute binaacuteria Exs FITS cube CDF NetCDF HDF HDF5 JPEG JPEG2000 TIFF GeoTIFF MPEG etc

Eacute mais comum que haja bibliotecas prontas (ateacute de alto niacutevel) para consulta leitura e gravaccedilatildeo

Os formatos melhor desenhados satildeo autodocumentados (em texto ou binaacuterio) para os ler natildeo eacute necessaacuterio conhecimento preacutevio sobre como os dados foram armazenados

Toda linguagem plataforma costuma ter seu formato binaacuterio mais nativo que costuma ser o mais faacutecil para leitura gravaccedilatildeo Em particular nas de alto niacutevel que tecircm formatos autodocumentados (especialmente

em IDL R Python Java)

Muitos formatos tecircm opccedilatildeo de compressatildeo dos dados

5389

Arquivos - proprietaacuterios X padratildeo

Independente da escolha texto binaacuterio programas devem escolher entre usar um formato proacuteprio ou um formato padronizado

A principal vantagem de formatos proacuteprios eacute que satildeo definidos da forma mais conveniente para a aplicaccedilatildeo que os usa simplificando leitura e gravaccedilatildeo e potencialmente otimizando recursos (acesso ao disco tamanho do arquivo etc)

A principal desvantagem de formatos proacuteprios eacute ser necessaacuterio escrever todo o coacutedigo para os ler gravar

Pode dar mais trabalho que usar um formato geneacuterico que natildeo seja exatamente o que melhor se encaixa na aplicaccedilatildeo

O coacutedigo para processar o formato em geral vai ser menos completo e conveniente de usar que o de um formato bem estabelecido usado por muitos outros em muitos ambientes

Cada novo software que for usar estes arquivos vai precisar compartilhar do mesmo coacutedigo ou precisar de coacutedigo novo (em particular se em outra linguagem) para ler gravar naquele formato

Eacute necessaacuterio documentar o formato e decidir sobre como ele seraacute definido

Se outros jaacute colocaram muito trabalho desenvolvendo bons formatos padratildeo bem suportados em muitos ambientes por que ter o trabalho de reinventar (e reprogramar redocumentar e retestar) a roda

5489

Arquivos - padrotildees comuns em astronomia (exs adiante)

Texto

CSV Comma-separated values - bem suportado por muitos softwares

ldquoColunas fixasrdquo Natildeo eacute um padratildeo bem definido mas eacute praacutetica comum para tabelas (2D)

XML Extensible Markup Language - O padratildeo texto mais flexiacutevel de grande uso em programaccedilatildeo geral para armazenar qualquer coisa com frequumlecircncia de forma hieraacuterquica Bem suportado por linguagens modernas (e modernizadas) e bibliotecas das principais

linguagens gerais Alta complexidade o torna trabalhoso de usar

5589

Arquivos - padrotildees comuns em astronomia (exs adiante)Binaacuterios

FITS Flexible Image Transport System - o mais comum para observaccedilotildees astronocircmicas Conteacutem os dados (em geral arrays 1D 2D ou 3D) e documentaccedilatildeo (nos cabeccedilalhos) sobre a origem e caracteriacutesticas dos dados Tambeacutem usado para armazenar tabelas de dados quaisquer mesmo que natildeo sejam observaccedilotildees (especialmente pelo STSCI) Variam muito em qualidade de documentaccedilatildeo

NetCDF Network Common Data Form - evoluccedilatildeo do CDF autodocumentado eacute comum e bem suportado para vaacuterios arrays de dados

HDF5 Hierarchical Data Format ndash autodocumentado comum e bem suportado permitindo aleacutem de simples arrays estruturas (eacute um formato hieraacuterquico)

Formatos de imagens JPEG JPEG2000 TIFF GeoTIFF etc - voltados para arrays 2D3D de inteiros ou (em alguns casos) reais com ou sem compressatildeo JPEG2000 tem caracteriacutesticas mais avanccediladas como imagens multiresoluccedilatildeo

Formatos vetoriais PS EPS DXF SHP SVG - variados niacuteveis de suporte a armazenamento de vetores e formas em 2D ou 3D

ISIS Cube semelhante em caracteriacutesticas ao FITS mais usado em sensoriamento remoto geociecircncias e ciecircncias planetaacuterias em geral para observaccedilotildees 1D 2D ou 3D

Formatos nativos de linguagens todo o trabalho de leitura e gravaccedilatildeo eacute feito automagicamente pela biblioteca padratildeo em IDL R Python Java

5689

Arquivos texto - newlines

Apesar do que possa parecer arquivos texto natildeo tecircm intrinsecamente vaacuterias linhas Arquivos texto satildeo soacute uma sequumlecircncia 1D de caracteres em alguma codificaccedilatildeo Separaccedilatildeo em linhas (equivalente a interpretar o arquivo como 2D em linhas e colunas) eacute

especificada por convenccedilotildees Natildeo haacute apenas uma convenccedilatildeo para o fim de linhas

A mais primitiva convenccedilatildeo eacute separaccedilatildeo nenhuma estipula-se que linhas tenham um nuacutemero fixo N de caracteres e cabe ao software que lecirc o arquivo entender que uma linha nova ocorre regularmente a cada N caracteres

Eacute a forma menos portaacutevel e mais inconveniente eacute necessaacuterio o conhecimento preacutevio (ou por inspeccedilatildeo do arquivo) de quantos caracteres haacute por linha

A maior parte dos editores de texto natildeo vai saber separar linhas desta forma (por falta deste conhecimento preacutevio) Exemplo (de um FITS real)

SIMPLE = T Fits standard BITPIX = 16 Bits per pixel NAXIS = 0 Number of axes EXTEND = T File may contain extensions

O que com as linhas quebradas nos lugares certos seria

SIMPLE = T Fits standard BITPIX = 16 Bits per pixel NAXIS = 0 Number of axes EXTEND = T File may contain extensions

5789

Arquivos texto - newlines

A forma mais comum de especificar linhas eacute com um marcador do final de linha (newline)

Eacute um caractere especial natildeo normalmente presente no texto que serve para marcar fim de linhas

Mas natildeo haacute soacute um padratildeo de newline Os mais comuns

LF (Line Feed ASCII 10) ndash Unix Linux Mac OS X

CR - (Carriage Return ASCII 13) - Mac OS lt10

CR+LF (CR seguido de LF) - Windows DOS

Eacute o motivo de o Notepad (Windows) natildeo entender as quebras de linha de arquivos escritos com o formato nativo de Linux o arquivo soacute tem LF enquanto o editor espera CR+LF

Alguns sistemas (strings em vaacuterias linguagens por exemplo) usam o coacutedigo de escape n para indicar newline que eacute codificado de acordo com o padratildeo sendo usado

Em geral bibliotecas de leitura e gravaccedilatildeo de arquivos usam (default pelo menos) o newline nativo do sistema em que satildeo usadas

Programas de conversatildeo entre os sistemas satildeo comuns (ex dos2unix)

O Wordpad identifica se for usado soacute LF e quebra as linhas de acordo

5889

Arquivos - texto - CSV

Comma-separated values

O formato mais padronizado para tabelas (arrays 2D) em texto (frequentemente mas natildeo necessariamente ASCII)

Bem suportado por bibliotecas padratildeo de linguagens e outros softwares (Excel Calc Origin Google Docs etc)

Conteacutem Linhas de cabeccedilalho (opcionais mas recomendadas) linhas com qualquer texto geral

descrevendo o arquivo e em geral uma linha de tiacutetulo para as colunas da tabela Uma (apenas uma) tabela onde todas as linhas tecircm o mesmo nuacutemero de colunas

Colunas separadas por viacutergulas (opcionalmente pode ser outro separador) Linhas terminadas por newline (qualquer que seja) Strings delimitados por ldquo ldquo

Ex

NAMECALMPOSFILNAMEECHLPOSDISPPOSTARGNAMEPOSDIRCLASSMJD-OBSITIMECOADDSdec18s00010NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001dec18s00020NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001dec18s00120NIRSPEC-5-AO635800364500itan140NIRSPEC-5-AOp2 TITAN5408763000001dec18s00140NIRSPEC-5-AO626300364500itan140NIRSPEC-5-AOp1 TITAN5408763000001dec18s00151NIRSPEC-5-AO626300364500itan140NIRSPEC-5-AOp1ARC5408764000001dec18s00160NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001

Natildeo eacute necessaacuterio que as colunas tenham largura constante

Cabeccedilalho

5989

Arquivos - texto - CSVHaacute amplo suporte a leitura e gravaccedilatildeo de CSV sem precisar recorrer a procedimentos de baixo niacutevel

Podem ser diretamente importados em Excel Calc Origin Google Docs ou lido facilmente com bibliotecas padratildeo comuns Ex (IDL)

IDLgt c=read_csv(filesearch_scamcsvheader=h)IDLgt printhNAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS

IDLgt helpc Structure ltc8bca508gt 11 tags length=5256 data length=5248 refs=1 FIELD01 STRING Array[41] FIELD02 LONG Array[41] FIELD03 STRING Array[41] FIELD04 DOUBLE Array[41] FIELD05 DOUBLE Array[41] FIELD06 STRING Array[41] FIELD07 STRING Array[41] FIELD08 STRING Array[41] FIELD09 STRING Array[41] FIELD10 DOUBLE Array[41] FIELD11 LONG Array[41]

IDLgt printcfield01[03]dec18s0001 dec18s0002 dec18s0003 dec18s0004

IDLgt printcfield03[03]NIRSPEC-5-AO NIRSPEC-5-AO NIRSPEC-5-AO NIRSPEC-5-AO

6089

Arquivos - texto - CSVEx (IDL) Criaccedilatildeo de um CSV com uma tabela de valores

Criaccedilatildeo de 3 arrays 1D (12 elementos) um para cada coluna

IDLgt x=dindgen(3)IDLgt y=dindgen(4)IDLgt xx=reform(rebin(x34)12)IDLgt yy=reform(rebin(reform(y14)34)12)IDLgt f=xx+yy10IDLgt helpxxyyfXX DOUBLE = Array[12]YY DOUBLE = Array[12]F DOUBLE = Array[12]

Escrita do arquivo

IDLgt write_csvexamplecsvxxyyfheader=[XYX+10Y]

ResultadoXYX+10Y000000000000000000000000100000000000000010000000200000000000000020000000000000001000000010000000100000001000000011000000()

6189

Arquivos - texto - ldquoColunas regularesrdquoFixed column width

Natildeo eacute exatamente um padratildeo Eacute uma praacutetica comum

Armazena uma tabela (array 2D) de forma regular simples de ser interpretada e lida

Costumam ter linha(s) de cabeccedilalho descrevendo o conteuacutedo do arquivo em geral com uma linha para os nomes das colunas

As demais linhas conteacutem os dados sempre ocupando a mesma largura por coluna e escritos no mesmo formato em cada coluna

Costumam ser simples de ler inclusive interativamente (exs Excel Calc Origin read_ascii)

Ex (IDL) Uma simples tabela soacute de nuacutemeros

wavl CH4=33 wavl CH4=25 wavl CH4=10 wavl CH4=08 wavl CH4=05 wavl CH4=026 wavl CH4=02 477330000 0090130 477330000 0091110 477330000 0089250 477330000 0087000 477330000 0087140 477330000 0090080 477330000 0088110 480040000 0090930 480040000 0091930 480040000 0090160 480040000 0087930 480040000 0088110 480040000 0090950 480040000 0089090 482750000 0091710 482750000 0092730 482750000 0091060 482750000 0088850 482750000 0089080 482750000 0091810 482750000 0090060 485450000 0092530 485450000 0093570 485450000 0092000 485450000 0089810 485450000 0090100 485450000 0092730 485450000 0091090

IDLgt a=read_ascii(specs_27s_ntxtdata_start=1header=header)IDLgt printheader wavl CH4=33 wavl CH4=25 wavl CH4=10 wavl CH4=08 wavl CH4=05 wavl CH4=026 wavl CH4=02 IDLgt helpa Structure ltd423c9a8gt 1 tags length=224 data length=224 refs=1 FIELD01 FLOAT Array[14 4]

6289

Arquivos - texto - ldquoColunas regularesrdquoJaacute um arquivo um pouco mais difiacutecil de ler

NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS dec18s0001 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0002 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0003 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 FLAT 5408757812500 460000 5 dec18s0004 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 DARK 5408757812500 460000 5

Por ter colunas de tipos diferentes (strings inteiros reais) natildeo eacute possiacutevel o ler em um simples array Mas eacute faacutecil o colocar em uma estrutura de arrays onde cada campo eacute uma coluna

Especificando interativamente como interpretar as linhasIDLgt templ=ascii_template(filesearch_scamtxt)

Nome do campo (default mostrado)

Tipo do campo (identificado automaticamente)

Posiccedilatildeo (caracter) do comeccedilo (identificada automaticamente)

Linha de exemplo para verificar as colunas

6389

Arquivos - texto - ldquoColunas regularesrdquoDepois de feito o template o arquivo pode ser lido com apenas

IDLgt a=read_ascii(filesearch_scamtxttemplate=templ)IDLgt helpa Structure ltd4ec4608gt 11 tags length=416 data length=416 refs=1 FIELD01 STRING Array[4] FIELD02 LONG Array[4] FIELD03 STRING Array[4] FIELD04 FLOAT Array[4] FIELD05 FLOAT Array[4] FIELD06 STRING Array[4] FIELD07 STRING Array[4] FIELD08 STRING Array[4] FIELD09 FLOAT Array[4] FIELD10 FLOAT Array[4] FIELD11 LONG Array[4]IDLgt printafield01dec18s0001 dec18s0002 dec18s0003 dec18s0004IDLgt printafield04 626300 626300 626300 626300

O template (uma estrutura contendo dados sobre como ler o arquivo) pode ser usado para outros arquivos no mesmo formato No lugar de ter sido criado interativamente poderia ter sido lido de algum arquivo Poderia ter especificado nomes para os campos que seriam mais amigaacuteveis que coias como FIELD11

6489

Arquivos - texto - XML

Extensible Markup Language

Admite grande flexibilidade e por isso pode ter alta complexidade

Valores satildeo colocados dentro de uma estrutura em hieraacuterquica (em uma aacutervore) com os noacutes identificados pelos seus nomes (chaves)

Largamente usado em muitas aacutereas para armazenar conjuntos arbitraacuterios de quaisquer estruturas de dados

A maioria das aplicaccedilotildees usa um formato que eacute um subconjunto do XML especificado por um Schema comumente em um arquivo XML DTD (Document Type Definition)

6589

Arquivos - texto ndash XML ndash exemplos de usos

Armazenamento de dados de aplicaccedilotildees web (comum para exportar importar dados MediaWiki DokuWiki WordPress ADS Lattes etc)

Documentos Office (docx pptx xlsx) OpenOffice (odt opd ods)

Como versotildees de outros formatos FITSML XDF

ldquoScientific Dataset XML NASAs Astronomical Data Center (ADC) sponsors a number of research projects that

use XML for scientific data representation The XML activities at the ADC are sponsored and supported by the NASA Office of Space Science Applied Information Systems Research Program (AISRP)rdquo - httpxmlcoverpagesorgnasa-adchtml

Astronomical Instrument Markup Language (AIML)

SVG ndash Scalable Vector Graphics

Muitas de outras aplicaccedilotildees listadas em httpxmlcoverpagesorgxmlhtmlapplications

6689

Arquivos - texto ndash XML - exemploltxml version=10 gtltDOCTYPE Xdmf SYSTEM Xdmfdtd []gtltXdmf xmlnsxi=httpwwww3org2001XInclude Version=20gt ltDomaingt lt-- Example of Basic Topologies --gt ltInformation Name=Descriptiongt Example of a Polyvertex Topology ltInformationgt ltGrid Name=Polyvertex GridType=Uniformgt ltTopology TopologyType=Polyvertex Dimensions=3 NodesPerElement=3gt ltDataItem Format=XML Dimensions=3 3 NumberType=Floatgt 0 1 2 4 5 6 8 9 10 ltDataItemgt ltTopologygt ltGeometry Type=XYZgt ltDataItem Format=XML Dimensions=4 4 3gt 00 00 00 10 00 00()Que mostra que a interpretaccedilatildeo (parsing) de XML eacute em geral complexa

6789

Arquivos - texto - XML

Haacute muitas bibliotecas de alto niacutevel para fazer o processamento (parsing) e entregar os dados em uma estrutura conveniente

A complexidade em processar XML estaacute em decidir o que fazer com os dados jaacute que os arquivos podem ser muito complexos

As APIs (Application Programming Interfaces) mais comuns para processar XML que satildeo implementadas em muitas linguagens

DOM (Document Object Model) ndash manteacutem todo o conteuacutedo do em uma estrutura de dados (em geral uma aacutervore) em uma variaacutevel (em geral um objeto) Esta pode ser consultada para obter os valores de interesse para os alterar e usada para escrever um arquivo

SAX (Simple API for XML) ndash Interpretador (parser) por objetos O usuaacuterio escreve uma classe herdando da classe SAX provendo os meacutetodos que vatildeo processar os campos agrave medida em que estes satildeo lidos

6889

Arquivos - binaacuterios - FITSFlexible Image Transport System

O formato mais comum para observaccedilotildees astronocircmicas Tambeacutem usado para armazenar quaisquer dados mesmo natildeo relacionados a observaccedilotildees (especialmente tabelas como eacute praacutetica do STSCI)

Conteacutem um (ou mais) cabeccedilalho(s) de texto com metadados (informaccedilotildees sobre os dados como caracteriacutesticas (necessaacuterias para os ler) origem condiccedilotildees em que foram obtidos processamento realizado etc)

SIMPLE = T image conforms to FITS standard BITPIX = 32 bits per data value NAXIS = 2 number of axes NAXIS1 = 1024 NAXIS2 = 1024 BSCALE = 100000 Scaling factor BZERO = 000000 Scaling zero-point TELESCOP= Keck II Telescope SLITNAME= 0041x226 Slit Name SLITPA = 351979 Slit position angle SLITX = 131500 X pixel of the center of the slit LST = 12010446 local apparent sidereal time (()

Depois do cabeccedilalho haacute uma (ou mais) seccedilatildeo(otildees) de dados binaacuterios Costuma(m) ser array(s) 1D (espectros) 2D (imagens) ou 3D (ldquocubos de dadosrdquo)

De inteiros ou reais inteiros satildeo comuns em contagens de instrumentos reais para valores derivados (fluxos intensidades etc)

6989

Arquivos - binaacuterios - FITSNormalmente FITS satildeo lidos escritos por bibliotecas prontas de (relativamente) alto niacutevel usuaacuterio natildeo tem que saber como os dados satildeo armazenados no arquivo nem como os ler escrever Ex (IDL com a biblioteca idlastro)

IDLgt fits_info2dspectrumfits2dspectrumfits has 3 extensionsPrimary header 288 recordsNo dataExtension 1 -- SCI Header 144 records IMAGE ( 1201 1201 )Extension 2 -- ERR Header 72 records IMAGE ( 1201 1201 )Extension 3 -- DQ Header 72 records IMAGE ( 1201 1201 )

IDLgt mydata=readfits(2dspectrumfitsexten_no=1myheader) READFITS Reading FITS extension of type IMAGE READFITS Now reading 1201 by 1201 array

IDLgt extastmyheadermyastIDLgt sz=size(mydatadimensions)IDLgt xy2ad[1sz[0]][1sz[1]]myastcorners_acorners_dIDLgt printcorners_aCorners of the data array from file 2dspectrumfits are at 14487480 33063480

IDLgt printcorners_d -00041264444 00041402222

Obteacutem os dados de coordenadas (WCS) do header

Coloca os dados no array (2D de floats) mydata e o header no array (1D de strings) myheader

Calcula as coordenadas das quinas da imagem atraveacutes do WCS

Provecirc informaccedilotildees sobre o arquivo

7089

Arquivos - binaacuterios - ISIS Cube

Formatos como FITS se adequam muito a ter uma interface de mais alto niacutevel por objetos

Tambeacutem para dados em tabelas FITS muito mais trabalhosos de ler em baixo niacutevel que se adequam muito mais a mapas ou estruturas

Exemplo (de um formato semelhante a FITS ISIS cube)

O objeto ao ser criado lecirc todo o arquivo

cube=pp_editablecube(CM_1553510065_1_ircub)

Meacutetodos fornecem os dados desejados para obter quando necessaacuterio os dados de interesse

Find out the names of the backplanesprintcubegetproperty(backnames)Get the start time of the cubeprintcubegetfromheader(START_TIME)2007-084T100057286Z

Valores no cabeccedilalho podem ser convenientemente fornecidos como um mapa

header=cubeheader_as_hash()printheader[START_TIME]2007-084T100057286Z

7189

Arquivos - binaacuterios ndash ISIS Cube

Os dados satildeo fornecidos como arraysMake a contour plot of the latitudesc=contour(cubegetsuffixbyname(LATITUDE))Get the band with wavelength nearest to 21 (in the units used in the cube)selband=cubegetbandbywavelength(21wavelengths=selwavs)

Interfaces por overload tornam o acesso ainda mais conveniente

selband=cube[21]

selwavs=cube[21]

Retorna um array com a banda de comprimento de onda mais proacuteximo de 21 (microm)

Retorna o comprimento de onda mais proacuteximo de 21 (microm) da banda retornada acima

7289

Arquivos - binaacuterios ndash ISIS Cube Alteraccedilotildees feitas ao conteuacutedo satildeo automaticamente refletidas em todos os

lugares (cabeccedilalho em particular) afetados mantendo o objeto vaacutelido que pode depois ser gravado em um novo arquivo

IDLgt printcubelinescubesamplescubebands 64 64 256

IDLgt helpcubecoreltExpressiongt FLOAT = Array[64 64 256]

IDLgt cubecore=dblarr(100100256)

A linha acima natildeo eacute uma atribuiccedilatildeo eacute uma invocaccedilatildeo de meacutetodo Eacute equivalente acubesetpropertycore=dblarr(100100256)

Eacute o trabalho da funccedilatildeo setproperty decidir se a propriedade passada (core) faz sentido e se fizer fazer todo o trabalho necessaacuterio a esta mudanccedila Para o usuaacuterio eacute tudo automaacutetico e os dados da classe satildeo vaacutelidos o tempo todo

IDLgt helpcubecoreltExpressiongt DOUBLE = Array[100 100 256]

IDLgt printcubelinescubesamplescubebands 100 100 256

IDLgt cubesaveCM_1553510065_1_ir_editedcub

7389

Arquivos - binaacuterios ndash NetCDF e HDF5

Network Common Data Form e Hierarchical Data Format

Os dois uacutenicos formatos bem estabelecidos para dados cientiacuteficos geneacutericos

Armazenam dados como vaacuterias variaacuteveis e seus metadados Para cada variaacutevel haacute (ou pode haver) os metadados

Nome Dimensotildees (do array) Unidades Comentaacuterios

Ambos permitem arrays multidimensionais

Apenas HDF5 permite estruturas (daiacute vem a hierarquia)

Autodocumentados qualquer software que saiba ler um destes formatos lecirc qualquer arquivo sem precisar de conhecimento preacutevio sobre como o arquivo foi gerado

Muito bem suportados em bibliotecas padratildeo e natildeo padratildeo em softwares interativos e visualizadores (inclusive plugins para navegadores)

httpwwwunidataucaredusoftwarenetcdf httpenwikipediaorgwikiHdf5

NetCDF eacute mais simples de usar por natildeo ter hierarquia dando menos trabalho para ler e escrever dados Se hierarquia natildeo eacute necessaacuteria eacute mais conveniente de usar que HDF5

7489

Arquivos - binaacuterios - NetCDF e HDF5Haacute tambeacutem o formato CDL uma versatildeo ASCII do NetCDF A biblioteca padratildeo do NetCDF inclui conversores entre estes formatos

$ ncdump -h refspec_g01_0ncnetcdf refspec_g01_0 dimensions nlay = 51 nwn = 400 nleg = 33 numu = 2 nlev = 52 nphi = 3 ngas = 2 nwnc = 1 scal = 1 v3 = 3 dnl = 1 nk = 1 tdisr = UNLIMITED (0 currently) na = 16

variables float alb(nwn) float z(nlay) float t(nlay) float p(nlay) float wl(nwn) float iof(nwn) float mtau(nwn) float htau(nwn) float hctaus(nwn) float gtau(nwn) float outcos(scal) float phi(nleg) float phic(scal) float umu(numu) float flux(v3 nwn nlev) float mix(nlay ngas) float c(nlay) float psat(nlay) float ga(nwnc) float wlc(nwnc) float inc(scal) int dm(scal) int ord(scal) float fbeam(scal) float wn(nwn) float tautot(nwn nlay) float htaus(nwn nlay) float htaux(nwn nlay) float taug(nwn nlay) float phase(nwn nlay nleg) float ssa(nwn nlay) float uu(nwn nphi nlev numu) float u0u(nwn nlev numu) float tray(nwn nlay) float gtauo(tdisr nwn nlay)

Haacute 14 variaacuteveis usadas como dimensotildees para as 35 variaacuteveis que satildeo arrays

Ex alb(nwn) indica que alb eacute um array 1D de nwn elementos

nwn estaacute armazenado como uma das dimensotildees e eacute 400 portanto alb tem 400 elementos

Parte do conteuacutedo de um arquivo NetCDF em formato CDL (gerado pelo programa ncdump)

7589

Arquivos - binaacuterios - NetCDF e HDF5Conteuacutedo daquele arquivo visualizado com o ncview (acompanha a biblioteca NetCDF padratildeo)

7689

Arquivos - binaacuterios - NetCDF e HDF5O conteuacutedo de todo o arquivo pode ser lido facilmente com as bibliotecas disponiacuteveis e armazenado em contecirciners convenientes Usando um objeto que gera um resultado um pouco mais conveniente

IDLgt h=pp_readncdf(refspec_g01_0nchash)IDLgt printhvar_dims ltObjHeapVar229(HASH)gtvars ltObjHeapVar152(HASH)gtdims ltObjHeapVar118(HASH)gt

IDLgt printh[vars]T 173203 175459 175848 176001 175975 Z 431869 418858 406067 393403 380464 FLUX 300660 145536 0705180 0341669 0165532 PHASE 100000 0779034 0660858 0542052 0449983 TAUTOT0694377 0693420 0693474 0693540 0693636()

IDLgt help(h[vars])[TAUTOT]ltExpressiongt FLOAT = Array[51 400]

IDLgt print(h[var_dims])[TAUTOT]NLAY NWN

IDLgt print(h[dims])[(h[var_dims])[TAUTOT]]NLAY 51NWN 400

7789

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5)

Visualizaccedilatildeo da variaacutevel selecionada

Metadados e alguns valores da variaacutevel selecionada

Variaacutevel a ser criada com o conteuacutedo desta variaacutevel do arquivo

Hierarquia das variaacuteveis do arquivo

7889

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5) Imported variable az

IDLgt helpaz Structure ltd5723f38gt 13 tags length=448 data length=444 refs=1 _NAME STRING az _ICONTYPE STRING binary _TYPE STRING DATASET _FILE STRING INTENSI_test_409OUTh5 _PATH STRING _DATA DOUBLE Array[38] _NDIMENSIONS LONG 1 _DIMENSIONS ULONG64 Array[1] _NELEMENTS ULONG64 38 _DATATYPE STRING H5T_FLOAT _STORAGESIZE ULONG 8 _PRECISION LONG 64 _SIGN STRING

IDLgt printaz_data 00000000 10000000 20000000 30000000 40000000 50000000 60000000 80000000 ()

7989

Arquivos - binaacuterios - imagens

JPEG JPEG200 TIFF GeoTIFF etc

Os formatos comuns de imagens satildeo bem suportados em muacuteltiplas plataformas para uso dentro de programas e interativamente

Alguns formatos tecircm opccedilatildeo de compressatildeo com perda eou sem perda

Armazenam imagens como arrays 2D ou 3D (3D frequumlentemente limitado a 3 ou 4 em uma das dimensotildees uma imagem em 3 ou 4 bandas) de inteiros ou (em alguns formatos) reais

Alguns formatos permitem armazenar metadados para caracterizar as imagens armazenadas

JPEG2000 e GeoTIFF (um subconjunto de TIFF) comuns em astronomia e aacutereas proacuteximas

8089

Arquivos - binaacuterios ndash imagens ndash exemplo (IDL)IDLgt printquery_tiff(issmap_2009tiffinfogeotiff=geo) 1

IDLgt helpinfo Structure ltd4eca4b8gt 18 tags length=144 data length=132 refs=1 CHANNELS LONG 4 DIMENSIONS LONG Array[2] IMAGE_INDEX LONG 0 NUM_IMAGES LONG 1 PIXEL_TYPE INT 1 TYPE STRING TIFF BITS_PER_SAMPLE LONG 8 POSITION FLOAT Array[2] RESOLUTION FLOAT Array[2] UNITS LONG 2 TILE_SIZE LONG Array[2] DESCRIPTION STRING ISS (2009) DATE_TIME STRING 20100218 012436()

IDLgt helpgeo Structure ltd4efa1b8gt 10 tags length=264 data length=262 refs=1 MODELPIXELSCALETAG DOUBLE Array[3] MODELTIEPOINTTAG DOUBLE Array[6 4] GEOGRAPHICTYPEGEOKEY INT 4035 GEOGSEMIMAJORAXISGEOKEY DOUBLE 25750000 GEOGSEMIMINORAXISGEOKEY DOUBLE 25750000()

IDLgt myimage=read_tiff(issmap_2009tiff) Lecirc a imagem para o array myimage

Obteacutem informaccedilotildees sobre o arquivo

8189

Arquivos - binaacuterios ndash formatos nativosLinguagens como IDL R Python Java tecircm seu formato nativo binaacuterio acessado em alto niacutevel Basta mandar salvar ler variaacuteveis no do arquivo a biblioteca padratildeo automagicamente faz todo o trabalho de decidir como gravar ler os dados

Conveniente de usar na proacutepria linguagem Mas raramente existem bibliotecas para ler gravar o formato nativo de uma linguagem a partir de outra Ex (IDL)

IDLgt savefile=2dspectrumsavmydatamyheadercorners_dcorners_averbosecompress SAVE Portable (XDR) compressed SAVERESTORE file SAVE Saved variable MYDATA SAVE Saved variable MYHEADER()

Pode ser lido com apenas (haacute formas mais elaboradas)

IDLgt restore2dspectrumsavverbose RESTORE Portable (XDR) compressed SAVERESTORE file RESTORE Save file written by ltunknowngtltunknowngt Thu Jan 27 191422 2011 RESTORE IDL version 801 (linux x86_64) RESTORE Restored variable MYDATA RESTORE Restored variable MYHEADER()

IDLgt helpmydatamyheadercorners_dcorners_aMYDATA FLOAT = Array[1201 1201]MYHEADER STRING = Array[144]()

8289

Arquivos - processamento em baixo niacutevel

Nem sempre um formato padratildeo eacute a melhor escolha para o problema

Nem sempre haacute escolha (pode-se ter que trabalhar com arquivos que jaacute foram escritos em algum formato proprietaacuterio)

Agraves vezes o formato eacute padratildeo mas natildeo haacute bom suporte a ele disponiacutevel

Em todos estes casos eacute necessaacuterio escrever rotinas em baixo niacutevel que vatildeo ler processar diretamente o conteuacutedo do arquivo

Preferencialmente criando interfaces de alto niacutevel para o programa que vai as usar

8389

Arquivos - processamento em baixo niacutevel - texto

Tomando o exemplo anterior onde as colunas eram de diferentes tipos

NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS dec18s0001 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0002 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0003 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 FLAT 5408757812500 460000 5 dec18s0004 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 DARK 5408757812500 460000 5

A forma mais simples de o ler diretamente eacute definir uma estrutura para receber cada linha e um array destas estruturas para receber todo o arquivo Ex (IDL)

IDLgt record=namecalmpos0filnameechlpos0d0disppos0d0targnameposdirclassmjd_obsitime0d0coadds0IDLgt nlines=file_lines(filesearch_scamtxt)IDLgt mydata=replicate(recordnlines-1)IDLgt header=

Depois de definidas as variaacuteveis que vatildeo receber os dados o arquivo pode ser lido

IDLgt openrunitfilesearch_scamtxtget_lunIDLgt readfunitheaderIDLgt readfunitmydataformat=(A14I8A15F104F104A18A19A15F158F105I15)IDLgt free_lununit

A gravaccedilatildeo de um arquivo texto poderia ser feita de forma semelhante apenas trocando openr por openw (abrir o arquivo para gravaccedilatildeo natildeo leitura) e readf por printf

O arquivo eacute aberto em uma unidade (unit) usada para especificar de onde eacute feita a leitura

Ao final o arquivo eacute fechado

8489

Arquivos - processamento em baixo niacutevel - texto

O que resulta em

IDLgt printheader NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS

IDLgt helpmydataMYDATA STRUCT = -gt ltAnonymousgt Array[4]

IDLgt helpmydata[0] Structure ltd5e38f68gt 11 tags length=136 data length=124 refs=3 NAME STRING dec18s0001 CALMPOS INT 0 FILNAME STRING NIRSPEC-5-AO ECHLPOS DOUBLE 62630000 DISPPOS DOUBLE 36450000 TARGNAME STRING HD85258 POSDIR STRING NIRSPEC-5-AOp1 CLASS STRING STAR MJD_OBS STRING 54087574 ITIME DOUBLE 10000000 COADDS INT 1

Este caso eacute mais complicado que os mais comuns por haver colunas de strings

Se todas fossem de nuacutemeros natildeo teria sido necessaacuterio especificar o formato explicitamente As colunas teriam sido adivinhadas pela biblioteca que lecirc o arquivo Poderia ter sido lido escrito soacute com um array de nuacutemeros sem estruturas

8589

Arquivos - processamento em baixo niacutevel - binaacuterio

Formatos binaacuterios podem ser definidos de qualquer forma O arquivo eacute apenas um conjunto de bytes Cabe ao software saber como os interpretar

Uma escolha comum para que sejam autodocumentados eacute incluir um cabeccedilalho de texto informando as caracteriacutesticas dos dados necessaacuterias para os ler

Ex (IDL) criar um arquivo que armazene um array de doubles com um cabeccedilalho informando as dimensotildees para que o programa que o lecirc saiba como ler os dados

Inventa dados e abre o arquivo

IDLgt data_to_write=dindgen(34)IDLgt openwunitbinary_exampledatget_lun

Escreve as dimensotildees como texto

IDLgt printfunitdimensions of the double array stored belowIDLgt printfunitsize(data_to_writedimensions)

Escreve os dados binaacuterios

IDLgt writeuunitdata_to_write

Fecha o arquivo

IDLgt free_lununit

Escreve em binaacuterio (write unformatted)

8689

Arquivos - processamento em baixo niacutevel - binaacuterio

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

dimensions of the double array stored below 3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

8789

Arquivos - processamento em baixo niacutevel - binaacuterioA leitura deste arquivo eacute igualmente simples

IDLgt header=IDLgt dims=[00]IDLgt openrunitbinary_exampledatget_lun

Lecirc as dimensotildees (armazenadas como texto)

IDLgt readfunitheaderIDLgt readfunitdims

Lecirc a parte binaacuteria depois de saber as dimensotildees

IDLgt data_read=dblarr(dims)IDLgt readuunitdata_read

Fecha o arquivo

IDLgt free_lununit

Verifica que os dados foram gravados e lidos corretamente

IDLgt printarray_equal(data_to_writedata_read) 1

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Lecirc dados binaacuterios (read unformatted)

8889

Sumaacuterio

5 ndash Slides em httpwwwppenteadonetpeapea04_strings_iopdf Strings Expressotildees regulares Arquivos

httpwwwppenteadonetpea

8989

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89

Strings - codificaccedilotildees

Do que se constitui um string

Caracteres satildeo um conceito de alto niacutevel e computadores soacute armazenam diacutegitos binaacuterios

Nada faz com que uma variaacutevel ou arquivo ldquosejamrdquo intrinsecamente caracteres

A correspondecircncia eacute determinada pelo uso de codificaccedilotildees da mesma forma que inteiros e reais satildeo tambeacutem codificados de alguma forma

A maior parte das linguagens assume uma codificaccedilatildeo (ou usam um default) algumas tecircm tipos diferentes para diferentes codificaccedilotildees e as que usam objetos podem ter objetos strings com codificaccedilatildeo variaacutevel

Antigamente a codificaccedilatildeo era sempre a mesma ASCII (American Standard Code for Information Interchange)

1 byte (8 bits) por caractere - 28 (256) valores diferentes

Uma tabela define que caractere eacute codificado por que nuacutemero na faixa 0-127

689

Strings - codificaccedilotildees - ASCII789

Strings - codificaccedilotildees - ASCII

Nem todos os caracteres ASCII satildeo visiacuteveis (printable) Alguns satildeo espaccedilos em branco (espaccedilos tabs etc) outros satildeo alguma forma de caractere de controle (CR LF etc)

O zero costuma ser reservado para controle significando um string vazio (se soacute tem 0) ou em algumas codificaccedilotildees (C) o fim do string

Os caracteres codificados por valores 128-255 natildeo satildeo parte do padratildeo ASCII A associaccedilatildeo varia de acordo com a codificaccedilatildeo escolhida

Sistemas que usam ASCII satildeo os mais simples caracteres sempre tecircm o mesmo tamanho em bytes (1 byte) Satildeo facilmente lidos processados e convertidos de para nuacutemeros

ASCII eacute a codificaccedilatildeo de texto mais comum mas

Ao contraacuterio do que muitos assumem ASCII natildeo eacute a uacutenica forma de codificar texto

ASCII natildeo eacute sinocircnimo de arquivo texto

Em anos recentes Unicode em suas vaacuterias formas (adiante) tem se tornado gradativamente mais comum

889

Strings - codificaccedilotildees - ASCII

Por que ASCII natildeo eacute sempre usado

Porque eacute insuficiente Natildeo conteacutem por exemplo

Caracteres modificados (com acentos cedilha)

Siacutembolos matemaacuteticos (aleacutem dos muito baacutesicos + - ^ gt lt = ) Ex part sum int plusmn ge le times infin neℝ ℤ forall exist ∮ ≌ nabla

Siacutembolos fiacutesicos Ex micro Å oplus

Letras gregas

Outros siacutembolos Ex rarr harr euro ordf deg pound yen iquest iexcl

Caracteres de outras liacutenguas (inclusive de muitos siacutembolos como a vaacuterias formas usadas em chinecircs e japonecircs)

989

Strings - codificaccedilotildees - Unicode

O que usar para natildeo ter as limitaccedilotildees do ASCII

O uacutenico padratildeo de uso dominante hoje eacute o Unicode

Desenvolvido para ser um padratildeo universal contendo ldquotodosrdquo os caracteres de ldquotodasrdquo as escritas e dados sobre os caracteres

Natildeo eacute imutaacutevel adiccedilotildees satildeo decididas pelo Unicode Consortium (httpwwwunicodeorg)

1089

Strings - codificaccedilotildees - Unicode

Haacute duas partes no Unicode o cataacutelogo (uacutenico) e as codificaccedilotildees (vaacuterias)

O cataacutelogo eacute definido independente de codificaccedilotildees Pode ser visto como um mapa onde os pontos de coacutedigo (codepoints) satildeo as

chaves e os valores satildeo os dados sobre aquele caractere

ldquoIn Unicode the letter A is a platonic ideal Its just floating in heaven A

This platonic A is different than B and different from a but the same as A and A and A

The idea that A in a Times New Roman font is the same character as the A in a Helvetica font but different from a in lower case does not seem very controversial but in some languages just figuring out what a letter is can cause controversy

Is the German letter szlig a real letter or just a fancy way of writing ss If a letters shape changes at the end of the word is that a different letter Hebrew says yes Arabic says no

Anyway the smart people at the Unicode consortium have been figuring this out for the last decade or so accompanied by a great deal of highly political debate and you dont have to worry about it Theyve figured it all out alreadyrdquo

de The absolute minimum every software developer absolutely positevely must know about Unicode and character sets (no excuses)

httpwwwjoelonsoftwarecomarticlesUnicodehtml

1189

Strings - codificaccedilotildees - UnicodeOs dados sobre um caractere Unicode satildeo importantes para suas buscas e identificaccedilatildeoIncluem nome e propriedades visiacutevel (printable) numeacuterico alfanumeacuterico maiuacutesculo minuacutesculo ldquoespaccedilordquo (blank) liacutengua matemaacutetico etc

ExsUnicode Character LATIN CAPITAL LETTER A (U+0041)Name LATIN CAPITAL LETTER ABlock Basic LatinCategory Letter Uppercase [Lu]Combine 0BIDI Left-to-Right [L]Mirror NIndex entries Latin Uppercase Alphabet Uppercase Alphabet Latin

Capital Letters LatinLower case U+0061Version Unicode 110 (June 1993)

Unicode Character INTEGRAL (U+222B)Name INTEGRALBlock Mathematical OperatorsCategory Symbol Math [Sm]Combine 0BIDI Other Neutrals [ON]Mirror YIndex entries Integral Signs INTEGRALSee Also latin small letter esh U+0283Version Unicode 110 (June 1993)

(resultados de httpwwwfileformatinfoinfounicodecharsearchhtm)

int

A

1289

Strings - codificaccedilotildees - Unicode

Unicode Character ANGSTROM SIGN (U+212B)Name ANGSTROM SIGNBlock Letterlike SymbolsCategory Letter Uppercase [Lu]Combine 0BIDI Left-to-Right [L]Decomposition LATIN CAPITAL LETTER A WITH RING ABOVE (U+00C5)Mirror NOld name ANGSTROM UNITIndex entries ANGSTROM SIGNLower case U+00E5Comments non SI length unit (=01 nm) named after A J ngstroumlm Å

Swedish physicist preferred representation is U+00C5Version Unicode 110 (June 1993)

Unicode Character GREEK SMALL LETTER ZETA (U+03B6)Name GREEK SMALL LETTER ZETABlock Greek and CopticCategory Letter Lowercase [Ll]Combine 0BIDI Left-to-Right [L]Mirror NUpper case U+0396Title case U+0396Version Unicode 110 (June 1993)

(resultados de httpwwwfileformatinfoinfounicodecharsearchhtm)

ζ

1389

Strings - codificaccedilotildees - UnicodeUnicode Character NABLA (U+2207)Name NABLABlock Mathematical OperatorsCategory Symbol Math [Sm]Combine 0BIDI Other Neutrals [ON]Mirror NIndex entries difference backward backward difference del NABLAComments backward difference gradient del used for Laplacian

operator (written with superscript 2)See Also white down-pointing triangle U+25BDVersion Unicode 110 (June 1993)

Java DatastringtoUpperCase() nablastringtoLowerCase() nablaCharacterUnicodeBlock MATHEMATICAL_OPERATORSCharactercharCount() 1CharactergetDirectionality() DIRECTIONALITY_OTHER_NEUTRALS [13]CharactergetNumericValue() -1CharactergetType() 25CharacterisDefined() YesCharacterisDigit() NoCharacterisIdentifierIgnorable() NoCharacterisLetter() NoCharacterisLetterOrDigit() NoCharacterisLowerCase() NoCharacterisWhitespace() No()

(resultados de httpwwwfileformatinfoinfounicodecharsearchhtm)

nabla

1489

Strings ndash Como codificar Unicode

Haacute vaacuterias formas Nenhuma simples como ASCII porque eacute necessaacuterio um nuacutemero muito maior de pontos de coacutedigo (haacute espaccedilo para 1 114 112 hoje haacute 109 449 alocados)

Apenas usar mais bytes com um nuacutemero constante por caractere exigiria pelo menos 21 bits por caractere (221 eacute 2 097 152)

Seria demais considerando que quase todos os caracteres escritos estatildeo entre os 128 do ASCII

Em quase todo texto 20 de cada 21 bits seriam 0

A maior parte das codificaccedilotildees usa formas mais elaboradas com um nuacutemero variaacutevel de bytes por caractere

Todas as codificaccedilotildees de uso comum tem o ASCII como subconjunto os 128 caracteres do ASCII satildeo codificados em forma idecircntica em ASCII e nas codificaccedilotildees usuais de Unicode

O que ajuda na compatibilidade software Unicode escrevendo texto que soacute conteacutem caracteres do ASCII produz texto idecircntico ao que seria produzido em ASCII

1589

Strings - codificaccedilotildees para Unicode

No mundo ocidental haacute apenas duas codificaccedilotildees de uso comum

UTF-8

ISO 8859-1 (tambeacutem chamado de Latin 1)

Por isso eacute necessaacuterio saber que codificaccedilatildeo usar ao trabalhar com Unicode

Alguns softwares formatos de arquivo informam a codificaccedilatildeo usada

Outros assumem que uma eacute usada (sem ter sido informada)

Outros tentam adivinhar quando natildeo satildeo informados qual eacute (esp navegadores)

Outros soacute perguntam para o usuaacuterio (esp editores de texto)

Sistemas operacionais oferecem variadas formas de digitar caracteres especiais

Pelos coacutedigos numeacutericos

Por programas seletores de caracteres Alguns seletores de caracteres (ex kcharselect do KDE) permitem fazer buscas pelo

nome ou propriedades

1689

Strings - Onde haacute suporte a Unicode em programaccedilatildeo

Linguagens variam muito

Desconhecem Unicode (soacute usam ASCII) C Fortran

Usam nativamente ASCII (inclusive no coacutedigo-fonte) mas tecircm tipos para strings Unicode e ou funccedilotildees para processar Unicode (em variados graus) C C++ IDL R

Usam nativamente Unicode (inclusive no coacutedigo-fonte) e tecircm bom suporte a strings Unicode Java Python Perl

Muitas vezes (mesmo quando Unicode pode ser usado em coacutedigo-fonte) caracteres Unicode satildeo escritos atraveacutes de ASCII com coacutedigos de escape para coacutedigos Unicode Exs

IDLgt p=plot(testtitle=Z(00C5222B))

C C++ Java Python u2207

ReferecircnciasCharacters vs byteshttpwwwtbrayorgongoingWhen200x20030426UTFThe absolute minimum every software developer absolutely positively must know about Unicode and character sets (no excuses)httpwwwjoelonsoftwarecomarticlesUnicodehtmlUnicode character searchhttpwwwfileformatinfoinfounicodecharsearchhtm

em IDL produz intÅ

produz nabla

1789

Strings - processamento baacutesico

Operaccedilotildees mais fundamentais que costumam ser suportadas em ldquotodasrdquo as linguagens bibliotecas padratildeo (exemplos usando sintaxe de IDL)

Atribuiccedilatildeo de literais

IDLgt a=some

IDLgt helpaA STRING = some

IDLgt printasome

Concatenaccedilatildeo

IDLgt b=a+ string

IDLgt helpbB STRING = some string

1889

Strings - processamento baacutesico

Valor loacutegico

String vazio (null string) eacute falso o resto eacute verdadeiro

IDLgt c=

IDLgt if c then printc is not empty string else printc is null string ()c is null string ()

IDLgt c=a

IDLgt if c then printc is not empty string else printc is null string ()c is not empty string

Espaccedilo natildeo eacute o mesmo que string vazio

IDLgt c=

IDLgt if c then printc is not empty string else printc is null string ()c is not empty string

1989

Strings - processamento baacutesico Comparaccedilotildees

IDLgt helpabA STRING = someB STRING = some string

IDLgt printb eq a 0

IDLgt printb gt a 1

IDLgt c=[ab9Some somesome other string]

IDLgt printc[sort(c)]format=(A) some9Somesomesome other stringsome string

IDLgt printa eq A 0

IDLgt printstrcmp(aAfold_case) 1

Comparaccedilotildees de ldquotamanhordquo (maior menor etc) satildeo comparaccedilotildees pela ordem de codificaccedilatildeo (ldquoalfabeacuteticardquo)

Algumas linguagens permitem definir o ordenamento (como considerar maiuacutesculasminuacuteculas letras com acentos nuacutemeros e siacutembolos) Exs Python C++ Java Perl

2089

Strings - processamento baacutesico Substrings

IDLgt printstrmid(abcdefg32)de

Algumas linguagens nativamente suportam iacutendices para indicar substrings C C++ Fortran Python Ex (Python)

gtgtgt s=abcdegtgtgt print(s[25])cde

Outras permitem que sejam definidos iacutendices por objetos strings

Busca de caracteres ou substrings

IDLgt printstrpos(abcdefgd) 3

IDLgt printstrpos(abcdefgj) -1

IDLgt printstrpos(abcdefgbc) 1

2189

Strings - processamento baacutesico

Outros

IDLgt printstrlen(1234567) 7

IDLgt printstrlen(1234567 ) 8

IDLgt printstrlen( 1234567 ) 9

IDLgt helpstrtrim( 1234567 2)ltExpressiongt STRING = 1234567

IDLgt helpstrtrim( 1234567 1)ltExpressiongt STRING = 1234567

IDLgt helpstrtrim( 1234567 0)ltExpressiongt STRING = 1234567

IDLgt printstrupcase(abcdEF)ABCDEF

IDLgt printstrlowcase(abcdEF)abcdef

Medindo quantos caracteres tem o string inclui espaccedilos em branco

Remoccedilatildeo dos brancos agrave esquerda agrave direita ou dos dois lados

2289

Strings - conversatildeo de outros tipos para strings

Eacute uma das operaccedilotildees mais comuns para gerar textos informativos e nomes escrever arquivos (aquivos texto discutidos adiante) etc

Eacute natildeo trivial jaacute que a conversatildeo pode ser feita de muitas formas diferentes

Para tipos fundamentais sempre haacute uma conversatildeo default tanto criando um string como usando algo tipo print (para strings terminal ou arquivos)

Todo comando tipo print (print printf sprintf string write etc) e toda escrita para arquivos texto eacute uma conversatildeo para string (terminais e arquivos texto soacute conteacutem strings)

2389

Strings - conversatildeo de outros tipos para strings

Exemplos de conversotildees (IDL)

IDLgt print[-109] -1 0 9

IDLgt print1d01B10 10000000 1 100000

IDLgt helpstring(1d01B10)ltExpressiongt STRING = 10000000 1 100000

IDLgt printfunitdblarr(343)

Tipos mais elaborados podem ou natildeo ter uma forma predefinida Com objetos eacute comum ser possiacutevel definir a conversatildeo (stringification) ao criar a classe

IDLgt h=hash(a109[01]18b)

IDLgt printh9 0 1a 100000180000 b

Strings

Coloca strings em um arquivo (adiante)

Strings criados por um meacutetodo da classe hash satildeo uma forma de representar o hash

2489

Strings - conversatildeo de outros tipos para strings

Algumas linguagens (Python IDL) tecircm mais de uma forma default de gerar strings Em Python uma forma eacute executaacutevel a outra eacute mais legiacutevel

In [30] x=arange(12)reshape(43)

In [31] print(x)[[ 0 1 2] [ 3 4 5] [ 6 7 8] [ 9 10 11]]

In [32] xOut[32]array([[ 0 1 2] [ 3 4 5] [ 6 7 8] [ 9 10 11]])

In [33] y=array([[ 0 1 2] [ 3 4 5] [ 6 7 8] [ 9 10 11]])

In [37] print(array_equal(xy))True

String mais legiacutevel

String executaacutevelPode ser usado para criar um objeto equivalente

2589

Strings ndash formataccedilatildeo expliacutecita

A formataccedilatildeo pode ser especificada se a conversatildeo default natildeo eacute adequada para definir a conversatildeo em um novo tipo

Cada linguagem tem sua sintaxe para formataccedilatildeo

Haacute dois estilos semelhantes em vaacuterias linguagens

Ambos os estilos satildeo sintaxes diferentes para a mesma ideacuteia Um coacutedigo especifica o tipo de dado sendo passado (inteiro real etc) e detalhes de como seraacute feito o string (largura do campo diacutegitos decimais alinhamento etc)

2689

Strings ndash formataccedilatildeo expliacutecita

Estilo Fortran

IDL

IDLgt print1d0+1d-9 10000000

IDLgt print1d0+1d-9format=(E1610)10000000010E+00

IDLgt printx=1d0+1d-9format=(A0F1613)X= 10000000010000

Estilo C (ldquoprintfrdquo)

IDL

IDLgt printformat=(x=1610e)1d0+1d-9x=10000000010e+00

Python

In [20] print(x=1610e (1e0+1e-9))x=10000000010e+00

Nenhum formato expliacutecito (default)

2789

Strings - formatos tipo Fortran

(apenas o principal ver documentaccedilatildeo para detalhes)

Ex (IDL)

IDLgt printx=1d0+1d-9format=(A0F1613)X= 10000000010000

Tambeacutem haacute modificadores para especificar alinhamento (-) se deve haver (ou ser suprimido) avanccedilo para a pŕoxima linha posiccedilatildeo dentro do campo etc

Coacutedigo Significado Exemplo(s)

A String (A) (10A)

I Inteiro decimal (I) (10I)(-2I)

B Inteiro binaacuterio (B) (10B)

Z Inteiro hexadecimal (Z) (10Z)

O Inteiro octal (O) (10O)

F Real ponto fixo (F)(F52)

E D Real ponto flutuante (E)(D1610)

G Real ponto fixo ou flutuante de acordo com o valor (G)(G10)

ldquordquo String literal (ldquox=rdquoI10)

X Caracteres em branco (A10XI)

2889

Strings - formatos tipo C (printf)(apenas o principal ver documentaccedilatildeo para detalhes)String com campos a serem substituiacutedos por valores (passados adiante) marcados por coacutedigos com

Ex (Python)In [20] print(x=1610e (1e0+1e-9))x=10000000010e+00

Haacute modificadores para especificar alinhamento como preencher o espaccedilo que sobra (espaccedilos zeros etc) para imprimir o sinal + etc

Coacutedigo Significado (tipo) Exemplo(s)

di Inteiro decimal (int) d 5d +05d

u Inteiro decimal sem sinal (unsigned int) u 7u

fF Real em ponto fixo (double float) f 136f

eE Real em ponto flutuante (double float) e 1610e

gG Real em ponto fixo ou flutuante decidido pelo valor (double float)

g 73G

xX Inteiro sem sinal hexadecimal (unsigned int) x 10X

o Inteiro sem sinal octal (unsigned int) o 5o

s String (string) s 10s

c Caractere (char) c

p Ponteiro - estilo C - (void ) p

literal

2989

Strings - conversatildeo de strings para outros tipos

Para gerar dados a partir de strings datas identificadores pedaccedilos de nomes valores numeacutericos armazenados em strings

Tambeacutem sempre haacute conversotildees default para os tipos baacutesicos onde o intepretador programa faz o possiacutevel para entender o string como um valor daquele tipo

Tipicamente eacute feito por casts (funccedilotildees de conversatildeo) reads (de strings ou arquivos texto (arquivos texto satildeo strings)) construtores de objetos ou implicitamente

3089

Strings - conversatildeo de strings para outros tipos - impliacutecitas

Exs (IDL)

IDLgt helpfix([17 17 171 -17 9 8])ltExpressiongt INT = Array[5]

IDLgt printfix([17 17 171 -17 9 8]) 17 17 17 -17 9

IDLgt printdouble([17 17 171 -17 9 8]) 17000000 17000000 17100000 -17000000 90000000

IDLgt readfunitabcd

IDLgt a=0d0IDLgt b=00IDLgt c=0IDLgt reads171d0 189d0 -9abcIDLgt helpabcA DOUBLE = 17100000B FLOAT = 189000C INT = -9

Converte o conteuacutedo do string para os tipos das variaacuteveis abcd (explicado adiante)

3189

Strings - conversatildeo de strings para outros tipos

Quando o default natildeo eacute suficiente (ou quando escrevendo o conversor em uma classe) costuma ser possiacutevel o fazer com formatos semelhantes aos formatos para gerar strings Exs (IDL)

IDLgt a=0d0IDLgt b=00IDLgt c=0IDLgt reads171d0 something 189d0-9abc READS Input conversion error Unit 0 File ltstdingt Error occurred at $MAIN$ Execution halted at $MAIN$

Natildeo funcionou porque sozinho ele natildeo conseguiu saber o que fazer com o ldquosomethingrdquo Usando um formato especiacutefico

IDLgt reads171d0 something 189d0-9 abcformat=(D6111XD611XI)

IDLgt helpabcA DOUBLE = 17100000B FLOAT = 189000C INT = -9

Exemplos mais complicados adiante (arquivos texto)

Variaacuteveis tecircm que ser definidas para informar para que tipo seraacute feita a conversatildeo default

3289

Strings - processamento natildeo baacutesicoOperaccedilotildees importantes e muito necessaacuterias mas que natildeo satildeo suportadas em todas as linguagens bibliotecas padratildeo

Testes (ex IDL)

IDLgt str=[afitsaFITSafitsaabfitsabcfits]

IDLgt printstrmatch(strfits) 1 0 0 1 1

IDLgt printstrmatch(strfitsfold_case) 1 1 0 1 1

IDLgt printstrmatch(strfitsfold_case) 1 1 1 1 1

IDLgt printstrmatch(strfits) 1 0 0 0 0

IDLgt printstrmatch(strfits) 0 0 0 1 0

3389

Strings - processamento natildeo baacutesico

Operaccedilotildees importantes e muito necessaacuterias mas que natildeo satildeo suportadas em todas as linguagens bibliotecas padratildeo

Separaccedilatildeo de partes (Ex IDL)

IDLgt printstrsplit(2011- 131 -extract)format=(A)2011131

Processamento de nomes de arquivos diretoacuterios (Ex IDL)

IDLgt printfile_dirname(some_directoryanother_directorysome_filetxt)some_directoryanother_directory

IDLgt printfile_basename(some_directoryanother_directorysome_filetxt)some_filetxt

IDLgt printfile_basename(another_directorysome_filetxttxt)+_alteredtxtsome_file_alteredtxt

3489

Strings - processamento natildeo baacutesico

Codificaccedilotildees (Ex Python 3)

gtgtgt s=infinite money infinNeuro sign

gtgtgt print(s)infinite money infineuro

gtgtgt print(ascii(s))infinite money u221eu20ac

gtgtgt print(sencode(utf-8))binfinite money xe2x88x9exe2x82xac

3589

Strings - processamento natildeo baacutesico

Perl eacute a linguagem mais avanccedilada para processamento de strings tem suporte nativo a muitas outras operaccedilotildees a semacircntica da linguagem eacute voltada principalmente para processar strings expressotildees regulares (de vaacuterios tipos) natildeo satildeo strings fazem parte da semacircntica

Ex (sem o objetivo que seja compreensiacutevel apenas para indicar o estilo)

Ler um arquivo contendo campos com nomes separados de valores por ()

temperature 10008name some modelx_dimension 100y_dimension 100z_dimension 50()

Armazenado-o em um mapa O que pode ser feito com apenas

While (ltgt) Loop over input linesPut pre-colon text into $1 post-colon into $2 if (m (S+) (+) ) Use $1 as key $2 as value $file_data$1 = $2

3689

Expressotildees regulares - definiccedilatildeo

Expressotildees regulares (regular expressions regex) satildeo a mais poderosa ferramenta para fazer buscas e separar substrings

Regex satildeo uma linguagem com o uacutenico objetivo de especificar propriedades de strings

Implementadas em graus diferentes em todas as linguagens modernas e modernizadas facilita encontrar uma expressatildeo jaacute pronta pois satildeo quase iguais em qualquer linguagem

Estatildeo na biblioteca padratildeo em IDL Python R Perl

Em C++ e Java em bibliotecas comuns (Boost Jregex)

Para que servem

Uma expressatildeo regular especifica propriedades de strings

O interpretador de expressotildees regulares (regular expression engine) recebe a expressatildeo e o string a analisar e determina se o string corresponde (matches) agrave expressatildeo regular

Em alguns casos o interpretador pode tambeacutem informar que parte(s) do string corresponde(m) a que parte(s) da expressatildeo regular e realizar processamentos com estas partes

3789

Expressotildees regulares ndash exemplos de usos Separar partes de strings

Encontrar linhas em arquivos que tenham nomes valores e comentaacuterios e separar estes pedaccedilos

Escalar com comentaacuterio

SLITPA = 351979 Slit position angle

Array 1D sem comentaacuterio (se extendendo por vaacuterias linhas)

BAND_BIN_CENTER = (03505400358950036629003732200379490 0387900104598)

Escalares em diferentes formatos

Total Mechanical Luminosity 15310E+03resources_usedwalltime=005603

Pedaccedilos de nomes

6063 17836E-20 2456 T FeIX((3Pe)3d(2PE)4p_1Po-3s2_3p6_1Se)

Datas separando ano mecircs dia hora (em vaacuterios formatos diferentes)

DATE-OBS= 2006-12-18 universal date of observationDATE_TIME = 2010-07-19T161032START_TIME = 2006-182T225102850Z

3889

Expressotildees regulares ndash exemplos de usos

Separar partes de strings Separar partes de nomes de arquivos (por significarem algo como identificar o

conteuacutedo)

specdec18s0041fitsscamdec18i0054fits15_7_mts_hmpixselh_mr15sav15_7_mts_hwpixselh_mr15sav16_3_mts_hwpixselb_mr16savreadmodel5l_-1_000010000_10000_r05_030_08196_0100000_005000000_1000eps

Determinar se um string eacute um nuacutemero (inteiro real fixo flutuante)

Encontrar identificadores Exs nomes de cataacutelogos endereccedilos HTTPFTP endereccedilos de email

Separar campos em arquivos sendo lidos onde as linhas natildeo tecircm a mesma formataccedilatildeo algumas linhas com colunas separadas por espaccedilos outras por tabs outras por

siacutembolos ignorando linhas de comentaacuterios e linhas vazias

3989

Expressotildees regulares - usoEx (IDL) encontrar nomes de arquivos com algumas propriedades

IDLgt printfilesformat=(A)CM_1477475933_1_viscubCM_1477476864_1_ircubCM_1477476864_1_irgcubCM_1477476864_1_viscubCM_1477477826_1_ircubCM_1477477826_1_irgcubCM_1477477826_1_viscubmosaic2cub

IDLgt printstregex(files+irgcubboolean) 0 0 1 0 0 1 0 0

A expressatildeo regular eacute +irgcub Especifica uma ou mais ocorrecircncias seguidas (+) de qualquer caractere () seguido de uma ocorrecircncia de irgcub (o ponto vem precedido do caractere de

escape () para ser entendido literalmente como um ponto e natildeo como o seu significado especial (qualquer caractere)

Esta aplicaccedilatildeo do interpretador (stregex) retorna um valor Booleano (verdadeirofalso) para cada elemento do string passado (files) que informa se aquele elemento correspondia agravequela expressatildeo regular

Este eacute um exemplo artificial Seria mais faacutecil ter usado strmatch(filesirgcub)

4089

Expressotildees regulares - uso

Em casos como este tipicamente o resultado de stregex seria usado como filtro para selecionar apenas os elementos do array de strings que satisfazem agravequela expressatildeo regular

IDLgt w=where(stregex(files+irgcubboolean)null)IDLgt printfiles[w]format=(A)CM_1477476864_1_irgcubCM_1477477826_1_irgcub

Ex (IDL) Determinar que strings conteacutem uma data no formato yyyy-mm-dd

IDLgt strs=[201002012010-02-012010-2-1aaaa-mm-ddT2010-02-01J]IDLgt printstregex(strs[0-9]4-[0-9]2-[0-9]2boolean) 0 1 0 0 1

Esta expressatildeo regular especifica quatro repeticcedilotildees (4) de diacutegitos (caracteres na faixa [0-9]) seguido de um (-) seguido de duas repeticcedilotildees (2) de dois diacutegitos ([0-9]) seguido de um (-) seguido de duas repeticcedilotildees (2) de dois diacutegitos ([0-9])

Uma expressatildeo regular apenas um pouco mais elaborada poderia corresponder aos 3 formatos de data no array acima E poderia se impedir que a uacuteltima (com outros caracteres antes e depois da data) seja aceita

4189

Expressotildees regulares - regras - caracteres ldquonormaisrdquo

Uma expressatildeo regular usa caracteres ldquonormaisrdquo e especiais para especificar o que se vai procurar na ordem em que aparecem na expressatildeo

Se um caractere eacute normal (natildeo eacute um dos especiais mostrados adiante) ele especifica uma ocorrecircncia daquele caractere

Ex J eacute uma expressatildeo regular que corresponde a qualquer string onde ocorra J Jaacute JA soacute corresponde a strings que tenham JA dentro

Exs (IDL)

IDLgt strs=[JJJJJJaJAjaJa]

IDLgt printstregex(strsJboolean) 1 1 1 0 1

IDLgt printstregex(strsJAboolean) 0 0 1 0 0

4289

Expressotildees regulares - regras - caracteres especiaisCaracteres especiais tecircm outros significados Para significar literalmente aquele caractere deve ser escapado (escaped) com um

Siacutembolo significado exemplo Corresponde(m) Escape o caractere seguinte deve ser interpretado

literalmente natildeo como especial aa

Qualquer caractere ab ajb aab abb jafbc

+ Uma ou mais repeticcedilotildees do que vem agrave esquerda a+b ab aab bab baabh

() Subexpressatildeo para agrupar termos afetados por um caractere especial (como parecircnteses em notaccedilatildeo matemaacutetica)

(ab)+c abc ababc dabababcg

Zero ou mais repeticcedilotildees dos termos agrave esquerda ab abbaab caaabg

Zero ou uma repeticcedilatildeo dos termos agrave esquerda ab b ab cabd cbd

| Alternaccedilatildeo qualquer um dos dois agrave esquerda a|bc ac bc jacd jbcd

n Exatamente n repeticcedilotildees do termo agrave esquerda a2b aab daaabg

n1n2 De n1 a n2 repeticcedilotildees do termo agrave esquerda a12b ab aab aaab gaaabbd

^ Acircncora (no comeccedilo) nada agrave esquerda ^ab ab abb

$ Acircncora (no fim) nada agrave direita ab$ abaab

[] Conjunto de valores (explicado adiante)

4389

Expressotildees regulares - regras - conjuntos de valores

[] denota um conjunto de valores que pode conter

Uma lista de coisas que devem corresponder Ex [abc] signfica qualquer caractere no conjunto abc Correspondem a esta

expressatildeo abcabha

Uma lista de coisas que natildeo podem corresponder [^abc] significa qualquer coisa que natildeo seja a b ou c Correspondem a esta

expressatildeo d jgs gg

Faixas de valores [0-9] signfica qualquer diacutegito [0-9a-zA-Z] significa qualquer diacutegito ou letra

Classes de valores como algumas faixas e outros conjuntos ocorrem com muita frequumlecircncia haacute nomes

especiais para eles Estes (em IDL) vecircm entre [] ex [[digit] significa o mesmo que [0-9]

4489

Expressotildees regulares - regras - classes de valores

Classe signficado

alnum Caracteres alfanumeacutericos 0-9a-zA-Z

alpha Caracteres alfabeacuteticos a-zA-Z

cntrl Caracteres de controle ASCII (natildeo visiacuteveis coacutedigos 1 a 31 e 127)

digit Diacutegitos (decimais) 0-9

graph Caracteres visiacuteveis ASCII 33 a 126 (natildeo inclui o espaccedilo)

lower Letras minuacutesculas a-z

print Caracteres ldquoimprimiacuteveisrdquo (visiacuteveis e o espaccedilo) ASCII 32 a 126

punct Caracteres de pontuaccedilatildeo $amprsquo()+-lt=gt[]^_lsquo|~

space Os caracteres ldquoem brancordquo (blank) espaccedilo tab tab vertical CR LF (ASCII 32 e 9-13)

upper Letras maiuacutesculas A-Z

xdigit Diacutegitos hexadecimais 0-9A-Fa-f

lt Comeccedilo de palavra (palavra definida como sequumlecircncia de coisas natildeo space)

gt Fim de palavra (palavra definida como sequumlecircncia de coisas natildeo space)

Estas satildeo apenas as principais Algumas implementaccedilotildees tecircm muito mais (em particular nas linguagens que usam Unicode nativamente)

4589

Expressotildees regulares - exemplos

Determinar se strings satildeo nuacutemeros (Ex IDL)

IDLgt str=[9-18 875-812-45913E9-98d7a188d032f5]

Inteiros

IDLgt intexpr=^[-+][0-9]+$

IDLgt printstregex(strintexprboolean) 1 1 0 0 0 0 0 0 0 0

Ponto flutuante

IDLgt fpexpr=^[-+](([0-9][0-9]+)|([0-9]+[0-9]))([eEdD][-+][0-9]+)$

IDLgt printstregex(strfpexprboolean) 1 1 0 1 1 1 1 1 0 0

Sinal opcional

1 ou mais diacutegitos

Sinal opcional

0 ou mais diacutegitos opcionalmente seguidos de um ponto e 1 ou mais diacutegitos

1 ou mais diacutegitos opcionalmente seguidos de um ponto e 0 ou mais diacutegitos

ou Expoente opcional letra do expoente seguida de sinal opcional seguido de um ou mais diacutegitos

4689

Expressotildees regulares ndash extraccedilatildeo

Interpretadores de expressotildees regulares costumam oferecer mais que apenas testar se um string corresponde a uma expressatildeo

Em geral tambeacutem podem retornar que parte(s) do string corresponde(m) agrave expressatildeo

Ex (IDL) Determinar se um string conteacutem uma data incluindo os formatos

IDLgt dates=[2011-01-312011 1 3120110131something done on y2011m1d31 with something]

E extrair a data de dentro do string

IDLgt expr=[0-9]4[0-9]12[0-9]12

(4 diacutegitos)(qualquer separador)(1 a 2 diacutegitos)(qualquer separador)(1 a 2 diacutegitos)

IDLgt printstregex(datesexprextract)format=(A)2011-01-312011 1 31201101312011m1d31

Como agora separar ano mecircs e dia Com uma busca e uma extraccedilatildeo para cada Poderia ser mais eacute mais faacutecil com uma uacutenica expressatildeo regular

4789

Expressotildees regulares - aleacutem de apenas testes

Tambeacutem podem retornar que parte(s) do string correspondem agrave expressatildeo toda e agraves suas subexpressotildees (partes da expressatildeo delimitadas por parecircnteses)

Ex (IDL) Separar pedaccedilos de datas Neste caso para a expressatildeo ficar menor assumindo um formato simples (yyyy-mm-ddThhmmssfff) Mas poderia ser um formato mais livre como no exemplo anterior

IDLgt str=Stuff observed on 2011-01-31T123924983 with some instrumentIDLgt expr=([0-9]4)-([0-9]2)-([0-9]2)T([0-9]2)([0-9]2)([0-9]2[0-9]3)

(quatro diacutegitos)-(2 diacutegitos)-(2 diacutegitos)T(2 diacutegitos)(2 diacutegitos)(2 diacutegitos3 diacutegitos)

IDLgt pieces=stregex(strexprextractsubexpr)IDLgt printpiecesformat=(A)2011-01-31T12392498320110131123924983IDLgt d=julday(pieces[2]pieces[3]pieces[1]pieces[4]pieces[5]pieces[6])IDLgt printdformat=(F166) 2455593027372

Expressatildeo inteiraPrimeira subexpressatildeoSegunda subexpressatildeoTerceira subexpressatildeoQuarta subexpressatildeoQuinta subexpressatildeoSexta subexpressatildeo

4889

Expressotildees regulares - referecircncias httpxkcdcom208

Viacutedeos do Software Carpentry

httpsoftware-carpentryorg4_0regexp

4989

Arquivos

Quase todo programa precisa armazenar dados em arquivos

Podem ser pequenos arquivos de paracircmetros ou enormes arquivos de dados produzidos ou a processar

Apesar do sugerido pela praacutetica comum arquivos texto natildeo satildeo sempre a melhor escolha para armazenar dados - e haacute muitas formas diferentes de os usar

Qual eacute a melhor escolha

Assim como para linguagens ou contecirciners natildeo existe ldquoo melhor formatordquo Cada um tem suas vantagens e desvantagens

Dados diferentes (mesmo se usados pelos mesmos programas) em geral se adequam melhor a formatos diferentes

5089

Arquivos - texto X binaacuterios

Em qualquer formato arquivos satildeo armazenados como diacutegitos binaacuterios

Mas haacute duas formas principais como eles podem ser codificados

Arquivos baseados em texto (text files)

Dados satildeo transformados em caracteres usando alguma formataccedilatildeo (mesmo se impliacutecita) e escritos com alguma codificaccedilatildeo de texto (comumente mas natildeo necessariamente ASCII)

Um arquivo texto eacute um ou mais strings As mesmas conversotildees tecircm que ser feitas depara outros tipos

Arquivos ldquobinaacuteriosrdquo (binary files)

Embora todo arquivo seja binaacuterio este nome costuma ser usado soacute para aqueles em que os dados natildeo estatildeo na forma de texto

Com frequumlecircncia (nem sempre) os dados satildeo gravados de forma idecircntica a como satildeo armazenados na memoacuteria

Muitos formatos usam uma mistura de partes em texto e partes binaacuterias

Um cabeccedilalho (header) de texto que daacute informaccedilotildees (metadados) sobre os dados armazenados na parte binaacuteria que vem depois

O cabeccedilalho conteacutem em especial informaccedilotildees sobre como ler os dados binaacuterios

5189

Arquivos - texto X binaacuterios

Vantagens de arquivos texto

Legiacuteveis por pessoas (human readable)

Podem ser auto-suficientes todo o necessaacuterio para os ler e entender o que conteacutem pode ser obtido olhando o arquivo

Satildeo os menos especiacuteficos a linguagens software normalmente satildeo escritos em ASCII ou Unicode e sempre haacute algum suporte a ler escrever texto em linguagens software

Haacute alguns formatos padratildeo para texto (exs CSV XML) que satildeo suportados em muitas plataformas diferentes

5289

Arquivos - texto X binaacuterios

Vantagens de arquivos binaacuterios

Em geral natildeo haacute conversotildees entre o os dados como armazenados na memoacuteria O que torna o armazenamento mais eficiente e sem alteraccedilotildees nos valores

A maior parte dos formatos padronizados eacute binaacuteria Exs FITS cube CDF NetCDF HDF HDF5 JPEG JPEG2000 TIFF GeoTIFF MPEG etc

Eacute mais comum que haja bibliotecas prontas (ateacute de alto niacutevel) para consulta leitura e gravaccedilatildeo

Os formatos melhor desenhados satildeo autodocumentados (em texto ou binaacuterio) para os ler natildeo eacute necessaacuterio conhecimento preacutevio sobre como os dados foram armazenados

Toda linguagem plataforma costuma ter seu formato binaacuterio mais nativo que costuma ser o mais faacutecil para leitura gravaccedilatildeo Em particular nas de alto niacutevel que tecircm formatos autodocumentados (especialmente

em IDL R Python Java)

Muitos formatos tecircm opccedilatildeo de compressatildeo dos dados

5389

Arquivos - proprietaacuterios X padratildeo

Independente da escolha texto binaacuterio programas devem escolher entre usar um formato proacuteprio ou um formato padronizado

A principal vantagem de formatos proacuteprios eacute que satildeo definidos da forma mais conveniente para a aplicaccedilatildeo que os usa simplificando leitura e gravaccedilatildeo e potencialmente otimizando recursos (acesso ao disco tamanho do arquivo etc)

A principal desvantagem de formatos proacuteprios eacute ser necessaacuterio escrever todo o coacutedigo para os ler gravar

Pode dar mais trabalho que usar um formato geneacuterico que natildeo seja exatamente o que melhor se encaixa na aplicaccedilatildeo

O coacutedigo para processar o formato em geral vai ser menos completo e conveniente de usar que o de um formato bem estabelecido usado por muitos outros em muitos ambientes

Cada novo software que for usar estes arquivos vai precisar compartilhar do mesmo coacutedigo ou precisar de coacutedigo novo (em particular se em outra linguagem) para ler gravar naquele formato

Eacute necessaacuterio documentar o formato e decidir sobre como ele seraacute definido

Se outros jaacute colocaram muito trabalho desenvolvendo bons formatos padratildeo bem suportados em muitos ambientes por que ter o trabalho de reinventar (e reprogramar redocumentar e retestar) a roda

5489

Arquivos - padrotildees comuns em astronomia (exs adiante)

Texto

CSV Comma-separated values - bem suportado por muitos softwares

ldquoColunas fixasrdquo Natildeo eacute um padratildeo bem definido mas eacute praacutetica comum para tabelas (2D)

XML Extensible Markup Language - O padratildeo texto mais flexiacutevel de grande uso em programaccedilatildeo geral para armazenar qualquer coisa com frequumlecircncia de forma hieraacuterquica Bem suportado por linguagens modernas (e modernizadas) e bibliotecas das principais

linguagens gerais Alta complexidade o torna trabalhoso de usar

5589

Arquivos - padrotildees comuns em astronomia (exs adiante)Binaacuterios

FITS Flexible Image Transport System - o mais comum para observaccedilotildees astronocircmicas Conteacutem os dados (em geral arrays 1D 2D ou 3D) e documentaccedilatildeo (nos cabeccedilalhos) sobre a origem e caracteriacutesticas dos dados Tambeacutem usado para armazenar tabelas de dados quaisquer mesmo que natildeo sejam observaccedilotildees (especialmente pelo STSCI) Variam muito em qualidade de documentaccedilatildeo

NetCDF Network Common Data Form - evoluccedilatildeo do CDF autodocumentado eacute comum e bem suportado para vaacuterios arrays de dados

HDF5 Hierarchical Data Format ndash autodocumentado comum e bem suportado permitindo aleacutem de simples arrays estruturas (eacute um formato hieraacuterquico)

Formatos de imagens JPEG JPEG2000 TIFF GeoTIFF etc - voltados para arrays 2D3D de inteiros ou (em alguns casos) reais com ou sem compressatildeo JPEG2000 tem caracteriacutesticas mais avanccediladas como imagens multiresoluccedilatildeo

Formatos vetoriais PS EPS DXF SHP SVG - variados niacuteveis de suporte a armazenamento de vetores e formas em 2D ou 3D

ISIS Cube semelhante em caracteriacutesticas ao FITS mais usado em sensoriamento remoto geociecircncias e ciecircncias planetaacuterias em geral para observaccedilotildees 1D 2D ou 3D

Formatos nativos de linguagens todo o trabalho de leitura e gravaccedilatildeo eacute feito automagicamente pela biblioteca padratildeo em IDL R Python Java

5689

Arquivos texto - newlines

Apesar do que possa parecer arquivos texto natildeo tecircm intrinsecamente vaacuterias linhas Arquivos texto satildeo soacute uma sequumlecircncia 1D de caracteres em alguma codificaccedilatildeo Separaccedilatildeo em linhas (equivalente a interpretar o arquivo como 2D em linhas e colunas) eacute

especificada por convenccedilotildees Natildeo haacute apenas uma convenccedilatildeo para o fim de linhas

A mais primitiva convenccedilatildeo eacute separaccedilatildeo nenhuma estipula-se que linhas tenham um nuacutemero fixo N de caracteres e cabe ao software que lecirc o arquivo entender que uma linha nova ocorre regularmente a cada N caracteres

Eacute a forma menos portaacutevel e mais inconveniente eacute necessaacuterio o conhecimento preacutevio (ou por inspeccedilatildeo do arquivo) de quantos caracteres haacute por linha

A maior parte dos editores de texto natildeo vai saber separar linhas desta forma (por falta deste conhecimento preacutevio) Exemplo (de um FITS real)

SIMPLE = T Fits standard BITPIX = 16 Bits per pixel NAXIS = 0 Number of axes EXTEND = T File may contain extensions

O que com as linhas quebradas nos lugares certos seria

SIMPLE = T Fits standard BITPIX = 16 Bits per pixel NAXIS = 0 Number of axes EXTEND = T File may contain extensions

5789

Arquivos texto - newlines

A forma mais comum de especificar linhas eacute com um marcador do final de linha (newline)

Eacute um caractere especial natildeo normalmente presente no texto que serve para marcar fim de linhas

Mas natildeo haacute soacute um padratildeo de newline Os mais comuns

LF (Line Feed ASCII 10) ndash Unix Linux Mac OS X

CR - (Carriage Return ASCII 13) - Mac OS lt10

CR+LF (CR seguido de LF) - Windows DOS

Eacute o motivo de o Notepad (Windows) natildeo entender as quebras de linha de arquivos escritos com o formato nativo de Linux o arquivo soacute tem LF enquanto o editor espera CR+LF

Alguns sistemas (strings em vaacuterias linguagens por exemplo) usam o coacutedigo de escape n para indicar newline que eacute codificado de acordo com o padratildeo sendo usado

Em geral bibliotecas de leitura e gravaccedilatildeo de arquivos usam (default pelo menos) o newline nativo do sistema em que satildeo usadas

Programas de conversatildeo entre os sistemas satildeo comuns (ex dos2unix)

O Wordpad identifica se for usado soacute LF e quebra as linhas de acordo

5889

Arquivos - texto - CSV

Comma-separated values

O formato mais padronizado para tabelas (arrays 2D) em texto (frequentemente mas natildeo necessariamente ASCII)

Bem suportado por bibliotecas padratildeo de linguagens e outros softwares (Excel Calc Origin Google Docs etc)

Conteacutem Linhas de cabeccedilalho (opcionais mas recomendadas) linhas com qualquer texto geral

descrevendo o arquivo e em geral uma linha de tiacutetulo para as colunas da tabela Uma (apenas uma) tabela onde todas as linhas tecircm o mesmo nuacutemero de colunas

Colunas separadas por viacutergulas (opcionalmente pode ser outro separador) Linhas terminadas por newline (qualquer que seja) Strings delimitados por ldquo ldquo

Ex

NAMECALMPOSFILNAMEECHLPOSDISPPOSTARGNAMEPOSDIRCLASSMJD-OBSITIMECOADDSdec18s00010NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001dec18s00020NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001dec18s00120NIRSPEC-5-AO635800364500itan140NIRSPEC-5-AOp2 TITAN5408763000001dec18s00140NIRSPEC-5-AO626300364500itan140NIRSPEC-5-AOp1 TITAN5408763000001dec18s00151NIRSPEC-5-AO626300364500itan140NIRSPEC-5-AOp1ARC5408764000001dec18s00160NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001

Natildeo eacute necessaacuterio que as colunas tenham largura constante

Cabeccedilalho

5989

Arquivos - texto - CSVHaacute amplo suporte a leitura e gravaccedilatildeo de CSV sem precisar recorrer a procedimentos de baixo niacutevel

Podem ser diretamente importados em Excel Calc Origin Google Docs ou lido facilmente com bibliotecas padratildeo comuns Ex (IDL)

IDLgt c=read_csv(filesearch_scamcsvheader=h)IDLgt printhNAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS

IDLgt helpc Structure ltc8bca508gt 11 tags length=5256 data length=5248 refs=1 FIELD01 STRING Array[41] FIELD02 LONG Array[41] FIELD03 STRING Array[41] FIELD04 DOUBLE Array[41] FIELD05 DOUBLE Array[41] FIELD06 STRING Array[41] FIELD07 STRING Array[41] FIELD08 STRING Array[41] FIELD09 STRING Array[41] FIELD10 DOUBLE Array[41] FIELD11 LONG Array[41]

IDLgt printcfield01[03]dec18s0001 dec18s0002 dec18s0003 dec18s0004

IDLgt printcfield03[03]NIRSPEC-5-AO NIRSPEC-5-AO NIRSPEC-5-AO NIRSPEC-5-AO

6089

Arquivos - texto - CSVEx (IDL) Criaccedilatildeo de um CSV com uma tabela de valores

Criaccedilatildeo de 3 arrays 1D (12 elementos) um para cada coluna

IDLgt x=dindgen(3)IDLgt y=dindgen(4)IDLgt xx=reform(rebin(x34)12)IDLgt yy=reform(rebin(reform(y14)34)12)IDLgt f=xx+yy10IDLgt helpxxyyfXX DOUBLE = Array[12]YY DOUBLE = Array[12]F DOUBLE = Array[12]

Escrita do arquivo

IDLgt write_csvexamplecsvxxyyfheader=[XYX+10Y]

ResultadoXYX+10Y000000000000000000000000100000000000000010000000200000000000000020000000000000001000000010000000100000001000000011000000()

6189

Arquivos - texto - ldquoColunas regularesrdquoFixed column width

Natildeo eacute exatamente um padratildeo Eacute uma praacutetica comum

Armazena uma tabela (array 2D) de forma regular simples de ser interpretada e lida

Costumam ter linha(s) de cabeccedilalho descrevendo o conteuacutedo do arquivo em geral com uma linha para os nomes das colunas

As demais linhas conteacutem os dados sempre ocupando a mesma largura por coluna e escritos no mesmo formato em cada coluna

Costumam ser simples de ler inclusive interativamente (exs Excel Calc Origin read_ascii)

Ex (IDL) Uma simples tabela soacute de nuacutemeros

wavl CH4=33 wavl CH4=25 wavl CH4=10 wavl CH4=08 wavl CH4=05 wavl CH4=026 wavl CH4=02 477330000 0090130 477330000 0091110 477330000 0089250 477330000 0087000 477330000 0087140 477330000 0090080 477330000 0088110 480040000 0090930 480040000 0091930 480040000 0090160 480040000 0087930 480040000 0088110 480040000 0090950 480040000 0089090 482750000 0091710 482750000 0092730 482750000 0091060 482750000 0088850 482750000 0089080 482750000 0091810 482750000 0090060 485450000 0092530 485450000 0093570 485450000 0092000 485450000 0089810 485450000 0090100 485450000 0092730 485450000 0091090

IDLgt a=read_ascii(specs_27s_ntxtdata_start=1header=header)IDLgt printheader wavl CH4=33 wavl CH4=25 wavl CH4=10 wavl CH4=08 wavl CH4=05 wavl CH4=026 wavl CH4=02 IDLgt helpa Structure ltd423c9a8gt 1 tags length=224 data length=224 refs=1 FIELD01 FLOAT Array[14 4]

6289

Arquivos - texto - ldquoColunas regularesrdquoJaacute um arquivo um pouco mais difiacutecil de ler

NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS dec18s0001 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0002 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0003 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 FLAT 5408757812500 460000 5 dec18s0004 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 DARK 5408757812500 460000 5

Por ter colunas de tipos diferentes (strings inteiros reais) natildeo eacute possiacutevel o ler em um simples array Mas eacute faacutecil o colocar em uma estrutura de arrays onde cada campo eacute uma coluna

Especificando interativamente como interpretar as linhasIDLgt templ=ascii_template(filesearch_scamtxt)

Nome do campo (default mostrado)

Tipo do campo (identificado automaticamente)

Posiccedilatildeo (caracter) do comeccedilo (identificada automaticamente)

Linha de exemplo para verificar as colunas

6389

Arquivos - texto - ldquoColunas regularesrdquoDepois de feito o template o arquivo pode ser lido com apenas

IDLgt a=read_ascii(filesearch_scamtxttemplate=templ)IDLgt helpa Structure ltd4ec4608gt 11 tags length=416 data length=416 refs=1 FIELD01 STRING Array[4] FIELD02 LONG Array[4] FIELD03 STRING Array[4] FIELD04 FLOAT Array[4] FIELD05 FLOAT Array[4] FIELD06 STRING Array[4] FIELD07 STRING Array[4] FIELD08 STRING Array[4] FIELD09 FLOAT Array[4] FIELD10 FLOAT Array[4] FIELD11 LONG Array[4]IDLgt printafield01dec18s0001 dec18s0002 dec18s0003 dec18s0004IDLgt printafield04 626300 626300 626300 626300

O template (uma estrutura contendo dados sobre como ler o arquivo) pode ser usado para outros arquivos no mesmo formato No lugar de ter sido criado interativamente poderia ter sido lido de algum arquivo Poderia ter especificado nomes para os campos que seriam mais amigaacuteveis que coias como FIELD11

6489

Arquivos - texto - XML

Extensible Markup Language

Admite grande flexibilidade e por isso pode ter alta complexidade

Valores satildeo colocados dentro de uma estrutura em hieraacuterquica (em uma aacutervore) com os noacutes identificados pelos seus nomes (chaves)

Largamente usado em muitas aacutereas para armazenar conjuntos arbitraacuterios de quaisquer estruturas de dados

A maioria das aplicaccedilotildees usa um formato que eacute um subconjunto do XML especificado por um Schema comumente em um arquivo XML DTD (Document Type Definition)

6589

Arquivos - texto ndash XML ndash exemplos de usos

Armazenamento de dados de aplicaccedilotildees web (comum para exportar importar dados MediaWiki DokuWiki WordPress ADS Lattes etc)

Documentos Office (docx pptx xlsx) OpenOffice (odt opd ods)

Como versotildees de outros formatos FITSML XDF

ldquoScientific Dataset XML NASAs Astronomical Data Center (ADC) sponsors a number of research projects that

use XML for scientific data representation The XML activities at the ADC are sponsored and supported by the NASA Office of Space Science Applied Information Systems Research Program (AISRP)rdquo - httpxmlcoverpagesorgnasa-adchtml

Astronomical Instrument Markup Language (AIML)

SVG ndash Scalable Vector Graphics

Muitas de outras aplicaccedilotildees listadas em httpxmlcoverpagesorgxmlhtmlapplications

6689

Arquivos - texto ndash XML - exemploltxml version=10 gtltDOCTYPE Xdmf SYSTEM Xdmfdtd []gtltXdmf xmlnsxi=httpwwww3org2001XInclude Version=20gt ltDomaingt lt-- Example of Basic Topologies --gt ltInformation Name=Descriptiongt Example of a Polyvertex Topology ltInformationgt ltGrid Name=Polyvertex GridType=Uniformgt ltTopology TopologyType=Polyvertex Dimensions=3 NodesPerElement=3gt ltDataItem Format=XML Dimensions=3 3 NumberType=Floatgt 0 1 2 4 5 6 8 9 10 ltDataItemgt ltTopologygt ltGeometry Type=XYZgt ltDataItem Format=XML Dimensions=4 4 3gt 00 00 00 10 00 00()Que mostra que a interpretaccedilatildeo (parsing) de XML eacute em geral complexa

6789

Arquivos - texto - XML

Haacute muitas bibliotecas de alto niacutevel para fazer o processamento (parsing) e entregar os dados em uma estrutura conveniente

A complexidade em processar XML estaacute em decidir o que fazer com os dados jaacute que os arquivos podem ser muito complexos

As APIs (Application Programming Interfaces) mais comuns para processar XML que satildeo implementadas em muitas linguagens

DOM (Document Object Model) ndash manteacutem todo o conteuacutedo do em uma estrutura de dados (em geral uma aacutervore) em uma variaacutevel (em geral um objeto) Esta pode ser consultada para obter os valores de interesse para os alterar e usada para escrever um arquivo

SAX (Simple API for XML) ndash Interpretador (parser) por objetos O usuaacuterio escreve uma classe herdando da classe SAX provendo os meacutetodos que vatildeo processar os campos agrave medida em que estes satildeo lidos

6889

Arquivos - binaacuterios - FITSFlexible Image Transport System

O formato mais comum para observaccedilotildees astronocircmicas Tambeacutem usado para armazenar quaisquer dados mesmo natildeo relacionados a observaccedilotildees (especialmente tabelas como eacute praacutetica do STSCI)

Conteacutem um (ou mais) cabeccedilalho(s) de texto com metadados (informaccedilotildees sobre os dados como caracteriacutesticas (necessaacuterias para os ler) origem condiccedilotildees em que foram obtidos processamento realizado etc)

SIMPLE = T image conforms to FITS standard BITPIX = 32 bits per data value NAXIS = 2 number of axes NAXIS1 = 1024 NAXIS2 = 1024 BSCALE = 100000 Scaling factor BZERO = 000000 Scaling zero-point TELESCOP= Keck II Telescope SLITNAME= 0041x226 Slit Name SLITPA = 351979 Slit position angle SLITX = 131500 X pixel of the center of the slit LST = 12010446 local apparent sidereal time (()

Depois do cabeccedilalho haacute uma (ou mais) seccedilatildeo(otildees) de dados binaacuterios Costuma(m) ser array(s) 1D (espectros) 2D (imagens) ou 3D (ldquocubos de dadosrdquo)

De inteiros ou reais inteiros satildeo comuns em contagens de instrumentos reais para valores derivados (fluxos intensidades etc)

6989

Arquivos - binaacuterios - FITSNormalmente FITS satildeo lidos escritos por bibliotecas prontas de (relativamente) alto niacutevel usuaacuterio natildeo tem que saber como os dados satildeo armazenados no arquivo nem como os ler escrever Ex (IDL com a biblioteca idlastro)

IDLgt fits_info2dspectrumfits2dspectrumfits has 3 extensionsPrimary header 288 recordsNo dataExtension 1 -- SCI Header 144 records IMAGE ( 1201 1201 )Extension 2 -- ERR Header 72 records IMAGE ( 1201 1201 )Extension 3 -- DQ Header 72 records IMAGE ( 1201 1201 )

IDLgt mydata=readfits(2dspectrumfitsexten_no=1myheader) READFITS Reading FITS extension of type IMAGE READFITS Now reading 1201 by 1201 array

IDLgt extastmyheadermyastIDLgt sz=size(mydatadimensions)IDLgt xy2ad[1sz[0]][1sz[1]]myastcorners_acorners_dIDLgt printcorners_aCorners of the data array from file 2dspectrumfits are at 14487480 33063480

IDLgt printcorners_d -00041264444 00041402222

Obteacutem os dados de coordenadas (WCS) do header

Coloca os dados no array (2D de floats) mydata e o header no array (1D de strings) myheader

Calcula as coordenadas das quinas da imagem atraveacutes do WCS

Provecirc informaccedilotildees sobre o arquivo

7089

Arquivos - binaacuterios - ISIS Cube

Formatos como FITS se adequam muito a ter uma interface de mais alto niacutevel por objetos

Tambeacutem para dados em tabelas FITS muito mais trabalhosos de ler em baixo niacutevel que se adequam muito mais a mapas ou estruturas

Exemplo (de um formato semelhante a FITS ISIS cube)

O objeto ao ser criado lecirc todo o arquivo

cube=pp_editablecube(CM_1553510065_1_ircub)

Meacutetodos fornecem os dados desejados para obter quando necessaacuterio os dados de interesse

Find out the names of the backplanesprintcubegetproperty(backnames)Get the start time of the cubeprintcubegetfromheader(START_TIME)2007-084T100057286Z

Valores no cabeccedilalho podem ser convenientemente fornecidos como um mapa

header=cubeheader_as_hash()printheader[START_TIME]2007-084T100057286Z

7189

Arquivos - binaacuterios ndash ISIS Cube

Os dados satildeo fornecidos como arraysMake a contour plot of the latitudesc=contour(cubegetsuffixbyname(LATITUDE))Get the band with wavelength nearest to 21 (in the units used in the cube)selband=cubegetbandbywavelength(21wavelengths=selwavs)

Interfaces por overload tornam o acesso ainda mais conveniente

selband=cube[21]

selwavs=cube[21]

Retorna um array com a banda de comprimento de onda mais proacuteximo de 21 (microm)

Retorna o comprimento de onda mais proacuteximo de 21 (microm) da banda retornada acima

7289

Arquivos - binaacuterios ndash ISIS Cube Alteraccedilotildees feitas ao conteuacutedo satildeo automaticamente refletidas em todos os

lugares (cabeccedilalho em particular) afetados mantendo o objeto vaacutelido que pode depois ser gravado em um novo arquivo

IDLgt printcubelinescubesamplescubebands 64 64 256

IDLgt helpcubecoreltExpressiongt FLOAT = Array[64 64 256]

IDLgt cubecore=dblarr(100100256)

A linha acima natildeo eacute uma atribuiccedilatildeo eacute uma invocaccedilatildeo de meacutetodo Eacute equivalente acubesetpropertycore=dblarr(100100256)

Eacute o trabalho da funccedilatildeo setproperty decidir se a propriedade passada (core) faz sentido e se fizer fazer todo o trabalho necessaacuterio a esta mudanccedila Para o usuaacuterio eacute tudo automaacutetico e os dados da classe satildeo vaacutelidos o tempo todo

IDLgt helpcubecoreltExpressiongt DOUBLE = Array[100 100 256]

IDLgt printcubelinescubesamplescubebands 100 100 256

IDLgt cubesaveCM_1553510065_1_ir_editedcub

7389

Arquivos - binaacuterios ndash NetCDF e HDF5

Network Common Data Form e Hierarchical Data Format

Os dois uacutenicos formatos bem estabelecidos para dados cientiacuteficos geneacutericos

Armazenam dados como vaacuterias variaacuteveis e seus metadados Para cada variaacutevel haacute (ou pode haver) os metadados

Nome Dimensotildees (do array) Unidades Comentaacuterios

Ambos permitem arrays multidimensionais

Apenas HDF5 permite estruturas (daiacute vem a hierarquia)

Autodocumentados qualquer software que saiba ler um destes formatos lecirc qualquer arquivo sem precisar de conhecimento preacutevio sobre como o arquivo foi gerado

Muito bem suportados em bibliotecas padratildeo e natildeo padratildeo em softwares interativos e visualizadores (inclusive plugins para navegadores)

httpwwwunidataucaredusoftwarenetcdf httpenwikipediaorgwikiHdf5

NetCDF eacute mais simples de usar por natildeo ter hierarquia dando menos trabalho para ler e escrever dados Se hierarquia natildeo eacute necessaacuteria eacute mais conveniente de usar que HDF5

7489

Arquivos - binaacuterios - NetCDF e HDF5Haacute tambeacutem o formato CDL uma versatildeo ASCII do NetCDF A biblioteca padratildeo do NetCDF inclui conversores entre estes formatos

$ ncdump -h refspec_g01_0ncnetcdf refspec_g01_0 dimensions nlay = 51 nwn = 400 nleg = 33 numu = 2 nlev = 52 nphi = 3 ngas = 2 nwnc = 1 scal = 1 v3 = 3 dnl = 1 nk = 1 tdisr = UNLIMITED (0 currently) na = 16

variables float alb(nwn) float z(nlay) float t(nlay) float p(nlay) float wl(nwn) float iof(nwn) float mtau(nwn) float htau(nwn) float hctaus(nwn) float gtau(nwn) float outcos(scal) float phi(nleg) float phic(scal) float umu(numu) float flux(v3 nwn nlev) float mix(nlay ngas) float c(nlay) float psat(nlay) float ga(nwnc) float wlc(nwnc) float inc(scal) int dm(scal) int ord(scal) float fbeam(scal) float wn(nwn) float tautot(nwn nlay) float htaus(nwn nlay) float htaux(nwn nlay) float taug(nwn nlay) float phase(nwn nlay nleg) float ssa(nwn nlay) float uu(nwn nphi nlev numu) float u0u(nwn nlev numu) float tray(nwn nlay) float gtauo(tdisr nwn nlay)

Haacute 14 variaacuteveis usadas como dimensotildees para as 35 variaacuteveis que satildeo arrays

Ex alb(nwn) indica que alb eacute um array 1D de nwn elementos

nwn estaacute armazenado como uma das dimensotildees e eacute 400 portanto alb tem 400 elementos

Parte do conteuacutedo de um arquivo NetCDF em formato CDL (gerado pelo programa ncdump)

7589

Arquivos - binaacuterios - NetCDF e HDF5Conteuacutedo daquele arquivo visualizado com o ncview (acompanha a biblioteca NetCDF padratildeo)

7689

Arquivos - binaacuterios - NetCDF e HDF5O conteuacutedo de todo o arquivo pode ser lido facilmente com as bibliotecas disponiacuteveis e armazenado em contecirciners convenientes Usando um objeto que gera um resultado um pouco mais conveniente

IDLgt h=pp_readncdf(refspec_g01_0nchash)IDLgt printhvar_dims ltObjHeapVar229(HASH)gtvars ltObjHeapVar152(HASH)gtdims ltObjHeapVar118(HASH)gt

IDLgt printh[vars]T 173203 175459 175848 176001 175975 Z 431869 418858 406067 393403 380464 FLUX 300660 145536 0705180 0341669 0165532 PHASE 100000 0779034 0660858 0542052 0449983 TAUTOT0694377 0693420 0693474 0693540 0693636()

IDLgt help(h[vars])[TAUTOT]ltExpressiongt FLOAT = Array[51 400]

IDLgt print(h[var_dims])[TAUTOT]NLAY NWN

IDLgt print(h[dims])[(h[var_dims])[TAUTOT]]NLAY 51NWN 400

7789

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5)

Visualizaccedilatildeo da variaacutevel selecionada

Metadados e alguns valores da variaacutevel selecionada

Variaacutevel a ser criada com o conteuacutedo desta variaacutevel do arquivo

Hierarquia das variaacuteveis do arquivo

7889

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5) Imported variable az

IDLgt helpaz Structure ltd5723f38gt 13 tags length=448 data length=444 refs=1 _NAME STRING az _ICONTYPE STRING binary _TYPE STRING DATASET _FILE STRING INTENSI_test_409OUTh5 _PATH STRING _DATA DOUBLE Array[38] _NDIMENSIONS LONG 1 _DIMENSIONS ULONG64 Array[1] _NELEMENTS ULONG64 38 _DATATYPE STRING H5T_FLOAT _STORAGESIZE ULONG 8 _PRECISION LONG 64 _SIGN STRING

IDLgt printaz_data 00000000 10000000 20000000 30000000 40000000 50000000 60000000 80000000 ()

7989

Arquivos - binaacuterios - imagens

JPEG JPEG200 TIFF GeoTIFF etc

Os formatos comuns de imagens satildeo bem suportados em muacuteltiplas plataformas para uso dentro de programas e interativamente

Alguns formatos tecircm opccedilatildeo de compressatildeo com perda eou sem perda

Armazenam imagens como arrays 2D ou 3D (3D frequumlentemente limitado a 3 ou 4 em uma das dimensotildees uma imagem em 3 ou 4 bandas) de inteiros ou (em alguns formatos) reais

Alguns formatos permitem armazenar metadados para caracterizar as imagens armazenadas

JPEG2000 e GeoTIFF (um subconjunto de TIFF) comuns em astronomia e aacutereas proacuteximas

8089

Arquivos - binaacuterios ndash imagens ndash exemplo (IDL)IDLgt printquery_tiff(issmap_2009tiffinfogeotiff=geo) 1

IDLgt helpinfo Structure ltd4eca4b8gt 18 tags length=144 data length=132 refs=1 CHANNELS LONG 4 DIMENSIONS LONG Array[2] IMAGE_INDEX LONG 0 NUM_IMAGES LONG 1 PIXEL_TYPE INT 1 TYPE STRING TIFF BITS_PER_SAMPLE LONG 8 POSITION FLOAT Array[2] RESOLUTION FLOAT Array[2] UNITS LONG 2 TILE_SIZE LONG Array[2] DESCRIPTION STRING ISS (2009) DATE_TIME STRING 20100218 012436()

IDLgt helpgeo Structure ltd4efa1b8gt 10 tags length=264 data length=262 refs=1 MODELPIXELSCALETAG DOUBLE Array[3] MODELTIEPOINTTAG DOUBLE Array[6 4] GEOGRAPHICTYPEGEOKEY INT 4035 GEOGSEMIMAJORAXISGEOKEY DOUBLE 25750000 GEOGSEMIMINORAXISGEOKEY DOUBLE 25750000()

IDLgt myimage=read_tiff(issmap_2009tiff) Lecirc a imagem para o array myimage

Obteacutem informaccedilotildees sobre o arquivo

8189

Arquivos - binaacuterios ndash formatos nativosLinguagens como IDL R Python Java tecircm seu formato nativo binaacuterio acessado em alto niacutevel Basta mandar salvar ler variaacuteveis no do arquivo a biblioteca padratildeo automagicamente faz todo o trabalho de decidir como gravar ler os dados

Conveniente de usar na proacutepria linguagem Mas raramente existem bibliotecas para ler gravar o formato nativo de uma linguagem a partir de outra Ex (IDL)

IDLgt savefile=2dspectrumsavmydatamyheadercorners_dcorners_averbosecompress SAVE Portable (XDR) compressed SAVERESTORE file SAVE Saved variable MYDATA SAVE Saved variable MYHEADER()

Pode ser lido com apenas (haacute formas mais elaboradas)

IDLgt restore2dspectrumsavverbose RESTORE Portable (XDR) compressed SAVERESTORE file RESTORE Save file written by ltunknowngtltunknowngt Thu Jan 27 191422 2011 RESTORE IDL version 801 (linux x86_64) RESTORE Restored variable MYDATA RESTORE Restored variable MYHEADER()

IDLgt helpmydatamyheadercorners_dcorners_aMYDATA FLOAT = Array[1201 1201]MYHEADER STRING = Array[144]()

8289

Arquivos - processamento em baixo niacutevel

Nem sempre um formato padratildeo eacute a melhor escolha para o problema

Nem sempre haacute escolha (pode-se ter que trabalhar com arquivos que jaacute foram escritos em algum formato proprietaacuterio)

Agraves vezes o formato eacute padratildeo mas natildeo haacute bom suporte a ele disponiacutevel

Em todos estes casos eacute necessaacuterio escrever rotinas em baixo niacutevel que vatildeo ler processar diretamente o conteuacutedo do arquivo

Preferencialmente criando interfaces de alto niacutevel para o programa que vai as usar

8389

Arquivos - processamento em baixo niacutevel - texto

Tomando o exemplo anterior onde as colunas eram de diferentes tipos

NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS dec18s0001 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0002 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0003 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 FLAT 5408757812500 460000 5 dec18s0004 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 DARK 5408757812500 460000 5

A forma mais simples de o ler diretamente eacute definir uma estrutura para receber cada linha e um array destas estruturas para receber todo o arquivo Ex (IDL)

IDLgt record=namecalmpos0filnameechlpos0d0disppos0d0targnameposdirclassmjd_obsitime0d0coadds0IDLgt nlines=file_lines(filesearch_scamtxt)IDLgt mydata=replicate(recordnlines-1)IDLgt header=

Depois de definidas as variaacuteveis que vatildeo receber os dados o arquivo pode ser lido

IDLgt openrunitfilesearch_scamtxtget_lunIDLgt readfunitheaderIDLgt readfunitmydataformat=(A14I8A15F104F104A18A19A15F158F105I15)IDLgt free_lununit

A gravaccedilatildeo de um arquivo texto poderia ser feita de forma semelhante apenas trocando openr por openw (abrir o arquivo para gravaccedilatildeo natildeo leitura) e readf por printf

O arquivo eacute aberto em uma unidade (unit) usada para especificar de onde eacute feita a leitura

Ao final o arquivo eacute fechado

8489

Arquivos - processamento em baixo niacutevel - texto

O que resulta em

IDLgt printheader NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS

IDLgt helpmydataMYDATA STRUCT = -gt ltAnonymousgt Array[4]

IDLgt helpmydata[0] Structure ltd5e38f68gt 11 tags length=136 data length=124 refs=3 NAME STRING dec18s0001 CALMPOS INT 0 FILNAME STRING NIRSPEC-5-AO ECHLPOS DOUBLE 62630000 DISPPOS DOUBLE 36450000 TARGNAME STRING HD85258 POSDIR STRING NIRSPEC-5-AOp1 CLASS STRING STAR MJD_OBS STRING 54087574 ITIME DOUBLE 10000000 COADDS INT 1

Este caso eacute mais complicado que os mais comuns por haver colunas de strings

Se todas fossem de nuacutemeros natildeo teria sido necessaacuterio especificar o formato explicitamente As colunas teriam sido adivinhadas pela biblioteca que lecirc o arquivo Poderia ter sido lido escrito soacute com um array de nuacutemeros sem estruturas

8589

Arquivos - processamento em baixo niacutevel - binaacuterio

Formatos binaacuterios podem ser definidos de qualquer forma O arquivo eacute apenas um conjunto de bytes Cabe ao software saber como os interpretar

Uma escolha comum para que sejam autodocumentados eacute incluir um cabeccedilalho de texto informando as caracteriacutesticas dos dados necessaacuterias para os ler

Ex (IDL) criar um arquivo que armazene um array de doubles com um cabeccedilalho informando as dimensotildees para que o programa que o lecirc saiba como ler os dados

Inventa dados e abre o arquivo

IDLgt data_to_write=dindgen(34)IDLgt openwunitbinary_exampledatget_lun

Escreve as dimensotildees como texto

IDLgt printfunitdimensions of the double array stored belowIDLgt printfunitsize(data_to_writedimensions)

Escreve os dados binaacuterios

IDLgt writeuunitdata_to_write

Fecha o arquivo

IDLgt free_lununit

Escreve em binaacuterio (write unformatted)

8689

Arquivos - processamento em baixo niacutevel - binaacuterio

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

dimensions of the double array stored below 3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

8789

Arquivos - processamento em baixo niacutevel - binaacuterioA leitura deste arquivo eacute igualmente simples

IDLgt header=IDLgt dims=[00]IDLgt openrunitbinary_exampledatget_lun

Lecirc as dimensotildees (armazenadas como texto)

IDLgt readfunitheaderIDLgt readfunitdims

Lecirc a parte binaacuteria depois de saber as dimensotildees

IDLgt data_read=dblarr(dims)IDLgt readuunitdata_read

Fecha o arquivo

IDLgt free_lununit

Verifica que os dados foram gravados e lidos corretamente

IDLgt printarray_equal(data_to_writedata_read) 1

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Lecirc dados binaacuterios (read unformatted)

8889

Sumaacuterio

5 ndash Slides em httpwwwppenteadonetpeapea04_strings_iopdf Strings Expressotildees regulares Arquivos

httpwwwppenteadonetpea

8989

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89

Strings - codificaccedilotildees - ASCII789

Strings - codificaccedilotildees - ASCII

Nem todos os caracteres ASCII satildeo visiacuteveis (printable) Alguns satildeo espaccedilos em branco (espaccedilos tabs etc) outros satildeo alguma forma de caractere de controle (CR LF etc)

O zero costuma ser reservado para controle significando um string vazio (se soacute tem 0) ou em algumas codificaccedilotildees (C) o fim do string

Os caracteres codificados por valores 128-255 natildeo satildeo parte do padratildeo ASCII A associaccedilatildeo varia de acordo com a codificaccedilatildeo escolhida

Sistemas que usam ASCII satildeo os mais simples caracteres sempre tecircm o mesmo tamanho em bytes (1 byte) Satildeo facilmente lidos processados e convertidos de para nuacutemeros

ASCII eacute a codificaccedilatildeo de texto mais comum mas

Ao contraacuterio do que muitos assumem ASCII natildeo eacute a uacutenica forma de codificar texto

ASCII natildeo eacute sinocircnimo de arquivo texto

Em anos recentes Unicode em suas vaacuterias formas (adiante) tem se tornado gradativamente mais comum

889

Strings - codificaccedilotildees - ASCII

Por que ASCII natildeo eacute sempre usado

Porque eacute insuficiente Natildeo conteacutem por exemplo

Caracteres modificados (com acentos cedilha)

Siacutembolos matemaacuteticos (aleacutem dos muito baacutesicos + - ^ gt lt = ) Ex part sum int plusmn ge le times infin neℝ ℤ forall exist ∮ ≌ nabla

Siacutembolos fiacutesicos Ex micro Å oplus

Letras gregas

Outros siacutembolos Ex rarr harr euro ordf deg pound yen iquest iexcl

Caracteres de outras liacutenguas (inclusive de muitos siacutembolos como a vaacuterias formas usadas em chinecircs e japonecircs)

989

Strings - codificaccedilotildees - Unicode

O que usar para natildeo ter as limitaccedilotildees do ASCII

O uacutenico padratildeo de uso dominante hoje eacute o Unicode

Desenvolvido para ser um padratildeo universal contendo ldquotodosrdquo os caracteres de ldquotodasrdquo as escritas e dados sobre os caracteres

Natildeo eacute imutaacutevel adiccedilotildees satildeo decididas pelo Unicode Consortium (httpwwwunicodeorg)

1089

Strings - codificaccedilotildees - Unicode

Haacute duas partes no Unicode o cataacutelogo (uacutenico) e as codificaccedilotildees (vaacuterias)

O cataacutelogo eacute definido independente de codificaccedilotildees Pode ser visto como um mapa onde os pontos de coacutedigo (codepoints) satildeo as

chaves e os valores satildeo os dados sobre aquele caractere

ldquoIn Unicode the letter A is a platonic ideal Its just floating in heaven A

This platonic A is different than B and different from a but the same as A and A and A

The idea that A in a Times New Roman font is the same character as the A in a Helvetica font but different from a in lower case does not seem very controversial but in some languages just figuring out what a letter is can cause controversy

Is the German letter szlig a real letter or just a fancy way of writing ss If a letters shape changes at the end of the word is that a different letter Hebrew says yes Arabic says no

Anyway the smart people at the Unicode consortium have been figuring this out for the last decade or so accompanied by a great deal of highly political debate and you dont have to worry about it Theyve figured it all out alreadyrdquo

de The absolute minimum every software developer absolutely positevely must know about Unicode and character sets (no excuses)

httpwwwjoelonsoftwarecomarticlesUnicodehtml

1189

Strings - codificaccedilotildees - UnicodeOs dados sobre um caractere Unicode satildeo importantes para suas buscas e identificaccedilatildeoIncluem nome e propriedades visiacutevel (printable) numeacuterico alfanumeacuterico maiuacutesculo minuacutesculo ldquoespaccedilordquo (blank) liacutengua matemaacutetico etc

ExsUnicode Character LATIN CAPITAL LETTER A (U+0041)Name LATIN CAPITAL LETTER ABlock Basic LatinCategory Letter Uppercase [Lu]Combine 0BIDI Left-to-Right [L]Mirror NIndex entries Latin Uppercase Alphabet Uppercase Alphabet Latin

Capital Letters LatinLower case U+0061Version Unicode 110 (June 1993)

Unicode Character INTEGRAL (U+222B)Name INTEGRALBlock Mathematical OperatorsCategory Symbol Math [Sm]Combine 0BIDI Other Neutrals [ON]Mirror YIndex entries Integral Signs INTEGRALSee Also latin small letter esh U+0283Version Unicode 110 (June 1993)

(resultados de httpwwwfileformatinfoinfounicodecharsearchhtm)

int

A

1289

Strings - codificaccedilotildees - Unicode

Unicode Character ANGSTROM SIGN (U+212B)Name ANGSTROM SIGNBlock Letterlike SymbolsCategory Letter Uppercase [Lu]Combine 0BIDI Left-to-Right [L]Decomposition LATIN CAPITAL LETTER A WITH RING ABOVE (U+00C5)Mirror NOld name ANGSTROM UNITIndex entries ANGSTROM SIGNLower case U+00E5Comments non SI length unit (=01 nm) named after A J ngstroumlm Å

Swedish physicist preferred representation is U+00C5Version Unicode 110 (June 1993)

Unicode Character GREEK SMALL LETTER ZETA (U+03B6)Name GREEK SMALL LETTER ZETABlock Greek and CopticCategory Letter Lowercase [Ll]Combine 0BIDI Left-to-Right [L]Mirror NUpper case U+0396Title case U+0396Version Unicode 110 (June 1993)

(resultados de httpwwwfileformatinfoinfounicodecharsearchhtm)

ζ

1389

Strings - codificaccedilotildees - UnicodeUnicode Character NABLA (U+2207)Name NABLABlock Mathematical OperatorsCategory Symbol Math [Sm]Combine 0BIDI Other Neutrals [ON]Mirror NIndex entries difference backward backward difference del NABLAComments backward difference gradient del used for Laplacian

operator (written with superscript 2)See Also white down-pointing triangle U+25BDVersion Unicode 110 (June 1993)

Java DatastringtoUpperCase() nablastringtoLowerCase() nablaCharacterUnicodeBlock MATHEMATICAL_OPERATORSCharactercharCount() 1CharactergetDirectionality() DIRECTIONALITY_OTHER_NEUTRALS [13]CharactergetNumericValue() -1CharactergetType() 25CharacterisDefined() YesCharacterisDigit() NoCharacterisIdentifierIgnorable() NoCharacterisLetter() NoCharacterisLetterOrDigit() NoCharacterisLowerCase() NoCharacterisWhitespace() No()

(resultados de httpwwwfileformatinfoinfounicodecharsearchhtm)

nabla

1489

Strings ndash Como codificar Unicode

Haacute vaacuterias formas Nenhuma simples como ASCII porque eacute necessaacuterio um nuacutemero muito maior de pontos de coacutedigo (haacute espaccedilo para 1 114 112 hoje haacute 109 449 alocados)

Apenas usar mais bytes com um nuacutemero constante por caractere exigiria pelo menos 21 bits por caractere (221 eacute 2 097 152)

Seria demais considerando que quase todos os caracteres escritos estatildeo entre os 128 do ASCII

Em quase todo texto 20 de cada 21 bits seriam 0

A maior parte das codificaccedilotildees usa formas mais elaboradas com um nuacutemero variaacutevel de bytes por caractere

Todas as codificaccedilotildees de uso comum tem o ASCII como subconjunto os 128 caracteres do ASCII satildeo codificados em forma idecircntica em ASCII e nas codificaccedilotildees usuais de Unicode

O que ajuda na compatibilidade software Unicode escrevendo texto que soacute conteacutem caracteres do ASCII produz texto idecircntico ao que seria produzido em ASCII

1589

Strings - codificaccedilotildees para Unicode

No mundo ocidental haacute apenas duas codificaccedilotildees de uso comum

UTF-8

ISO 8859-1 (tambeacutem chamado de Latin 1)

Por isso eacute necessaacuterio saber que codificaccedilatildeo usar ao trabalhar com Unicode

Alguns softwares formatos de arquivo informam a codificaccedilatildeo usada

Outros assumem que uma eacute usada (sem ter sido informada)

Outros tentam adivinhar quando natildeo satildeo informados qual eacute (esp navegadores)

Outros soacute perguntam para o usuaacuterio (esp editores de texto)

Sistemas operacionais oferecem variadas formas de digitar caracteres especiais

Pelos coacutedigos numeacutericos

Por programas seletores de caracteres Alguns seletores de caracteres (ex kcharselect do KDE) permitem fazer buscas pelo

nome ou propriedades

1689

Strings - Onde haacute suporte a Unicode em programaccedilatildeo

Linguagens variam muito

Desconhecem Unicode (soacute usam ASCII) C Fortran

Usam nativamente ASCII (inclusive no coacutedigo-fonte) mas tecircm tipos para strings Unicode e ou funccedilotildees para processar Unicode (em variados graus) C C++ IDL R

Usam nativamente Unicode (inclusive no coacutedigo-fonte) e tecircm bom suporte a strings Unicode Java Python Perl

Muitas vezes (mesmo quando Unicode pode ser usado em coacutedigo-fonte) caracteres Unicode satildeo escritos atraveacutes de ASCII com coacutedigos de escape para coacutedigos Unicode Exs

IDLgt p=plot(testtitle=Z(00C5222B))

C C++ Java Python u2207

ReferecircnciasCharacters vs byteshttpwwwtbrayorgongoingWhen200x20030426UTFThe absolute minimum every software developer absolutely positively must know about Unicode and character sets (no excuses)httpwwwjoelonsoftwarecomarticlesUnicodehtmlUnicode character searchhttpwwwfileformatinfoinfounicodecharsearchhtm

em IDL produz intÅ

produz nabla

1789

Strings - processamento baacutesico

Operaccedilotildees mais fundamentais que costumam ser suportadas em ldquotodasrdquo as linguagens bibliotecas padratildeo (exemplos usando sintaxe de IDL)

Atribuiccedilatildeo de literais

IDLgt a=some

IDLgt helpaA STRING = some

IDLgt printasome

Concatenaccedilatildeo

IDLgt b=a+ string

IDLgt helpbB STRING = some string

1889

Strings - processamento baacutesico

Valor loacutegico

String vazio (null string) eacute falso o resto eacute verdadeiro

IDLgt c=

IDLgt if c then printc is not empty string else printc is null string ()c is null string ()

IDLgt c=a

IDLgt if c then printc is not empty string else printc is null string ()c is not empty string

Espaccedilo natildeo eacute o mesmo que string vazio

IDLgt c=

IDLgt if c then printc is not empty string else printc is null string ()c is not empty string

1989

Strings - processamento baacutesico Comparaccedilotildees

IDLgt helpabA STRING = someB STRING = some string

IDLgt printb eq a 0

IDLgt printb gt a 1

IDLgt c=[ab9Some somesome other string]

IDLgt printc[sort(c)]format=(A) some9Somesomesome other stringsome string

IDLgt printa eq A 0

IDLgt printstrcmp(aAfold_case) 1

Comparaccedilotildees de ldquotamanhordquo (maior menor etc) satildeo comparaccedilotildees pela ordem de codificaccedilatildeo (ldquoalfabeacuteticardquo)

Algumas linguagens permitem definir o ordenamento (como considerar maiuacutesculasminuacuteculas letras com acentos nuacutemeros e siacutembolos) Exs Python C++ Java Perl

2089

Strings - processamento baacutesico Substrings

IDLgt printstrmid(abcdefg32)de

Algumas linguagens nativamente suportam iacutendices para indicar substrings C C++ Fortran Python Ex (Python)

gtgtgt s=abcdegtgtgt print(s[25])cde

Outras permitem que sejam definidos iacutendices por objetos strings

Busca de caracteres ou substrings

IDLgt printstrpos(abcdefgd) 3

IDLgt printstrpos(abcdefgj) -1

IDLgt printstrpos(abcdefgbc) 1

2189

Strings - processamento baacutesico

Outros

IDLgt printstrlen(1234567) 7

IDLgt printstrlen(1234567 ) 8

IDLgt printstrlen( 1234567 ) 9

IDLgt helpstrtrim( 1234567 2)ltExpressiongt STRING = 1234567

IDLgt helpstrtrim( 1234567 1)ltExpressiongt STRING = 1234567

IDLgt helpstrtrim( 1234567 0)ltExpressiongt STRING = 1234567

IDLgt printstrupcase(abcdEF)ABCDEF

IDLgt printstrlowcase(abcdEF)abcdef

Medindo quantos caracteres tem o string inclui espaccedilos em branco

Remoccedilatildeo dos brancos agrave esquerda agrave direita ou dos dois lados

2289

Strings - conversatildeo de outros tipos para strings

Eacute uma das operaccedilotildees mais comuns para gerar textos informativos e nomes escrever arquivos (aquivos texto discutidos adiante) etc

Eacute natildeo trivial jaacute que a conversatildeo pode ser feita de muitas formas diferentes

Para tipos fundamentais sempre haacute uma conversatildeo default tanto criando um string como usando algo tipo print (para strings terminal ou arquivos)

Todo comando tipo print (print printf sprintf string write etc) e toda escrita para arquivos texto eacute uma conversatildeo para string (terminais e arquivos texto soacute conteacutem strings)

2389

Strings - conversatildeo de outros tipos para strings

Exemplos de conversotildees (IDL)

IDLgt print[-109] -1 0 9

IDLgt print1d01B10 10000000 1 100000

IDLgt helpstring(1d01B10)ltExpressiongt STRING = 10000000 1 100000

IDLgt printfunitdblarr(343)

Tipos mais elaborados podem ou natildeo ter uma forma predefinida Com objetos eacute comum ser possiacutevel definir a conversatildeo (stringification) ao criar a classe

IDLgt h=hash(a109[01]18b)

IDLgt printh9 0 1a 100000180000 b

Strings

Coloca strings em um arquivo (adiante)

Strings criados por um meacutetodo da classe hash satildeo uma forma de representar o hash

2489

Strings - conversatildeo de outros tipos para strings

Algumas linguagens (Python IDL) tecircm mais de uma forma default de gerar strings Em Python uma forma eacute executaacutevel a outra eacute mais legiacutevel

In [30] x=arange(12)reshape(43)

In [31] print(x)[[ 0 1 2] [ 3 4 5] [ 6 7 8] [ 9 10 11]]

In [32] xOut[32]array([[ 0 1 2] [ 3 4 5] [ 6 7 8] [ 9 10 11]])

In [33] y=array([[ 0 1 2] [ 3 4 5] [ 6 7 8] [ 9 10 11]])

In [37] print(array_equal(xy))True

String mais legiacutevel

String executaacutevelPode ser usado para criar um objeto equivalente

2589

Strings ndash formataccedilatildeo expliacutecita

A formataccedilatildeo pode ser especificada se a conversatildeo default natildeo eacute adequada para definir a conversatildeo em um novo tipo

Cada linguagem tem sua sintaxe para formataccedilatildeo

Haacute dois estilos semelhantes em vaacuterias linguagens

Ambos os estilos satildeo sintaxes diferentes para a mesma ideacuteia Um coacutedigo especifica o tipo de dado sendo passado (inteiro real etc) e detalhes de como seraacute feito o string (largura do campo diacutegitos decimais alinhamento etc)

2689

Strings ndash formataccedilatildeo expliacutecita

Estilo Fortran

IDL

IDLgt print1d0+1d-9 10000000

IDLgt print1d0+1d-9format=(E1610)10000000010E+00

IDLgt printx=1d0+1d-9format=(A0F1613)X= 10000000010000

Estilo C (ldquoprintfrdquo)

IDL

IDLgt printformat=(x=1610e)1d0+1d-9x=10000000010e+00

Python

In [20] print(x=1610e (1e0+1e-9))x=10000000010e+00

Nenhum formato expliacutecito (default)

2789

Strings - formatos tipo Fortran

(apenas o principal ver documentaccedilatildeo para detalhes)

Ex (IDL)

IDLgt printx=1d0+1d-9format=(A0F1613)X= 10000000010000

Tambeacutem haacute modificadores para especificar alinhamento (-) se deve haver (ou ser suprimido) avanccedilo para a pŕoxima linha posiccedilatildeo dentro do campo etc

Coacutedigo Significado Exemplo(s)

A String (A) (10A)

I Inteiro decimal (I) (10I)(-2I)

B Inteiro binaacuterio (B) (10B)

Z Inteiro hexadecimal (Z) (10Z)

O Inteiro octal (O) (10O)

F Real ponto fixo (F)(F52)

E D Real ponto flutuante (E)(D1610)

G Real ponto fixo ou flutuante de acordo com o valor (G)(G10)

ldquordquo String literal (ldquox=rdquoI10)

X Caracteres em branco (A10XI)

2889

Strings - formatos tipo C (printf)(apenas o principal ver documentaccedilatildeo para detalhes)String com campos a serem substituiacutedos por valores (passados adiante) marcados por coacutedigos com

Ex (Python)In [20] print(x=1610e (1e0+1e-9))x=10000000010e+00

Haacute modificadores para especificar alinhamento como preencher o espaccedilo que sobra (espaccedilos zeros etc) para imprimir o sinal + etc

Coacutedigo Significado (tipo) Exemplo(s)

di Inteiro decimal (int) d 5d +05d

u Inteiro decimal sem sinal (unsigned int) u 7u

fF Real em ponto fixo (double float) f 136f

eE Real em ponto flutuante (double float) e 1610e

gG Real em ponto fixo ou flutuante decidido pelo valor (double float)

g 73G

xX Inteiro sem sinal hexadecimal (unsigned int) x 10X

o Inteiro sem sinal octal (unsigned int) o 5o

s String (string) s 10s

c Caractere (char) c

p Ponteiro - estilo C - (void ) p

literal

2989

Strings - conversatildeo de strings para outros tipos

Para gerar dados a partir de strings datas identificadores pedaccedilos de nomes valores numeacutericos armazenados em strings

Tambeacutem sempre haacute conversotildees default para os tipos baacutesicos onde o intepretador programa faz o possiacutevel para entender o string como um valor daquele tipo

Tipicamente eacute feito por casts (funccedilotildees de conversatildeo) reads (de strings ou arquivos texto (arquivos texto satildeo strings)) construtores de objetos ou implicitamente

3089

Strings - conversatildeo de strings para outros tipos - impliacutecitas

Exs (IDL)

IDLgt helpfix([17 17 171 -17 9 8])ltExpressiongt INT = Array[5]

IDLgt printfix([17 17 171 -17 9 8]) 17 17 17 -17 9

IDLgt printdouble([17 17 171 -17 9 8]) 17000000 17000000 17100000 -17000000 90000000

IDLgt readfunitabcd

IDLgt a=0d0IDLgt b=00IDLgt c=0IDLgt reads171d0 189d0 -9abcIDLgt helpabcA DOUBLE = 17100000B FLOAT = 189000C INT = -9

Converte o conteuacutedo do string para os tipos das variaacuteveis abcd (explicado adiante)

3189

Strings - conversatildeo de strings para outros tipos

Quando o default natildeo eacute suficiente (ou quando escrevendo o conversor em uma classe) costuma ser possiacutevel o fazer com formatos semelhantes aos formatos para gerar strings Exs (IDL)

IDLgt a=0d0IDLgt b=00IDLgt c=0IDLgt reads171d0 something 189d0-9abc READS Input conversion error Unit 0 File ltstdingt Error occurred at $MAIN$ Execution halted at $MAIN$

Natildeo funcionou porque sozinho ele natildeo conseguiu saber o que fazer com o ldquosomethingrdquo Usando um formato especiacutefico

IDLgt reads171d0 something 189d0-9 abcformat=(D6111XD611XI)

IDLgt helpabcA DOUBLE = 17100000B FLOAT = 189000C INT = -9

Exemplos mais complicados adiante (arquivos texto)

Variaacuteveis tecircm que ser definidas para informar para que tipo seraacute feita a conversatildeo default

3289

Strings - processamento natildeo baacutesicoOperaccedilotildees importantes e muito necessaacuterias mas que natildeo satildeo suportadas em todas as linguagens bibliotecas padratildeo

Testes (ex IDL)

IDLgt str=[afitsaFITSafitsaabfitsabcfits]

IDLgt printstrmatch(strfits) 1 0 0 1 1

IDLgt printstrmatch(strfitsfold_case) 1 1 0 1 1

IDLgt printstrmatch(strfitsfold_case) 1 1 1 1 1

IDLgt printstrmatch(strfits) 1 0 0 0 0

IDLgt printstrmatch(strfits) 0 0 0 1 0

3389

Strings - processamento natildeo baacutesico

Operaccedilotildees importantes e muito necessaacuterias mas que natildeo satildeo suportadas em todas as linguagens bibliotecas padratildeo

Separaccedilatildeo de partes (Ex IDL)

IDLgt printstrsplit(2011- 131 -extract)format=(A)2011131

Processamento de nomes de arquivos diretoacuterios (Ex IDL)

IDLgt printfile_dirname(some_directoryanother_directorysome_filetxt)some_directoryanother_directory

IDLgt printfile_basename(some_directoryanother_directorysome_filetxt)some_filetxt

IDLgt printfile_basename(another_directorysome_filetxttxt)+_alteredtxtsome_file_alteredtxt

3489

Strings - processamento natildeo baacutesico

Codificaccedilotildees (Ex Python 3)

gtgtgt s=infinite money infinNeuro sign

gtgtgt print(s)infinite money infineuro

gtgtgt print(ascii(s))infinite money u221eu20ac

gtgtgt print(sencode(utf-8))binfinite money xe2x88x9exe2x82xac

3589

Strings - processamento natildeo baacutesico

Perl eacute a linguagem mais avanccedilada para processamento de strings tem suporte nativo a muitas outras operaccedilotildees a semacircntica da linguagem eacute voltada principalmente para processar strings expressotildees regulares (de vaacuterios tipos) natildeo satildeo strings fazem parte da semacircntica

Ex (sem o objetivo que seja compreensiacutevel apenas para indicar o estilo)

Ler um arquivo contendo campos com nomes separados de valores por ()

temperature 10008name some modelx_dimension 100y_dimension 100z_dimension 50()

Armazenado-o em um mapa O que pode ser feito com apenas

While (ltgt) Loop over input linesPut pre-colon text into $1 post-colon into $2 if (m (S+) (+) ) Use $1 as key $2 as value $file_data$1 = $2

3689

Expressotildees regulares - definiccedilatildeo

Expressotildees regulares (regular expressions regex) satildeo a mais poderosa ferramenta para fazer buscas e separar substrings

Regex satildeo uma linguagem com o uacutenico objetivo de especificar propriedades de strings

Implementadas em graus diferentes em todas as linguagens modernas e modernizadas facilita encontrar uma expressatildeo jaacute pronta pois satildeo quase iguais em qualquer linguagem

Estatildeo na biblioteca padratildeo em IDL Python R Perl

Em C++ e Java em bibliotecas comuns (Boost Jregex)

Para que servem

Uma expressatildeo regular especifica propriedades de strings

O interpretador de expressotildees regulares (regular expression engine) recebe a expressatildeo e o string a analisar e determina se o string corresponde (matches) agrave expressatildeo regular

Em alguns casos o interpretador pode tambeacutem informar que parte(s) do string corresponde(m) a que parte(s) da expressatildeo regular e realizar processamentos com estas partes

3789

Expressotildees regulares ndash exemplos de usos Separar partes de strings

Encontrar linhas em arquivos que tenham nomes valores e comentaacuterios e separar estes pedaccedilos

Escalar com comentaacuterio

SLITPA = 351979 Slit position angle

Array 1D sem comentaacuterio (se extendendo por vaacuterias linhas)

BAND_BIN_CENTER = (03505400358950036629003732200379490 0387900104598)

Escalares em diferentes formatos

Total Mechanical Luminosity 15310E+03resources_usedwalltime=005603

Pedaccedilos de nomes

6063 17836E-20 2456 T FeIX((3Pe)3d(2PE)4p_1Po-3s2_3p6_1Se)

Datas separando ano mecircs dia hora (em vaacuterios formatos diferentes)

DATE-OBS= 2006-12-18 universal date of observationDATE_TIME = 2010-07-19T161032START_TIME = 2006-182T225102850Z

3889

Expressotildees regulares ndash exemplos de usos

Separar partes de strings Separar partes de nomes de arquivos (por significarem algo como identificar o

conteuacutedo)

specdec18s0041fitsscamdec18i0054fits15_7_mts_hmpixselh_mr15sav15_7_mts_hwpixselh_mr15sav16_3_mts_hwpixselb_mr16savreadmodel5l_-1_000010000_10000_r05_030_08196_0100000_005000000_1000eps

Determinar se um string eacute um nuacutemero (inteiro real fixo flutuante)

Encontrar identificadores Exs nomes de cataacutelogos endereccedilos HTTPFTP endereccedilos de email

Separar campos em arquivos sendo lidos onde as linhas natildeo tecircm a mesma formataccedilatildeo algumas linhas com colunas separadas por espaccedilos outras por tabs outras por

siacutembolos ignorando linhas de comentaacuterios e linhas vazias

3989

Expressotildees regulares - usoEx (IDL) encontrar nomes de arquivos com algumas propriedades

IDLgt printfilesformat=(A)CM_1477475933_1_viscubCM_1477476864_1_ircubCM_1477476864_1_irgcubCM_1477476864_1_viscubCM_1477477826_1_ircubCM_1477477826_1_irgcubCM_1477477826_1_viscubmosaic2cub

IDLgt printstregex(files+irgcubboolean) 0 0 1 0 0 1 0 0

A expressatildeo regular eacute +irgcub Especifica uma ou mais ocorrecircncias seguidas (+) de qualquer caractere () seguido de uma ocorrecircncia de irgcub (o ponto vem precedido do caractere de

escape () para ser entendido literalmente como um ponto e natildeo como o seu significado especial (qualquer caractere)

Esta aplicaccedilatildeo do interpretador (stregex) retorna um valor Booleano (verdadeirofalso) para cada elemento do string passado (files) que informa se aquele elemento correspondia agravequela expressatildeo regular

Este eacute um exemplo artificial Seria mais faacutecil ter usado strmatch(filesirgcub)

4089

Expressotildees regulares - uso

Em casos como este tipicamente o resultado de stregex seria usado como filtro para selecionar apenas os elementos do array de strings que satisfazem agravequela expressatildeo regular

IDLgt w=where(stregex(files+irgcubboolean)null)IDLgt printfiles[w]format=(A)CM_1477476864_1_irgcubCM_1477477826_1_irgcub

Ex (IDL) Determinar que strings conteacutem uma data no formato yyyy-mm-dd

IDLgt strs=[201002012010-02-012010-2-1aaaa-mm-ddT2010-02-01J]IDLgt printstregex(strs[0-9]4-[0-9]2-[0-9]2boolean) 0 1 0 0 1

Esta expressatildeo regular especifica quatro repeticcedilotildees (4) de diacutegitos (caracteres na faixa [0-9]) seguido de um (-) seguido de duas repeticcedilotildees (2) de dois diacutegitos ([0-9]) seguido de um (-) seguido de duas repeticcedilotildees (2) de dois diacutegitos ([0-9])

Uma expressatildeo regular apenas um pouco mais elaborada poderia corresponder aos 3 formatos de data no array acima E poderia se impedir que a uacuteltima (com outros caracteres antes e depois da data) seja aceita

4189

Expressotildees regulares - regras - caracteres ldquonormaisrdquo

Uma expressatildeo regular usa caracteres ldquonormaisrdquo e especiais para especificar o que se vai procurar na ordem em que aparecem na expressatildeo

Se um caractere eacute normal (natildeo eacute um dos especiais mostrados adiante) ele especifica uma ocorrecircncia daquele caractere

Ex J eacute uma expressatildeo regular que corresponde a qualquer string onde ocorra J Jaacute JA soacute corresponde a strings que tenham JA dentro

Exs (IDL)

IDLgt strs=[JJJJJJaJAjaJa]

IDLgt printstregex(strsJboolean) 1 1 1 0 1

IDLgt printstregex(strsJAboolean) 0 0 1 0 0

4289

Expressotildees regulares - regras - caracteres especiaisCaracteres especiais tecircm outros significados Para significar literalmente aquele caractere deve ser escapado (escaped) com um

Siacutembolo significado exemplo Corresponde(m) Escape o caractere seguinte deve ser interpretado

literalmente natildeo como especial aa

Qualquer caractere ab ajb aab abb jafbc

+ Uma ou mais repeticcedilotildees do que vem agrave esquerda a+b ab aab bab baabh

() Subexpressatildeo para agrupar termos afetados por um caractere especial (como parecircnteses em notaccedilatildeo matemaacutetica)

(ab)+c abc ababc dabababcg

Zero ou mais repeticcedilotildees dos termos agrave esquerda ab abbaab caaabg

Zero ou uma repeticcedilatildeo dos termos agrave esquerda ab b ab cabd cbd

| Alternaccedilatildeo qualquer um dos dois agrave esquerda a|bc ac bc jacd jbcd

n Exatamente n repeticcedilotildees do termo agrave esquerda a2b aab daaabg

n1n2 De n1 a n2 repeticcedilotildees do termo agrave esquerda a12b ab aab aaab gaaabbd

^ Acircncora (no comeccedilo) nada agrave esquerda ^ab ab abb

$ Acircncora (no fim) nada agrave direita ab$ abaab

[] Conjunto de valores (explicado adiante)

4389

Expressotildees regulares - regras - conjuntos de valores

[] denota um conjunto de valores que pode conter

Uma lista de coisas que devem corresponder Ex [abc] signfica qualquer caractere no conjunto abc Correspondem a esta

expressatildeo abcabha

Uma lista de coisas que natildeo podem corresponder [^abc] significa qualquer coisa que natildeo seja a b ou c Correspondem a esta

expressatildeo d jgs gg

Faixas de valores [0-9] signfica qualquer diacutegito [0-9a-zA-Z] significa qualquer diacutegito ou letra

Classes de valores como algumas faixas e outros conjuntos ocorrem com muita frequumlecircncia haacute nomes

especiais para eles Estes (em IDL) vecircm entre [] ex [[digit] significa o mesmo que [0-9]

4489

Expressotildees regulares - regras - classes de valores

Classe signficado

alnum Caracteres alfanumeacutericos 0-9a-zA-Z

alpha Caracteres alfabeacuteticos a-zA-Z

cntrl Caracteres de controle ASCII (natildeo visiacuteveis coacutedigos 1 a 31 e 127)

digit Diacutegitos (decimais) 0-9

graph Caracteres visiacuteveis ASCII 33 a 126 (natildeo inclui o espaccedilo)

lower Letras minuacutesculas a-z

print Caracteres ldquoimprimiacuteveisrdquo (visiacuteveis e o espaccedilo) ASCII 32 a 126

punct Caracteres de pontuaccedilatildeo $amprsquo()+-lt=gt[]^_lsquo|~

space Os caracteres ldquoem brancordquo (blank) espaccedilo tab tab vertical CR LF (ASCII 32 e 9-13)

upper Letras maiuacutesculas A-Z

xdigit Diacutegitos hexadecimais 0-9A-Fa-f

lt Comeccedilo de palavra (palavra definida como sequumlecircncia de coisas natildeo space)

gt Fim de palavra (palavra definida como sequumlecircncia de coisas natildeo space)

Estas satildeo apenas as principais Algumas implementaccedilotildees tecircm muito mais (em particular nas linguagens que usam Unicode nativamente)

4589

Expressotildees regulares - exemplos

Determinar se strings satildeo nuacutemeros (Ex IDL)

IDLgt str=[9-18 875-812-45913E9-98d7a188d032f5]

Inteiros

IDLgt intexpr=^[-+][0-9]+$

IDLgt printstregex(strintexprboolean) 1 1 0 0 0 0 0 0 0 0

Ponto flutuante

IDLgt fpexpr=^[-+](([0-9][0-9]+)|([0-9]+[0-9]))([eEdD][-+][0-9]+)$

IDLgt printstregex(strfpexprboolean) 1 1 0 1 1 1 1 1 0 0

Sinal opcional

1 ou mais diacutegitos

Sinal opcional

0 ou mais diacutegitos opcionalmente seguidos de um ponto e 1 ou mais diacutegitos

1 ou mais diacutegitos opcionalmente seguidos de um ponto e 0 ou mais diacutegitos

ou Expoente opcional letra do expoente seguida de sinal opcional seguido de um ou mais diacutegitos

4689

Expressotildees regulares ndash extraccedilatildeo

Interpretadores de expressotildees regulares costumam oferecer mais que apenas testar se um string corresponde a uma expressatildeo

Em geral tambeacutem podem retornar que parte(s) do string corresponde(m) agrave expressatildeo

Ex (IDL) Determinar se um string conteacutem uma data incluindo os formatos

IDLgt dates=[2011-01-312011 1 3120110131something done on y2011m1d31 with something]

E extrair a data de dentro do string

IDLgt expr=[0-9]4[0-9]12[0-9]12

(4 diacutegitos)(qualquer separador)(1 a 2 diacutegitos)(qualquer separador)(1 a 2 diacutegitos)

IDLgt printstregex(datesexprextract)format=(A)2011-01-312011 1 31201101312011m1d31

Como agora separar ano mecircs e dia Com uma busca e uma extraccedilatildeo para cada Poderia ser mais eacute mais faacutecil com uma uacutenica expressatildeo regular

4789

Expressotildees regulares - aleacutem de apenas testes

Tambeacutem podem retornar que parte(s) do string correspondem agrave expressatildeo toda e agraves suas subexpressotildees (partes da expressatildeo delimitadas por parecircnteses)

Ex (IDL) Separar pedaccedilos de datas Neste caso para a expressatildeo ficar menor assumindo um formato simples (yyyy-mm-ddThhmmssfff) Mas poderia ser um formato mais livre como no exemplo anterior

IDLgt str=Stuff observed on 2011-01-31T123924983 with some instrumentIDLgt expr=([0-9]4)-([0-9]2)-([0-9]2)T([0-9]2)([0-9]2)([0-9]2[0-9]3)

(quatro diacutegitos)-(2 diacutegitos)-(2 diacutegitos)T(2 diacutegitos)(2 diacutegitos)(2 diacutegitos3 diacutegitos)

IDLgt pieces=stregex(strexprextractsubexpr)IDLgt printpiecesformat=(A)2011-01-31T12392498320110131123924983IDLgt d=julday(pieces[2]pieces[3]pieces[1]pieces[4]pieces[5]pieces[6])IDLgt printdformat=(F166) 2455593027372

Expressatildeo inteiraPrimeira subexpressatildeoSegunda subexpressatildeoTerceira subexpressatildeoQuarta subexpressatildeoQuinta subexpressatildeoSexta subexpressatildeo

4889

Expressotildees regulares - referecircncias httpxkcdcom208

Viacutedeos do Software Carpentry

httpsoftware-carpentryorg4_0regexp

4989

Arquivos

Quase todo programa precisa armazenar dados em arquivos

Podem ser pequenos arquivos de paracircmetros ou enormes arquivos de dados produzidos ou a processar

Apesar do sugerido pela praacutetica comum arquivos texto natildeo satildeo sempre a melhor escolha para armazenar dados - e haacute muitas formas diferentes de os usar

Qual eacute a melhor escolha

Assim como para linguagens ou contecirciners natildeo existe ldquoo melhor formatordquo Cada um tem suas vantagens e desvantagens

Dados diferentes (mesmo se usados pelos mesmos programas) em geral se adequam melhor a formatos diferentes

5089

Arquivos - texto X binaacuterios

Em qualquer formato arquivos satildeo armazenados como diacutegitos binaacuterios

Mas haacute duas formas principais como eles podem ser codificados

Arquivos baseados em texto (text files)

Dados satildeo transformados em caracteres usando alguma formataccedilatildeo (mesmo se impliacutecita) e escritos com alguma codificaccedilatildeo de texto (comumente mas natildeo necessariamente ASCII)

Um arquivo texto eacute um ou mais strings As mesmas conversotildees tecircm que ser feitas depara outros tipos

Arquivos ldquobinaacuteriosrdquo (binary files)

Embora todo arquivo seja binaacuterio este nome costuma ser usado soacute para aqueles em que os dados natildeo estatildeo na forma de texto

Com frequumlecircncia (nem sempre) os dados satildeo gravados de forma idecircntica a como satildeo armazenados na memoacuteria

Muitos formatos usam uma mistura de partes em texto e partes binaacuterias

Um cabeccedilalho (header) de texto que daacute informaccedilotildees (metadados) sobre os dados armazenados na parte binaacuteria que vem depois

O cabeccedilalho conteacutem em especial informaccedilotildees sobre como ler os dados binaacuterios

5189

Arquivos - texto X binaacuterios

Vantagens de arquivos texto

Legiacuteveis por pessoas (human readable)

Podem ser auto-suficientes todo o necessaacuterio para os ler e entender o que conteacutem pode ser obtido olhando o arquivo

Satildeo os menos especiacuteficos a linguagens software normalmente satildeo escritos em ASCII ou Unicode e sempre haacute algum suporte a ler escrever texto em linguagens software

Haacute alguns formatos padratildeo para texto (exs CSV XML) que satildeo suportados em muitas plataformas diferentes

5289

Arquivos - texto X binaacuterios

Vantagens de arquivos binaacuterios

Em geral natildeo haacute conversotildees entre o os dados como armazenados na memoacuteria O que torna o armazenamento mais eficiente e sem alteraccedilotildees nos valores

A maior parte dos formatos padronizados eacute binaacuteria Exs FITS cube CDF NetCDF HDF HDF5 JPEG JPEG2000 TIFF GeoTIFF MPEG etc

Eacute mais comum que haja bibliotecas prontas (ateacute de alto niacutevel) para consulta leitura e gravaccedilatildeo

Os formatos melhor desenhados satildeo autodocumentados (em texto ou binaacuterio) para os ler natildeo eacute necessaacuterio conhecimento preacutevio sobre como os dados foram armazenados

Toda linguagem plataforma costuma ter seu formato binaacuterio mais nativo que costuma ser o mais faacutecil para leitura gravaccedilatildeo Em particular nas de alto niacutevel que tecircm formatos autodocumentados (especialmente

em IDL R Python Java)

Muitos formatos tecircm opccedilatildeo de compressatildeo dos dados

5389

Arquivos - proprietaacuterios X padratildeo

Independente da escolha texto binaacuterio programas devem escolher entre usar um formato proacuteprio ou um formato padronizado

A principal vantagem de formatos proacuteprios eacute que satildeo definidos da forma mais conveniente para a aplicaccedilatildeo que os usa simplificando leitura e gravaccedilatildeo e potencialmente otimizando recursos (acesso ao disco tamanho do arquivo etc)

A principal desvantagem de formatos proacuteprios eacute ser necessaacuterio escrever todo o coacutedigo para os ler gravar

Pode dar mais trabalho que usar um formato geneacuterico que natildeo seja exatamente o que melhor se encaixa na aplicaccedilatildeo

O coacutedigo para processar o formato em geral vai ser menos completo e conveniente de usar que o de um formato bem estabelecido usado por muitos outros em muitos ambientes

Cada novo software que for usar estes arquivos vai precisar compartilhar do mesmo coacutedigo ou precisar de coacutedigo novo (em particular se em outra linguagem) para ler gravar naquele formato

Eacute necessaacuterio documentar o formato e decidir sobre como ele seraacute definido

Se outros jaacute colocaram muito trabalho desenvolvendo bons formatos padratildeo bem suportados em muitos ambientes por que ter o trabalho de reinventar (e reprogramar redocumentar e retestar) a roda

5489

Arquivos - padrotildees comuns em astronomia (exs adiante)

Texto

CSV Comma-separated values - bem suportado por muitos softwares

ldquoColunas fixasrdquo Natildeo eacute um padratildeo bem definido mas eacute praacutetica comum para tabelas (2D)

XML Extensible Markup Language - O padratildeo texto mais flexiacutevel de grande uso em programaccedilatildeo geral para armazenar qualquer coisa com frequumlecircncia de forma hieraacuterquica Bem suportado por linguagens modernas (e modernizadas) e bibliotecas das principais

linguagens gerais Alta complexidade o torna trabalhoso de usar

5589

Arquivos - padrotildees comuns em astronomia (exs adiante)Binaacuterios

FITS Flexible Image Transport System - o mais comum para observaccedilotildees astronocircmicas Conteacutem os dados (em geral arrays 1D 2D ou 3D) e documentaccedilatildeo (nos cabeccedilalhos) sobre a origem e caracteriacutesticas dos dados Tambeacutem usado para armazenar tabelas de dados quaisquer mesmo que natildeo sejam observaccedilotildees (especialmente pelo STSCI) Variam muito em qualidade de documentaccedilatildeo

NetCDF Network Common Data Form - evoluccedilatildeo do CDF autodocumentado eacute comum e bem suportado para vaacuterios arrays de dados

HDF5 Hierarchical Data Format ndash autodocumentado comum e bem suportado permitindo aleacutem de simples arrays estruturas (eacute um formato hieraacuterquico)

Formatos de imagens JPEG JPEG2000 TIFF GeoTIFF etc - voltados para arrays 2D3D de inteiros ou (em alguns casos) reais com ou sem compressatildeo JPEG2000 tem caracteriacutesticas mais avanccediladas como imagens multiresoluccedilatildeo

Formatos vetoriais PS EPS DXF SHP SVG - variados niacuteveis de suporte a armazenamento de vetores e formas em 2D ou 3D

ISIS Cube semelhante em caracteriacutesticas ao FITS mais usado em sensoriamento remoto geociecircncias e ciecircncias planetaacuterias em geral para observaccedilotildees 1D 2D ou 3D

Formatos nativos de linguagens todo o trabalho de leitura e gravaccedilatildeo eacute feito automagicamente pela biblioteca padratildeo em IDL R Python Java

5689

Arquivos texto - newlines

Apesar do que possa parecer arquivos texto natildeo tecircm intrinsecamente vaacuterias linhas Arquivos texto satildeo soacute uma sequumlecircncia 1D de caracteres em alguma codificaccedilatildeo Separaccedilatildeo em linhas (equivalente a interpretar o arquivo como 2D em linhas e colunas) eacute

especificada por convenccedilotildees Natildeo haacute apenas uma convenccedilatildeo para o fim de linhas

A mais primitiva convenccedilatildeo eacute separaccedilatildeo nenhuma estipula-se que linhas tenham um nuacutemero fixo N de caracteres e cabe ao software que lecirc o arquivo entender que uma linha nova ocorre regularmente a cada N caracteres

Eacute a forma menos portaacutevel e mais inconveniente eacute necessaacuterio o conhecimento preacutevio (ou por inspeccedilatildeo do arquivo) de quantos caracteres haacute por linha

A maior parte dos editores de texto natildeo vai saber separar linhas desta forma (por falta deste conhecimento preacutevio) Exemplo (de um FITS real)

SIMPLE = T Fits standard BITPIX = 16 Bits per pixel NAXIS = 0 Number of axes EXTEND = T File may contain extensions

O que com as linhas quebradas nos lugares certos seria

SIMPLE = T Fits standard BITPIX = 16 Bits per pixel NAXIS = 0 Number of axes EXTEND = T File may contain extensions

5789

Arquivos texto - newlines

A forma mais comum de especificar linhas eacute com um marcador do final de linha (newline)

Eacute um caractere especial natildeo normalmente presente no texto que serve para marcar fim de linhas

Mas natildeo haacute soacute um padratildeo de newline Os mais comuns

LF (Line Feed ASCII 10) ndash Unix Linux Mac OS X

CR - (Carriage Return ASCII 13) - Mac OS lt10

CR+LF (CR seguido de LF) - Windows DOS

Eacute o motivo de o Notepad (Windows) natildeo entender as quebras de linha de arquivos escritos com o formato nativo de Linux o arquivo soacute tem LF enquanto o editor espera CR+LF

Alguns sistemas (strings em vaacuterias linguagens por exemplo) usam o coacutedigo de escape n para indicar newline que eacute codificado de acordo com o padratildeo sendo usado

Em geral bibliotecas de leitura e gravaccedilatildeo de arquivos usam (default pelo menos) o newline nativo do sistema em que satildeo usadas

Programas de conversatildeo entre os sistemas satildeo comuns (ex dos2unix)

O Wordpad identifica se for usado soacute LF e quebra as linhas de acordo

5889

Arquivos - texto - CSV

Comma-separated values

O formato mais padronizado para tabelas (arrays 2D) em texto (frequentemente mas natildeo necessariamente ASCII)

Bem suportado por bibliotecas padratildeo de linguagens e outros softwares (Excel Calc Origin Google Docs etc)

Conteacutem Linhas de cabeccedilalho (opcionais mas recomendadas) linhas com qualquer texto geral

descrevendo o arquivo e em geral uma linha de tiacutetulo para as colunas da tabela Uma (apenas uma) tabela onde todas as linhas tecircm o mesmo nuacutemero de colunas

Colunas separadas por viacutergulas (opcionalmente pode ser outro separador) Linhas terminadas por newline (qualquer que seja) Strings delimitados por ldquo ldquo

Ex

NAMECALMPOSFILNAMEECHLPOSDISPPOSTARGNAMEPOSDIRCLASSMJD-OBSITIMECOADDSdec18s00010NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001dec18s00020NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001dec18s00120NIRSPEC-5-AO635800364500itan140NIRSPEC-5-AOp2 TITAN5408763000001dec18s00140NIRSPEC-5-AO626300364500itan140NIRSPEC-5-AOp1 TITAN5408763000001dec18s00151NIRSPEC-5-AO626300364500itan140NIRSPEC-5-AOp1ARC5408764000001dec18s00160NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001

Natildeo eacute necessaacuterio que as colunas tenham largura constante

Cabeccedilalho

5989

Arquivos - texto - CSVHaacute amplo suporte a leitura e gravaccedilatildeo de CSV sem precisar recorrer a procedimentos de baixo niacutevel

Podem ser diretamente importados em Excel Calc Origin Google Docs ou lido facilmente com bibliotecas padratildeo comuns Ex (IDL)

IDLgt c=read_csv(filesearch_scamcsvheader=h)IDLgt printhNAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS

IDLgt helpc Structure ltc8bca508gt 11 tags length=5256 data length=5248 refs=1 FIELD01 STRING Array[41] FIELD02 LONG Array[41] FIELD03 STRING Array[41] FIELD04 DOUBLE Array[41] FIELD05 DOUBLE Array[41] FIELD06 STRING Array[41] FIELD07 STRING Array[41] FIELD08 STRING Array[41] FIELD09 STRING Array[41] FIELD10 DOUBLE Array[41] FIELD11 LONG Array[41]

IDLgt printcfield01[03]dec18s0001 dec18s0002 dec18s0003 dec18s0004

IDLgt printcfield03[03]NIRSPEC-5-AO NIRSPEC-5-AO NIRSPEC-5-AO NIRSPEC-5-AO

6089

Arquivos - texto - CSVEx (IDL) Criaccedilatildeo de um CSV com uma tabela de valores

Criaccedilatildeo de 3 arrays 1D (12 elementos) um para cada coluna

IDLgt x=dindgen(3)IDLgt y=dindgen(4)IDLgt xx=reform(rebin(x34)12)IDLgt yy=reform(rebin(reform(y14)34)12)IDLgt f=xx+yy10IDLgt helpxxyyfXX DOUBLE = Array[12]YY DOUBLE = Array[12]F DOUBLE = Array[12]

Escrita do arquivo

IDLgt write_csvexamplecsvxxyyfheader=[XYX+10Y]

ResultadoXYX+10Y000000000000000000000000100000000000000010000000200000000000000020000000000000001000000010000000100000001000000011000000()

6189

Arquivos - texto - ldquoColunas regularesrdquoFixed column width

Natildeo eacute exatamente um padratildeo Eacute uma praacutetica comum

Armazena uma tabela (array 2D) de forma regular simples de ser interpretada e lida

Costumam ter linha(s) de cabeccedilalho descrevendo o conteuacutedo do arquivo em geral com uma linha para os nomes das colunas

As demais linhas conteacutem os dados sempre ocupando a mesma largura por coluna e escritos no mesmo formato em cada coluna

Costumam ser simples de ler inclusive interativamente (exs Excel Calc Origin read_ascii)

Ex (IDL) Uma simples tabela soacute de nuacutemeros

wavl CH4=33 wavl CH4=25 wavl CH4=10 wavl CH4=08 wavl CH4=05 wavl CH4=026 wavl CH4=02 477330000 0090130 477330000 0091110 477330000 0089250 477330000 0087000 477330000 0087140 477330000 0090080 477330000 0088110 480040000 0090930 480040000 0091930 480040000 0090160 480040000 0087930 480040000 0088110 480040000 0090950 480040000 0089090 482750000 0091710 482750000 0092730 482750000 0091060 482750000 0088850 482750000 0089080 482750000 0091810 482750000 0090060 485450000 0092530 485450000 0093570 485450000 0092000 485450000 0089810 485450000 0090100 485450000 0092730 485450000 0091090

IDLgt a=read_ascii(specs_27s_ntxtdata_start=1header=header)IDLgt printheader wavl CH4=33 wavl CH4=25 wavl CH4=10 wavl CH4=08 wavl CH4=05 wavl CH4=026 wavl CH4=02 IDLgt helpa Structure ltd423c9a8gt 1 tags length=224 data length=224 refs=1 FIELD01 FLOAT Array[14 4]

6289

Arquivos - texto - ldquoColunas regularesrdquoJaacute um arquivo um pouco mais difiacutecil de ler

NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS dec18s0001 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0002 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0003 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 FLAT 5408757812500 460000 5 dec18s0004 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 DARK 5408757812500 460000 5

Por ter colunas de tipos diferentes (strings inteiros reais) natildeo eacute possiacutevel o ler em um simples array Mas eacute faacutecil o colocar em uma estrutura de arrays onde cada campo eacute uma coluna

Especificando interativamente como interpretar as linhasIDLgt templ=ascii_template(filesearch_scamtxt)

Nome do campo (default mostrado)

Tipo do campo (identificado automaticamente)

Posiccedilatildeo (caracter) do comeccedilo (identificada automaticamente)

Linha de exemplo para verificar as colunas

6389

Arquivos - texto - ldquoColunas regularesrdquoDepois de feito o template o arquivo pode ser lido com apenas

IDLgt a=read_ascii(filesearch_scamtxttemplate=templ)IDLgt helpa Structure ltd4ec4608gt 11 tags length=416 data length=416 refs=1 FIELD01 STRING Array[4] FIELD02 LONG Array[4] FIELD03 STRING Array[4] FIELD04 FLOAT Array[4] FIELD05 FLOAT Array[4] FIELD06 STRING Array[4] FIELD07 STRING Array[4] FIELD08 STRING Array[4] FIELD09 FLOAT Array[4] FIELD10 FLOAT Array[4] FIELD11 LONG Array[4]IDLgt printafield01dec18s0001 dec18s0002 dec18s0003 dec18s0004IDLgt printafield04 626300 626300 626300 626300

O template (uma estrutura contendo dados sobre como ler o arquivo) pode ser usado para outros arquivos no mesmo formato No lugar de ter sido criado interativamente poderia ter sido lido de algum arquivo Poderia ter especificado nomes para os campos que seriam mais amigaacuteveis que coias como FIELD11

6489

Arquivos - texto - XML

Extensible Markup Language

Admite grande flexibilidade e por isso pode ter alta complexidade

Valores satildeo colocados dentro de uma estrutura em hieraacuterquica (em uma aacutervore) com os noacutes identificados pelos seus nomes (chaves)

Largamente usado em muitas aacutereas para armazenar conjuntos arbitraacuterios de quaisquer estruturas de dados

A maioria das aplicaccedilotildees usa um formato que eacute um subconjunto do XML especificado por um Schema comumente em um arquivo XML DTD (Document Type Definition)

6589

Arquivos - texto ndash XML ndash exemplos de usos

Armazenamento de dados de aplicaccedilotildees web (comum para exportar importar dados MediaWiki DokuWiki WordPress ADS Lattes etc)

Documentos Office (docx pptx xlsx) OpenOffice (odt opd ods)

Como versotildees de outros formatos FITSML XDF

ldquoScientific Dataset XML NASAs Astronomical Data Center (ADC) sponsors a number of research projects that

use XML for scientific data representation The XML activities at the ADC are sponsored and supported by the NASA Office of Space Science Applied Information Systems Research Program (AISRP)rdquo - httpxmlcoverpagesorgnasa-adchtml

Astronomical Instrument Markup Language (AIML)

SVG ndash Scalable Vector Graphics

Muitas de outras aplicaccedilotildees listadas em httpxmlcoverpagesorgxmlhtmlapplications

6689

Arquivos - texto ndash XML - exemploltxml version=10 gtltDOCTYPE Xdmf SYSTEM Xdmfdtd []gtltXdmf xmlnsxi=httpwwww3org2001XInclude Version=20gt ltDomaingt lt-- Example of Basic Topologies --gt ltInformation Name=Descriptiongt Example of a Polyvertex Topology ltInformationgt ltGrid Name=Polyvertex GridType=Uniformgt ltTopology TopologyType=Polyvertex Dimensions=3 NodesPerElement=3gt ltDataItem Format=XML Dimensions=3 3 NumberType=Floatgt 0 1 2 4 5 6 8 9 10 ltDataItemgt ltTopologygt ltGeometry Type=XYZgt ltDataItem Format=XML Dimensions=4 4 3gt 00 00 00 10 00 00()Que mostra que a interpretaccedilatildeo (parsing) de XML eacute em geral complexa

6789

Arquivos - texto - XML

Haacute muitas bibliotecas de alto niacutevel para fazer o processamento (parsing) e entregar os dados em uma estrutura conveniente

A complexidade em processar XML estaacute em decidir o que fazer com os dados jaacute que os arquivos podem ser muito complexos

As APIs (Application Programming Interfaces) mais comuns para processar XML que satildeo implementadas em muitas linguagens

DOM (Document Object Model) ndash manteacutem todo o conteuacutedo do em uma estrutura de dados (em geral uma aacutervore) em uma variaacutevel (em geral um objeto) Esta pode ser consultada para obter os valores de interesse para os alterar e usada para escrever um arquivo

SAX (Simple API for XML) ndash Interpretador (parser) por objetos O usuaacuterio escreve uma classe herdando da classe SAX provendo os meacutetodos que vatildeo processar os campos agrave medida em que estes satildeo lidos

6889

Arquivos - binaacuterios - FITSFlexible Image Transport System

O formato mais comum para observaccedilotildees astronocircmicas Tambeacutem usado para armazenar quaisquer dados mesmo natildeo relacionados a observaccedilotildees (especialmente tabelas como eacute praacutetica do STSCI)

Conteacutem um (ou mais) cabeccedilalho(s) de texto com metadados (informaccedilotildees sobre os dados como caracteriacutesticas (necessaacuterias para os ler) origem condiccedilotildees em que foram obtidos processamento realizado etc)

SIMPLE = T image conforms to FITS standard BITPIX = 32 bits per data value NAXIS = 2 number of axes NAXIS1 = 1024 NAXIS2 = 1024 BSCALE = 100000 Scaling factor BZERO = 000000 Scaling zero-point TELESCOP= Keck II Telescope SLITNAME= 0041x226 Slit Name SLITPA = 351979 Slit position angle SLITX = 131500 X pixel of the center of the slit LST = 12010446 local apparent sidereal time (()

Depois do cabeccedilalho haacute uma (ou mais) seccedilatildeo(otildees) de dados binaacuterios Costuma(m) ser array(s) 1D (espectros) 2D (imagens) ou 3D (ldquocubos de dadosrdquo)

De inteiros ou reais inteiros satildeo comuns em contagens de instrumentos reais para valores derivados (fluxos intensidades etc)

6989

Arquivos - binaacuterios - FITSNormalmente FITS satildeo lidos escritos por bibliotecas prontas de (relativamente) alto niacutevel usuaacuterio natildeo tem que saber como os dados satildeo armazenados no arquivo nem como os ler escrever Ex (IDL com a biblioteca idlastro)

IDLgt fits_info2dspectrumfits2dspectrumfits has 3 extensionsPrimary header 288 recordsNo dataExtension 1 -- SCI Header 144 records IMAGE ( 1201 1201 )Extension 2 -- ERR Header 72 records IMAGE ( 1201 1201 )Extension 3 -- DQ Header 72 records IMAGE ( 1201 1201 )

IDLgt mydata=readfits(2dspectrumfitsexten_no=1myheader) READFITS Reading FITS extension of type IMAGE READFITS Now reading 1201 by 1201 array

IDLgt extastmyheadermyastIDLgt sz=size(mydatadimensions)IDLgt xy2ad[1sz[0]][1sz[1]]myastcorners_acorners_dIDLgt printcorners_aCorners of the data array from file 2dspectrumfits are at 14487480 33063480

IDLgt printcorners_d -00041264444 00041402222

Obteacutem os dados de coordenadas (WCS) do header

Coloca os dados no array (2D de floats) mydata e o header no array (1D de strings) myheader

Calcula as coordenadas das quinas da imagem atraveacutes do WCS

Provecirc informaccedilotildees sobre o arquivo

7089

Arquivos - binaacuterios - ISIS Cube

Formatos como FITS se adequam muito a ter uma interface de mais alto niacutevel por objetos

Tambeacutem para dados em tabelas FITS muito mais trabalhosos de ler em baixo niacutevel que se adequam muito mais a mapas ou estruturas

Exemplo (de um formato semelhante a FITS ISIS cube)

O objeto ao ser criado lecirc todo o arquivo

cube=pp_editablecube(CM_1553510065_1_ircub)

Meacutetodos fornecem os dados desejados para obter quando necessaacuterio os dados de interesse

Find out the names of the backplanesprintcubegetproperty(backnames)Get the start time of the cubeprintcubegetfromheader(START_TIME)2007-084T100057286Z

Valores no cabeccedilalho podem ser convenientemente fornecidos como um mapa

header=cubeheader_as_hash()printheader[START_TIME]2007-084T100057286Z

7189

Arquivos - binaacuterios ndash ISIS Cube

Os dados satildeo fornecidos como arraysMake a contour plot of the latitudesc=contour(cubegetsuffixbyname(LATITUDE))Get the band with wavelength nearest to 21 (in the units used in the cube)selband=cubegetbandbywavelength(21wavelengths=selwavs)

Interfaces por overload tornam o acesso ainda mais conveniente

selband=cube[21]

selwavs=cube[21]

Retorna um array com a banda de comprimento de onda mais proacuteximo de 21 (microm)

Retorna o comprimento de onda mais proacuteximo de 21 (microm) da banda retornada acima

7289

Arquivos - binaacuterios ndash ISIS Cube Alteraccedilotildees feitas ao conteuacutedo satildeo automaticamente refletidas em todos os

lugares (cabeccedilalho em particular) afetados mantendo o objeto vaacutelido que pode depois ser gravado em um novo arquivo

IDLgt printcubelinescubesamplescubebands 64 64 256

IDLgt helpcubecoreltExpressiongt FLOAT = Array[64 64 256]

IDLgt cubecore=dblarr(100100256)

A linha acima natildeo eacute uma atribuiccedilatildeo eacute uma invocaccedilatildeo de meacutetodo Eacute equivalente acubesetpropertycore=dblarr(100100256)

Eacute o trabalho da funccedilatildeo setproperty decidir se a propriedade passada (core) faz sentido e se fizer fazer todo o trabalho necessaacuterio a esta mudanccedila Para o usuaacuterio eacute tudo automaacutetico e os dados da classe satildeo vaacutelidos o tempo todo

IDLgt helpcubecoreltExpressiongt DOUBLE = Array[100 100 256]

IDLgt printcubelinescubesamplescubebands 100 100 256

IDLgt cubesaveCM_1553510065_1_ir_editedcub

7389

Arquivos - binaacuterios ndash NetCDF e HDF5

Network Common Data Form e Hierarchical Data Format

Os dois uacutenicos formatos bem estabelecidos para dados cientiacuteficos geneacutericos

Armazenam dados como vaacuterias variaacuteveis e seus metadados Para cada variaacutevel haacute (ou pode haver) os metadados

Nome Dimensotildees (do array) Unidades Comentaacuterios

Ambos permitem arrays multidimensionais

Apenas HDF5 permite estruturas (daiacute vem a hierarquia)

Autodocumentados qualquer software que saiba ler um destes formatos lecirc qualquer arquivo sem precisar de conhecimento preacutevio sobre como o arquivo foi gerado

Muito bem suportados em bibliotecas padratildeo e natildeo padratildeo em softwares interativos e visualizadores (inclusive plugins para navegadores)

httpwwwunidataucaredusoftwarenetcdf httpenwikipediaorgwikiHdf5

NetCDF eacute mais simples de usar por natildeo ter hierarquia dando menos trabalho para ler e escrever dados Se hierarquia natildeo eacute necessaacuteria eacute mais conveniente de usar que HDF5

7489

Arquivos - binaacuterios - NetCDF e HDF5Haacute tambeacutem o formato CDL uma versatildeo ASCII do NetCDF A biblioteca padratildeo do NetCDF inclui conversores entre estes formatos

$ ncdump -h refspec_g01_0ncnetcdf refspec_g01_0 dimensions nlay = 51 nwn = 400 nleg = 33 numu = 2 nlev = 52 nphi = 3 ngas = 2 nwnc = 1 scal = 1 v3 = 3 dnl = 1 nk = 1 tdisr = UNLIMITED (0 currently) na = 16

variables float alb(nwn) float z(nlay) float t(nlay) float p(nlay) float wl(nwn) float iof(nwn) float mtau(nwn) float htau(nwn) float hctaus(nwn) float gtau(nwn) float outcos(scal) float phi(nleg) float phic(scal) float umu(numu) float flux(v3 nwn nlev) float mix(nlay ngas) float c(nlay) float psat(nlay) float ga(nwnc) float wlc(nwnc) float inc(scal) int dm(scal) int ord(scal) float fbeam(scal) float wn(nwn) float tautot(nwn nlay) float htaus(nwn nlay) float htaux(nwn nlay) float taug(nwn nlay) float phase(nwn nlay nleg) float ssa(nwn nlay) float uu(nwn nphi nlev numu) float u0u(nwn nlev numu) float tray(nwn nlay) float gtauo(tdisr nwn nlay)

Haacute 14 variaacuteveis usadas como dimensotildees para as 35 variaacuteveis que satildeo arrays

Ex alb(nwn) indica que alb eacute um array 1D de nwn elementos

nwn estaacute armazenado como uma das dimensotildees e eacute 400 portanto alb tem 400 elementos

Parte do conteuacutedo de um arquivo NetCDF em formato CDL (gerado pelo programa ncdump)

7589

Arquivos - binaacuterios - NetCDF e HDF5Conteuacutedo daquele arquivo visualizado com o ncview (acompanha a biblioteca NetCDF padratildeo)

7689

Arquivos - binaacuterios - NetCDF e HDF5O conteuacutedo de todo o arquivo pode ser lido facilmente com as bibliotecas disponiacuteveis e armazenado em contecirciners convenientes Usando um objeto que gera um resultado um pouco mais conveniente

IDLgt h=pp_readncdf(refspec_g01_0nchash)IDLgt printhvar_dims ltObjHeapVar229(HASH)gtvars ltObjHeapVar152(HASH)gtdims ltObjHeapVar118(HASH)gt

IDLgt printh[vars]T 173203 175459 175848 176001 175975 Z 431869 418858 406067 393403 380464 FLUX 300660 145536 0705180 0341669 0165532 PHASE 100000 0779034 0660858 0542052 0449983 TAUTOT0694377 0693420 0693474 0693540 0693636()

IDLgt help(h[vars])[TAUTOT]ltExpressiongt FLOAT = Array[51 400]

IDLgt print(h[var_dims])[TAUTOT]NLAY NWN

IDLgt print(h[dims])[(h[var_dims])[TAUTOT]]NLAY 51NWN 400

7789

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5)

Visualizaccedilatildeo da variaacutevel selecionada

Metadados e alguns valores da variaacutevel selecionada

Variaacutevel a ser criada com o conteuacutedo desta variaacutevel do arquivo

Hierarquia das variaacuteveis do arquivo

7889

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5) Imported variable az

IDLgt helpaz Structure ltd5723f38gt 13 tags length=448 data length=444 refs=1 _NAME STRING az _ICONTYPE STRING binary _TYPE STRING DATASET _FILE STRING INTENSI_test_409OUTh5 _PATH STRING _DATA DOUBLE Array[38] _NDIMENSIONS LONG 1 _DIMENSIONS ULONG64 Array[1] _NELEMENTS ULONG64 38 _DATATYPE STRING H5T_FLOAT _STORAGESIZE ULONG 8 _PRECISION LONG 64 _SIGN STRING

IDLgt printaz_data 00000000 10000000 20000000 30000000 40000000 50000000 60000000 80000000 ()

7989

Arquivos - binaacuterios - imagens

JPEG JPEG200 TIFF GeoTIFF etc

Os formatos comuns de imagens satildeo bem suportados em muacuteltiplas plataformas para uso dentro de programas e interativamente

Alguns formatos tecircm opccedilatildeo de compressatildeo com perda eou sem perda

Armazenam imagens como arrays 2D ou 3D (3D frequumlentemente limitado a 3 ou 4 em uma das dimensotildees uma imagem em 3 ou 4 bandas) de inteiros ou (em alguns formatos) reais

Alguns formatos permitem armazenar metadados para caracterizar as imagens armazenadas

JPEG2000 e GeoTIFF (um subconjunto de TIFF) comuns em astronomia e aacutereas proacuteximas

8089

Arquivos - binaacuterios ndash imagens ndash exemplo (IDL)IDLgt printquery_tiff(issmap_2009tiffinfogeotiff=geo) 1

IDLgt helpinfo Structure ltd4eca4b8gt 18 tags length=144 data length=132 refs=1 CHANNELS LONG 4 DIMENSIONS LONG Array[2] IMAGE_INDEX LONG 0 NUM_IMAGES LONG 1 PIXEL_TYPE INT 1 TYPE STRING TIFF BITS_PER_SAMPLE LONG 8 POSITION FLOAT Array[2] RESOLUTION FLOAT Array[2] UNITS LONG 2 TILE_SIZE LONG Array[2] DESCRIPTION STRING ISS (2009) DATE_TIME STRING 20100218 012436()

IDLgt helpgeo Structure ltd4efa1b8gt 10 tags length=264 data length=262 refs=1 MODELPIXELSCALETAG DOUBLE Array[3] MODELTIEPOINTTAG DOUBLE Array[6 4] GEOGRAPHICTYPEGEOKEY INT 4035 GEOGSEMIMAJORAXISGEOKEY DOUBLE 25750000 GEOGSEMIMINORAXISGEOKEY DOUBLE 25750000()

IDLgt myimage=read_tiff(issmap_2009tiff) Lecirc a imagem para o array myimage

Obteacutem informaccedilotildees sobre o arquivo

8189

Arquivos - binaacuterios ndash formatos nativosLinguagens como IDL R Python Java tecircm seu formato nativo binaacuterio acessado em alto niacutevel Basta mandar salvar ler variaacuteveis no do arquivo a biblioteca padratildeo automagicamente faz todo o trabalho de decidir como gravar ler os dados

Conveniente de usar na proacutepria linguagem Mas raramente existem bibliotecas para ler gravar o formato nativo de uma linguagem a partir de outra Ex (IDL)

IDLgt savefile=2dspectrumsavmydatamyheadercorners_dcorners_averbosecompress SAVE Portable (XDR) compressed SAVERESTORE file SAVE Saved variable MYDATA SAVE Saved variable MYHEADER()

Pode ser lido com apenas (haacute formas mais elaboradas)

IDLgt restore2dspectrumsavverbose RESTORE Portable (XDR) compressed SAVERESTORE file RESTORE Save file written by ltunknowngtltunknowngt Thu Jan 27 191422 2011 RESTORE IDL version 801 (linux x86_64) RESTORE Restored variable MYDATA RESTORE Restored variable MYHEADER()

IDLgt helpmydatamyheadercorners_dcorners_aMYDATA FLOAT = Array[1201 1201]MYHEADER STRING = Array[144]()

8289

Arquivos - processamento em baixo niacutevel

Nem sempre um formato padratildeo eacute a melhor escolha para o problema

Nem sempre haacute escolha (pode-se ter que trabalhar com arquivos que jaacute foram escritos em algum formato proprietaacuterio)

Agraves vezes o formato eacute padratildeo mas natildeo haacute bom suporte a ele disponiacutevel

Em todos estes casos eacute necessaacuterio escrever rotinas em baixo niacutevel que vatildeo ler processar diretamente o conteuacutedo do arquivo

Preferencialmente criando interfaces de alto niacutevel para o programa que vai as usar

8389

Arquivos - processamento em baixo niacutevel - texto

Tomando o exemplo anterior onde as colunas eram de diferentes tipos

NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS dec18s0001 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0002 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0003 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 FLAT 5408757812500 460000 5 dec18s0004 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 DARK 5408757812500 460000 5

A forma mais simples de o ler diretamente eacute definir uma estrutura para receber cada linha e um array destas estruturas para receber todo o arquivo Ex (IDL)

IDLgt record=namecalmpos0filnameechlpos0d0disppos0d0targnameposdirclassmjd_obsitime0d0coadds0IDLgt nlines=file_lines(filesearch_scamtxt)IDLgt mydata=replicate(recordnlines-1)IDLgt header=

Depois de definidas as variaacuteveis que vatildeo receber os dados o arquivo pode ser lido

IDLgt openrunitfilesearch_scamtxtget_lunIDLgt readfunitheaderIDLgt readfunitmydataformat=(A14I8A15F104F104A18A19A15F158F105I15)IDLgt free_lununit

A gravaccedilatildeo de um arquivo texto poderia ser feita de forma semelhante apenas trocando openr por openw (abrir o arquivo para gravaccedilatildeo natildeo leitura) e readf por printf

O arquivo eacute aberto em uma unidade (unit) usada para especificar de onde eacute feita a leitura

Ao final o arquivo eacute fechado

8489

Arquivos - processamento em baixo niacutevel - texto

O que resulta em

IDLgt printheader NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS

IDLgt helpmydataMYDATA STRUCT = -gt ltAnonymousgt Array[4]

IDLgt helpmydata[0] Structure ltd5e38f68gt 11 tags length=136 data length=124 refs=3 NAME STRING dec18s0001 CALMPOS INT 0 FILNAME STRING NIRSPEC-5-AO ECHLPOS DOUBLE 62630000 DISPPOS DOUBLE 36450000 TARGNAME STRING HD85258 POSDIR STRING NIRSPEC-5-AOp1 CLASS STRING STAR MJD_OBS STRING 54087574 ITIME DOUBLE 10000000 COADDS INT 1

Este caso eacute mais complicado que os mais comuns por haver colunas de strings

Se todas fossem de nuacutemeros natildeo teria sido necessaacuterio especificar o formato explicitamente As colunas teriam sido adivinhadas pela biblioteca que lecirc o arquivo Poderia ter sido lido escrito soacute com um array de nuacutemeros sem estruturas

8589

Arquivos - processamento em baixo niacutevel - binaacuterio

Formatos binaacuterios podem ser definidos de qualquer forma O arquivo eacute apenas um conjunto de bytes Cabe ao software saber como os interpretar

Uma escolha comum para que sejam autodocumentados eacute incluir um cabeccedilalho de texto informando as caracteriacutesticas dos dados necessaacuterias para os ler

Ex (IDL) criar um arquivo que armazene um array de doubles com um cabeccedilalho informando as dimensotildees para que o programa que o lecirc saiba como ler os dados

Inventa dados e abre o arquivo

IDLgt data_to_write=dindgen(34)IDLgt openwunitbinary_exampledatget_lun

Escreve as dimensotildees como texto

IDLgt printfunitdimensions of the double array stored belowIDLgt printfunitsize(data_to_writedimensions)

Escreve os dados binaacuterios

IDLgt writeuunitdata_to_write

Fecha o arquivo

IDLgt free_lununit

Escreve em binaacuterio (write unformatted)

8689

Arquivos - processamento em baixo niacutevel - binaacuterio

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

dimensions of the double array stored below 3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

8789

Arquivos - processamento em baixo niacutevel - binaacuterioA leitura deste arquivo eacute igualmente simples

IDLgt header=IDLgt dims=[00]IDLgt openrunitbinary_exampledatget_lun

Lecirc as dimensotildees (armazenadas como texto)

IDLgt readfunitheaderIDLgt readfunitdims

Lecirc a parte binaacuteria depois de saber as dimensotildees

IDLgt data_read=dblarr(dims)IDLgt readuunitdata_read

Fecha o arquivo

IDLgt free_lununit

Verifica que os dados foram gravados e lidos corretamente

IDLgt printarray_equal(data_to_writedata_read) 1

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Lecirc dados binaacuterios (read unformatted)

8889

Sumaacuterio

5 ndash Slides em httpwwwppenteadonetpeapea04_strings_iopdf Strings Expressotildees regulares Arquivos

httpwwwppenteadonetpea

8989

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89

Strings - codificaccedilotildees - ASCII

Nem todos os caracteres ASCII satildeo visiacuteveis (printable) Alguns satildeo espaccedilos em branco (espaccedilos tabs etc) outros satildeo alguma forma de caractere de controle (CR LF etc)

O zero costuma ser reservado para controle significando um string vazio (se soacute tem 0) ou em algumas codificaccedilotildees (C) o fim do string

Os caracteres codificados por valores 128-255 natildeo satildeo parte do padratildeo ASCII A associaccedilatildeo varia de acordo com a codificaccedilatildeo escolhida

Sistemas que usam ASCII satildeo os mais simples caracteres sempre tecircm o mesmo tamanho em bytes (1 byte) Satildeo facilmente lidos processados e convertidos de para nuacutemeros

ASCII eacute a codificaccedilatildeo de texto mais comum mas

Ao contraacuterio do que muitos assumem ASCII natildeo eacute a uacutenica forma de codificar texto

ASCII natildeo eacute sinocircnimo de arquivo texto

Em anos recentes Unicode em suas vaacuterias formas (adiante) tem se tornado gradativamente mais comum

889

Strings - codificaccedilotildees - ASCII

Por que ASCII natildeo eacute sempre usado

Porque eacute insuficiente Natildeo conteacutem por exemplo

Caracteres modificados (com acentos cedilha)

Siacutembolos matemaacuteticos (aleacutem dos muito baacutesicos + - ^ gt lt = ) Ex part sum int plusmn ge le times infin neℝ ℤ forall exist ∮ ≌ nabla

Siacutembolos fiacutesicos Ex micro Å oplus

Letras gregas

Outros siacutembolos Ex rarr harr euro ordf deg pound yen iquest iexcl

Caracteres de outras liacutenguas (inclusive de muitos siacutembolos como a vaacuterias formas usadas em chinecircs e japonecircs)

989

Strings - codificaccedilotildees - Unicode

O que usar para natildeo ter as limitaccedilotildees do ASCII

O uacutenico padratildeo de uso dominante hoje eacute o Unicode

Desenvolvido para ser um padratildeo universal contendo ldquotodosrdquo os caracteres de ldquotodasrdquo as escritas e dados sobre os caracteres

Natildeo eacute imutaacutevel adiccedilotildees satildeo decididas pelo Unicode Consortium (httpwwwunicodeorg)

1089

Strings - codificaccedilotildees - Unicode

Haacute duas partes no Unicode o cataacutelogo (uacutenico) e as codificaccedilotildees (vaacuterias)

O cataacutelogo eacute definido independente de codificaccedilotildees Pode ser visto como um mapa onde os pontos de coacutedigo (codepoints) satildeo as

chaves e os valores satildeo os dados sobre aquele caractere

ldquoIn Unicode the letter A is a platonic ideal Its just floating in heaven A

This platonic A is different than B and different from a but the same as A and A and A

The idea that A in a Times New Roman font is the same character as the A in a Helvetica font but different from a in lower case does not seem very controversial but in some languages just figuring out what a letter is can cause controversy

Is the German letter szlig a real letter or just a fancy way of writing ss If a letters shape changes at the end of the word is that a different letter Hebrew says yes Arabic says no

Anyway the smart people at the Unicode consortium have been figuring this out for the last decade or so accompanied by a great deal of highly political debate and you dont have to worry about it Theyve figured it all out alreadyrdquo

de The absolute minimum every software developer absolutely positevely must know about Unicode and character sets (no excuses)

httpwwwjoelonsoftwarecomarticlesUnicodehtml

1189

Strings - codificaccedilotildees - UnicodeOs dados sobre um caractere Unicode satildeo importantes para suas buscas e identificaccedilatildeoIncluem nome e propriedades visiacutevel (printable) numeacuterico alfanumeacuterico maiuacutesculo minuacutesculo ldquoespaccedilordquo (blank) liacutengua matemaacutetico etc

ExsUnicode Character LATIN CAPITAL LETTER A (U+0041)Name LATIN CAPITAL LETTER ABlock Basic LatinCategory Letter Uppercase [Lu]Combine 0BIDI Left-to-Right [L]Mirror NIndex entries Latin Uppercase Alphabet Uppercase Alphabet Latin

Capital Letters LatinLower case U+0061Version Unicode 110 (June 1993)

Unicode Character INTEGRAL (U+222B)Name INTEGRALBlock Mathematical OperatorsCategory Symbol Math [Sm]Combine 0BIDI Other Neutrals [ON]Mirror YIndex entries Integral Signs INTEGRALSee Also latin small letter esh U+0283Version Unicode 110 (June 1993)

(resultados de httpwwwfileformatinfoinfounicodecharsearchhtm)

int

A

1289

Strings - codificaccedilotildees - Unicode

Unicode Character ANGSTROM SIGN (U+212B)Name ANGSTROM SIGNBlock Letterlike SymbolsCategory Letter Uppercase [Lu]Combine 0BIDI Left-to-Right [L]Decomposition LATIN CAPITAL LETTER A WITH RING ABOVE (U+00C5)Mirror NOld name ANGSTROM UNITIndex entries ANGSTROM SIGNLower case U+00E5Comments non SI length unit (=01 nm) named after A J ngstroumlm Å

Swedish physicist preferred representation is U+00C5Version Unicode 110 (June 1993)

Unicode Character GREEK SMALL LETTER ZETA (U+03B6)Name GREEK SMALL LETTER ZETABlock Greek and CopticCategory Letter Lowercase [Ll]Combine 0BIDI Left-to-Right [L]Mirror NUpper case U+0396Title case U+0396Version Unicode 110 (June 1993)

(resultados de httpwwwfileformatinfoinfounicodecharsearchhtm)

ζ

1389

Strings - codificaccedilotildees - UnicodeUnicode Character NABLA (U+2207)Name NABLABlock Mathematical OperatorsCategory Symbol Math [Sm]Combine 0BIDI Other Neutrals [ON]Mirror NIndex entries difference backward backward difference del NABLAComments backward difference gradient del used for Laplacian

operator (written with superscript 2)See Also white down-pointing triangle U+25BDVersion Unicode 110 (June 1993)

Java DatastringtoUpperCase() nablastringtoLowerCase() nablaCharacterUnicodeBlock MATHEMATICAL_OPERATORSCharactercharCount() 1CharactergetDirectionality() DIRECTIONALITY_OTHER_NEUTRALS [13]CharactergetNumericValue() -1CharactergetType() 25CharacterisDefined() YesCharacterisDigit() NoCharacterisIdentifierIgnorable() NoCharacterisLetter() NoCharacterisLetterOrDigit() NoCharacterisLowerCase() NoCharacterisWhitespace() No()

(resultados de httpwwwfileformatinfoinfounicodecharsearchhtm)

nabla

1489

Strings ndash Como codificar Unicode

Haacute vaacuterias formas Nenhuma simples como ASCII porque eacute necessaacuterio um nuacutemero muito maior de pontos de coacutedigo (haacute espaccedilo para 1 114 112 hoje haacute 109 449 alocados)

Apenas usar mais bytes com um nuacutemero constante por caractere exigiria pelo menos 21 bits por caractere (221 eacute 2 097 152)

Seria demais considerando que quase todos os caracteres escritos estatildeo entre os 128 do ASCII

Em quase todo texto 20 de cada 21 bits seriam 0

A maior parte das codificaccedilotildees usa formas mais elaboradas com um nuacutemero variaacutevel de bytes por caractere

Todas as codificaccedilotildees de uso comum tem o ASCII como subconjunto os 128 caracteres do ASCII satildeo codificados em forma idecircntica em ASCII e nas codificaccedilotildees usuais de Unicode

O que ajuda na compatibilidade software Unicode escrevendo texto que soacute conteacutem caracteres do ASCII produz texto idecircntico ao que seria produzido em ASCII

1589

Strings - codificaccedilotildees para Unicode

No mundo ocidental haacute apenas duas codificaccedilotildees de uso comum

UTF-8

ISO 8859-1 (tambeacutem chamado de Latin 1)

Por isso eacute necessaacuterio saber que codificaccedilatildeo usar ao trabalhar com Unicode

Alguns softwares formatos de arquivo informam a codificaccedilatildeo usada

Outros assumem que uma eacute usada (sem ter sido informada)

Outros tentam adivinhar quando natildeo satildeo informados qual eacute (esp navegadores)

Outros soacute perguntam para o usuaacuterio (esp editores de texto)

Sistemas operacionais oferecem variadas formas de digitar caracteres especiais

Pelos coacutedigos numeacutericos

Por programas seletores de caracteres Alguns seletores de caracteres (ex kcharselect do KDE) permitem fazer buscas pelo

nome ou propriedades

1689

Strings - Onde haacute suporte a Unicode em programaccedilatildeo

Linguagens variam muito

Desconhecem Unicode (soacute usam ASCII) C Fortran

Usam nativamente ASCII (inclusive no coacutedigo-fonte) mas tecircm tipos para strings Unicode e ou funccedilotildees para processar Unicode (em variados graus) C C++ IDL R

Usam nativamente Unicode (inclusive no coacutedigo-fonte) e tecircm bom suporte a strings Unicode Java Python Perl

Muitas vezes (mesmo quando Unicode pode ser usado em coacutedigo-fonte) caracteres Unicode satildeo escritos atraveacutes de ASCII com coacutedigos de escape para coacutedigos Unicode Exs

IDLgt p=plot(testtitle=Z(00C5222B))

C C++ Java Python u2207

ReferecircnciasCharacters vs byteshttpwwwtbrayorgongoingWhen200x20030426UTFThe absolute minimum every software developer absolutely positively must know about Unicode and character sets (no excuses)httpwwwjoelonsoftwarecomarticlesUnicodehtmlUnicode character searchhttpwwwfileformatinfoinfounicodecharsearchhtm

em IDL produz intÅ

produz nabla

1789

Strings - processamento baacutesico

Operaccedilotildees mais fundamentais que costumam ser suportadas em ldquotodasrdquo as linguagens bibliotecas padratildeo (exemplos usando sintaxe de IDL)

Atribuiccedilatildeo de literais

IDLgt a=some

IDLgt helpaA STRING = some

IDLgt printasome

Concatenaccedilatildeo

IDLgt b=a+ string

IDLgt helpbB STRING = some string

1889

Strings - processamento baacutesico

Valor loacutegico

String vazio (null string) eacute falso o resto eacute verdadeiro

IDLgt c=

IDLgt if c then printc is not empty string else printc is null string ()c is null string ()

IDLgt c=a

IDLgt if c then printc is not empty string else printc is null string ()c is not empty string

Espaccedilo natildeo eacute o mesmo que string vazio

IDLgt c=

IDLgt if c then printc is not empty string else printc is null string ()c is not empty string

1989

Strings - processamento baacutesico Comparaccedilotildees

IDLgt helpabA STRING = someB STRING = some string

IDLgt printb eq a 0

IDLgt printb gt a 1

IDLgt c=[ab9Some somesome other string]

IDLgt printc[sort(c)]format=(A) some9Somesomesome other stringsome string

IDLgt printa eq A 0

IDLgt printstrcmp(aAfold_case) 1

Comparaccedilotildees de ldquotamanhordquo (maior menor etc) satildeo comparaccedilotildees pela ordem de codificaccedilatildeo (ldquoalfabeacuteticardquo)

Algumas linguagens permitem definir o ordenamento (como considerar maiuacutesculasminuacuteculas letras com acentos nuacutemeros e siacutembolos) Exs Python C++ Java Perl

2089

Strings - processamento baacutesico Substrings

IDLgt printstrmid(abcdefg32)de

Algumas linguagens nativamente suportam iacutendices para indicar substrings C C++ Fortran Python Ex (Python)

gtgtgt s=abcdegtgtgt print(s[25])cde

Outras permitem que sejam definidos iacutendices por objetos strings

Busca de caracteres ou substrings

IDLgt printstrpos(abcdefgd) 3

IDLgt printstrpos(abcdefgj) -1

IDLgt printstrpos(abcdefgbc) 1

2189

Strings - processamento baacutesico

Outros

IDLgt printstrlen(1234567) 7

IDLgt printstrlen(1234567 ) 8

IDLgt printstrlen( 1234567 ) 9

IDLgt helpstrtrim( 1234567 2)ltExpressiongt STRING = 1234567

IDLgt helpstrtrim( 1234567 1)ltExpressiongt STRING = 1234567

IDLgt helpstrtrim( 1234567 0)ltExpressiongt STRING = 1234567

IDLgt printstrupcase(abcdEF)ABCDEF

IDLgt printstrlowcase(abcdEF)abcdef

Medindo quantos caracteres tem o string inclui espaccedilos em branco

Remoccedilatildeo dos brancos agrave esquerda agrave direita ou dos dois lados

2289

Strings - conversatildeo de outros tipos para strings

Eacute uma das operaccedilotildees mais comuns para gerar textos informativos e nomes escrever arquivos (aquivos texto discutidos adiante) etc

Eacute natildeo trivial jaacute que a conversatildeo pode ser feita de muitas formas diferentes

Para tipos fundamentais sempre haacute uma conversatildeo default tanto criando um string como usando algo tipo print (para strings terminal ou arquivos)

Todo comando tipo print (print printf sprintf string write etc) e toda escrita para arquivos texto eacute uma conversatildeo para string (terminais e arquivos texto soacute conteacutem strings)

2389

Strings - conversatildeo de outros tipos para strings

Exemplos de conversotildees (IDL)

IDLgt print[-109] -1 0 9

IDLgt print1d01B10 10000000 1 100000

IDLgt helpstring(1d01B10)ltExpressiongt STRING = 10000000 1 100000

IDLgt printfunitdblarr(343)

Tipos mais elaborados podem ou natildeo ter uma forma predefinida Com objetos eacute comum ser possiacutevel definir a conversatildeo (stringification) ao criar a classe

IDLgt h=hash(a109[01]18b)

IDLgt printh9 0 1a 100000180000 b

Strings

Coloca strings em um arquivo (adiante)

Strings criados por um meacutetodo da classe hash satildeo uma forma de representar o hash

2489

Strings - conversatildeo de outros tipos para strings

Algumas linguagens (Python IDL) tecircm mais de uma forma default de gerar strings Em Python uma forma eacute executaacutevel a outra eacute mais legiacutevel

In [30] x=arange(12)reshape(43)

In [31] print(x)[[ 0 1 2] [ 3 4 5] [ 6 7 8] [ 9 10 11]]

In [32] xOut[32]array([[ 0 1 2] [ 3 4 5] [ 6 7 8] [ 9 10 11]])

In [33] y=array([[ 0 1 2] [ 3 4 5] [ 6 7 8] [ 9 10 11]])

In [37] print(array_equal(xy))True

String mais legiacutevel

String executaacutevelPode ser usado para criar um objeto equivalente

2589

Strings ndash formataccedilatildeo expliacutecita

A formataccedilatildeo pode ser especificada se a conversatildeo default natildeo eacute adequada para definir a conversatildeo em um novo tipo

Cada linguagem tem sua sintaxe para formataccedilatildeo

Haacute dois estilos semelhantes em vaacuterias linguagens

Ambos os estilos satildeo sintaxes diferentes para a mesma ideacuteia Um coacutedigo especifica o tipo de dado sendo passado (inteiro real etc) e detalhes de como seraacute feito o string (largura do campo diacutegitos decimais alinhamento etc)

2689

Strings ndash formataccedilatildeo expliacutecita

Estilo Fortran

IDL

IDLgt print1d0+1d-9 10000000

IDLgt print1d0+1d-9format=(E1610)10000000010E+00

IDLgt printx=1d0+1d-9format=(A0F1613)X= 10000000010000

Estilo C (ldquoprintfrdquo)

IDL

IDLgt printformat=(x=1610e)1d0+1d-9x=10000000010e+00

Python

In [20] print(x=1610e (1e0+1e-9))x=10000000010e+00

Nenhum formato expliacutecito (default)

2789

Strings - formatos tipo Fortran

(apenas o principal ver documentaccedilatildeo para detalhes)

Ex (IDL)

IDLgt printx=1d0+1d-9format=(A0F1613)X= 10000000010000

Tambeacutem haacute modificadores para especificar alinhamento (-) se deve haver (ou ser suprimido) avanccedilo para a pŕoxima linha posiccedilatildeo dentro do campo etc

Coacutedigo Significado Exemplo(s)

A String (A) (10A)

I Inteiro decimal (I) (10I)(-2I)

B Inteiro binaacuterio (B) (10B)

Z Inteiro hexadecimal (Z) (10Z)

O Inteiro octal (O) (10O)

F Real ponto fixo (F)(F52)

E D Real ponto flutuante (E)(D1610)

G Real ponto fixo ou flutuante de acordo com o valor (G)(G10)

ldquordquo String literal (ldquox=rdquoI10)

X Caracteres em branco (A10XI)

2889

Strings - formatos tipo C (printf)(apenas o principal ver documentaccedilatildeo para detalhes)String com campos a serem substituiacutedos por valores (passados adiante) marcados por coacutedigos com

Ex (Python)In [20] print(x=1610e (1e0+1e-9))x=10000000010e+00

Haacute modificadores para especificar alinhamento como preencher o espaccedilo que sobra (espaccedilos zeros etc) para imprimir o sinal + etc

Coacutedigo Significado (tipo) Exemplo(s)

di Inteiro decimal (int) d 5d +05d

u Inteiro decimal sem sinal (unsigned int) u 7u

fF Real em ponto fixo (double float) f 136f

eE Real em ponto flutuante (double float) e 1610e

gG Real em ponto fixo ou flutuante decidido pelo valor (double float)

g 73G

xX Inteiro sem sinal hexadecimal (unsigned int) x 10X

o Inteiro sem sinal octal (unsigned int) o 5o

s String (string) s 10s

c Caractere (char) c

p Ponteiro - estilo C - (void ) p

literal

2989

Strings - conversatildeo de strings para outros tipos

Para gerar dados a partir de strings datas identificadores pedaccedilos de nomes valores numeacutericos armazenados em strings

Tambeacutem sempre haacute conversotildees default para os tipos baacutesicos onde o intepretador programa faz o possiacutevel para entender o string como um valor daquele tipo

Tipicamente eacute feito por casts (funccedilotildees de conversatildeo) reads (de strings ou arquivos texto (arquivos texto satildeo strings)) construtores de objetos ou implicitamente

3089

Strings - conversatildeo de strings para outros tipos - impliacutecitas

Exs (IDL)

IDLgt helpfix([17 17 171 -17 9 8])ltExpressiongt INT = Array[5]

IDLgt printfix([17 17 171 -17 9 8]) 17 17 17 -17 9

IDLgt printdouble([17 17 171 -17 9 8]) 17000000 17000000 17100000 -17000000 90000000

IDLgt readfunitabcd

IDLgt a=0d0IDLgt b=00IDLgt c=0IDLgt reads171d0 189d0 -9abcIDLgt helpabcA DOUBLE = 17100000B FLOAT = 189000C INT = -9

Converte o conteuacutedo do string para os tipos das variaacuteveis abcd (explicado adiante)

3189

Strings - conversatildeo de strings para outros tipos

Quando o default natildeo eacute suficiente (ou quando escrevendo o conversor em uma classe) costuma ser possiacutevel o fazer com formatos semelhantes aos formatos para gerar strings Exs (IDL)

IDLgt a=0d0IDLgt b=00IDLgt c=0IDLgt reads171d0 something 189d0-9abc READS Input conversion error Unit 0 File ltstdingt Error occurred at $MAIN$ Execution halted at $MAIN$

Natildeo funcionou porque sozinho ele natildeo conseguiu saber o que fazer com o ldquosomethingrdquo Usando um formato especiacutefico

IDLgt reads171d0 something 189d0-9 abcformat=(D6111XD611XI)

IDLgt helpabcA DOUBLE = 17100000B FLOAT = 189000C INT = -9

Exemplos mais complicados adiante (arquivos texto)

Variaacuteveis tecircm que ser definidas para informar para que tipo seraacute feita a conversatildeo default

3289

Strings - processamento natildeo baacutesicoOperaccedilotildees importantes e muito necessaacuterias mas que natildeo satildeo suportadas em todas as linguagens bibliotecas padratildeo

Testes (ex IDL)

IDLgt str=[afitsaFITSafitsaabfitsabcfits]

IDLgt printstrmatch(strfits) 1 0 0 1 1

IDLgt printstrmatch(strfitsfold_case) 1 1 0 1 1

IDLgt printstrmatch(strfitsfold_case) 1 1 1 1 1

IDLgt printstrmatch(strfits) 1 0 0 0 0

IDLgt printstrmatch(strfits) 0 0 0 1 0

3389

Strings - processamento natildeo baacutesico

Operaccedilotildees importantes e muito necessaacuterias mas que natildeo satildeo suportadas em todas as linguagens bibliotecas padratildeo

Separaccedilatildeo de partes (Ex IDL)

IDLgt printstrsplit(2011- 131 -extract)format=(A)2011131

Processamento de nomes de arquivos diretoacuterios (Ex IDL)

IDLgt printfile_dirname(some_directoryanother_directorysome_filetxt)some_directoryanother_directory

IDLgt printfile_basename(some_directoryanother_directorysome_filetxt)some_filetxt

IDLgt printfile_basename(another_directorysome_filetxttxt)+_alteredtxtsome_file_alteredtxt

3489

Strings - processamento natildeo baacutesico

Codificaccedilotildees (Ex Python 3)

gtgtgt s=infinite money infinNeuro sign

gtgtgt print(s)infinite money infineuro

gtgtgt print(ascii(s))infinite money u221eu20ac

gtgtgt print(sencode(utf-8))binfinite money xe2x88x9exe2x82xac

3589

Strings - processamento natildeo baacutesico

Perl eacute a linguagem mais avanccedilada para processamento de strings tem suporte nativo a muitas outras operaccedilotildees a semacircntica da linguagem eacute voltada principalmente para processar strings expressotildees regulares (de vaacuterios tipos) natildeo satildeo strings fazem parte da semacircntica

Ex (sem o objetivo que seja compreensiacutevel apenas para indicar o estilo)

Ler um arquivo contendo campos com nomes separados de valores por ()

temperature 10008name some modelx_dimension 100y_dimension 100z_dimension 50()

Armazenado-o em um mapa O que pode ser feito com apenas

While (ltgt) Loop over input linesPut pre-colon text into $1 post-colon into $2 if (m (S+) (+) ) Use $1 as key $2 as value $file_data$1 = $2

3689

Expressotildees regulares - definiccedilatildeo

Expressotildees regulares (regular expressions regex) satildeo a mais poderosa ferramenta para fazer buscas e separar substrings

Regex satildeo uma linguagem com o uacutenico objetivo de especificar propriedades de strings

Implementadas em graus diferentes em todas as linguagens modernas e modernizadas facilita encontrar uma expressatildeo jaacute pronta pois satildeo quase iguais em qualquer linguagem

Estatildeo na biblioteca padratildeo em IDL Python R Perl

Em C++ e Java em bibliotecas comuns (Boost Jregex)

Para que servem

Uma expressatildeo regular especifica propriedades de strings

O interpretador de expressotildees regulares (regular expression engine) recebe a expressatildeo e o string a analisar e determina se o string corresponde (matches) agrave expressatildeo regular

Em alguns casos o interpretador pode tambeacutem informar que parte(s) do string corresponde(m) a que parte(s) da expressatildeo regular e realizar processamentos com estas partes

3789

Expressotildees regulares ndash exemplos de usos Separar partes de strings

Encontrar linhas em arquivos que tenham nomes valores e comentaacuterios e separar estes pedaccedilos

Escalar com comentaacuterio

SLITPA = 351979 Slit position angle

Array 1D sem comentaacuterio (se extendendo por vaacuterias linhas)

BAND_BIN_CENTER = (03505400358950036629003732200379490 0387900104598)

Escalares em diferentes formatos

Total Mechanical Luminosity 15310E+03resources_usedwalltime=005603

Pedaccedilos de nomes

6063 17836E-20 2456 T FeIX((3Pe)3d(2PE)4p_1Po-3s2_3p6_1Se)

Datas separando ano mecircs dia hora (em vaacuterios formatos diferentes)

DATE-OBS= 2006-12-18 universal date of observationDATE_TIME = 2010-07-19T161032START_TIME = 2006-182T225102850Z

3889

Expressotildees regulares ndash exemplos de usos

Separar partes de strings Separar partes de nomes de arquivos (por significarem algo como identificar o

conteuacutedo)

specdec18s0041fitsscamdec18i0054fits15_7_mts_hmpixselh_mr15sav15_7_mts_hwpixselh_mr15sav16_3_mts_hwpixselb_mr16savreadmodel5l_-1_000010000_10000_r05_030_08196_0100000_005000000_1000eps

Determinar se um string eacute um nuacutemero (inteiro real fixo flutuante)

Encontrar identificadores Exs nomes de cataacutelogos endereccedilos HTTPFTP endereccedilos de email

Separar campos em arquivos sendo lidos onde as linhas natildeo tecircm a mesma formataccedilatildeo algumas linhas com colunas separadas por espaccedilos outras por tabs outras por

siacutembolos ignorando linhas de comentaacuterios e linhas vazias

3989

Expressotildees regulares - usoEx (IDL) encontrar nomes de arquivos com algumas propriedades

IDLgt printfilesformat=(A)CM_1477475933_1_viscubCM_1477476864_1_ircubCM_1477476864_1_irgcubCM_1477476864_1_viscubCM_1477477826_1_ircubCM_1477477826_1_irgcubCM_1477477826_1_viscubmosaic2cub

IDLgt printstregex(files+irgcubboolean) 0 0 1 0 0 1 0 0

A expressatildeo regular eacute +irgcub Especifica uma ou mais ocorrecircncias seguidas (+) de qualquer caractere () seguido de uma ocorrecircncia de irgcub (o ponto vem precedido do caractere de

escape () para ser entendido literalmente como um ponto e natildeo como o seu significado especial (qualquer caractere)

Esta aplicaccedilatildeo do interpretador (stregex) retorna um valor Booleano (verdadeirofalso) para cada elemento do string passado (files) que informa se aquele elemento correspondia agravequela expressatildeo regular

Este eacute um exemplo artificial Seria mais faacutecil ter usado strmatch(filesirgcub)

4089

Expressotildees regulares - uso

Em casos como este tipicamente o resultado de stregex seria usado como filtro para selecionar apenas os elementos do array de strings que satisfazem agravequela expressatildeo regular

IDLgt w=where(stregex(files+irgcubboolean)null)IDLgt printfiles[w]format=(A)CM_1477476864_1_irgcubCM_1477477826_1_irgcub

Ex (IDL) Determinar que strings conteacutem uma data no formato yyyy-mm-dd

IDLgt strs=[201002012010-02-012010-2-1aaaa-mm-ddT2010-02-01J]IDLgt printstregex(strs[0-9]4-[0-9]2-[0-9]2boolean) 0 1 0 0 1

Esta expressatildeo regular especifica quatro repeticcedilotildees (4) de diacutegitos (caracteres na faixa [0-9]) seguido de um (-) seguido de duas repeticcedilotildees (2) de dois diacutegitos ([0-9]) seguido de um (-) seguido de duas repeticcedilotildees (2) de dois diacutegitos ([0-9])

Uma expressatildeo regular apenas um pouco mais elaborada poderia corresponder aos 3 formatos de data no array acima E poderia se impedir que a uacuteltima (com outros caracteres antes e depois da data) seja aceita

4189

Expressotildees regulares - regras - caracteres ldquonormaisrdquo

Uma expressatildeo regular usa caracteres ldquonormaisrdquo e especiais para especificar o que se vai procurar na ordem em que aparecem na expressatildeo

Se um caractere eacute normal (natildeo eacute um dos especiais mostrados adiante) ele especifica uma ocorrecircncia daquele caractere

Ex J eacute uma expressatildeo regular que corresponde a qualquer string onde ocorra J Jaacute JA soacute corresponde a strings que tenham JA dentro

Exs (IDL)

IDLgt strs=[JJJJJJaJAjaJa]

IDLgt printstregex(strsJboolean) 1 1 1 0 1

IDLgt printstregex(strsJAboolean) 0 0 1 0 0

4289

Expressotildees regulares - regras - caracteres especiaisCaracteres especiais tecircm outros significados Para significar literalmente aquele caractere deve ser escapado (escaped) com um

Siacutembolo significado exemplo Corresponde(m) Escape o caractere seguinte deve ser interpretado

literalmente natildeo como especial aa

Qualquer caractere ab ajb aab abb jafbc

+ Uma ou mais repeticcedilotildees do que vem agrave esquerda a+b ab aab bab baabh

() Subexpressatildeo para agrupar termos afetados por um caractere especial (como parecircnteses em notaccedilatildeo matemaacutetica)

(ab)+c abc ababc dabababcg

Zero ou mais repeticcedilotildees dos termos agrave esquerda ab abbaab caaabg

Zero ou uma repeticcedilatildeo dos termos agrave esquerda ab b ab cabd cbd

| Alternaccedilatildeo qualquer um dos dois agrave esquerda a|bc ac bc jacd jbcd

n Exatamente n repeticcedilotildees do termo agrave esquerda a2b aab daaabg

n1n2 De n1 a n2 repeticcedilotildees do termo agrave esquerda a12b ab aab aaab gaaabbd

^ Acircncora (no comeccedilo) nada agrave esquerda ^ab ab abb

$ Acircncora (no fim) nada agrave direita ab$ abaab

[] Conjunto de valores (explicado adiante)

4389

Expressotildees regulares - regras - conjuntos de valores

[] denota um conjunto de valores que pode conter

Uma lista de coisas que devem corresponder Ex [abc] signfica qualquer caractere no conjunto abc Correspondem a esta

expressatildeo abcabha

Uma lista de coisas que natildeo podem corresponder [^abc] significa qualquer coisa que natildeo seja a b ou c Correspondem a esta

expressatildeo d jgs gg

Faixas de valores [0-9] signfica qualquer diacutegito [0-9a-zA-Z] significa qualquer diacutegito ou letra

Classes de valores como algumas faixas e outros conjuntos ocorrem com muita frequumlecircncia haacute nomes

especiais para eles Estes (em IDL) vecircm entre [] ex [[digit] significa o mesmo que [0-9]

4489

Expressotildees regulares - regras - classes de valores

Classe signficado

alnum Caracteres alfanumeacutericos 0-9a-zA-Z

alpha Caracteres alfabeacuteticos a-zA-Z

cntrl Caracteres de controle ASCII (natildeo visiacuteveis coacutedigos 1 a 31 e 127)

digit Diacutegitos (decimais) 0-9

graph Caracteres visiacuteveis ASCII 33 a 126 (natildeo inclui o espaccedilo)

lower Letras minuacutesculas a-z

print Caracteres ldquoimprimiacuteveisrdquo (visiacuteveis e o espaccedilo) ASCII 32 a 126

punct Caracteres de pontuaccedilatildeo $amprsquo()+-lt=gt[]^_lsquo|~

space Os caracteres ldquoem brancordquo (blank) espaccedilo tab tab vertical CR LF (ASCII 32 e 9-13)

upper Letras maiuacutesculas A-Z

xdigit Diacutegitos hexadecimais 0-9A-Fa-f

lt Comeccedilo de palavra (palavra definida como sequumlecircncia de coisas natildeo space)

gt Fim de palavra (palavra definida como sequumlecircncia de coisas natildeo space)

Estas satildeo apenas as principais Algumas implementaccedilotildees tecircm muito mais (em particular nas linguagens que usam Unicode nativamente)

4589

Expressotildees regulares - exemplos

Determinar se strings satildeo nuacutemeros (Ex IDL)

IDLgt str=[9-18 875-812-45913E9-98d7a188d032f5]

Inteiros

IDLgt intexpr=^[-+][0-9]+$

IDLgt printstregex(strintexprboolean) 1 1 0 0 0 0 0 0 0 0

Ponto flutuante

IDLgt fpexpr=^[-+](([0-9][0-9]+)|([0-9]+[0-9]))([eEdD][-+][0-9]+)$

IDLgt printstregex(strfpexprboolean) 1 1 0 1 1 1 1 1 0 0

Sinal opcional

1 ou mais diacutegitos

Sinal opcional

0 ou mais diacutegitos opcionalmente seguidos de um ponto e 1 ou mais diacutegitos

1 ou mais diacutegitos opcionalmente seguidos de um ponto e 0 ou mais diacutegitos

ou Expoente opcional letra do expoente seguida de sinal opcional seguido de um ou mais diacutegitos

4689

Expressotildees regulares ndash extraccedilatildeo

Interpretadores de expressotildees regulares costumam oferecer mais que apenas testar se um string corresponde a uma expressatildeo

Em geral tambeacutem podem retornar que parte(s) do string corresponde(m) agrave expressatildeo

Ex (IDL) Determinar se um string conteacutem uma data incluindo os formatos

IDLgt dates=[2011-01-312011 1 3120110131something done on y2011m1d31 with something]

E extrair a data de dentro do string

IDLgt expr=[0-9]4[0-9]12[0-9]12

(4 diacutegitos)(qualquer separador)(1 a 2 diacutegitos)(qualquer separador)(1 a 2 diacutegitos)

IDLgt printstregex(datesexprextract)format=(A)2011-01-312011 1 31201101312011m1d31

Como agora separar ano mecircs e dia Com uma busca e uma extraccedilatildeo para cada Poderia ser mais eacute mais faacutecil com uma uacutenica expressatildeo regular

4789

Expressotildees regulares - aleacutem de apenas testes

Tambeacutem podem retornar que parte(s) do string correspondem agrave expressatildeo toda e agraves suas subexpressotildees (partes da expressatildeo delimitadas por parecircnteses)

Ex (IDL) Separar pedaccedilos de datas Neste caso para a expressatildeo ficar menor assumindo um formato simples (yyyy-mm-ddThhmmssfff) Mas poderia ser um formato mais livre como no exemplo anterior

IDLgt str=Stuff observed on 2011-01-31T123924983 with some instrumentIDLgt expr=([0-9]4)-([0-9]2)-([0-9]2)T([0-9]2)([0-9]2)([0-9]2[0-9]3)

(quatro diacutegitos)-(2 diacutegitos)-(2 diacutegitos)T(2 diacutegitos)(2 diacutegitos)(2 diacutegitos3 diacutegitos)

IDLgt pieces=stregex(strexprextractsubexpr)IDLgt printpiecesformat=(A)2011-01-31T12392498320110131123924983IDLgt d=julday(pieces[2]pieces[3]pieces[1]pieces[4]pieces[5]pieces[6])IDLgt printdformat=(F166) 2455593027372

Expressatildeo inteiraPrimeira subexpressatildeoSegunda subexpressatildeoTerceira subexpressatildeoQuarta subexpressatildeoQuinta subexpressatildeoSexta subexpressatildeo

4889

Expressotildees regulares - referecircncias httpxkcdcom208

Viacutedeos do Software Carpentry

httpsoftware-carpentryorg4_0regexp

4989

Arquivos

Quase todo programa precisa armazenar dados em arquivos

Podem ser pequenos arquivos de paracircmetros ou enormes arquivos de dados produzidos ou a processar

Apesar do sugerido pela praacutetica comum arquivos texto natildeo satildeo sempre a melhor escolha para armazenar dados - e haacute muitas formas diferentes de os usar

Qual eacute a melhor escolha

Assim como para linguagens ou contecirciners natildeo existe ldquoo melhor formatordquo Cada um tem suas vantagens e desvantagens

Dados diferentes (mesmo se usados pelos mesmos programas) em geral se adequam melhor a formatos diferentes

5089

Arquivos - texto X binaacuterios

Em qualquer formato arquivos satildeo armazenados como diacutegitos binaacuterios

Mas haacute duas formas principais como eles podem ser codificados

Arquivos baseados em texto (text files)

Dados satildeo transformados em caracteres usando alguma formataccedilatildeo (mesmo se impliacutecita) e escritos com alguma codificaccedilatildeo de texto (comumente mas natildeo necessariamente ASCII)

Um arquivo texto eacute um ou mais strings As mesmas conversotildees tecircm que ser feitas depara outros tipos

Arquivos ldquobinaacuteriosrdquo (binary files)

Embora todo arquivo seja binaacuterio este nome costuma ser usado soacute para aqueles em que os dados natildeo estatildeo na forma de texto

Com frequumlecircncia (nem sempre) os dados satildeo gravados de forma idecircntica a como satildeo armazenados na memoacuteria

Muitos formatos usam uma mistura de partes em texto e partes binaacuterias

Um cabeccedilalho (header) de texto que daacute informaccedilotildees (metadados) sobre os dados armazenados na parte binaacuteria que vem depois

O cabeccedilalho conteacutem em especial informaccedilotildees sobre como ler os dados binaacuterios

5189

Arquivos - texto X binaacuterios

Vantagens de arquivos texto

Legiacuteveis por pessoas (human readable)

Podem ser auto-suficientes todo o necessaacuterio para os ler e entender o que conteacutem pode ser obtido olhando o arquivo

Satildeo os menos especiacuteficos a linguagens software normalmente satildeo escritos em ASCII ou Unicode e sempre haacute algum suporte a ler escrever texto em linguagens software

Haacute alguns formatos padratildeo para texto (exs CSV XML) que satildeo suportados em muitas plataformas diferentes

5289

Arquivos - texto X binaacuterios

Vantagens de arquivos binaacuterios

Em geral natildeo haacute conversotildees entre o os dados como armazenados na memoacuteria O que torna o armazenamento mais eficiente e sem alteraccedilotildees nos valores

A maior parte dos formatos padronizados eacute binaacuteria Exs FITS cube CDF NetCDF HDF HDF5 JPEG JPEG2000 TIFF GeoTIFF MPEG etc

Eacute mais comum que haja bibliotecas prontas (ateacute de alto niacutevel) para consulta leitura e gravaccedilatildeo

Os formatos melhor desenhados satildeo autodocumentados (em texto ou binaacuterio) para os ler natildeo eacute necessaacuterio conhecimento preacutevio sobre como os dados foram armazenados

Toda linguagem plataforma costuma ter seu formato binaacuterio mais nativo que costuma ser o mais faacutecil para leitura gravaccedilatildeo Em particular nas de alto niacutevel que tecircm formatos autodocumentados (especialmente

em IDL R Python Java)

Muitos formatos tecircm opccedilatildeo de compressatildeo dos dados

5389

Arquivos - proprietaacuterios X padratildeo

Independente da escolha texto binaacuterio programas devem escolher entre usar um formato proacuteprio ou um formato padronizado

A principal vantagem de formatos proacuteprios eacute que satildeo definidos da forma mais conveniente para a aplicaccedilatildeo que os usa simplificando leitura e gravaccedilatildeo e potencialmente otimizando recursos (acesso ao disco tamanho do arquivo etc)

A principal desvantagem de formatos proacuteprios eacute ser necessaacuterio escrever todo o coacutedigo para os ler gravar

Pode dar mais trabalho que usar um formato geneacuterico que natildeo seja exatamente o que melhor se encaixa na aplicaccedilatildeo

O coacutedigo para processar o formato em geral vai ser menos completo e conveniente de usar que o de um formato bem estabelecido usado por muitos outros em muitos ambientes

Cada novo software que for usar estes arquivos vai precisar compartilhar do mesmo coacutedigo ou precisar de coacutedigo novo (em particular se em outra linguagem) para ler gravar naquele formato

Eacute necessaacuterio documentar o formato e decidir sobre como ele seraacute definido

Se outros jaacute colocaram muito trabalho desenvolvendo bons formatos padratildeo bem suportados em muitos ambientes por que ter o trabalho de reinventar (e reprogramar redocumentar e retestar) a roda

5489

Arquivos - padrotildees comuns em astronomia (exs adiante)

Texto

CSV Comma-separated values - bem suportado por muitos softwares

ldquoColunas fixasrdquo Natildeo eacute um padratildeo bem definido mas eacute praacutetica comum para tabelas (2D)

XML Extensible Markup Language - O padratildeo texto mais flexiacutevel de grande uso em programaccedilatildeo geral para armazenar qualquer coisa com frequumlecircncia de forma hieraacuterquica Bem suportado por linguagens modernas (e modernizadas) e bibliotecas das principais

linguagens gerais Alta complexidade o torna trabalhoso de usar

5589

Arquivos - padrotildees comuns em astronomia (exs adiante)Binaacuterios

FITS Flexible Image Transport System - o mais comum para observaccedilotildees astronocircmicas Conteacutem os dados (em geral arrays 1D 2D ou 3D) e documentaccedilatildeo (nos cabeccedilalhos) sobre a origem e caracteriacutesticas dos dados Tambeacutem usado para armazenar tabelas de dados quaisquer mesmo que natildeo sejam observaccedilotildees (especialmente pelo STSCI) Variam muito em qualidade de documentaccedilatildeo

NetCDF Network Common Data Form - evoluccedilatildeo do CDF autodocumentado eacute comum e bem suportado para vaacuterios arrays de dados

HDF5 Hierarchical Data Format ndash autodocumentado comum e bem suportado permitindo aleacutem de simples arrays estruturas (eacute um formato hieraacuterquico)

Formatos de imagens JPEG JPEG2000 TIFF GeoTIFF etc - voltados para arrays 2D3D de inteiros ou (em alguns casos) reais com ou sem compressatildeo JPEG2000 tem caracteriacutesticas mais avanccediladas como imagens multiresoluccedilatildeo

Formatos vetoriais PS EPS DXF SHP SVG - variados niacuteveis de suporte a armazenamento de vetores e formas em 2D ou 3D

ISIS Cube semelhante em caracteriacutesticas ao FITS mais usado em sensoriamento remoto geociecircncias e ciecircncias planetaacuterias em geral para observaccedilotildees 1D 2D ou 3D

Formatos nativos de linguagens todo o trabalho de leitura e gravaccedilatildeo eacute feito automagicamente pela biblioteca padratildeo em IDL R Python Java

5689

Arquivos texto - newlines

Apesar do que possa parecer arquivos texto natildeo tecircm intrinsecamente vaacuterias linhas Arquivos texto satildeo soacute uma sequumlecircncia 1D de caracteres em alguma codificaccedilatildeo Separaccedilatildeo em linhas (equivalente a interpretar o arquivo como 2D em linhas e colunas) eacute

especificada por convenccedilotildees Natildeo haacute apenas uma convenccedilatildeo para o fim de linhas

A mais primitiva convenccedilatildeo eacute separaccedilatildeo nenhuma estipula-se que linhas tenham um nuacutemero fixo N de caracteres e cabe ao software que lecirc o arquivo entender que uma linha nova ocorre regularmente a cada N caracteres

Eacute a forma menos portaacutevel e mais inconveniente eacute necessaacuterio o conhecimento preacutevio (ou por inspeccedilatildeo do arquivo) de quantos caracteres haacute por linha

A maior parte dos editores de texto natildeo vai saber separar linhas desta forma (por falta deste conhecimento preacutevio) Exemplo (de um FITS real)

SIMPLE = T Fits standard BITPIX = 16 Bits per pixel NAXIS = 0 Number of axes EXTEND = T File may contain extensions

O que com as linhas quebradas nos lugares certos seria

SIMPLE = T Fits standard BITPIX = 16 Bits per pixel NAXIS = 0 Number of axes EXTEND = T File may contain extensions

5789

Arquivos texto - newlines

A forma mais comum de especificar linhas eacute com um marcador do final de linha (newline)

Eacute um caractere especial natildeo normalmente presente no texto que serve para marcar fim de linhas

Mas natildeo haacute soacute um padratildeo de newline Os mais comuns

LF (Line Feed ASCII 10) ndash Unix Linux Mac OS X

CR - (Carriage Return ASCII 13) - Mac OS lt10

CR+LF (CR seguido de LF) - Windows DOS

Eacute o motivo de o Notepad (Windows) natildeo entender as quebras de linha de arquivos escritos com o formato nativo de Linux o arquivo soacute tem LF enquanto o editor espera CR+LF

Alguns sistemas (strings em vaacuterias linguagens por exemplo) usam o coacutedigo de escape n para indicar newline que eacute codificado de acordo com o padratildeo sendo usado

Em geral bibliotecas de leitura e gravaccedilatildeo de arquivos usam (default pelo menos) o newline nativo do sistema em que satildeo usadas

Programas de conversatildeo entre os sistemas satildeo comuns (ex dos2unix)

O Wordpad identifica se for usado soacute LF e quebra as linhas de acordo

5889

Arquivos - texto - CSV

Comma-separated values

O formato mais padronizado para tabelas (arrays 2D) em texto (frequentemente mas natildeo necessariamente ASCII)

Bem suportado por bibliotecas padratildeo de linguagens e outros softwares (Excel Calc Origin Google Docs etc)

Conteacutem Linhas de cabeccedilalho (opcionais mas recomendadas) linhas com qualquer texto geral

descrevendo o arquivo e em geral uma linha de tiacutetulo para as colunas da tabela Uma (apenas uma) tabela onde todas as linhas tecircm o mesmo nuacutemero de colunas

Colunas separadas por viacutergulas (opcionalmente pode ser outro separador) Linhas terminadas por newline (qualquer que seja) Strings delimitados por ldquo ldquo

Ex

NAMECALMPOSFILNAMEECHLPOSDISPPOSTARGNAMEPOSDIRCLASSMJD-OBSITIMECOADDSdec18s00010NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001dec18s00020NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001dec18s00120NIRSPEC-5-AO635800364500itan140NIRSPEC-5-AOp2 TITAN5408763000001dec18s00140NIRSPEC-5-AO626300364500itan140NIRSPEC-5-AOp1 TITAN5408763000001dec18s00151NIRSPEC-5-AO626300364500itan140NIRSPEC-5-AOp1ARC5408764000001dec18s00160NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001

Natildeo eacute necessaacuterio que as colunas tenham largura constante

Cabeccedilalho

5989

Arquivos - texto - CSVHaacute amplo suporte a leitura e gravaccedilatildeo de CSV sem precisar recorrer a procedimentos de baixo niacutevel

Podem ser diretamente importados em Excel Calc Origin Google Docs ou lido facilmente com bibliotecas padratildeo comuns Ex (IDL)

IDLgt c=read_csv(filesearch_scamcsvheader=h)IDLgt printhNAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS

IDLgt helpc Structure ltc8bca508gt 11 tags length=5256 data length=5248 refs=1 FIELD01 STRING Array[41] FIELD02 LONG Array[41] FIELD03 STRING Array[41] FIELD04 DOUBLE Array[41] FIELD05 DOUBLE Array[41] FIELD06 STRING Array[41] FIELD07 STRING Array[41] FIELD08 STRING Array[41] FIELD09 STRING Array[41] FIELD10 DOUBLE Array[41] FIELD11 LONG Array[41]

IDLgt printcfield01[03]dec18s0001 dec18s0002 dec18s0003 dec18s0004

IDLgt printcfield03[03]NIRSPEC-5-AO NIRSPEC-5-AO NIRSPEC-5-AO NIRSPEC-5-AO

6089

Arquivos - texto - CSVEx (IDL) Criaccedilatildeo de um CSV com uma tabela de valores

Criaccedilatildeo de 3 arrays 1D (12 elementos) um para cada coluna

IDLgt x=dindgen(3)IDLgt y=dindgen(4)IDLgt xx=reform(rebin(x34)12)IDLgt yy=reform(rebin(reform(y14)34)12)IDLgt f=xx+yy10IDLgt helpxxyyfXX DOUBLE = Array[12]YY DOUBLE = Array[12]F DOUBLE = Array[12]

Escrita do arquivo

IDLgt write_csvexamplecsvxxyyfheader=[XYX+10Y]

ResultadoXYX+10Y000000000000000000000000100000000000000010000000200000000000000020000000000000001000000010000000100000001000000011000000()

6189

Arquivos - texto - ldquoColunas regularesrdquoFixed column width

Natildeo eacute exatamente um padratildeo Eacute uma praacutetica comum

Armazena uma tabela (array 2D) de forma regular simples de ser interpretada e lida

Costumam ter linha(s) de cabeccedilalho descrevendo o conteuacutedo do arquivo em geral com uma linha para os nomes das colunas

As demais linhas conteacutem os dados sempre ocupando a mesma largura por coluna e escritos no mesmo formato em cada coluna

Costumam ser simples de ler inclusive interativamente (exs Excel Calc Origin read_ascii)

Ex (IDL) Uma simples tabela soacute de nuacutemeros

wavl CH4=33 wavl CH4=25 wavl CH4=10 wavl CH4=08 wavl CH4=05 wavl CH4=026 wavl CH4=02 477330000 0090130 477330000 0091110 477330000 0089250 477330000 0087000 477330000 0087140 477330000 0090080 477330000 0088110 480040000 0090930 480040000 0091930 480040000 0090160 480040000 0087930 480040000 0088110 480040000 0090950 480040000 0089090 482750000 0091710 482750000 0092730 482750000 0091060 482750000 0088850 482750000 0089080 482750000 0091810 482750000 0090060 485450000 0092530 485450000 0093570 485450000 0092000 485450000 0089810 485450000 0090100 485450000 0092730 485450000 0091090

IDLgt a=read_ascii(specs_27s_ntxtdata_start=1header=header)IDLgt printheader wavl CH4=33 wavl CH4=25 wavl CH4=10 wavl CH4=08 wavl CH4=05 wavl CH4=026 wavl CH4=02 IDLgt helpa Structure ltd423c9a8gt 1 tags length=224 data length=224 refs=1 FIELD01 FLOAT Array[14 4]

6289

Arquivos - texto - ldquoColunas regularesrdquoJaacute um arquivo um pouco mais difiacutecil de ler

NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS dec18s0001 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0002 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0003 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 FLAT 5408757812500 460000 5 dec18s0004 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 DARK 5408757812500 460000 5

Por ter colunas de tipos diferentes (strings inteiros reais) natildeo eacute possiacutevel o ler em um simples array Mas eacute faacutecil o colocar em uma estrutura de arrays onde cada campo eacute uma coluna

Especificando interativamente como interpretar as linhasIDLgt templ=ascii_template(filesearch_scamtxt)

Nome do campo (default mostrado)

Tipo do campo (identificado automaticamente)

Posiccedilatildeo (caracter) do comeccedilo (identificada automaticamente)

Linha de exemplo para verificar as colunas

6389

Arquivos - texto - ldquoColunas regularesrdquoDepois de feito o template o arquivo pode ser lido com apenas

IDLgt a=read_ascii(filesearch_scamtxttemplate=templ)IDLgt helpa Structure ltd4ec4608gt 11 tags length=416 data length=416 refs=1 FIELD01 STRING Array[4] FIELD02 LONG Array[4] FIELD03 STRING Array[4] FIELD04 FLOAT Array[4] FIELD05 FLOAT Array[4] FIELD06 STRING Array[4] FIELD07 STRING Array[4] FIELD08 STRING Array[4] FIELD09 FLOAT Array[4] FIELD10 FLOAT Array[4] FIELD11 LONG Array[4]IDLgt printafield01dec18s0001 dec18s0002 dec18s0003 dec18s0004IDLgt printafield04 626300 626300 626300 626300

O template (uma estrutura contendo dados sobre como ler o arquivo) pode ser usado para outros arquivos no mesmo formato No lugar de ter sido criado interativamente poderia ter sido lido de algum arquivo Poderia ter especificado nomes para os campos que seriam mais amigaacuteveis que coias como FIELD11

6489

Arquivos - texto - XML

Extensible Markup Language

Admite grande flexibilidade e por isso pode ter alta complexidade

Valores satildeo colocados dentro de uma estrutura em hieraacuterquica (em uma aacutervore) com os noacutes identificados pelos seus nomes (chaves)

Largamente usado em muitas aacutereas para armazenar conjuntos arbitraacuterios de quaisquer estruturas de dados

A maioria das aplicaccedilotildees usa um formato que eacute um subconjunto do XML especificado por um Schema comumente em um arquivo XML DTD (Document Type Definition)

6589

Arquivos - texto ndash XML ndash exemplos de usos

Armazenamento de dados de aplicaccedilotildees web (comum para exportar importar dados MediaWiki DokuWiki WordPress ADS Lattes etc)

Documentos Office (docx pptx xlsx) OpenOffice (odt opd ods)

Como versotildees de outros formatos FITSML XDF

ldquoScientific Dataset XML NASAs Astronomical Data Center (ADC) sponsors a number of research projects that

use XML for scientific data representation The XML activities at the ADC are sponsored and supported by the NASA Office of Space Science Applied Information Systems Research Program (AISRP)rdquo - httpxmlcoverpagesorgnasa-adchtml

Astronomical Instrument Markup Language (AIML)

SVG ndash Scalable Vector Graphics

Muitas de outras aplicaccedilotildees listadas em httpxmlcoverpagesorgxmlhtmlapplications

6689

Arquivos - texto ndash XML - exemploltxml version=10 gtltDOCTYPE Xdmf SYSTEM Xdmfdtd []gtltXdmf xmlnsxi=httpwwww3org2001XInclude Version=20gt ltDomaingt lt-- Example of Basic Topologies --gt ltInformation Name=Descriptiongt Example of a Polyvertex Topology ltInformationgt ltGrid Name=Polyvertex GridType=Uniformgt ltTopology TopologyType=Polyvertex Dimensions=3 NodesPerElement=3gt ltDataItem Format=XML Dimensions=3 3 NumberType=Floatgt 0 1 2 4 5 6 8 9 10 ltDataItemgt ltTopologygt ltGeometry Type=XYZgt ltDataItem Format=XML Dimensions=4 4 3gt 00 00 00 10 00 00()Que mostra que a interpretaccedilatildeo (parsing) de XML eacute em geral complexa

6789

Arquivos - texto - XML

Haacute muitas bibliotecas de alto niacutevel para fazer o processamento (parsing) e entregar os dados em uma estrutura conveniente

A complexidade em processar XML estaacute em decidir o que fazer com os dados jaacute que os arquivos podem ser muito complexos

As APIs (Application Programming Interfaces) mais comuns para processar XML que satildeo implementadas em muitas linguagens

DOM (Document Object Model) ndash manteacutem todo o conteuacutedo do em uma estrutura de dados (em geral uma aacutervore) em uma variaacutevel (em geral um objeto) Esta pode ser consultada para obter os valores de interesse para os alterar e usada para escrever um arquivo

SAX (Simple API for XML) ndash Interpretador (parser) por objetos O usuaacuterio escreve uma classe herdando da classe SAX provendo os meacutetodos que vatildeo processar os campos agrave medida em que estes satildeo lidos

6889

Arquivos - binaacuterios - FITSFlexible Image Transport System

O formato mais comum para observaccedilotildees astronocircmicas Tambeacutem usado para armazenar quaisquer dados mesmo natildeo relacionados a observaccedilotildees (especialmente tabelas como eacute praacutetica do STSCI)

Conteacutem um (ou mais) cabeccedilalho(s) de texto com metadados (informaccedilotildees sobre os dados como caracteriacutesticas (necessaacuterias para os ler) origem condiccedilotildees em que foram obtidos processamento realizado etc)

SIMPLE = T image conforms to FITS standard BITPIX = 32 bits per data value NAXIS = 2 number of axes NAXIS1 = 1024 NAXIS2 = 1024 BSCALE = 100000 Scaling factor BZERO = 000000 Scaling zero-point TELESCOP= Keck II Telescope SLITNAME= 0041x226 Slit Name SLITPA = 351979 Slit position angle SLITX = 131500 X pixel of the center of the slit LST = 12010446 local apparent sidereal time (()

Depois do cabeccedilalho haacute uma (ou mais) seccedilatildeo(otildees) de dados binaacuterios Costuma(m) ser array(s) 1D (espectros) 2D (imagens) ou 3D (ldquocubos de dadosrdquo)

De inteiros ou reais inteiros satildeo comuns em contagens de instrumentos reais para valores derivados (fluxos intensidades etc)

6989

Arquivos - binaacuterios - FITSNormalmente FITS satildeo lidos escritos por bibliotecas prontas de (relativamente) alto niacutevel usuaacuterio natildeo tem que saber como os dados satildeo armazenados no arquivo nem como os ler escrever Ex (IDL com a biblioteca idlastro)

IDLgt fits_info2dspectrumfits2dspectrumfits has 3 extensionsPrimary header 288 recordsNo dataExtension 1 -- SCI Header 144 records IMAGE ( 1201 1201 )Extension 2 -- ERR Header 72 records IMAGE ( 1201 1201 )Extension 3 -- DQ Header 72 records IMAGE ( 1201 1201 )

IDLgt mydata=readfits(2dspectrumfitsexten_no=1myheader) READFITS Reading FITS extension of type IMAGE READFITS Now reading 1201 by 1201 array

IDLgt extastmyheadermyastIDLgt sz=size(mydatadimensions)IDLgt xy2ad[1sz[0]][1sz[1]]myastcorners_acorners_dIDLgt printcorners_aCorners of the data array from file 2dspectrumfits are at 14487480 33063480

IDLgt printcorners_d -00041264444 00041402222

Obteacutem os dados de coordenadas (WCS) do header

Coloca os dados no array (2D de floats) mydata e o header no array (1D de strings) myheader

Calcula as coordenadas das quinas da imagem atraveacutes do WCS

Provecirc informaccedilotildees sobre o arquivo

7089

Arquivos - binaacuterios - ISIS Cube

Formatos como FITS se adequam muito a ter uma interface de mais alto niacutevel por objetos

Tambeacutem para dados em tabelas FITS muito mais trabalhosos de ler em baixo niacutevel que se adequam muito mais a mapas ou estruturas

Exemplo (de um formato semelhante a FITS ISIS cube)

O objeto ao ser criado lecirc todo o arquivo

cube=pp_editablecube(CM_1553510065_1_ircub)

Meacutetodos fornecem os dados desejados para obter quando necessaacuterio os dados de interesse

Find out the names of the backplanesprintcubegetproperty(backnames)Get the start time of the cubeprintcubegetfromheader(START_TIME)2007-084T100057286Z

Valores no cabeccedilalho podem ser convenientemente fornecidos como um mapa

header=cubeheader_as_hash()printheader[START_TIME]2007-084T100057286Z

7189

Arquivos - binaacuterios ndash ISIS Cube

Os dados satildeo fornecidos como arraysMake a contour plot of the latitudesc=contour(cubegetsuffixbyname(LATITUDE))Get the band with wavelength nearest to 21 (in the units used in the cube)selband=cubegetbandbywavelength(21wavelengths=selwavs)

Interfaces por overload tornam o acesso ainda mais conveniente

selband=cube[21]

selwavs=cube[21]

Retorna um array com a banda de comprimento de onda mais proacuteximo de 21 (microm)

Retorna o comprimento de onda mais proacuteximo de 21 (microm) da banda retornada acima

7289

Arquivos - binaacuterios ndash ISIS Cube Alteraccedilotildees feitas ao conteuacutedo satildeo automaticamente refletidas em todos os

lugares (cabeccedilalho em particular) afetados mantendo o objeto vaacutelido que pode depois ser gravado em um novo arquivo

IDLgt printcubelinescubesamplescubebands 64 64 256

IDLgt helpcubecoreltExpressiongt FLOAT = Array[64 64 256]

IDLgt cubecore=dblarr(100100256)

A linha acima natildeo eacute uma atribuiccedilatildeo eacute uma invocaccedilatildeo de meacutetodo Eacute equivalente acubesetpropertycore=dblarr(100100256)

Eacute o trabalho da funccedilatildeo setproperty decidir se a propriedade passada (core) faz sentido e se fizer fazer todo o trabalho necessaacuterio a esta mudanccedila Para o usuaacuterio eacute tudo automaacutetico e os dados da classe satildeo vaacutelidos o tempo todo

IDLgt helpcubecoreltExpressiongt DOUBLE = Array[100 100 256]

IDLgt printcubelinescubesamplescubebands 100 100 256

IDLgt cubesaveCM_1553510065_1_ir_editedcub

7389

Arquivos - binaacuterios ndash NetCDF e HDF5

Network Common Data Form e Hierarchical Data Format

Os dois uacutenicos formatos bem estabelecidos para dados cientiacuteficos geneacutericos

Armazenam dados como vaacuterias variaacuteveis e seus metadados Para cada variaacutevel haacute (ou pode haver) os metadados

Nome Dimensotildees (do array) Unidades Comentaacuterios

Ambos permitem arrays multidimensionais

Apenas HDF5 permite estruturas (daiacute vem a hierarquia)

Autodocumentados qualquer software que saiba ler um destes formatos lecirc qualquer arquivo sem precisar de conhecimento preacutevio sobre como o arquivo foi gerado

Muito bem suportados em bibliotecas padratildeo e natildeo padratildeo em softwares interativos e visualizadores (inclusive plugins para navegadores)

httpwwwunidataucaredusoftwarenetcdf httpenwikipediaorgwikiHdf5

NetCDF eacute mais simples de usar por natildeo ter hierarquia dando menos trabalho para ler e escrever dados Se hierarquia natildeo eacute necessaacuteria eacute mais conveniente de usar que HDF5

7489

Arquivos - binaacuterios - NetCDF e HDF5Haacute tambeacutem o formato CDL uma versatildeo ASCII do NetCDF A biblioteca padratildeo do NetCDF inclui conversores entre estes formatos

$ ncdump -h refspec_g01_0ncnetcdf refspec_g01_0 dimensions nlay = 51 nwn = 400 nleg = 33 numu = 2 nlev = 52 nphi = 3 ngas = 2 nwnc = 1 scal = 1 v3 = 3 dnl = 1 nk = 1 tdisr = UNLIMITED (0 currently) na = 16

variables float alb(nwn) float z(nlay) float t(nlay) float p(nlay) float wl(nwn) float iof(nwn) float mtau(nwn) float htau(nwn) float hctaus(nwn) float gtau(nwn) float outcos(scal) float phi(nleg) float phic(scal) float umu(numu) float flux(v3 nwn nlev) float mix(nlay ngas) float c(nlay) float psat(nlay) float ga(nwnc) float wlc(nwnc) float inc(scal) int dm(scal) int ord(scal) float fbeam(scal) float wn(nwn) float tautot(nwn nlay) float htaus(nwn nlay) float htaux(nwn nlay) float taug(nwn nlay) float phase(nwn nlay nleg) float ssa(nwn nlay) float uu(nwn nphi nlev numu) float u0u(nwn nlev numu) float tray(nwn nlay) float gtauo(tdisr nwn nlay)

Haacute 14 variaacuteveis usadas como dimensotildees para as 35 variaacuteveis que satildeo arrays

Ex alb(nwn) indica que alb eacute um array 1D de nwn elementos

nwn estaacute armazenado como uma das dimensotildees e eacute 400 portanto alb tem 400 elementos

Parte do conteuacutedo de um arquivo NetCDF em formato CDL (gerado pelo programa ncdump)

7589

Arquivos - binaacuterios - NetCDF e HDF5Conteuacutedo daquele arquivo visualizado com o ncview (acompanha a biblioteca NetCDF padratildeo)

7689

Arquivos - binaacuterios - NetCDF e HDF5O conteuacutedo de todo o arquivo pode ser lido facilmente com as bibliotecas disponiacuteveis e armazenado em contecirciners convenientes Usando um objeto que gera um resultado um pouco mais conveniente

IDLgt h=pp_readncdf(refspec_g01_0nchash)IDLgt printhvar_dims ltObjHeapVar229(HASH)gtvars ltObjHeapVar152(HASH)gtdims ltObjHeapVar118(HASH)gt

IDLgt printh[vars]T 173203 175459 175848 176001 175975 Z 431869 418858 406067 393403 380464 FLUX 300660 145536 0705180 0341669 0165532 PHASE 100000 0779034 0660858 0542052 0449983 TAUTOT0694377 0693420 0693474 0693540 0693636()

IDLgt help(h[vars])[TAUTOT]ltExpressiongt FLOAT = Array[51 400]

IDLgt print(h[var_dims])[TAUTOT]NLAY NWN

IDLgt print(h[dims])[(h[var_dims])[TAUTOT]]NLAY 51NWN 400

7789

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5)

Visualizaccedilatildeo da variaacutevel selecionada

Metadados e alguns valores da variaacutevel selecionada

Variaacutevel a ser criada com o conteuacutedo desta variaacutevel do arquivo

Hierarquia das variaacuteveis do arquivo

7889

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5) Imported variable az

IDLgt helpaz Structure ltd5723f38gt 13 tags length=448 data length=444 refs=1 _NAME STRING az _ICONTYPE STRING binary _TYPE STRING DATASET _FILE STRING INTENSI_test_409OUTh5 _PATH STRING _DATA DOUBLE Array[38] _NDIMENSIONS LONG 1 _DIMENSIONS ULONG64 Array[1] _NELEMENTS ULONG64 38 _DATATYPE STRING H5T_FLOAT _STORAGESIZE ULONG 8 _PRECISION LONG 64 _SIGN STRING

IDLgt printaz_data 00000000 10000000 20000000 30000000 40000000 50000000 60000000 80000000 ()

7989

Arquivos - binaacuterios - imagens

JPEG JPEG200 TIFF GeoTIFF etc

Os formatos comuns de imagens satildeo bem suportados em muacuteltiplas plataformas para uso dentro de programas e interativamente

Alguns formatos tecircm opccedilatildeo de compressatildeo com perda eou sem perda

Armazenam imagens como arrays 2D ou 3D (3D frequumlentemente limitado a 3 ou 4 em uma das dimensotildees uma imagem em 3 ou 4 bandas) de inteiros ou (em alguns formatos) reais

Alguns formatos permitem armazenar metadados para caracterizar as imagens armazenadas

JPEG2000 e GeoTIFF (um subconjunto de TIFF) comuns em astronomia e aacutereas proacuteximas

8089

Arquivos - binaacuterios ndash imagens ndash exemplo (IDL)IDLgt printquery_tiff(issmap_2009tiffinfogeotiff=geo) 1

IDLgt helpinfo Structure ltd4eca4b8gt 18 tags length=144 data length=132 refs=1 CHANNELS LONG 4 DIMENSIONS LONG Array[2] IMAGE_INDEX LONG 0 NUM_IMAGES LONG 1 PIXEL_TYPE INT 1 TYPE STRING TIFF BITS_PER_SAMPLE LONG 8 POSITION FLOAT Array[2] RESOLUTION FLOAT Array[2] UNITS LONG 2 TILE_SIZE LONG Array[2] DESCRIPTION STRING ISS (2009) DATE_TIME STRING 20100218 012436()

IDLgt helpgeo Structure ltd4efa1b8gt 10 tags length=264 data length=262 refs=1 MODELPIXELSCALETAG DOUBLE Array[3] MODELTIEPOINTTAG DOUBLE Array[6 4] GEOGRAPHICTYPEGEOKEY INT 4035 GEOGSEMIMAJORAXISGEOKEY DOUBLE 25750000 GEOGSEMIMINORAXISGEOKEY DOUBLE 25750000()

IDLgt myimage=read_tiff(issmap_2009tiff) Lecirc a imagem para o array myimage

Obteacutem informaccedilotildees sobre o arquivo

8189

Arquivos - binaacuterios ndash formatos nativosLinguagens como IDL R Python Java tecircm seu formato nativo binaacuterio acessado em alto niacutevel Basta mandar salvar ler variaacuteveis no do arquivo a biblioteca padratildeo automagicamente faz todo o trabalho de decidir como gravar ler os dados

Conveniente de usar na proacutepria linguagem Mas raramente existem bibliotecas para ler gravar o formato nativo de uma linguagem a partir de outra Ex (IDL)

IDLgt savefile=2dspectrumsavmydatamyheadercorners_dcorners_averbosecompress SAVE Portable (XDR) compressed SAVERESTORE file SAVE Saved variable MYDATA SAVE Saved variable MYHEADER()

Pode ser lido com apenas (haacute formas mais elaboradas)

IDLgt restore2dspectrumsavverbose RESTORE Portable (XDR) compressed SAVERESTORE file RESTORE Save file written by ltunknowngtltunknowngt Thu Jan 27 191422 2011 RESTORE IDL version 801 (linux x86_64) RESTORE Restored variable MYDATA RESTORE Restored variable MYHEADER()

IDLgt helpmydatamyheadercorners_dcorners_aMYDATA FLOAT = Array[1201 1201]MYHEADER STRING = Array[144]()

8289

Arquivos - processamento em baixo niacutevel

Nem sempre um formato padratildeo eacute a melhor escolha para o problema

Nem sempre haacute escolha (pode-se ter que trabalhar com arquivos que jaacute foram escritos em algum formato proprietaacuterio)

Agraves vezes o formato eacute padratildeo mas natildeo haacute bom suporte a ele disponiacutevel

Em todos estes casos eacute necessaacuterio escrever rotinas em baixo niacutevel que vatildeo ler processar diretamente o conteuacutedo do arquivo

Preferencialmente criando interfaces de alto niacutevel para o programa que vai as usar

8389

Arquivos - processamento em baixo niacutevel - texto

Tomando o exemplo anterior onde as colunas eram de diferentes tipos

NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS dec18s0001 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0002 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0003 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 FLAT 5408757812500 460000 5 dec18s0004 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 DARK 5408757812500 460000 5

A forma mais simples de o ler diretamente eacute definir uma estrutura para receber cada linha e um array destas estruturas para receber todo o arquivo Ex (IDL)

IDLgt record=namecalmpos0filnameechlpos0d0disppos0d0targnameposdirclassmjd_obsitime0d0coadds0IDLgt nlines=file_lines(filesearch_scamtxt)IDLgt mydata=replicate(recordnlines-1)IDLgt header=

Depois de definidas as variaacuteveis que vatildeo receber os dados o arquivo pode ser lido

IDLgt openrunitfilesearch_scamtxtget_lunIDLgt readfunitheaderIDLgt readfunitmydataformat=(A14I8A15F104F104A18A19A15F158F105I15)IDLgt free_lununit

A gravaccedilatildeo de um arquivo texto poderia ser feita de forma semelhante apenas trocando openr por openw (abrir o arquivo para gravaccedilatildeo natildeo leitura) e readf por printf

O arquivo eacute aberto em uma unidade (unit) usada para especificar de onde eacute feita a leitura

Ao final o arquivo eacute fechado

8489

Arquivos - processamento em baixo niacutevel - texto

O que resulta em

IDLgt printheader NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS

IDLgt helpmydataMYDATA STRUCT = -gt ltAnonymousgt Array[4]

IDLgt helpmydata[0] Structure ltd5e38f68gt 11 tags length=136 data length=124 refs=3 NAME STRING dec18s0001 CALMPOS INT 0 FILNAME STRING NIRSPEC-5-AO ECHLPOS DOUBLE 62630000 DISPPOS DOUBLE 36450000 TARGNAME STRING HD85258 POSDIR STRING NIRSPEC-5-AOp1 CLASS STRING STAR MJD_OBS STRING 54087574 ITIME DOUBLE 10000000 COADDS INT 1

Este caso eacute mais complicado que os mais comuns por haver colunas de strings

Se todas fossem de nuacutemeros natildeo teria sido necessaacuterio especificar o formato explicitamente As colunas teriam sido adivinhadas pela biblioteca que lecirc o arquivo Poderia ter sido lido escrito soacute com um array de nuacutemeros sem estruturas

8589

Arquivos - processamento em baixo niacutevel - binaacuterio

Formatos binaacuterios podem ser definidos de qualquer forma O arquivo eacute apenas um conjunto de bytes Cabe ao software saber como os interpretar

Uma escolha comum para que sejam autodocumentados eacute incluir um cabeccedilalho de texto informando as caracteriacutesticas dos dados necessaacuterias para os ler

Ex (IDL) criar um arquivo que armazene um array de doubles com um cabeccedilalho informando as dimensotildees para que o programa que o lecirc saiba como ler os dados

Inventa dados e abre o arquivo

IDLgt data_to_write=dindgen(34)IDLgt openwunitbinary_exampledatget_lun

Escreve as dimensotildees como texto

IDLgt printfunitdimensions of the double array stored belowIDLgt printfunitsize(data_to_writedimensions)

Escreve os dados binaacuterios

IDLgt writeuunitdata_to_write

Fecha o arquivo

IDLgt free_lununit

Escreve em binaacuterio (write unformatted)

8689

Arquivos - processamento em baixo niacutevel - binaacuterio

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

dimensions of the double array stored below 3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

8789

Arquivos - processamento em baixo niacutevel - binaacuterioA leitura deste arquivo eacute igualmente simples

IDLgt header=IDLgt dims=[00]IDLgt openrunitbinary_exampledatget_lun

Lecirc as dimensotildees (armazenadas como texto)

IDLgt readfunitheaderIDLgt readfunitdims

Lecirc a parte binaacuteria depois de saber as dimensotildees

IDLgt data_read=dblarr(dims)IDLgt readuunitdata_read

Fecha o arquivo

IDLgt free_lununit

Verifica que os dados foram gravados e lidos corretamente

IDLgt printarray_equal(data_to_writedata_read) 1

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Lecirc dados binaacuterios (read unformatted)

8889

Sumaacuterio

5 ndash Slides em httpwwwppenteadonetpeapea04_strings_iopdf Strings Expressotildees regulares Arquivos

httpwwwppenteadonetpea

8989

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89

Strings - codificaccedilotildees - ASCII

Por que ASCII natildeo eacute sempre usado

Porque eacute insuficiente Natildeo conteacutem por exemplo

Caracteres modificados (com acentos cedilha)

Siacutembolos matemaacuteticos (aleacutem dos muito baacutesicos + - ^ gt lt = ) Ex part sum int plusmn ge le times infin neℝ ℤ forall exist ∮ ≌ nabla

Siacutembolos fiacutesicos Ex micro Å oplus

Letras gregas

Outros siacutembolos Ex rarr harr euro ordf deg pound yen iquest iexcl

Caracteres de outras liacutenguas (inclusive de muitos siacutembolos como a vaacuterias formas usadas em chinecircs e japonecircs)

989

Strings - codificaccedilotildees - Unicode

O que usar para natildeo ter as limitaccedilotildees do ASCII

O uacutenico padratildeo de uso dominante hoje eacute o Unicode

Desenvolvido para ser um padratildeo universal contendo ldquotodosrdquo os caracteres de ldquotodasrdquo as escritas e dados sobre os caracteres

Natildeo eacute imutaacutevel adiccedilotildees satildeo decididas pelo Unicode Consortium (httpwwwunicodeorg)

1089

Strings - codificaccedilotildees - Unicode

Haacute duas partes no Unicode o cataacutelogo (uacutenico) e as codificaccedilotildees (vaacuterias)

O cataacutelogo eacute definido independente de codificaccedilotildees Pode ser visto como um mapa onde os pontos de coacutedigo (codepoints) satildeo as

chaves e os valores satildeo os dados sobre aquele caractere

ldquoIn Unicode the letter A is a platonic ideal Its just floating in heaven A

This platonic A is different than B and different from a but the same as A and A and A

The idea that A in a Times New Roman font is the same character as the A in a Helvetica font but different from a in lower case does not seem very controversial but in some languages just figuring out what a letter is can cause controversy

Is the German letter szlig a real letter or just a fancy way of writing ss If a letters shape changes at the end of the word is that a different letter Hebrew says yes Arabic says no

Anyway the smart people at the Unicode consortium have been figuring this out for the last decade or so accompanied by a great deal of highly political debate and you dont have to worry about it Theyve figured it all out alreadyrdquo

de The absolute minimum every software developer absolutely positevely must know about Unicode and character sets (no excuses)

httpwwwjoelonsoftwarecomarticlesUnicodehtml

1189

Strings - codificaccedilotildees - UnicodeOs dados sobre um caractere Unicode satildeo importantes para suas buscas e identificaccedilatildeoIncluem nome e propriedades visiacutevel (printable) numeacuterico alfanumeacuterico maiuacutesculo minuacutesculo ldquoespaccedilordquo (blank) liacutengua matemaacutetico etc

ExsUnicode Character LATIN CAPITAL LETTER A (U+0041)Name LATIN CAPITAL LETTER ABlock Basic LatinCategory Letter Uppercase [Lu]Combine 0BIDI Left-to-Right [L]Mirror NIndex entries Latin Uppercase Alphabet Uppercase Alphabet Latin

Capital Letters LatinLower case U+0061Version Unicode 110 (June 1993)

Unicode Character INTEGRAL (U+222B)Name INTEGRALBlock Mathematical OperatorsCategory Symbol Math [Sm]Combine 0BIDI Other Neutrals [ON]Mirror YIndex entries Integral Signs INTEGRALSee Also latin small letter esh U+0283Version Unicode 110 (June 1993)

(resultados de httpwwwfileformatinfoinfounicodecharsearchhtm)

int

A

1289

Strings - codificaccedilotildees - Unicode

Unicode Character ANGSTROM SIGN (U+212B)Name ANGSTROM SIGNBlock Letterlike SymbolsCategory Letter Uppercase [Lu]Combine 0BIDI Left-to-Right [L]Decomposition LATIN CAPITAL LETTER A WITH RING ABOVE (U+00C5)Mirror NOld name ANGSTROM UNITIndex entries ANGSTROM SIGNLower case U+00E5Comments non SI length unit (=01 nm) named after A J ngstroumlm Å

Swedish physicist preferred representation is U+00C5Version Unicode 110 (June 1993)

Unicode Character GREEK SMALL LETTER ZETA (U+03B6)Name GREEK SMALL LETTER ZETABlock Greek and CopticCategory Letter Lowercase [Ll]Combine 0BIDI Left-to-Right [L]Mirror NUpper case U+0396Title case U+0396Version Unicode 110 (June 1993)

(resultados de httpwwwfileformatinfoinfounicodecharsearchhtm)

ζ

1389

Strings - codificaccedilotildees - UnicodeUnicode Character NABLA (U+2207)Name NABLABlock Mathematical OperatorsCategory Symbol Math [Sm]Combine 0BIDI Other Neutrals [ON]Mirror NIndex entries difference backward backward difference del NABLAComments backward difference gradient del used for Laplacian

operator (written with superscript 2)See Also white down-pointing triangle U+25BDVersion Unicode 110 (June 1993)

Java DatastringtoUpperCase() nablastringtoLowerCase() nablaCharacterUnicodeBlock MATHEMATICAL_OPERATORSCharactercharCount() 1CharactergetDirectionality() DIRECTIONALITY_OTHER_NEUTRALS [13]CharactergetNumericValue() -1CharactergetType() 25CharacterisDefined() YesCharacterisDigit() NoCharacterisIdentifierIgnorable() NoCharacterisLetter() NoCharacterisLetterOrDigit() NoCharacterisLowerCase() NoCharacterisWhitespace() No()

(resultados de httpwwwfileformatinfoinfounicodecharsearchhtm)

nabla

1489

Strings ndash Como codificar Unicode

Haacute vaacuterias formas Nenhuma simples como ASCII porque eacute necessaacuterio um nuacutemero muito maior de pontos de coacutedigo (haacute espaccedilo para 1 114 112 hoje haacute 109 449 alocados)

Apenas usar mais bytes com um nuacutemero constante por caractere exigiria pelo menos 21 bits por caractere (221 eacute 2 097 152)

Seria demais considerando que quase todos os caracteres escritos estatildeo entre os 128 do ASCII

Em quase todo texto 20 de cada 21 bits seriam 0

A maior parte das codificaccedilotildees usa formas mais elaboradas com um nuacutemero variaacutevel de bytes por caractere

Todas as codificaccedilotildees de uso comum tem o ASCII como subconjunto os 128 caracteres do ASCII satildeo codificados em forma idecircntica em ASCII e nas codificaccedilotildees usuais de Unicode

O que ajuda na compatibilidade software Unicode escrevendo texto que soacute conteacutem caracteres do ASCII produz texto idecircntico ao que seria produzido em ASCII

1589

Strings - codificaccedilotildees para Unicode

No mundo ocidental haacute apenas duas codificaccedilotildees de uso comum

UTF-8

ISO 8859-1 (tambeacutem chamado de Latin 1)

Por isso eacute necessaacuterio saber que codificaccedilatildeo usar ao trabalhar com Unicode

Alguns softwares formatos de arquivo informam a codificaccedilatildeo usada

Outros assumem que uma eacute usada (sem ter sido informada)

Outros tentam adivinhar quando natildeo satildeo informados qual eacute (esp navegadores)

Outros soacute perguntam para o usuaacuterio (esp editores de texto)

Sistemas operacionais oferecem variadas formas de digitar caracteres especiais

Pelos coacutedigos numeacutericos

Por programas seletores de caracteres Alguns seletores de caracteres (ex kcharselect do KDE) permitem fazer buscas pelo

nome ou propriedades

1689

Strings - Onde haacute suporte a Unicode em programaccedilatildeo

Linguagens variam muito

Desconhecem Unicode (soacute usam ASCII) C Fortran

Usam nativamente ASCII (inclusive no coacutedigo-fonte) mas tecircm tipos para strings Unicode e ou funccedilotildees para processar Unicode (em variados graus) C C++ IDL R

Usam nativamente Unicode (inclusive no coacutedigo-fonte) e tecircm bom suporte a strings Unicode Java Python Perl

Muitas vezes (mesmo quando Unicode pode ser usado em coacutedigo-fonte) caracteres Unicode satildeo escritos atraveacutes de ASCII com coacutedigos de escape para coacutedigos Unicode Exs

IDLgt p=plot(testtitle=Z(00C5222B))

C C++ Java Python u2207

ReferecircnciasCharacters vs byteshttpwwwtbrayorgongoingWhen200x20030426UTFThe absolute minimum every software developer absolutely positively must know about Unicode and character sets (no excuses)httpwwwjoelonsoftwarecomarticlesUnicodehtmlUnicode character searchhttpwwwfileformatinfoinfounicodecharsearchhtm

em IDL produz intÅ

produz nabla

1789

Strings - processamento baacutesico

Operaccedilotildees mais fundamentais que costumam ser suportadas em ldquotodasrdquo as linguagens bibliotecas padratildeo (exemplos usando sintaxe de IDL)

Atribuiccedilatildeo de literais

IDLgt a=some

IDLgt helpaA STRING = some

IDLgt printasome

Concatenaccedilatildeo

IDLgt b=a+ string

IDLgt helpbB STRING = some string

1889

Strings - processamento baacutesico

Valor loacutegico

String vazio (null string) eacute falso o resto eacute verdadeiro

IDLgt c=

IDLgt if c then printc is not empty string else printc is null string ()c is null string ()

IDLgt c=a

IDLgt if c then printc is not empty string else printc is null string ()c is not empty string

Espaccedilo natildeo eacute o mesmo que string vazio

IDLgt c=

IDLgt if c then printc is not empty string else printc is null string ()c is not empty string

1989

Strings - processamento baacutesico Comparaccedilotildees

IDLgt helpabA STRING = someB STRING = some string

IDLgt printb eq a 0

IDLgt printb gt a 1

IDLgt c=[ab9Some somesome other string]

IDLgt printc[sort(c)]format=(A) some9Somesomesome other stringsome string

IDLgt printa eq A 0

IDLgt printstrcmp(aAfold_case) 1

Comparaccedilotildees de ldquotamanhordquo (maior menor etc) satildeo comparaccedilotildees pela ordem de codificaccedilatildeo (ldquoalfabeacuteticardquo)

Algumas linguagens permitem definir o ordenamento (como considerar maiuacutesculasminuacuteculas letras com acentos nuacutemeros e siacutembolos) Exs Python C++ Java Perl

2089

Strings - processamento baacutesico Substrings

IDLgt printstrmid(abcdefg32)de

Algumas linguagens nativamente suportam iacutendices para indicar substrings C C++ Fortran Python Ex (Python)

gtgtgt s=abcdegtgtgt print(s[25])cde

Outras permitem que sejam definidos iacutendices por objetos strings

Busca de caracteres ou substrings

IDLgt printstrpos(abcdefgd) 3

IDLgt printstrpos(abcdefgj) -1

IDLgt printstrpos(abcdefgbc) 1

2189

Strings - processamento baacutesico

Outros

IDLgt printstrlen(1234567) 7

IDLgt printstrlen(1234567 ) 8

IDLgt printstrlen( 1234567 ) 9

IDLgt helpstrtrim( 1234567 2)ltExpressiongt STRING = 1234567

IDLgt helpstrtrim( 1234567 1)ltExpressiongt STRING = 1234567

IDLgt helpstrtrim( 1234567 0)ltExpressiongt STRING = 1234567

IDLgt printstrupcase(abcdEF)ABCDEF

IDLgt printstrlowcase(abcdEF)abcdef

Medindo quantos caracteres tem o string inclui espaccedilos em branco

Remoccedilatildeo dos brancos agrave esquerda agrave direita ou dos dois lados

2289

Strings - conversatildeo de outros tipos para strings

Eacute uma das operaccedilotildees mais comuns para gerar textos informativos e nomes escrever arquivos (aquivos texto discutidos adiante) etc

Eacute natildeo trivial jaacute que a conversatildeo pode ser feita de muitas formas diferentes

Para tipos fundamentais sempre haacute uma conversatildeo default tanto criando um string como usando algo tipo print (para strings terminal ou arquivos)

Todo comando tipo print (print printf sprintf string write etc) e toda escrita para arquivos texto eacute uma conversatildeo para string (terminais e arquivos texto soacute conteacutem strings)

2389

Strings - conversatildeo de outros tipos para strings

Exemplos de conversotildees (IDL)

IDLgt print[-109] -1 0 9

IDLgt print1d01B10 10000000 1 100000

IDLgt helpstring(1d01B10)ltExpressiongt STRING = 10000000 1 100000

IDLgt printfunitdblarr(343)

Tipos mais elaborados podem ou natildeo ter uma forma predefinida Com objetos eacute comum ser possiacutevel definir a conversatildeo (stringification) ao criar a classe

IDLgt h=hash(a109[01]18b)

IDLgt printh9 0 1a 100000180000 b

Strings

Coloca strings em um arquivo (adiante)

Strings criados por um meacutetodo da classe hash satildeo uma forma de representar o hash

2489

Strings - conversatildeo de outros tipos para strings

Algumas linguagens (Python IDL) tecircm mais de uma forma default de gerar strings Em Python uma forma eacute executaacutevel a outra eacute mais legiacutevel

In [30] x=arange(12)reshape(43)

In [31] print(x)[[ 0 1 2] [ 3 4 5] [ 6 7 8] [ 9 10 11]]

In [32] xOut[32]array([[ 0 1 2] [ 3 4 5] [ 6 7 8] [ 9 10 11]])

In [33] y=array([[ 0 1 2] [ 3 4 5] [ 6 7 8] [ 9 10 11]])

In [37] print(array_equal(xy))True

String mais legiacutevel

String executaacutevelPode ser usado para criar um objeto equivalente

2589

Strings ndash formataccedilatildeo expliacutecita

A formataccedilatildeo pode ser especificada se a conversatildeo default natildeo eacute adequada para definir a conversatildeo em um novo tipo

Cada linguagem tem sua sintaxe para formataccedilatildeo

Haacute dois estilos semelhantes em vaacuterias linguagens

Ambos os estilos satildeo sintaxes diferentes para a mesma ideacuteia Um coacutedigo especifica o tipo de dado sendo passado (inteiro real etc) e detalhes de como seraacute feito o string (largura do campo diacutegitos decimais alinhamento etc)

2689

Strings ndash formataccedilatildeo expliacutecita

Estilo Fortran

IDL

IDLgt print1d0+1d-9 10000000

IDLgt print1d0+1d-9format=(E1610)10000000010E+00

IDLgt printx=1d0+1d-9format=(A0F1613)X= 10000000010000

Estilo C (ldquoprintfrdquo)

IDL

IDLgt printformat=(x=1610e)1d0+1d-9x=10000000010e+00

Python

In [20] print(x=1610e (1e0+1e-9))x=10000000010e+00

Nenhum formato expliacutecito (default)

2789

Strings - formatos tipo Fortran

(apenas o principal ver documentaccedilatildeo para detalhes)

Ex (IDL)

IDLgt printx=1d0+1d-9format=(A0F1613)X= 10000000010000

Tambeacutem haacute modificadores para especificar alinhamento (-) se deve haver (ou ser suprimido) avanccedilo para a pŕoxima linha posiccedilatildeo dentro do campo etc

Coacutedigo Significado Exemplo(s)

A String (A) (10A)

I Inteiro decimal (I) (10I)(-2I)

B Inteiro binaacuterio (B) (10B)

Z Inteiro hexadecimal (Z) (10Z)

O Inteiro octal (O) (10O)

F Real ponto fixo (F)(F52)

E D Real ponto flutuante (E)(D1610)

G Real ponto fixo ou flutuante de acordo com o valor (G)(G10)

ldquordquo String literal (ldquox=rdquoI10)

X Caracteres em branco (A10XI)

2889

Strings - formatos tipo C (printf)(apenas o principal ver documentaccedilatildeo para detalhes)String com campos a serem substituiacutedos por valores (passados adiante) marcados por coacutedigos com

Ex (Python)In [20] print(x=1610e (1e0+1e-9))x=10000000010e+00

Haacute modificadores para especificar alinhamento como preencher o espaccedilo que sobra (espaccedilos zeros etc) para imprimir o sinal + etc

Coacutedigo Significado (tipo) Exemplo(s)

di Inteiro decimal (int) d 5d +05d

u Inteiro decimal sem sinal (unsigned int) u 7u

fF Real em ponto fixo (double float) f 136f

eE Real em ponto flutuante (double float) e 1610e

gG Real em ponto fixo ou flutuante decidido pelo valor (double float)

g 73G

xX Inteiro sem sinal hexadecimal (unsigned int) x 10X

o Inteiro sem sinal octal (unsigned int) o 5o

s String (string) s 10s

c Caractere (char) c

p Ponteiro - estilo C - (void ) p

literal

2989

Strings - conversatildeo de strings para outros tipos

Para gerar dados a partir de strings datas identificadores pedaccedilos de nomes valores numeacutericos armazenados em strings

Tambeacutem sempre haacute conversotildees default para os tipos baacutesicos onde o intepretador programa faz o possiacutevel para entender o string como um valor daquele tipo

Tipicamente eacute feito por casts (funccedilotildees de conversatildeo) reads (de strings ou arquivos texto (arquivos texto satildeo strings)) construtores de objetos ou implicitamente

3089

Strings - conversatildeo de strings para outros tipos - impliacutecitas

Exs (IDL)

IDLgt helpfix([17 17 171 -17 9 8])ltExpressiongt INT = Array[5]

IDLgt printfix([17 17 171 -17 9 8]) 17 17 17 -17 9

IDLgt printdouble([17 17 171 -17 9 8]) 17000000 17000000 17100000 -17000000 90000000

IDLgt readfunitabcd

IDLgt a=0d0IDLgt b=00IDLgt c=0IDLgt reads171d0 189d0 -9abcIDLgt helpabcA DOUBLE = 17100000B FLOAT = 189000C INT = -9

Converte o conteuacutedo do string para os tipos das variaacuteveis abcd (explicado adiante)

3189

Strings - conversatildeo de strings para outros tipos

Quando o default natildeo eacute suficiente (ou quando escrevendo o conversor em uma classe) costuma ser possiacutevel o fazer com formatos semelhantes aos formatos para gerar strings Exs (IDL)

IDLgt a=0d0IDLgt b=00IDLgt c=0IDLgt reads171d0 something 189d0-9abc READS Input conversion error Unit 0 File ltstdingt Error occurred at $MAIN$ Execution halted at $MAIN$

Natildeo funcionou porque sozinho ele natildeo conseguiu saber o que fazer com o ldquosomethingrdquo Usando um formato especiacutefico

IDLgt reads171d0 something 189d0-9 abcformat=(D6111XD611XI)

IDLgt helpabcA DOUBLE = 17100000B FLOAT = 189000C INT = -9

Exemplos mais complicados adiante (arquivos texto)

Variaacuteveis tecircm que ser definidas para informar para que tipo seraacute feita a conversatildeo default

3289

Strings - processamento natildeo baacutesicoOperaccedilotildees importantes e muito necessaacuterias mas que natildeo satildeo suportadas em todas as linguagens bibliotecas padratildeo

Testes (ex IDL)

IDLgt str=[afitsaFITSafitsaabfitsabcfits]

IDLgt printstrmatch(strfits) 1 0 0 1 1

IDLgt printstrmatch(strfitsfold_case) 1 1 0 1 1

IDLgt printstrmatch(strfitsfold_case) 1 1 1 1 1

IDLgt printstrmatch(strfits) 1 0 0 0 0

IDLgt printstrmatch(strfits) 0 0 0 1 0

3389

Strings - processamento natildeo baacutesico

Operaccedilotildees importantes e muito necessaacuterias mas que natildeo satildeo suportadas em todas as linguagens bibliotecas padratildeo

Separaccedilatildeo de partes (Ex IDL)

IDLgt printstrsplit(2011- 131 -extract)format=(A)2011131

Processamento de nomes de arquivos diretoacuterios (Ex IDL)

IDLgt printfile_dirname(some_directoryanother_directorysome_filetxt)some_directoryanother_directory

IDLgt printfile_basename(some_directoryanother_directorysome_filetxt)some_filetxt

IDLgt printfile_basename(another_directorysome_filetxttxt)+_alteredtxtsome_file_alteredtxt

3489

Strings - processamento natildeo baacutesico

Codificaccedilotildees (Ex Python 3)

gtgtgt s=infinite money infinNeuro sign

gtgtgt print(s)infinite money infineuro

gtgtgt print(ascii(s))infinite money u221eu20ac

gtgtgt print(sencode(utf-8))binfinite money xe2x88x9exe2x82xac

3589

Strings - processamento natildeo baacutesico

Perl eacute a linguagem mais avanccedilada para processamento de strings tem suporte nativo a muitas outras operaccedilotildees a semacircntica da linguagem eacute voltada principalmente para processar strings expressotildees regulares (de vaacuterios tipos) natildeo satildeo strings fazem parte da semacircntica

Ex (sem o objetivo que seja compreensiacutevel apenas para indicar o estilo)

Ler um arquivo contendo campos com nomes separados de valores por ()

temperature 10008name some modelx_dimension 100y_dimension 100z_dimension 50()

Armazenado-o em um mapa O que pode ser feito com apenas

While (ltgt) Loop over input linesPut pre-colon text into $1 post-colon into $2 if (m (S+) (+) ) Use $1 as key $2 as value $file_data$1 = $2

3689

Expressotildees regulares - definiccedilatildeo

Expressotildees regulares (regular expressions regex) satildeo a mais poderosa ferramenta para fazer buscas e separar substrings

Regex satildeo uma linguagem com o uacutenico objetivo de especificar propriedades de strings

Implementadas em graus diferentes em todas as linguagens modernas e modernizadas facilita encontrar uma expressatildeo jaacute pronta pois satildeo quase iguais em qualquer linguagem

Estatildeo na biblioteca padratildeo em IDL Python R Perl

Em C++ e Java em bibliotecas comuns (Boost Jregex)

Para que servem

Uma expressatildeo regular especifica propriedades de strings

O interpretador de expressotildees regulares (regular expression engine) recebe a expressatildeo e o string a analisar e determina se o string corresponde (matches) agrave expressatildeo regular

Em alguns casos o interpretador pode tambeacutem informar que parte(s) do string corresponde(m) a que parte(s) da expressatildeo regular e realizar processamentos com estas partes

3789

Expressotildees regulares ndash exemplos de usos Separar partes de strings

Encontrar linhas em arquivos que tenham nomes valores e comentaacuterios e separar estes pedaccedilos

Escalar com comentaacuterio

SLITPA = 351979 Slit position angle

Array 1D sem comentaacuterio (se extendendo por vaacuterias linhas)

BAND_BIN_CENTER = (03505400358950036629003732200379490 0387900104598)

Escalares em diferentes formatos

Total Mechanical Luminosity 15310E+03resources_usedwalltime=005603

Pedaccedilos de nomes

6063 17836E-20 2456 T FeIX((3Pe)3d(2PE)4p_1Po-3s2_3p6_1Se)

Datas separando ano mecircs dia hora (em vaacuterios formatos diferentes)

DATE-OBS= 2006-12-18 universal date of observationDATE_TIME = 2010-07-19T161032START_TIME = 2006-182T225102850Z

3889

Expressotildees regulares ndash exemplos de usos

Separar partes de strings Separar partes de nomes de arquivos (por significarem algo como identificar o

conteuacutedo)

specdec18s0041fitsscamdec18i0054fits15_7_mts_hmpixselh_mr15sav15_7_mts_hwpixselh_mr15sav16_3_mts_hwpixselb_mr16savreadmodel5l_-1_000010000_10000_r05_030_08196_0100000_005000000_1000eps

Determinar se um string eacute um nuacutemero (inteiro real fixo flutuante)

Encontrar identificadores Exs nomes de cataacutelogos endereccedilos HTTPFTP endereccedilos de email

Separar campos em arquivos sendo lidos onde as linhas natildeo tecircm a mesma formataccedilatildeo algumas linhas com colunas separadas por espaccedilos outras por tabs outras por

siacutembolos ignorando linhas de comentaacuterios e linhas vazias

3989

Expressotildees regulares - usoEx (IDL) encontrar nomes de arquivos com algumas propriedades

IDLgt printfilesformat=(A)CM_1477475933_1_viscubCM_1477476864_1_ircubCM_1477476864_1_irgcubCM_1477476864_1_viscubCM_1477477826_1_ircubCM_1477477826_1_irgcubCM_1477477826_1_viscubmosaic2cub

IDLgt printstregex(files+irgcubboolean) 0 0 1 0 0 1 0 0

A expressatildeo regular eacute +irgcub Especifica uma ou mais ocorrecircncias seguidas (+) de qualquer caractere () seguido de uma ocorrecircncia de irgcub (o ponto vem precedido do caractere de

escape () para ser entendido literalmente como um ponto e natildeo como o seu significado especial (qualquer caractere)

Esta aplicaccedilatildeo do interpretador (stregex) retorna um valor Booleano (verdadeirofalso) para cada elemento do string passado (files) que informa se aquele elemento correspondia agravequela expressatildeo regular

Este eacute um exemplo artificial Seria mais faacutecil ter usado strmatch(filesirgcub)

4089

Expressotildees regulares - uso

Em casos como este tipicamente o resultado de stregex seria usado como filtro para selecionar apenas os elementos do array de strings que satisfazem agravequela expressatildeo regular

IDLgt w=where(stregex(files+irgcubboolean)null)IDLgt printfiles[w]format=(A)CM_1477476864_1_irgcubCM_1477477826_1_irgcub

Ex (IDL) Determinar que strings conteacutem uma data no formato yyyy-mm-dd

IDLgt strs=[201002012010-02-012010-2-1aaaa-mm-ddT2010-02-01J]IDLgt printstregex(strs[0-9]4-[0-9]2-[0-9]2boolean) 0 1 0 0 1

Esta expressatildeo regular especifica quatro repeticcedilotildees (4) de diacutegitos (caracteres na faixa [0-9]) seguido de um (-) seguido de duas repeticcedilotildees (2) de dois diacutegitos ([0-9]) seguido de um (-) seguido de duas repeticcedilotildees (2) de dois diacutegitos ([0-9])

Uma expressatildeo regular apenas um pouco mais elaborada poderia corresponder aos 3 formatos de data no array acima E poderia se impedir que a uacuteltima (com outros caracteres antes e depois da data) seja aceita

4189

Expressotildees regulares - regras - caracteres ldquonormaisrdquo

Uma expressatildeo regular usa caracteres ldquonormaisrdquo e especiais para especificar o que se vai procurar na ordem em que aparecem na expressatildeo

Se um caractere eacute normal (natildeo eacute um dos especiais mostrados adiante) ele especifica uma ocorrecircncia daquele caractere

Ex J eacute uma expressatildeo regular que corresponde a qualquer string onde ocorra J Jaacute JA soacute corresponde a strings que tenham JA dentro

Exs (IDL)

IDLgt strs=[JJJJJJaJAjaJa]

IDLgt printstregex(strsJboolean) 1 1 1 0 1

IDLgt printstregex(strsJAboolean) 0 0 1 0 0

4289

Expressotildees regulares - regras - caracteres especiaisCaracteres especiais tecircm outros significados Para significar literalmente aquele caractere deve ser escapado (escaped) com um

Siacutembolo significado exemplo Corresponde(m) Escape o caractere seguinte deve ser interpretado

literalmente natildeo como especial aa

Qualquer caractere ab ajb aab abb jafbc

+ Uma ou mais repeticcedilotildees do que vem agrave esquerda a+b ab aab bab baabh

() Subexpressatildeo para agrupar termos afetados por um caractere especial (como parecircnteses em notaccedilatildeo matemaacutetica)

(ab)+c abc ababc dabababcg

Zero ou mais repeticcedilotildees dos termos agrave esquerda ab abbaab caaabg

Zero ou uma repeticcedilatildeo dos termos agrave esquerda ab b ab cabd cbd

| Alternaccedilatildeo qualquer um dos dois agrave esquerda a|bc ac bc jacd jbcd

n Exatamente n repeticcedilotildees do termo agrave esquerda a2b aab daaabg

n1n2 De n1 a n2 repeticcedilotildees do termo agrave esquerda a12b ab aab aaab gaaabbd

^ Acircncora (no comeccedilo) nada agrave esquerda ^ab ab abb

$ Acircncora (no fim) nada agrave direita ab$ abaab

[] Conjunto de valores (explicado adiante)

4389

Expressotildees regulares - regras - conjuntos de valores

[] denota um conjunto de valores que pode conter

Uma lista de coisas que devem corresponder Ex [abc] signfica qualquer caractere no conjunto abc Correspondem a esta

expressatildeo abcabha

Uma lista de coisas que natildeo podem corresponder [^abc] significa qualquer coisa que natildeo seja a b ou c Correspondem a esta

expressatildeo d jgs gg

Faixas de valores [0-9] signfica qualquer diacutegito [0-9a-zA-Z] significa qualquer diacutegito ou letra

Classes de valores como algumas faixas e outros conjuntos ocorrem com muita frequumlecircncia haacute nomes

especiais para eles Estes (em IDL) vecircm entre [] ex [[digit] significa o mesmo que [0-9]

4489

Expressotildees regulares - regras - classes de valores

Classe signficado

alnum Caracteres alfanumeacutericos 0-9a-zA-Z

alpha Caracteres alfabeacuteticos a-zA-Z

cntrl Caracteres de controle ASCII (natildeo visiacuteveis coacutedigos 1 a 31 e 127)

digit Diacutegitos (decimais) 0-9

graph Caracteres visiacuteveis ASCII 33 a 126 (natildeo inclui o espaccedilo)

lower Letras minuacutesculas a-z

print Caracteres ldquoimprimiacuteveisrdquo (visiacuteveis e o espaccedilo) ASCII 32 a 126

punct Caracteres de pontuaccedilatildeo $amprsquo()+-lt=gt[]^_lsquo|~

space Os caracteres ldquoem brancordquo (blank) espaccedilo tab tab vertical CR LF (ASCII 32 e 9-13)

upper Letras maiuacutesculas A-Z

xdigit Diacutegitos hexadecimais 0-9A-Fa-f

lt Comeccedilo de palavra (palavra definida como sequumlecircncia de coisas natildeo space)

gt Fim de palavra (palavra definida como sequumlecircncia de coisas natildeo space)

Estas satildeo apenas as principais Algumas implementaccedilotildees tecircm muito mais (em particular nas linguagens que usam Unicode nativamente)

4589

Expressotildees regulares - exemplos

Determinar se strings satildeo nuacutemeros (Ex IDL)

IDLgt str=[9-18 875-812-45913E9-98d7a188d032f5]

Inteiros

IDLgt intexpr=^[-+][0-9]+$

IDLgt printstregex(strintexprboolean) 1 1 0 0 0 0 0 0 0 0

Ponto flutuante

IDLgt fpexpr=^[-+](([0-9][0-9]+)|([0-9]+[0-9]))([eEdD][-+][0-9]+)$

IDLgt printstregex(strfpexprboolean) 1 1 0 1 1 1 1 1 0 0

Sinal opcional

1 ou mais diacutegitos

Sinal opcional

0 ou mais diacutegitos opcionalmente seguidos de um ponto e 1 ou mais diacutegitos

1 ou mais diacutegitos opcionalmente seguidos de um ponto e 0 ou mais diacutegitos

ou Expoente opcional letra do expoente seguida de sinal opcional seguido de um ou mais diacutegitos

4689

Expressotildees regulares ndash extraccedilatildeo

Interpretadores de expressotildees regulares costumam oferecer mais que apenas testar se um string corresponde a uma expressatildeo

Em geral tambeacutem podem retornar que parte(s) do string corresponde(m) agrave expressatildeo

Ex (IDL) Determinar se um string conteacutem uma data incluindo os formatos

IDLgt dates=[2011-01-312011 1 3120110131something done on y2011m1d31 with something]

E extrair a data de dentro do string

IDLgt expr=[0-9]4[0-9]12[0-9]12

(4 diacutegitos)(qualquer separador)(1 a 2 diacutegitos)(qualquer separador)(1 a 2 diacutegitos)

IDLgt printstregex(datesexprextract)format=(A)2011-01-312011 1 31201101312011m1d31

Como agora separar ano mecircs e dia Com uma busca e uma extraccedilatildeo para cada Poderia ser mais eacute mais faacutecil com uma uacutenica expressatildeo regular

4789

Expressotildees regulares - aleacutem de apenas testes

Tambeacutem podem retornar que parte(s) do string correspondem agrave expressatildeo toda e agraves suas subexpressotildees (partes da expressatildeo delimitadas por parecircnteses)

Ex (IDL) Separar pedaccedilos de datas Neste caso para a expressatildeo ficar menor assumindo um formato simples (yyyy-mm-ddThhmmssfff) Mas poderia ser um formato mais livre como no exemplo anterior

IDLgt str=Stuff observed on 2011-01-31T123924983 with some instrumentIDLgt expr=([0-9]4)-([0-9]2)-([0-9]2)T([0-9]2)([0-9]2)([0-9]2[0-9]3)

(quatro diacutegitos)-(2 diacutegitos)-(2 diacutegitos)T(2 diacutegitos)(2 diacutegitos)(2 diacutegitos3 diacutegitos)

IDLgt pieces=stregex(strexprextractsubexpr)IDLgt printpiecesformat=(A)2011-01-31T12392498320110131123924983IDLgt d=julday(pieces[2]pieces[3]pieces[1]pieces[4]pieces[5]pieces[6])IDLgt printdformat=(F166) 2455593027372

Expressatildeo inteiraPrimeira subexpressatildeoSegunda subexpressatildeoTerceira subexpressatildeoQuarta subexpressatildeoQuinta subexpressatildeoSexta subexpressatildeo

4889

Expressotildees regulares - referecircncias httpxkcdcom208

Viacutedeos do Software Carpentry

httpsoftware-carpentryorg4_0regexp

4989

Arquivos

Quase todo programa precisa armazenar dados em arquivos

Podem ser pequenos arquivos de paracircmetros ou enormes arquivos de dados produzidos ou a processar

Apesar do sugerido pela praacutetica comum arquivos texto natildeo satildeo sempre a melhor escolha para armazenar dados - e haacute muitas formas diferentes de os usar

Qual eacute a melhor escolha

Assim como para linguagens ou contecirciners natildeo existe ldquoo melhor formatordquo Cada um tem suas vantagens e desvantagens

Dados diferentes (mesmo se usados pelos mesmos programas) em geral se adequam melhor a formatos diferentes

5089

Arquivos - texto X binaacuterios

Em qualquer formato arquivos satildeo armazenados como diacutegitos binaacuterios

Mas haacute duas formas principais como eles podem ser codificados

Arquivos baseados em texto (text files)

Dados satildeo transformados em caracteres usando alguma formataccedilatildeo (mesmo se impliacutecita) e escritos com alguma codificaccedilatildeo de texto (comumente mas natildeo necessariamente ASCII)

Um arquivo texto eacute um ou mais strings As mesmas conversotildees tecircm que ser feitas depara outros tipos

Arquivos ldquobinaacuteriosrdquo (binary files)

Embora todo arquivo seja binaacuterio este nome costuma ser usado soacute para aqueles em que os dados natildeo estatildeo na forma de texto

Com frequumlecircncia (nem sempre) os dados satildeo gravados de forma idecircntica a como satildeo armazenados na memoacuteria

Muitos formatos usam uma mistura de partes em texto e partes binaacuterias

Um cabeccedilalho (header) de texto que daacute informaccedilotildees (metadados) sobre os dados armazenados na parte binaacuteria que vem depois

O cabeccedilalho conteacutem em especial informaccedilotildees sobre como ler os dados binaacuterios

5189

Arquivos - texto X binaacuterios

Vantagens de arquivos texto

Legiacuteveis por pessoas (human readable)

Podem ser auto-suficientes todo o necessaacuterio para os ler e entender o que conteacutem pode ser obtido olhando o arquivo

Satildeo os menos especiacuteficos a linguagens software normalmente satildeo escritos em ASCII ou Unicode e sempre haacute algum suporte a ler escrever texto em linguagens software

Haacute alguns formatos padratildeo para texto (exs CSV XML) que satildeo suportados em muitas plataformas diferentes

5289

Arquivos - texto X binaacuterios

Vantagens de arquivos binaacuterios

Em geral natildeo haacute conversotildees entre o os dados como armazenados na memoacuteria O que torna o armazenamento mais eficiente e sem alteraccedilotildees nos valores

A maior parte dos formatos padronizados eacute binaacuteria Exs FITS cube CDF NetCDF HDF HDF5 JPEG JPEG2000 TIFF GeoTIFF MPEG etc

Eacute mais comum que haja bibliotecas prontas (ateacute de alto niacutevel) para consulta leitura e gravaccedilatildeo

Os formatos melhor desenhados satildeo autodocumentados (em texto ou binaacuterio) para os ler natildeo eacute necessaacuterio conhecimento preacutevio sobre como os dados foram armazenados

Toda linguagem plataforma costuma ter seu formato binaacuterio mais nativo que costuma ser o mais faacutecil para leitura gravaccedilatildeo Em particular nas de alto niacutevel que tecircm formatos autodocumentados (especialmente

em IDL R Python Java)

Muitos formatos tecircm opccedilatildeo de compressatildeo dos dados

5389

Arquivos - proprietaacuterios X padratildeo

Independente da escolha texto binaacuterio programas devem escolher entre usar um formato proacuteprio ou um formato padronizado

A principal vantagem de formatos proacuteprios eacute que satildeo definidos da forma mais conveniente para a aplicaccedilatildeo que os usa simplificando leitura e gravaccedilatildeo e potencialmente otimizando recursos (acesso ao disco tamanho do arquivo etc)

A principal desvantagem de formatos proacuteprios eacute ser necessaacuterio escrever todo o coacutedigo para os ler gravar

Pode dar mais trabalho que usar um formato geneacuterico que natildeo seja exatamente o que melhor se encaixa na aplicaccedilatildeo

O coacutedigo para processar o formato em geral vai ser menos completo e conveniente de usar que o de um formato bem estabelecido usado por muitos outros em muitos ambientes

Cada novo software que for usar estes arquivos vai precisar compartilhar do mesmo coacutedigo ou precisar de coacutedigo novo (em particular se em outra linguagem) para ler gravar naquele formato

Eacute necessaacuterio documentar o formato e decidir sobre como ele seraacute definido

Se outros jaacute colocaram muito trabalho desenvolvendo bons formatos padratildeo bem suportados em muitos ambientes por que ter o trabalho de reinventar (e reprogramar redocumentar e retestar) a roda

5489

Arquivos - padrotildees comuns em astronomia (exs adiante)

Texto

CSV Comma-separated values - bem suportado por muitos softwares

ldquoColunas fixasrdquo Natildeo eacute um padratildeo bem definido mas eacute praacutetica comum para tabelas (2D)

XML Extensible Markup Language - O padratildeo texto mais flexiacutevel de grande uso em programaccedilatildeo geral para armazenar qualquer coisa com frequumlecircncia de forma hieraacuterquica Bem suportado por linguagens modernas (e modernizadas) e bibliotecas das principais

linguagens gerais Alta complexidade o torna trabalhoso de usar

5589

Arquivos - padrotildees comuns em astronomia (exs adiante)Binaacuterios

FITS Flexible Image Transport System - o mais comum para observaccedilotildees astronocircmicas Conteacutem os dados (em geral arrays 1D 2D ou 3D) e documentaccedilatildeo (nos cabeccedilalhos) sobre a origem e caracteriacutesticas dos dados Tambeacutem usado para armazenar tabelas de dados quaisquer mesmo que natildeo sejam observaccedilotildees (especialmente pelo STSCI) Variam muito em qualidade de documentaccedilatildeo

NetCDF Network Common Data Form - evoluccedilatildeo do CDF autodocumentado eacute comum e bem suportado para vaacuterios arrays de dados

HDF5 Hierarchical Data Format ndash autodocumentado comum e bem suportado permitindo aleacutem de simples arrays estruturas (eacute um formato hieraacuterquico)

Formatos de imagens JPEG JPEG2000 TIFF GeoTIFF etc - voltados para arrays 2D3D de inteiros ou (em alguns casos) reais com ou sem compressatildeo JPEG2000 tem caracteriacutesticas mais avanccediladas como imagens multiresoluccedilatildeo

Formatos vetoriais PS EPS DXF SHP SVG - variados niacuteveis de suporte a armazenamento de vetores e formas em 2D ou 3D

ISIS Cube semelhante em caracteriacutesticas ao FITS mais usado em sensoriamento remoto geociecircncias e ciecircncias planetaacuterias em geral para observaccedilotildees 1D 2D ou 3D

Formatos nativos de linguagens todo o trabalho de leitura e gravaccedilatildeo eacute feito automagicamente pela biblioteca padratildeo em IDL R Python Java

5689

Arquivos texto - newlines

Apesar do que possa parecer arquivos texto natildeo tecircm intrinsecamente vaacuterias linhas Arquivos texto satildeo soacute uma sequumlecircncia 1D de caracteres em alguma codificaccedilatildeo Separaccedilatildeo em linhas (equivalente a interpretar o arquivo como 2D em linhas e colunas) eacute

especificada por convenccedilotildees Natildeo haacute apenas uma convenccedilatildeo para o fim de linhas

A mais primitiva convenccedilatildeo eacute separaccedilatildeo nenhuma estipula-se que linhas tenham um nuacutemero fixo N de caracteres e cabe ao software que lecirc o arquivo entender que uma linha nova ocorre regularmente a cada N caracteres

Eacute a forma menos portaacutevel e mais inconveniente eacute necessaacuterio o conhecimento preacutevio (ou por inspeccedilatildeo do arquivo) de quantos caracteres haacute por linha

A maior parte dos editores de texto natildeo vai saber separar linhas desta forma (por falta deste conhecimento preacutevio) Exemplo (de um FITS real)

SIMPLE = T Fits standard BITPIX = 16 Bits per pixel NAXIS = 0 Number of axes EXTEND = T File may contain extensions

O que com as linhas quebradas nos lugares certos seria

SIMPLE = T Fits standard BITPIX = 16 Bits per pixel NAXIS = 0 Number of axes EXTEND = T File may contain extensions

5789

Arquivos texto - newlines

A forma mais comum de especificar linhas eacute com um marcador do final de linha (newline)

Eacute um caractere especial natildeo normalmente presente no texto que serve para marcar fim de linhas

Mas natildeo haacute soacute um padratildeo de newline Os mais comuns

LF (Line Feed ASCII 10) ndash Unix Linux Mac OS X

CR - (Carriage Return ASCII 13) - Mac OS lt10

CR+LF (CR seguido de LF) - Windows DOS

Eacute o motivo de o Notepad (Windows) natildeo entender as quebras de linha de arquivos escritos com o formato nativo de Linux o arquivo soacute tem LF enquanto o editor espera CR+LF

Alguns sistemas (strings em vaacuterias linguagens por exemplo) usam o coacutedigo de escape n para indicar newline que eacute codificado de acordo com o padratildeo sendo usado

Em geral bibliotecas de leitura e gravaccedilatildeo de arquivos usam (default pelo menos) o newline nativo do sistema em que satildeo usadas

Programas de conversatildeo entre os sistemas satildeo comuns (ex dos2unix)

O Wordpad identifica se for usado soacute LF e quebra as linhas de acordo

5889

Arquivos - texto - CSV

Comma-separated values

O formato mais padronizado para tabelas (arrays 2D) em texto (frequentemente mas natildeo necessariamente ASCII)

Bem suportado por bibliotecas padratildeo de linguagens e outros softwares (Excel Calc Origin Google Docs etc)

Conteacutem Linhas de cabeccedilalho (opcionais mas recomendadas) linhas com qualquer texto geral

descrevendo o arquivo e em geral uma linha de tiacutetulo para as colunas da tabela Uma (apenas uma) tabela onde todas as linhas tecircm o mesmo nuacutemero de colunas

Colunas separadas por viacutergulas (opcionalmente pode ser outro separador) Linhas terminadas por newline (qualquer que seja) Strings delimitados por ldquo ldquo

Ex

NAMECALMPOSFILNAMEECHLPOSDISPPOSTARGNAMEPOSDIRCLASSMJD-OBSITIMECOADDSdec18s00010NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001dec18s00020NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001dec18s00120NIRSPEC-5-AO635800364500itan140NIRSPEC-5-AOp2 TITAN5408763000001dec18s00140NIRSPEC-5-AO626300364500itan140NIRSPEC-5-AOp1 TITAN5408763000001dec18s00151NIRSPEC-5-AO626300364500itan140NIRSPEC-5-AOp1ARC5408764000001dec18s00160NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001

Natildeo eacute necessaacuterio que as colunas tenham largura constante

Cabeccedilalho

5989

Arquivos - texto - CSVHaacute amplo suporte a leitura e gravaccedilatildeo de CSV sem precisar recorrer a procedimentos de baixo niacutevel

Podem ser diretamente importados em Excel Calc Origin Google Docs ou lido facilmente com bibliotecas padratildeo comuns Ex (IDL)

IDLgt c=read_csv(filesearch_scamcsvheader=h)IDLgt printhNAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS

IDLgt helpc Structure ltc8bca508gt 11 tags length=5256 data length=5248 refs=1 FIELD01 STRING Array[41] FIELD02 LONG Array[41] FIELD03 STRING Array[41] FIELD04 DOUBLE Array[41] FIELD05 DOUBLE Array[41] FIELD06 STRING Array[41] FIELD07 STRING Array[41] FIELD08 STRING Array[41] FIELD09 STRING Array[41] FIELD10 DOUBLE Array[41] FIELD11 LONG Array[41]

IDLgt printcfield01[03]dec18s0001 dec18s0002 dec18s0003 dec18s0004

IDLgt printcfield03[03]NIRSPEC-5-AO NIRSPEC-5-AO NIRSPEC-5-AO NIRSPEC-5-AO

6089

Arquivos - texto - CSVEx (IDL) Criaccedilatildeo de um CSV com uma tabela de valores

Criaccedilatildeo de 3 arrays 1D (12 elementos) um para cada coluna

IDLgt x=dindgen(3)IDLgt y=dindgen(4)IDLgt xx=reform(rebin(x34)12)IDLgt yy=reform(rebin(reform(y14)34)12)IDLgt f=xx+yy10IDLgt helpxxyyfXX DOUBLE = Array[12]YY DOUBLE = Array[12]F DOUBLE = Array[12]

Escrita do arquivo

IDLgt write_csvexamplecsvxxyyfheader=[XYX+10Y]

ResultadoXYX+10Y000000000000000000000000100000000000000010000000200000000000000020000000000000001000000010000000100000001000000011000000()

6189

Arquivos - texto - ldquoColunas regularesrdquoFixed column width

Natildeo eacute exatamente um padratildeo Eacute uma praacutetica comum

Armazena uma tabela (array 2D) de forma regular simples de ser interpretada e lida

Costumam ter linha(s) de cabeccedilalho descrevendo o conteuacutedo do arquivo em geral com uma linha para os nomes das colunas

As demais linhas conteacutem os dados sempre ocupando a mesma largura por coluna e escritos no mesmo formato em cada coluna

Costumam ser simples de ler inclusive interativamente (exs Excel Calc Origin read_ascii)

Ex (IDL) Uma simples tabela soacute de nuacutemeros

wavl CH4=33 wavl CH4=25 wavl CH4=10 wavl CH4=08 wavl CH4=05 wavl CH4=026 wavl CH4=02 477330000 0090130 477330000 0091110 477330000 0089250 477330000 0087000 477330000 0087140 477330000 0090080 477330000 0088110 480040000 0090930 480040000 0091930 480040000 0090160 480040000 0087930 480040000 0088110 480040000 0090950 480040000 0089090 482750000 0091710 482750000 0092730 482750000 0091060 482750000 0088850 482750000 0089080 482750000 0091810 482750000 0090060 485450000 0092530 485450000 0093570 485450000 0092000 485450000 0089810 485450000 0090100 485450000 0092730 485450000 0091090

IDLgt a=read_ascii(specs_27s_ntxtdata_start=1header=header)IDLgt printheader wavl CH4=33 wavl CH4=25 wavl CH4=10 wavl CH4=08 wavl CH4=05 wavl CH4=026 wavl CH4=02 IDLgt helpa Structure ltd423c9a8gt 1 tags length=224 data length=224 refs=1 FIELD01 FLOAT Array[14 4]

6289

Arquivos - texto - ldquoColunas regularesrdquoJaacute um arquivo um pouco mais difiacutecil de ler

NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS dec18s0001 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0002 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0003 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 FLAT 5408757812500 460000 5 dec18s0004 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 DARK 5408757812500 460000 5

Por ter colunas de tipos diferentes (strings inteiros reais) natildeo eacute possiacutevel o ler em um simples array Mas eacute faacutecil o colocar em uma estrutura de arrays onde cada campo eacute uma coluna

Especificando interativamente como interpretar as linhasIDLgt templ=ascii_template(filesearch_scamtxt)

Nome do campo (default mostrado)

Tipo do campo (identificado automaticamente)

Posiccedilatildeo (caracter) do comeccedilo (identificada automaticamente)

Linha de exemplo para verificar as colunas

6389

Arquivos - texto - ldquoColunas regularesrdquoDepois de feito o template o arquivo pode ser lido com apenas

IDLgt a=read_ascii(filesearch_scamtxttemplate=templ)IDLgt helpa Structure ltd4ec4608gt 11 tags length=416 data length=416 refs=1 FIELD01 STRING Array[4] FIELD02 LONG Array[4] FIELD03 STRING Array[4] FIELD04 FLOAT Array[4] FIELD05 FLOAT Array[4] FIELD06 STRING Array[4] FIELD07 STRING Array[4] FIELD08 STRING Array[4] FIELD09 FLOAT Array[4] FIELD10 FLOAT Array[4] FIELD11 LONG Array[4]IDLgt printafield01dec18s0001 dec18s0002 dec18s0003 dec18s0004IDLgt printafield04 626300 626300 626300 626300

O template (uma estrutura contendo dados sobre como ler o arquivo) pode ser usado para outros arquivos no mesmo formato No lugar de ter sido criado interativamente poderia ter sido lido de algum arquivo Poderia ter especificado nomes para os campos que seriam mais amigaacuteveis que coias como FIELD11

6489

Arquivos - texto - XML

Extensible Markup Language

Admite grande flexibilidade e por isso pode ter alta complexidade

Valores satildeo colocados dentro de uma estrutura em hieraacuterquica (em uma aacutervore) com os noacutes identificados pelos seus nomes (chaves)

Largamente usado em muitas aacutereas para armazenar conjuntos arbitraacuterios de quaisquer estruturas de dados

A maioria das aplicaccedilotildees usa um formato que eacute um subconjunto do XML especificado por um Schema comumente em um arquivo XML DTD (Document Type Definition)

6589

Arquivos - texto ndash XML ndash exemplos de usos

Armazenamento de dados de aplicaccedilotildees web (comum para exportar importar dados MediaWiki DokuWiki WordPress ADS Lattes etc)

Documentos Office (docx pptx xlsx) OpenOffice (odt opd ods)

Como versotildees de outros formatos FITSML XDF

ldquoScientific Dataset XML NASAs Astronomical Data Center (ADC) sponsors a number of research projects that

use XML for scientific data representation The XML activities at the ADC are sponsored and supported by the NASA Office of Space Science Applied Information Systems Research Program (AISRP)rdquo - httpxmlcoverpagesorgnasa-adchtml

Astronomical Instrument Markup Language (AIML)

SVG ndash Scalable Vector Graphics

Muitas de outras aplicaccedilotildees listadas em httpxmlcoverpagesorgxmlhtmlapplications

6689

Arquivos - texto ndash XML - exemploltxml version=10 gtltDOCTYPE Xdmf SYSTEM Xdmfdtd []gtltXdmf xmlnsxi=httpwwww3org2001XInclude Version=20gt ltDomaingt lt-- Example of Basic Topologies --gt ltInformation Name=Descriptiongt Example of a Polyvertex Topology ltInformationgt ltGrid Name=Polyvertex GridType=Uniformgt ltTopology TopologyType=Polyvertex Dimensions=3 NodesPerElement=3gt ltDataItem Format=XML Dimensions=3 3 NumberType=Floatgt 0 1 2 4 5 6 8 9 10 ltDataItemgt ltTopologygt ltGeometry Type=XYZgt ltDataItem Format=XML Dimensions=4 4 3gt 00 00 00 10 00 00()Que mostra que a interpretaccedilatildeo (parsing) de XML eacute em geral complexa

6789

Arquivos - texto - XML

Haacute muitas bibliotecas de alto niacutevel para fazer o processamento (parsing) e entregar os dados em uma estrutura conveniente

A complexidade em processar XML estaacute em decidir o que fazer com os dados jaacute que os arquivos podem ser muito complexos

As APIs (Application Programming Interfaces) mais comuns para processar XML que satildeo implementadas em muitas linguagens

DOM (Document Object Model) ndash manteacutem todo o conteuacutedo do em uma estrutura de dados (em geral uma aacutervore) em uma variaacutevel (em geral um objeto) Esta pode ser consultada para obter os valores de interesse para os alterar e usada para escrever um arquivo

SAX (Simple API for XML) ndash Interpretador (parser) por objetos O usuaacuterio escreve uma classe herdando da classe SAX provendo os meacutetodos que vatildeo processar os campos agrave medida em que estes satildeo lidos

6889

Arquivos - binaacuterios - FITSFlexible Image Transport System

O formato mais comum para observaccedilotildees astronocircmicas Tambeacutem usado para armazenar quaisquer dados mesmo natildeo relacionados a observaccedilotildees (especialmente tabelas como eacute praacutetica do STSCI)

Conteacutem um (ou mais) cabeccedilalho(s) de texto com metadados (informaccedilotildees sobre os dados como caracteriacutesticas (necessaacuterias para os ler) origem condiccedilotildees em que foram obtidos processamento realizado etc)

SIMPLE = T image conforms to FITS standard BITPIX = 32 bits per data value NAXIS = 2 number of axes NAXIS1 = 1024 NAXIS2 = 1024 BSCALE = 100000 Scaling factor BZERO = 000000 Scaling zero-point TELESCOP= Keck II Telescope SLITNAME= 0041x226 Slit Name SLITPA = 351979 Slit position angle SLITX = 131500 X pixel of the center of the slit LST = 12010446 local apparent sidereal time (()

Depois do cabeccedilalho haacute uma (ou mais) seccedilatildeo(otildees) de dados binaacuterios Costuma(m) ser array(s) 1D (espectros) 2D (imagens) ou 3D (ldquocubos de dadosrdquo)

De inteiros ou reais inteiros satildeo comuns em contagens de instrumentos reais para valores derivados (fluxos intensidades etc)

6989

Arquivos - binaacuterios - FITSNormalmente FITS satildeo lidos escritos por bibliotecas prontas de (relativamente) alto niacutevel usuaacuterio natildeo tem que saber como os dados satildeo armazenados no arquivo nem como os ler escrever Ex (IDL com a biblioteca idlastro)

IDLgt fits_info2dspectrumfits2dspectrumfits has 3 extensionsPrimary header 288 recordsNo dataExtension 1 -- SCI Header 144 records IMAGE ( 1201 1201 )Extension 2 -- ERR Header 72 records IMAGE ( 1201 1201 )Extension 3 -- DQ Header 72 records IMAGE ( 1201 1201 )

IDLgt mydata=readfits(2dspectrumfitsexten_no=1myheader) READFITS Reading FITS extension of type IMAGE READFITS Now reading 1201 by 1201 array

IDLgt extastmyheadermyastIDLgt sz=size(mydatadimensions)IDLgt xy2ad[1sz[0]][1sz[1]]myastcorners_acorners_dIDLgt printcorners_aCorners of the data array from file 2dspectrumfits are at 14487480 33063480

IDLgt printcorners_d -00041264444 00041402222

Obteacutem os dados de coordenadas (WCS) do header

Coloca os dados no array (2D de floats) mydata e o header no array (1D de strings) myheader

Calcula as coordenadas das quinas da imagem atraveacutes do WCS

Provecirc informaccedilotildees sobre o arquivo

7089

Arquivos - binaacuterios - ISIS Cube

Formatos como FITS se adequam muito a ter uma interface de mais alto niacutevel por objetos

Tambeacutem para dados em tabelas FITS muito mais trabalhosos de ler em baixo niacutevel que se adequam muito mais a mapas ou estruturas

Exemplo (de um formato semelhante a FITS ISIS cube)

O objeto ao ser criado lecirc todo o arquivo

cube=pp_editablecube(CM_1553510065_1_ircub)

Meacutetodos fornecem os dados desejados para obter quando necessaacuterio os dados de interesse

Find out the names of the backplanesprintcubegetproperty(backnames)Get the start time of the cubeprintcubegetfromheader(START_TIME)2007-084T100057286Z

Valores no cabeccedilalho podem ser convenientemente fornecidos como um mapa

header=cubeheader_as_hash()printheader[START_TIME]2007-084T100057286Z

7189

Arquivos - binaacuterios ndash ISIS Cube

Os dados satildeo fornecidos como arraysMake a contour plot of the latitudesc=contour(cubegetsuffixbyname(LATITUDE))Get the band with wavelength nearest to 21 (in the units used in the cube)selband=cubegetbandbywavelength(21wavelengths=selwavs)

Interfaces por overload tornam o acesso ainda mais conveniente

selband=cube[21]

selwavs=cube[21]

Retorna um array com a banda de comprimento de onda mais proacuteximo de 21 (microm)

Retorna o comprimento de onda mais proacuteximo de 21 (microm) da banda retornada acima

7289

Arquivos - binaacuterios ndash ISIS Cube Alteraccedilotildees feitas ao conteuacutedo satildeo automaticamente refletidas em todos os

lugares (cabeccedilalho em particular) afetados mantendo o objeto vaacutelido que pode depois ser gravado em um novo arquivo

IDLgt printcubelinescubesamplescubebands 64 64 256

IDLgt helpcubecoreltExpressiongt FLOAT = Array[64 64 256]

IDLgt cubecore=dblarr(100100256)

A linha acima natildeo eacute uma atribuiccedilatildeo eacute uma invocaccedilatildeo de meacutetodo Eacute equivalente acubesetpropertycore=dblarr(100100256)

Eacute o trabalho da funccedilatildeo setproperty decidir se a propriedade passada (core) faz sentido e se fizer fazer todo o trabalho necessaacuterio a esta mudanccedila Para o usuaacuterio eacute tudo automaacutetico e os dados da classe satildeo vaacutelidos o tempo todo

IDLgt helpcubecoreltExpressiongt DOUBLE = Array[100 100 256]

IDLgt printcubelinescubesamplescubebands 100 100 256

IDLgt cubesaveCM_1553510065_1_ir_editedcub

7389

Arquivos - binaacuterios ndash NetCDF e HDF5

Network Common Data Form e Hierarchical Data Format

Os dois uacutenicos formatos bem estabelecidos para dados cientiacuteficos geneacutericos

Armazenam dados como vaacuterias variaacuteveis e seus metadados Para cada variaacutevel haacute (ou pode haver) os metadados

Nome Dimensotildees (do array) Unidades Comentaacuterios

Ambos permitem arrays multidimensionais

Apenas HDF5 permite estruturas (daiacute vem a hierarquia)

Autodocumentados qualquer software que saiba ler um destes formatos lecirc qualquer arquivo sem precisar de conhecimento preacutevio sobre como o arquivo foi gerado

Muito bem suportados em bibliotecas padratildeo e natildeo padratildeo em softwares interativos e visualizadores (inclusive plugins para navegadores)

httpwwwunidataucaredusoftwarenetcdf httpenwikipediaorgwikiHdf5

NetCDF eacute mais simples de usar por natildeo ter hierarquia dando menos trabalho para ler e escrever dados Se hierarquia natildeo eacute necessaacuteria eacute mais conveniente de usar que HDF5

7489

Arquivos - binaacuterios - NetCDF e HDF5Haacute tambeacutem o formato CDL uma versatildeo ASCII do NetCDF A biblioteca padratildeo do NetCDF inclui conversores entre estes formatos

$ ncdump -h refspec_g01_0ncnetcdf refspec_g01_0 dimensions nlay = 51 nwn = 400 nleg = 33 numu = 2 nlev = 52 nphi = 3 ngas = 2 nwnc = 1 scal = 1 v3 = 3 dnl = 1 nk = 1 tdisr = UNLIMITED (0 currently) na = 16

variables float alb(nwn) float z(nlay) float t(nlay) float p(nlay) float wl(nwn) float iof(nwn) float mtau(nwn) float htau(nwn) float hctaus(nwn) float gtau(nwn) float outcos(scal) float phi(nleg) float phic(scal) float umu(numu) float flux(v3 nwn nlev) float mix(nlay ngas) float c(nlay) float psat(nlay) float ga(nwnc) float wlc(nwnc) float inc(scal) int dm(scal) int ord(scal) float fbeam(scal) float wn(nwn) float tautot(nwn nlay) float htaus(nwn nlay) float htaux(nwn nlay) float taug(nwn nlay) float phase(nwn nlay nleg) float ssa(nwn nlay) float uu(nwn nphi nlev numu) float u0u(nwn nlev numu) float tray(nwn nlay) float gtauo(tdisr nwn nlay)

Haacute 14 variaacuteveis usadas como dimensotildees para as 35 variaacuteveis que satildeo arrays

Ex alb(nwn) indica que alb eacute um array 1D de nwn elementos

nwn estaacute armazenado como uma das dimensotildees e eacute 400 portanto alb tem 400 elementos

Parte do conteuacutedo de um arquivo NetCDF em formato CDL (gerado pelo programa ncdump)

7589

Arquivos - binaacuterios - NetCDF e HDF5Conteuacutedo daquele arquivo visualizado com o ncview (acompanha a biblioteca NetCDF padratildeo)

7689

Arquivos - binaacuterios - NetCDF e HDF5O conteuacutedo de todo o arquivo pode ser lido facilmente com as bibliotecas disponiacuteveis e armazenado em contecirciners convenientes Usando um objeto que gera um resultado um pouco mais conveniente

IDLgt h=pp_readncdf(refspec_g01_0nchash)IDLgt printhvar_dims ltObjHeapVar229(HASH)gtvars ltObjHeapVar152(HASH)gtdims ltObjHeapVar118(HASH)gt

IDLgt printh[vars]T 173203 175459 175848 176001 175975 Z 431869 418858 406067 393403 380464 FLUX 300660 145536 0705180 0341669 0165532 PHASE 100000 0779034 0660858 0542052 0449983 TAUTOT0694377 0693420 0693474 0693540 0693636()

IDLgt help(h[vars])[TAUTOT]ltExpressiongt FLOAT = Array[51 400]

IDLgt print(h[var_dims])[TAUTOT]NLAY NWN

IDLgt print(h[dims])[(h[var_dims])[TAUTOT]]NLAY 51NWN 400

7789

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5)

Visualizaccedilatildeo da variaacutevel selecionada

Metadados e alguns valores da variaacutevel selecionada

Variaacutevel a ser criada com o conteuacutedo desta variaacutevel do arquivo

Hierarquia das variaacuteveis do arquivo

7889

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5) Imported variable az

IDLgt helpaz Structure ltd5723f38gt 13 tags length=448 data length=444 refs=1 _NAME STRING az _ICONTYPE STRING binary _TYPE STRING DATASET _FILE STRING INTENSI_test_409OUTh5 _PATH STRING _DATA DOUBLE Array[38] _NDIMENSIONS LONG 1 _DIMENSIONS ULONG64 Array[1] _NELEMENTS ULONG64 38 _DATATYPE STRING H5T_FLOAT _STORAGESIZE ULONG 8 _PRECISION LONG 64 _SIGN STRING

IDLgt printaz_data 00000000 10000000 20000000 30000000 40000000 50000000 60000000 80000000 ()

7989

Arquivos - binaacuterios - imagens

JPEG JPEG200 TIFF GeoTIFF etc

Os formatos comuns de imagens satildeo bem suportados em muacuteltiplas plataformas para uso dentro de programas e interativamente

Alguns formatos tecircm opccedilatildeo de compressatildeo com perda eou sem perda

Armazenam imagens como arrays 2D ou 3D (3D frequumlentemente limitado a 3 ou 4 em uma das dimensotildees uma imagem em 3 ou 4 bandas) de inteiros ou (em alguns formatos) reais

Alguns formatos permitem armazenar metadados para caracterizar as imagens armazenadas

JPEG2000 e GeoTIFF (um subconjunto de TIFF) comuns em astronomia e aacutereas proacuteximas

8089

Arquivos - binaacuterios ndash imagens ndash exemplo (IDL)IDLgt printquery_tiff(issmap_2009tiffinfogeotiff=geo) 1

IDLgt helpinfo Structure ltd4eca4b8gt 18 tags length=144 data length=132 refs=1 CHANNELS LONG 4 DIMENSIONS LONG Array[2] IMAGE_INDEX LONG 0 NUM_IMAGES LONG 1 PIXEL_TYPE INT 1 TYPE STRING TIFF BITS_PER_SAMPLE LONG 8 POSITION FLOAT Array[2] RESOLUTION FLOAT Array[2] UNITS LONG 2 TILE_SIZE LONG Array[2] DESCRIPTION STRING ISS (2009) DATE_TIME STRING 20100218 012436()

IDLgt helpgeo Structure ltd4efa1b8gt 10 tags length=264 data length=262 refs=1 MODELPIXELSCALETAG DOUBLE Array[3] MODELTIEPOINTTAG DOUBLE Array[6 4] GEOGRAPHICTYPEGEOKEY INT 4035 GEOGSEMIMAJORAXISGEOKEY DOUBLE 25750000 GEOGSEMIMINORAXISGEOKEY DOUBLE 25750000()

IDLgt myimage=read_tiff(issmap_2009tiff) Lecirc a imagem para o array myimage

Obteacutem informaccedilotildees sobre o arquivo

8189

Arquivos - binaacuterios ndash formatos nativosLinguagens como IDL R Python Java tecircm seu formato nativo binaacuterio acessado em alto niacutevel Basta mandar salvar ler variaacuteveis no do arquivo a biblioteca padratildeo automagicamente faz todo o trabalho de decidir como gravar ler os dados

Conveniente de usar na proacutepria linguagem Mas raramente existem bibliotecas para ler gravar o formato nativo de uma linguagem a partir de outra Ex (IDL)

IDLgt savefile=2dspectrumsavmydatamyheadercorners_dcorners_averbosecompress SAVE Portable (XDR) compressed SAVERESTORE file SAVE Saved variable MYDATA SAVE Saved variable MYHEADER()

Pode ser lido com apenas (haacute formas mais elaboradas)

IDLgt restore2dspectrumsavverbose RESTORE Portable (XDR) compressed SAVERESTORE file RESTORE Save file written by ltunknowngtltunknowngt Thu Jan 27 191422 2011 RESTORE IDL version 801 (linux x86_64) RESTORE Restored variable MYDATA RESTORE Restored variable MYHEADER()

IDLgt helpmydatamyheadercorners_dcorners_aMYDATA FLOAT = Array[1201 1201]MYHEADER STRING = Array[144]()

8289

Arquivos - processamento em baixo niacutevel

Nem sempre um formato padratildeo eacute a melhor escolha para o problema

Nem sempre haacute escolha (pode-se ter que trabalhar com arquivos que jaacute foram escritos em algum formato proprietaacuterio)

Agraves vezes o formato eacute padratildeo mas natildeo haacute bom suporte a ele disponiacutevel

Em todos estes casos eacute necessaacuterio escrever rotinas em baixo niacutevel que vatildeo ler processar diretamente o conteuacutedo do arquivo

Preferencialmente criando interfaces de alto niacutevel para o programa que vai as usar

8389

Arquivos - processamento em baixo niacutevel - texto

Tomando o exemplo anterior onde as colunas eram de diferentes tipos

NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS dec18s0001 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0002 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0003 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 FLAT 5408757812500 460000 5 dec18s0004 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 DARK 5408757812500 460000 5

A forma mais simples de o ler diretamente eacute definir uma estrutura para receber cada linha e um array destas estruturas para receber todo o arquivo Ex (IDL)

IDLgt record=namecalmpos0filnameechlpos0d0disppos0d0targnameposdirclassmjd_obsitime0d0coadds0IDLgt nlines=file_lines(filesearch_scamtxt)IDLgt mydata=replicate(recordnlines-1)IDLgt header=

Depois de definidas as variaacuteveis que vatildeo receber os dados o arquivo pode ser lido

IDLgt openrunitfilesearch_scamtxtget_lunIDLgt readfunitheaderIDLgt readfunitmydataformat=(A14I8A15F104F104A18A19A15F158F105I15)IDLgt free_lununit

A gravaccedilatildeo de um arquivo texto poderia ser feita de forma semelhante apenas trocando openr por openw (abrir o arquivo para gravaccedilatildeo natildeo leitura) e readf por printf

O arquivo eacute aberto em uma unidade (unit) usada para especificar de onde eacute feita a leitura

Ao final o arquivo eacute fechado

8489

Arquivos - processamento em baixo niacutevel - texto

O que resulta em

IDLgt printheader NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS

IDLgt helpmydataMYDATA STRUCT = -gt ltAnonymousgt Array[4]

IDLgt helpmydata[0] Structure ltd5e38f68gt 11 tags length=136 data length=124 refs=3 NAME STRING dec18s0001 CALMPOS INT 0 FILNAME STRING NIRSPEC-5-AO ECHLPOS DOUBLE 62630000 DISPPOS DOUBLE 36450000 TARGNAME STRING HD85258 POSDIR STRING NIRSPEC-5-AOp1 CLASS STRING STAR MJD_OBS STRING 54087574 ITIME DOUBLE 10000000 COADDS INT 1

Este caso eacute mais complicado que os mais comuns por haver colunas de strings

Se todas fossem de nuacutemeros natildeo teria sido necessaacuterio especificar o formato explicitamente As colunas teriam sido adivinhadas pela biblioteca que lecirc o arquivo Poderia ter sido lido escrito soacute com um array de nuacutemeros sem estruturas

8589

Arquivos - processamento em baixo niacutevel - binaacuterio

Formatos binaacuterios podem ser definidos de qualquer forma O arquivo eacute apenas um conjunto de bytes Cabe ao software saber como os interpretar

Uma escolha comum para que sejam autodocumentados eacute incluir um cabeccedilalho de texto informando as caracteriacutesticas dos dados necessaacuterias para os ler

Ex (IDL) criar um arquivo que armazene um array de doubles com um cabeccedilalho informando as dimensotildees para que o programa que o lecirc saiba como ler os dados

Inventa dados e abre o arquivo

IDLgt data_to_write=dindgen(34)IDLgt openwunitbinary_exampledatget_lun

Escreve as dimensotildees como texto

IDLgt printfunitdimensions of the double array stored belowIDLgt printfunitsize(data_to_writedimensions)

Escreve os dados binaacuterios

IDLgt writeuunitdata_to_write

Fecha o arquivo

IDLgt free_lununit

Escreve em binaacuterio (write unformatted)

8689

Arquivos - processamento em baixo niacutevel - binaacuterio

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

dimensions of the double array stored below 3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

8789

Arquivos - processamento em baixo niacutevel - binaacuterioA leitura deste arquivo eacute igualmente simples

IDLgt header=IDLgt dims=[00]IDLgt openrunitbinary_exampledatget_lun

Lecirc as dimensotildees (armazenadas como texto)

IDLgt readfunitheaderIDLgt readfunitdims

Lecirc a parte binaacuteria depois de saber as dimensotildees

IDLgt data_read=dblarr(dims)IDLgt readuunitdata_read

Fecha o arquivo

IDLgt free_lununit

Verifica que os dados foram gravados e lidos corretamente

IDLgt printarray_equal(data_to_writedata_read) 1

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Lecirc dados binaacuterios (read unformatted)

8889

Sumaacuterio

5 ndash Slides em httpwwwppenteadonetpeapea04_strings_iopdf Strings Expressotildees regulares Arquivos

httpwwwppenteadonetpea

8989

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89

Strings - codificaccedilotildees - Unicode

O que usar para natildeo ter as limitaccedilotildees do ASCII

O uacutenico padratildeo de uso dominante hoje eacute o Unicode

Desenvolvido para ser um padratildeo universal contendo ldquotodosrdquo os caracteres de ldquotodasrdquo as escritas e dados sobre os caracteres

Natildeo eacute imutaacutevel adiccedilotildees satildeo decididas pelo Unicode Consortium (httpwwwunicodeorg)

1089

Strings - codificaccedilotildees - Unicode

Haacute duas partes no Unicode o cataacutelogo (uacutenico) e as codificaccedilotildees (vaacuterias)

O cataacutelogo eacute definido independente de codificaccedilotildees Pode ser visto como um mapa onde os pontos de coacutedigo (codepoints) satildeo as

chaves e os valores satildeo os dados sobre aquele caractere

ldquoIn Unicode the letter A is a platonic ideal Its just floating in heaven A

This platonic A is different than B and different from a but the same as A and A and A

The idea that A in a Times New Roman font is the same character as the A in a Helvetica font but different from a in lower case does not seem very controversial but in some languages just figuring out what a letter is can cause controversy

Is the German letter szlig a real letter or just a fancy way of writing ss If a letters shape changes at the end of the word is that a different letter Hebrew says yes Arabic says no

Anyway the smart people at the Unicode consortium have been figuring this out for the last decade or so accompanied by a great deal of highly political debate and you dont have to worry about it Theyve figured it all out alreadyrdquo

de The absolute minimum every software developer absolutely positevely must know about Unicode and character sets (no excuses)

httpwwwjoelonsoftwarecomarticlesUnicodehtml

1189

Strings - codificaccedilotildees - UnicodeOs dados sobre um caractere Unicode satildeo importantes para suas buscas e identificaccedilatildeoIncluem nome e propriedades visiacutevel (printable) numeacuterico alfanumeacuterico maiuacutesculo minuacutesculo ldquoespaccedilordquo (blank) liacutengua matemaacutetico etc

ExsUnicode Character LATIN CAPITAL LETTER A (U+0041)Name LATIN CAPITAL LETTER ABlock Basic LatinCategory Letter Uppercase [Lu]Combine 0BIDI Left-to-Right [L]Mirror NIndex entries Latin Uppercase Alphabet Uppercase Alphabet Latin

Capital Letters LatinLower case U+0061Version Unicode 110 (June 1993)

Unicode Character INTEGRAL (U+222B)Name INTEGRALBlock Mathematical OperatorsCategory Symbol Math [Sm]Combine 0BIDI Other Neutrals [ON]Mirror YIndex entries Integral Signs INTEGRALSee Also latin small letter esh U+0283Version Unicode 110 (June 1993)

(resultados de httpwwwfileformatinfoinfounicodecharsearchhtm)

int

A

1289

Strings - codificaccedilotildees - Unicode

Unicode Character ANGSTROM SIGN (U+212B)Name ANGSTROM SIGNBlock Letterlike SymbolsCategory Letter Uppercase [Lu]Combine 0BIDI Left-to-Right [L]Decomposition LATIN CAPITAL LETTER A WITH RING ABOVE (U+00C5)Mirror NOld name ANGSTROM UNITIndex entries ANGSTROM SIGNLower case U+00E5Comments non SI length unit (=01 nm) named after A J ngstroumlm Å

Swedish physicist preferred representation is U+00C5Version Unicode 110 (June 1993)

Unicode Character GREEK SMALL LETTER ZETA (U+03B6)Name GREEK SMALL LETTER ZETABlock Greek and CopticCategory Letter Lowercase [Ll]Combine 0BIDI Left-to-Right [L]Mirror NUpper case U+0396Title case U+0396Version Unicode 110 (June 1993)

(resultados de httpwwwfileformatinfoinfounicodecharsearchhtm)

ζ

1389

Strings - codificaccedilotildees - UnicodeUnicode Character NABLA (U+2207)Name NABLABlock Mathematical OperatorsCategory Symbol Math [Sm]Combine 0BIDI Other Neutrals [ON]Mirror NIndex entries difference backward backward difference del NABLAComments backward difference gradient del used for Laplacian

operator (written with superscript 2)See Also white down-pointing triangle U+25BDVersion Unicode 110 (June 1993)

Java DatastringtoUpperCase() nablastringtoLowerCase() nablaCharacterUnicodeBlock MATHEMATICAL_OPERATORSCharactercharCount() 1CharactergetDirectionality() DIRECTIONALITY_OTHER_NEUTRALS [13]CharactergetNumericValue() -1CharactergetType() 25CharacterisDefined() YesCharacterisDigit() NoCharacterisIdentifierIgnorable() NoCharacterisLetter() NoCharacterisLetterOrDigit() NoCharacterisLowerCase() NoCharacterisWhitespace() No()

(resultados de httpwwwfileformatinfoinfounicodecharsearchhtm)

nabla

1489

Strings ndash Como codificar Unicode

Haacute vaacuterias formas Nenhuma simples como ASCII porque eacute necessaacuterio um nuacutemero muito maior de pontos de coacutedigo (haacute espaccedilo para 1 114 112 hoje haacute 109 449 alocados)

Apenas usar mais bytes com um nuacutemero constante por caractere exigiria pelo menos 21 bits por caractere (221 eacute 2 097 152)

Seria demais considerando que quase todos os caracteres escritos estatildeo entre os 128 do ASCII

Em quase todo texto 20 de cada 21 bits seriam 0

A maior parte das codificaccedilotildees usa formas mais elaboradas com um nuacutemero variaacutevel de bytes por caractere

Todas as codificaccedilotildees de uso comum tem o ASCII como subconjunto os 128 caracteres do ASCII satildeo codificados em forma idecircntica em ASCII e nas codificaccedilotildees usuais de Unicode

O que ajuda na compatibilidade software Unicode escrevendo texto que soacute conteacutem caracteres do ASCII produz texto idecircntico ao que seria produzido em ASCII

1589

Strings - codificaccedilotildees para Unicode

No mundo ocidental haacute apenas duas codificaccedilotildees de uso comum

UTF-8

ISO 8859-1 (tambeacutem chamado de Latin 1)

Por isso eacute necessaacuterio saber que codificaccedilatildeo usar ao trabalhar com Unicode

Alguns softwares formatos de arquivo informam a codificaccedilatildeo usada

Outros assumem que uma eacute usada (sem ter sido informada)

Outros tentam adivinhar quando natildeo satildeo informados qual eacute (esp navegadores)

Outros soacute perguntam para o usuaacuterio (esp editores de texto)

Sistemas operacionais oferecem variadas formas de digitar caracteres especiais

Pelos coacutedigos numeacutericos

Por programas seletores de caracteres Alguns seletores de caracteres (ex kcharselect do KDE) permitem fazer buscas pelo

nome ou propriedades

1689

Strings - Onde haacute suporte a Unicode em programaccedilatildeo

Linguagens variam muito

Desconhecem Unicode (soacute usam ASCII) C Fortran

Usam nativamente ASCII (inclusive no coacutedigo-fonte) mas tecircm tipos para strings Unicode e ou funccedilotildees para processar Unicode (em variados graus) C C++ IDL R

Usam nativamente Unicode (inclusive no coacutedigo-fonte) e tecircm bom suporte a strings Unicode Java Python Perl

Muitas vezes (mesmo quando Unicode pode ser usado em coacutedigo-fonte) caracteres Unicode satildeo escritos atraveacutes de ASCII com coacutedigos de escape para coacutedigos Unicode Exs

IDLgt p=plot(testtitle=Z(00C5222B))

C C++ Java Python u2207

ReferecircnciasCharacters vs byteshttpwwwtbrayorgongoingWhen200x20030426UTFThe absolute minimum every software developer absolutely positively must know about Unicode and character sets (no excuses)httpwwwjoelonsoftwarecomarticlesUnicodehtmlUnicode character searchhttpwwwfileformatinfoinfounicodecharsearchhtm

em IDL produz intÅ

produz nabla

1789

Strings - processamento baacutesico

Operaccedilotildees mais fundamentais que costumam ser suportadas em ldquotodasrdquo as linguagens bibliotecas padratildeo (exemplos usando sintaxe de IDL)

Atribuiccedilatildeo de literais

IDLgt a=some

IDLgt helpaA STRING = some

IDLgt printasome

Concatenaccedilatildeo

IDLgt b=a+ string

IDLgt helpbB STRING = some string

1889

Strings - processamento baacutesico

Valor loacutegico

String vazio (null string) eacute falso o resto eacute verdadeiro

IDLgt c=

IDLgt if c then printc is not empty string else printc is null string ()c is null string ()

IDLgt c=a

IDLgt if c then printc is not empty string else printc is null string ()c is not empty string

Espaccedilo natildeo eacute o mesmo que string vazio

IDLgt c=

IDLgt if c then printc is not empty string else printc is null string ()c is not empty string

1989

Strings - processamento baacutesico Comparaccedilotildees

IDLgt helpabA STRING = someB STRING = some string

IDLgt printb eq a 0

IDLgt printb gt a 1

IDLgt c=[ab9Some somesome other string]

IDLgt printc[sort(c)]format=(A) some9Somesomesome other stringsome string

IDLgt printa eq A 0

IDLgt printstrcmp(aAfold_case) 1

Comparaccedilotildees de ldquotamanhordquo (maior menor etc) satildeo comparaccedilotildees pela ordem de codificaccedilatildeo (ldquoalfabeacuteticardquo)

Algumas linguagens permitem definir o ordenamento (como considerar maiuacutesculasminuacuteculas letras com acentos nuacutemeros e siacutembolos) Exs Python C++ Java Perl

2089

Strings - processamento baacutesico Substrings

IDLgt printstrmid(abcdefg32)de

Algumas linguagens nativamente suportam iacutendices para indicar substrings C C++ Fortran Python Ex (Python)

gtgtgt s=abcdegtgtgt print(s[25])cde

Outras permitem que sejam definidos iacutendices por objetos strings

Busca de caracteres ou substrings

IDLgt printstrpos(abcdefgd) 3

IDLgt printstrpos(abcdefgj) -1

IDLgt printstrpos(abcdefgbc) 1

2189

Strings - processamento baacutesico

Outros

IDLgt printstrlen(1234567) 7

IDLgt printstrlen(1234567 ) 8

IDLgt printstrlen( 1234567 ) 9

IDLgt helpstrtrim( 1234567 2)ltExpressiongt STRING = 1234567

IDLgt helpstrtrim( 1234567 1)ltExpressiongt STRING = 1234567

IDLgt helpstrtrim( 1234567 0)ltExpressiongt STRING = 1234567

IDLgt printstrupcase(abcdEF)ABCDEF

IDLgt printstrlowcase(abcdEF)abcdef

Medindo quantos caracteres tem o string inclui espaccedilos em branco

Remoccedilatildeo dos brancos agrave esquerda agrave direita ou dos dois lados

2289

Strings - conversatildeo de outros tipos para strings

Eacute uma das operaccedilotildees mais comuns para gerar textos informativos e nomes escrever arquivos (aquivos texto discutidos adiante) etc

Eacute natildeo trivial jaacute que a conversatildeo pode ser feita de muitas formas diferentes

Para tipos fundamentais sempre haacute uma conversatildeo default tanto criando um string como usando algo tipo print (para strings terminal ou arquivos)

Todo comando tipo print (print printf sprintf string write etc) e toda escrita para arquivos texto eacute uma conversatildeo para string (terminais e arquivos texto soacute conteacutem strings)

2389

Strings - conversatildeo de outros tipos para strings

Exemplos de conversotildees (IDL)

IDLgt print[-109] -1 0 9

IDLgt print1d01B10 10000000 1 100000

IDLgt helpstring(1d01B10)ltExpressiongt STRING = 10000000 1 100000

IDLgt printfunitdblarr(343)

Tipos mais elaborados podem ou natildeo ter uma forma predefinida Com objetos eacute comum ser possiacutevel definir a conversatildeo (stringification) ao criar a classe

IDLgt h=hash(a109[01]18b)

IDLgt printh9 0 1a 100000180000 b

Strings

Coloca strings em um arquivo (adiante)

Strings criados por um meacutetodo da classe hash satildeo uma forma de representar o hash

2489

Strings - conversatildeo de outros tipos para strings

Algumas linguagens (Python IDL) tecircm mais de uma forma default de gerar strings Em Python uma forma eacute executaacutevel a outra eacute mais legiacutevel

In [30] x=arange(12)reshape(43)

In [31] print(x)[[ 0 1 2] [ 3 4 5] [ 6 7 8] [ 9 10 11]]

In [32] xOut[32]array([[ 0 1 2] [ 3 4 5] [ 6 7 8] [ 9 10 11]])

In [33] y=array([[ 0 1 2] [ 3 4 5] [ 6 7 8] [ 9 10 11]])

In [37] print(array_equal(xy))True

String mais legiacutevel

String executaacutevelPode ser usado para criar um objeto equivalente

2589

Strings ndash formataccedilatildeo expliacutecita

A formataccedilatildeo pode ser especificada se a conversatildeo default natildeo eacute adequada para definir a conversatildeo em um novo tipo

Cada linguagem tem sua sintaxe para formataccedilatildeo

Haacute dois estilos semelhantes em vaacuterias linguagens

Ambos os estilos satildeo sintaxes diferentes para a mesma ideacuteia Um coacutedigo especifica o tipo de dado sendo passado (inteiro real etc) e detalhes de como seraacute feito o string (largura do campo diacutegitos decimais alinhamento etc)

2689

Strings ndash formataccedilatildeo expliacutecita

Estilo Fortran

IDL

IDLgt print1d0+1d-9 10000000

IDLgt print1d0+1d-9format=(E1610)10000000010E+00

IDLgt printx=1d0+1d-9format=(A0F1613)X= 10000000010000

Estilo C (ldquoprintfrdquo)

IDL

IDLgt printformat=(x=1610e)1d0+1d-9x=10000000010e+00

Python

In [20] print(x=1610e (1e0+1e-9))x=10000000010e+00

Nenhum formato expliacutecito (default)

2789

Strings - formatos tipo Fortran

(apenas o principal ver documentaccedilatildeo para detalhes)

Ex (IDL)

IDLgt printx=1d0+1d-9format=(A0F1613)X= 10000000010000

Tambeacutem haacute modificadores para especificar alinhamento (-) se deve haver (ou ser suprimido) avanccedilo para a pŕoxima linha posiccedilatildeo dentro do campo etc

Coacutedigo Significado Exemplo(s)

A String (A) (10A)

I Inteiro decimal (I) (10I)(-2I)

B Inteiro binaacuterio (B) (10B)

Z Inteiro hexadecimal (Z) (10Z)

O Inteiro octal (O) (10O)

F Real ponto fixo (F)(F52)

E D Real ponto flutuante (E)(D1610)

G Real ponto fixo ou flutuante de acordo com o valor (G)(G10)

ldquordquo String literal (ldquox=rdquoI10)

X Caracteres em branco (A10XI)

2889

Strings - formatos tipo C (printf)(apenas o principal ver documentaccedilatildeo para detalhes)String com campos a serem substituiacutedos por valores (passados adiante) marcados por coacutedigos com

Ex (Python)In [20] print(x=1610e (1e0+1e-9))x=10000000010e+00

Haacute modificadores para especificar alinhamento como preencher o espaccedilo que sobra (espaccedilos zeros etc) para imprimir o sinal + etc

Coacutedigo Significado (tipo) Exemplo(s)

di Inteiro decimal (int) d 5d +05d

u Inteiro decimal sem sinal (unsigned int) u 7u

fF Real em ponto fixo (double float) f 136f

eE Real em ponto flutuante (double float) e 1610e

gG Real em ponto fixo ou flutuante decidido pelo valor (double float)

g 73G

xX Inteiro sem sinal hexadecimal (unsigned int) x 10X

o Inteiro sem sinal octal (unsigned int) o 5o

s String (string) s 10s

c Caractere (char) c

p Ponteiro - estilo C - (void ) p

literal

2989

Strings - conversatildeo de strings para outros tipos

Para gerar dados a partir de strings datas identificadores pedaccedilos de nomes valores numeacutericos armazenados em strings

Tambeacutem sempre haacute conversotildees default para os tipos baacutesicos onde o intepretador programa faz o possiacutevel para entender o string como um valor daquele tipo

Tipicamente eacute feito por casts (funccedilotildees de conversatildeo) reads (de strings ou arquivos texto (arquivos texto satildeo strings)) construtores de objetos ou implicitamente

3089

Strings - conversatildeo de strings para outros tipos - impliacutecitas

Exs (IDL)

IDLgt helpfix([17 17 171 -17 9 8])ltExpressiongt INT = Array[5]

IDLgt printfix([17 17 171 -17 9 8]) 17 17 17 -17 9

IDLgt printdouble([17 17 171 -17 9 8]) 17000000 17000000 17100000 -17000000 90000000

IDLgt readfunitabcd

IDLgt a=0d0IDLgt b=00IDLgt c=0IDLgt reads171d0 189d0 -9abcIDLgt helpabcA DOUBLE = 17100000B FLOAT = 189000C INT = -9

Converte o conteuacutedo do string para os tipos das variaacuteveis abcd (explicado adiante)

3189

Strings - conversatildeo de strings para outros tipos

Quando o default natildeo eacute suficiente (ou quando escrevendo o conversor em uma classe) costuma ser possiacutevel o fazer com formatos semelhantes aos formatos para gerar strings Exs (IDL)

IDLgt a=0d0IDLgt b=00IDLgt c=0IDLgt reads171d0 something 189d0-9abc READS Input conversion error Unit 0 File ltstdingt Error occurred at $MAIN$ Execution halted at $MAIN$

Natildeo funcionou porque sozinho ele natildeo conseguiu saber o que fazer com o ldquosomethingrdquo Usando um formato especiacutefico

IDLgt reads171d0 something 189d0-9 abcformat=(D6111XD611XI)

IDLgt helpabcA DOUBLE = 17100000B FLOAT = 189000C INT = -9

Exemplos mais complicados adiante (arquivos texto)

Variaacuteveis tecircm que ser definidas para informar para que tipo seraacute feita a conversatildeo default

3289

Strings - processamento natildeo baacutesicoOperaccedilotildees importantes e muito necessaacuterias mas que natildeo satildeo suportadas em todas as linguagens bibliotecas padratildeo

Testes (ex IDL)

IDLgt str=[afitsaFITSafitsaabfitsabcfits]

IDLgt printstrmatch(strfits) 1 0 0 1 1

IDLgt printstrmatch(strfitsfold_case) 1 1 0 1 1

IDLgt printstrmatch(strfitsfold_case) 1 1 1 1 1

IDLgt printstrmatch(strfits) 1 0 0 0 0

IDLgt printstrmatch(strfits) 0 0 0 1 0

3389

Strings - processamento natildeo baacutesico

Operaccedilotildees importantes e muito necessaacuterias mas que natildeo satildeo suportadas em todas as linguagens bibliotecas padratildeo

Separaccedilatildeo de partes (Ex IDL)

IDLgt printstrsplit(2011- 131 -extract)format=(A)2011131

Processamento de nomes de arquivos diretoacuterios (Ex IDL)

IDLgt printfile_dirname(some_directoryanother_directorysome_filetxt)some_directoryanother_directory

IDLgt printfile_basename(some_directoryanother_directorysome_filetxt)some_filetxt

IDLgt printfile_basename(another_directorysome_filetxttxt)+_alteredtxtsome_file_alteredtxt

3489

Strings - processamento natildeo baacutesico

Codificaccedilotildees (Ex Python 3)

gtgtgt s=infinite money infinNeuro sign

gtgtgt print(s)infinite money infineuro

gtgtgt print(ascii(s))infinite money u221eu20ac

gtgtgt print(sencode(utf-8))binfinite money xe2x88x9exe2x82xac

3589

Strings - processamento natildeo baacutesico

Perl eacute a linguagem mais avanccedilada para processamento de strings tem suporte nativo a muitas outras operaccedilotildees a semacircntica da linguagem eacute voltada principalmente para processar strings expressotildees regulares (de vaacuterios tipos) natildeo satildeo strings fazem parte da semacircntica

Ex (sem o objetivo que seja compreensiacutevel apenas para indicar o estilo)

Ler um arquivo contendo campos com nomes separados de valores por ()

temperature 10008name some modelx_dimension 100y_dimension 100z_dimension 50()

Armazenado-o em um mapa O que pode ser feito com apenas

While (ltgt) Loop over input linesPut pre-colon text into $1 post-colon into $2 if (m (S+) (+) ) Use $1 as key $2 as value $file_data$1 = $2

3689

Expressotildees regulares - definiccedilatildeo

Expressotildees regulares (regular expressions regex) satildeo a mais poderosa ferramenta para fazer buscas e separar substrings

Regex satildeo uma linguagem com o uacutenico objetivo de especificar propriedades de strings

Implementadas em graus diferentes em todas as linguagens modernas e modernizadas facilita encontrar uma expressatildeo jaacute pronta pois satildeo quase iguais em qualquer linguagem

Estatildeo na biblioteca padratildeo em IDL Python R Perl

Em C++ e Java em bibliotecas comuns (Boost Jregex)

Para que servem

Uma expressatildeo regular especifica propriedades de strings

O interpretador de expressotildees regulares (regular expression engine) recebe a expressatildeo e o string a analisar e determina se o string corresponde (matches) agrave expressatildeo regular

Em alguns casos o interpretador pode tambeacutem informar que parte(s) do string corresponde(m) a que parte(s) da expressatildeo regular e realizar processamentos com estas partes

3789

Expressotildees regulares ndash exemplos de usos Separar partes de strings

Encontrar linhas em arquivos que tenham nomes valores e comentaacuterios e separar estes pedaccedilos

Escalar com comentaacuterio

SLITPA = 351979 Slit position angle

Array 1D sem comentaacuterio (se extendendo por vaacuterias linhas)

BAND_BIN_CENTER = (03505400358950036629003732200379490 0387900104598)

Escalares em diferentes formatos

Total Mechanical Luminosity 15310E+03resources_usedwalltime=005603

Pedaccedilos de nomes

6063 17836E-20 2456 T FeIX((3Pe)3d(2PE)4p_1Po-3s2_3p6_1Se)

Datas separando ano mecircs dia hora (em vaacuterios formatos diferentes)

DATE-OBS= 2006-12-18 universal date of observationDATE_TIME = 2010-07-19T161032START_TIME = 2006-182T225102850Z

3889

Expressotildees regulares ndash exemplos de usos

Separar partes de strings Separar partes de nomes de arquivos (por significarem algo como identificar o

conteuacutedo)

specdec18s0041fitsscamdec18i0054fits15_7_mts_hmpixselh_mr15sav15_7_mts_hwpixselh_mr15sav16_3_mts_hwpixselb_mr16savreadmodel5l_-1_000010000_10000_r05_030_08196_0100000_005000000_1000eps

Determinar se um string eacute um nuacutemero (inteiro real fixo flutuante)

Encontrar identificadores Exs nomes de cataacutelogos endereccedilos HTTPFTP endereccedilos de email

Separar campos em arquivos sendo lidos onde as linhas natildeo tecircm a mesma formataccedilatildeo algumas linhas com colunas separadas por espaccedilos outras por tabs outras por

siacutembolos ignorando linhas de comentaacuterios e linhas vazias

3989

Expressotildees regulares - usoEx (IDL) encontrar nomes de arquivos com algumas propriedades

IDLgt printfilesformat=(A)CM_1477475933_1_viscubCM_1477476864_1_ircubCM_1477476864_1_irgcubCM_1477476864_1_viscubCM_1477477826_1_ircubCM_1477477826_1_irgcubCM_1477477826_1_viscubmosaic2cub

IDLgt printstregex(files+irgcubboolean) 0 0 1 0 0 1 0 0

A expressatildeo regular eacute +irgcub Especifica uma ou mais ocorrecircncias seguidas (+) de qualquer caractere () seguido de uma ocorrecircncia de irgcub (o ponto vem precedido do caractere de

escape () para ser entendido literalmente como um ponto e natildeo como o seu significado especial (qualquer caractere)

Esta aplicaccedilatildeo do interpretador (stregex) retorna um valor Booleano (verdadeirofalso) para cada elemento do string passado (files) que informa se aquele elemento correspondia agravequela expressatildeo regular

Este eacute um exemplo artificial Seria mais faacutecil ter usado strmatch(filesirgcub)

4089

Expressotildees regulares - uso

Em casos como este tipicamente o resultado de stregex seria usado como filtro para selecionar apenas os elementos do array de strings que satisfazem agravequela expressatildeo regular

IDLgt w=where(stregex(files+irgcubboolean)null)IDLgt printfiles[w]format=(A)CM_1477476864_1_irgcubCM_1477477826_1_irgcub

Ex (IDL) Determinar que strings conteacutem uma data no formato yyyy-mm-dd

IDLgt strs=[201002012010-02-012010-2-1aaaa-mm-ddT2010-02-01J]IDLgt printstregex(strs[0-9]4-[0-9]2-[0-9]2boolean) 0 1 0 0 1

Esta expressatildeo regular especifica quatro repeticcedilotildees (4) de diacutegitos (caracteres na faixa [0-9]) seguido de um (-) seguido de duas repeticcedilotildees (2) de dois diacutegitos ([0-9]) seguido de um (-) seguido de duas repeticcedilotildees (2) de dois diacutegitos ([0-9])

Uma expressatildeo regular apenas um pouco mais elaborada poderia corresponder aos 3 formatos de data no array acima E poderia se impedir que a uacuteltima (com outros caracteres antes e depois da data) seja aceita

4189

Expressotildees regulares - regras - caracteres ldquonormaisrdquo

Uma expressatildeo regular usa caracteres ldquonormaisrdquo e especiais para especificar o que se vai procurar na ordem em que aparecem na expressatildeo

Se um caractere eacute normal (natildeo eacute um dos especiais mostrados adiante) ele especifica uma ocorrecircncia daquele caractere

Ex J eacute uma expressatildeo regular que corresponde a qualquer string onde ocorra J Jaacute JA soacute corresponde a strings que tenham JA dentro

Exs (IDL)

IDLgt strs=[JJJJJJaJAjaJa]

IDLgt printstregex(strsJboolean) 1 1 1 0 1

IDLgt printstregex(strsJAboolean) 0 0 1 0 0

4289

Expressotildees regulares - regras - caracteres especiaisCaracteres especiais tecircm outros significados Para significar literalmente aquele caractere deve ser escapado (escaped) com um

Siacutembolo significado exemplo Corresponde(m) Escape o caractere seguinte deve ser interpretado

literalmente natildeo como especial aa

Qualquer caractere ab ajb aab abb jafbc

+ Uma ou mais repeticcedilotildees do que vem agrave esquerda a+b ab aab bab baabh

() Subexpressatildeo para agrupar termos afetados por um caractere especial (como parecircnteses em notaccedilatildeo matemaacutetica)

(ab)+c abc ababc dabababcg

Zero ou mais repeticcedilotildees dos termos agrave esquerda ab abbaab caaabg

Zero ou uma repeticcedilatildeo dos termos agrave esquerda ab b ab cabd cbd

| Alternaccedilatildeo qualquer um dos dois agrave esquerda a|bc ac bc jacd jbcd

n Exatamente n repeticcedilotildees do termo agrave esquerda a2b aab daaabg

n1n2 De n1 a n2 repeticcedilotildees do termo agrave esquerda a12b ab aab aaab gaaabbd

^ Acircncora (no comeccedilo) nada agrave esquerda ^ab ab abb

$ Acircncora (no fim) nada agrave direita ab$ abaab

[] Conjunto de valores (explicado adiante)

4389

Expressotildees regulares - regras - conjuntos de valores

[] denota um conjunto de valores que pode conter

Uma lista de coisas que devem corresponder Ex [abc] signfica qualquer caractere no conjunto abc Correspondem a esta

expressatildeo abcabha

Uma lista de coisas que natildeo podem corresponder [^abc] significa qualquer coisa que natildeo seja a b ou c Correspondem a esta

expressatildeo d jgs gg

Faixas de valores [0-9] signfica qualquer diacutegito [0-9a-zA-Z] significa qualquer diacutegito ou letra

Classes de valores como algumas faixas e outros conjuntos ocorrem com muita frequumlecircncia haacute nomes

especiais para eles Estes (em IDL) vecircm entre [] ex [[digit] significa o mesmo que [0-9]

4489

Expressotildees regulares - regras - classes de valores

Classe signficado

alnum Caracteres alfanumeacutericos 0-9a-zA-Z

alpha Caracteres alfabeacuteticos a-zA-Z

cntrl Caracteres de controle ASCII (natildeo visiacuteveis coacutedigos 1 a 31 e 127)

digit Diacutegitos (decimais) 0-9

graph Caracteres visiacuteveis ASCII 33 a 126 (natildeo inclui o espaccedilo)

lower Letras minuacutesculas a-z

print Caracteres ldquoimprimiacuteveisrdquo (visiacuteveis e o espaccedilo) ASCII 32 a 126

punct Caracteres de pontuaccedilatildeo $amprsquo()+-lt=gt[]^_lsquo|~

space Os caracteres ldquoem brancordquo (blank) espaccedilo tab tab vertical CR LF (ASCII 32 e 9-13)

upper Letras maiuacutesculas A-Z

xdigit Diacutegitos hexadecimais 0-9A-Fa-f

lt Comeccedilo de palavra (palavra definida como sequumlecircncia de coisas natildeo space)

gt Fim de palavra (palavra definida como sequumlecircncia de coisas natildeo space)

Estas satildeo apenas as principais Algumas implementaccedilotildees tecircm muito mais (em particular nas linguagens que usam Unicode nativamente)

4589

Expressotildees regulares - exemplos

Determinar se strings satildeo nuacutemeros (Ex IDL)

IDLgt str=[9-18 875-812-45913E9-98d7a188d032f5]

Inteiros

IDLgt intexpr=^[-+][0-9]+$

IDLgt printstregex(strintexprboolean) 1 1 0 0 0 0 0 0 0 0

Ponto flutuante

IDLgt fpexpr=^[-+](([0-9][0-9]+)|([0-9]+[0-9]))([eEdD][-+][0-9]+)$

IDLgt printstregex(strfpexprboolean) 1 1 0 1 1 1 1 1 0 0

Sinal opcional

1 ou mais diacutegitos

Sinal opcional

0 ou mais diacutegitos opcionalmente seguidos de um ponto e 1 ou mais diacutegitos

1 ou mais diacutegitos opcionalmente seguidos de um ponto e 0 ou mais diacutegitos

ou Expoente opcional letra do expoente seguida de sinal opcional seguido de um ou mais diacutegitos

4689

Expressotildees regulares ndash extraccedilatildeo

Interpretadores de expressotildees regulares costumam oferecer mais que apenas testar se um string corresponde a uma expressatildeo

Em geral tambeacutem podem retornar que parte(s) do string corresponde(m) agrave expressatildeo

Ex (IDL) Determinar se um string conteacutem uma data incluindo os formatos

IDLgt dates=[2011-01-312011 1 3120110131something done on y2011m1d31 with something]

E extrair a data de dentro do string

IDLgt expr=[0-9]4[0-9]12[0-9]12

(4 diacutegitos)(qualquer separador)(1 a 2 diacutegitos)(qualquer separador)(1 a 2 diacutegitos)

IDLgt printstregex(datesexprextract)format=(A)2011-01-312011 1 31201101312011m1d31

Como agora separar ano mecircs e dia Com uma busca e uma extraccedilatildeo para cada Poderia ser mais eacute mais faacutecil com uma uacutenica expressatildeo regular

4789

Expressotildees regulares - aleacutem de apenas testes

Tambeacutem podem retornar que parte(s) do string correspondem agrave expressatildeo toda e agraves suas subexpressotildees (partes da expressatildeo delimitadas por parecircnteses)

Ex (IDL) Separar pedaccedilos de datas Neste caso para a expressatildeo ficar menor assumindo um formato simples (yyyy-mm-ddThhmmssfff) Mas poderia ser um formato mais livre como no exemplo anterior

IDLgt str=Stuff observed on 2011-01-31T123924983 with some instrumentIDLgt expr=([0-9]4)-([0-9]2)-([0-9]2)T([0-9]2)([0-9]2)([0-9]2[0-9]3)

(quatro diacutegitos)-(2 diacutegitos)-(2 diacutegitos)T(2 diacutegitos)(2 diacutegitos)(2 diacutegitos3 diacutegitos)

IDLgt pieces=stregex(strexprextractsubexpr)IDLgt printpiecesformat=(A)2011-01-31T12392498320110131123924983IDLgt d=julday(pieces[2]pieces[3]pieces[1]pieces[4]pieces[5]pieces[6])IDLgt printdformat=(F166) 2455593027372

Expressatildeo inteiraPrimeira subexpressatildeoSegunda subexpressatildeoTerceira subexpressatildeoQuarta subexpressatildeoQuinta subexpressatildeoSexta subexpressatildeo

4889

Expressotildees regulares - referecircncias httpxkcdcom208

Viacutedeos do Software Carpentry

httpsoftware-carpentryorg4_0regexp

4989

Arquivos

Quase todo programa precisa armazenar dados em arquivos

Podem ser pequenos arquivos de paracircmetros ou enormes arquivos de dados produzidos ou a processar

Apesar do sugerido pela praacutetica comum arquivos texto natildeo satildeo sempre a melhor escolha para armazenar dados - e haacute muitas formas diferentes de os usar

Qual eacute a melhor escolha

Assim como para linguagens ou contecirciners natildeo existe ldquoo melhor formatordquo Cada um tem suas vantagens e desvantagens

Dados diferentes (mesmo se usados pelos mesmos programas) em geral se adequam melhor a formatos diferentes

5089

Arquivos - texto X binaacuterios

Em qualquer formato arquivos satildeo armazenados como diacutegitos binaacuterios

Mas haacute duas formas principais como eles podem ser codificados

Arquivos baseados em texto (text files)

Dados satildeo transformados em caracteres usando alguma formataccedilatildeo (mesmo se impliacutecita) e escritos com alguma codificaccedilatildeo de texto (comumente mas natildeo necessariamente ASCII)

Um arquivo texto eacute um ou mais strings As mesmas conversotildees tecircm que ser feitas depara outros tipos

Arquivos ldquobinaacuteriosrdquo (binary files)

Embora todo arquivo seja binaacuterio este nome costuma ser usado soacute para aqueles em que os dados natildeo estatildeo na forma de texto

Com frequumlecircncia (nem sempre) os dados satildeo gravados de forma idecircntica a como satildeo armazenados na memoacuteria

Muitos formatos usam uma mistura de partes em texto e partes binaacuterias

Um cabeccedilalho (header) de texto que daacute informaccedilotildees (metadados) sobre os dados armazenados na parte binaacuteria que vem depois

O cabeccedilalho conteacutem em especial informaccedilotildees sobre como ler os dados binaacuterios

5189

Arquivos - texto X binaacuterios

Vantagens de arquivos texto

Legiacuteveis por pessoas (human readable)

Podem ser auto-suficientes todo o necessaacuterio para os ler e entender o que conteacutem pode ser obtido olhando o arquivo

Satildeo os menos especiacuteficos a linguagens software normalmente satildeo escritos em ASCII ou Unicode e sempre haacute algum suporte a ler escrever texto em linguagens software

Haacute alguns formatos padratildeo para texto (exs CSV XML) que satildeo suportados em muitas plataformas diferentes

5289

Arquivos - texto X binaacuterios

Vantagens de arquivos binaacuterios

Em geral natildeo haacute conversotildees entre o os dados como armazenados na memoacuteria O que torna o armazenamento mais eficiente e sem alteraccedilotildees nos valores

A maior parte dos formatos padronizados eacute binaacuteria Exs FITS cube CDF NetCDF HDF HDF5 JPEG JPEG2000 TIFF GeoTIFF MPEG etc

Eacute mais comum que haja bibliotecas prontas (ateacute de alto niacutevel) para consulta leitura e gravaccedilatildeo

Os formatos melhor desenhados satildeo autodocumentados (em texto ou binaacuterio) para os ler natildeo eacute necessaacuterio conhecimento preacutevio sobre como os dados foram armazenados

Toda linguagem plataforma costuma ter seu formato binaacuterio mais nativo que costuma ser o mais faacutecil para leitura gravaccedilatildeo Em particular nas de alto niacutevel que tecircm formatos autodocumentados (especialmente

em IDL R Python Java)

Muitos formatos tecircm opccedilatildeo de compressatildeo dos dados

5389

Arquivos - proprietaacuterios X padratildeo

Independente da escolha texto binaacuterio programas devem escolher entre usar um formato proacuteprio ou um formato padronizado

A principal vantagem de formatos proacuteprios eacute que satildeo definidos da forma mais conveniente para a aplicaccedilatildeo que os usa simplificando leitura e gravaccedilatildeo e potencialmente otimizando recursos (acesso ao disco tamanho do arquivo etc)

A principal desvantagem de formatos proacuteprios eacute ser necessaacuterio escrever todo o coacutedigo para os ler gravar

Pode dar mais trabalho que usar um formato geneacuterico que natildeo seja exatamente o que melhor se encaixa na aplicaccedilatildeo

O coacutedigo para processar o formato em geral vai ser menos completo e conveniente de usar que o de um formato bem estabelecido usado por muitos outros em muitos ambientes

Cada novo software que for usar estes arquivos vai precisar compartilhar do mesmo coacutedigo ou precisar de coacutedigo novo (em particular se em outra linguagem) para ler gravar naquele formato

Eacute necessaacuterio documentar o formato e decidir sobre como ele seraacute definido

Se outros jaacute colocaram muito trabalho desenvolvendo bons formatos padratildeo bem suportados em muitos ambientes por que ter o trabalho de reinventar (e reprogramar redocumentar e retestar) a roda

5489

Arquivos - padrotildees comuns em astronomia (exs adiante)

Texto

CSV Comma-separated values - bem suportado por muitos softwares

ldquoColunas fixasrdquo Natildeo eacute um padratildeo bem definido mas eacute praacutetica comum para tabelas (2D)

XML Extensible Markup Language - O padratildeo texto mais flexiacutevel de grande uso em programaccedilatildeo geral para armazenar qualquer coisa com frequumlecircncia de forma hieraacuterquica Bem suportado por linguagens modernas (e modernizadas) e bibliotecas das principais

linguagens gerais Alta complexidade o torna trabalhoso de usar

5589

Arquivos - padrotildees comuns em astronomia (exs adiante)Binaacuterios

FITS Flexible Image Transport System - o mais comum para observaccedilotildees astronocircmicas Conteacutem os dados (em geral arrays 1D 2D ou 3D) e documentaccedilatildeo (nos cabeccedilalhos) sobre a origem e caracteriacutesticas dos dados Tambeacutem usado para armazenar tabelas de dados quaisquer mesmo que natildeo sejam observaccedilotildees (especialmente pelo STSCI) Variam muito em qualidade de documentaccedilatildeo

NetCDF Network Common Data Form - evoluccedilatildeo do CDF autodocumentado eacute comum e bem suportado para vaacuterios arrays de dados

HDF5 Hierarchical Data Format ndash autodocumentado comum e bem suportado permitindo aleacutem de simples arrays estruturas (eacute um formato hieraacuterquico)

Formatos de imagens JPEG JPEG2000 TIFF GeoTIFF etc - voltados para arrays 2D3D de inteiros ou (em alguns casos) reais com ou sem compressatildeo JPEG2000 tem caracteriacutesticas mais avanccediladas como imagens multiresoluccedilatildeo

Formatos vetoriais PS EPS DXF SHP SVG - variados niacuteveis de suporte a armazenamento de vetores e formas em 2D ou 3D

ISIS Cube semelhante em caracteriacutesticas ao FITS mais usado em sensoriamento remoto geociecircncias e ciecircncias planetaacuterias em geral para observaccedilotildees 1D 2D ou 3D

Formatos nativos de linguagens todo o trabalho de leitura e gravaccedilatildeo eacute feito automagicamente pela biblioteca padratildeo em IDL R Python Java

5689

Arquivos texto - newlines

Apesar do que possa parecer arquivos texto natildeo tecircm intrinsecamente vaacuterias linhas Arquivos texto satildeo soacute uma sequumlecircncia 1D de caracteres em alguma codificaccedilatildeo Separaccedilatildeo em linhas (equivalente a interpretar o arquivo como 2D em linhas e colunas) eacute

especificada por convenccedilotildees Natildeo haacute apenas uma convenccedilatildeo para o fim de linhas

A mais primitiva convenccedilatildeo eacute separaccedilatildeo nenhuma estipula-se que linhas tenham um nuacutemero fixo N de caracteres e cabe ao software que lecirc o arquivo entender que uma linha nova ocorre regularmente a cada N caracteres

Eacute a forma menos portaacutevel e mais inconveniente eacute necessaacuterio o conhecimento preacutevio (ou por inspeccedilatildeo do arquivo) de quantos caracteres haacute por linha

A maior parte dos editores de texto natildeo vai saber separar linhas desta forma (por falta deste conhecimento preacutevio) Exemplo (de um FITS real)

SIMPLE = T Fits standard BITPIX = 16 Bits per pixel NAXIS = 0 Number of axes EXTEND = T File may contain extensions

O que com as linhas quebradas nos lugares certos seria

SIMPLE = T Fits standard BITPIX = 16 Bits per pixel NAXIS = 0 Number of axes EXTEND = T File may contain extensions

5789

Arquivos texto - newlines

A forma mais comum de especificar linhas eacute com um marcador do final de linha (newline)

Eacute um caractere especial natildeo normalmente presente no texto que serve para marcar fim de linhas

Mas natildeo haacute soacute um padratildeo de newline Os mais comuns

LF (Line Feed ASCII 10) ndash Unix Linux Mac OS X

CR - (Carriage Return ASCII 13) - Mac OS lt10

CR+LF (CR seguido de LF) - Windows DOS

Eacute o motivo de o Notepad (Windows) natildeo entender as quebras de linha de arquivos escritos com o formato nativo de Linux o arquivo soacute tem LF enquanto o editor espera CR+LF

Alguns sistemas (strings em vaacuterias linguagens por exemplo) usam o coacutedigo de escape n para indicar newline que eacute codificado de acordo com o padratildeo sendo usado

Em geral bibliotecas de leitura e gravaccedilatildeo de arquivos usam (default pelo menos) o newline nativo do sistema em que satildeo usadas

Programas de conversatildeo entre os sistemas satildeo comuns (ex dos2unix)

O Wordpad identifica se for usado soacute LF e quebra as linhas de acordo

5889

Arquivos - texto - CSV

Comma-separated values

O formato mais padronizado para tabelas (arrays 2D) em texto (frequentemente mas natildeo necessariamente ASCII)

Bem suportado por bibliotecas padratildeo de linguagens e outros softwares (Excel Calc Origin Google Docs etc)

Conteacutem Linhas de cabeccedilalho (opcionais mas recomendadas) linhas com qualquer texto geral

descrevendo o arquivo e em geral uma linha de tiacutetulo para as colunas da tabela Uma (apenas uma) tabela onde todas as linhas tecircm o mesmo nuacutemero de colunas

Colunas separadas por viacutergulas (opcionalmente pode ser outro separador) Linhas terminadas por newline (qualquer que seja) Strings delimitados por ldquo ldquo

Ex

NAMECALMPOSFILNAMEECHLPOSDISPPOSTARGNAMEPOSDIRCLASSMJD-OBSITIMECOADDSdec18s00010NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001dec18s00020NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001dec18s00120NIRSPEC-5-AO635800364500itan140NIRSPEC-5-AOp2 TITAN5408763000001dec18s00140NIRSPEC-5-AO626300364500itan140NIRSPEC-5-AOp1 TITAN5408763000001dec18s00151NIRSPEC-5-AO626300364500itan140NIRSPEC-5-AOp1ARC5408764000001dec18s00160NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001

Natildeo eacute necessaacuterio que as colunas tenham largura constante

Cabeccedilalho

5989

Arquivos - texto - CSVHaacute amplo suporte a leitura e gravaccedilatildeo de CSV sem precisar recorrer a procedimentos de baixo niacutevel

Podem ser diretamente importados em Excel Calc Origin Google Docs ou lido facilmente com bibliotecas padratildeo comuns Ex (IDL)

IDLgt c=read_csv(filesearch_scamcsvheader=h)IDLgt printhNAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS

IDLgt helpc Structure ltc8bca508gt 11 tags length=5256 data length=5248 refs=1 FIELD01 STRING Array[41] FIELD02 LONG Array[41] FIELD03 STRING Array[41] FIELD04 DOUBLE Array[41] FIELD05 DOUBLE Array[41] FIELD06 STRING Array[41] FIELD07 STRING Array[41] FIELD08 STRING Array[41] FIELD09 STRING Array[41] FIELD10 DOUBLE Array[41] FIELD11 LONG Array[41]

IDLgt printcfield01[03]dec18s0001 dec18s0002 dec18s0003 dec18s0004

IDLgt printcfield03[03]NIRSPEC-5-AO NIRSPEC-5-AO NIRSPEC-5-AO NIRSPEC-5-AO

6089

Arquivos - texto - CSVEx (IDL) Criaccedilatildeo de um CSV com uma tabela de valores

Criaccedilatildeo de 3 arrays 1D (12 elementos) um para cada coluna

IDLgt x=dindgen(3)IDLgt y=dindgen(4)IDLgt xx=reform(rebin(x34)12)IDLgt yy=reform(rebin(reform(y14)34)12)IDLgt f=xx+yy10IDLgt helpxxyyfXX DOUBLE = Array[12]YY DOUBLE = Array[12]F DOUBLE = Array[12]

Escrita do arquivo

IDLgt write_csvexamplecsvxxyyfheader=[XYX+10Y]

ResultadoXYX+10Y000000000000000000000000100000000000000010000000200000000000000020000000000000001000000010000000100000001000000011000000()

6189

Arquivos - texto - ldquoColunas regularesrdquoFixed column width

Natildeo eacute exatamente um padratildeo Eacute uma praacutetica comum

Armazena uma tabela (array 2D) de forma regular simples de ser interpretada e lida

Costumam ter linha(s) de cabeccedilalho descrevendo o conteuacutedo do arquivo em geral com uma linha para os nomes das colunas

As demais linhas conteacutem os dados sempre ocupando a mesma largura por coluna e escritos no mesmo formato em cada coluna

Costumam ser simples de ler inclusive interativamente (exs Excel Calc Origin read_ascii)

Ex (IDL) Uma simples tabela soacute de nuacutemeros

wavl CH4=33 wavl CH4=25 wavl CH4=10 wavl CH4=08 wavl CH4=05 wavl CH4=026 wavl CH4=02 477330000 0090130 477330000 0091110 477330000 0089250 477330000 0087000 477330000 0087140 477330000 0090080 477330000 0088110 480040000 0090930 480040000 0091930 480040000 0090160 480040000 0087930 480040000 0088110 480040000 0090950 480040000 0089090 482750000 0091710 482750000 0092730 482750000 0091060 482750000 0088850 482750000 0089080 482750000 0091810 482750000 0090060 485450000 0092530 485450000 0093570 485450000 0092000 485450000 0089810 485450000 0090100 485450000 0092730 485450000 0091090

IDLgt a=read_ascii(specs_27s_ntxtdata_start=1header=header)IDLgt printheader wavl CH4=33 wavl CH4=25 wavl CH4=10 wavl CH4=08 wavl CH4=05 wavl CH4=026 wavl CH4=02 IDLgt helpa Structure ltd423c9a8gt 1 tags length=224 data length=224 refs=1 FIELD01 FLOAT Array[14 4]

6289

Arquivos - texto - ldquoColunas regularesrdquoJaacute um arquivo um pouco mais difiacutecil de ler

NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS dec18s0001 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0002 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0003 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 FLAT 5408757812500 460000 5 dec18s0004 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 DARK 5408757812500 460000 5

Por ter colunas de tipos diferentes (strings inteiros reais) natildeo eacute possiacutevel o ler em um simples array Mas eacute faacutecil o colocar em uma estrutura de arrays onde cada campo eacute uma coluna

Especificando interativamente como interpretar as linhasIDLgt templ=ascii_template(filesearch_scamtxt)

Nome do campo (default mostrado)

Tipo do campo (identificado automaticamente)

Posiccedilatildeo (caracter) do comeccedilo (identificada automaticamente)

Linha de exemplo para verificar as colunas

6389

Arquivos - texto - ldquoColunas regularesrdquoDepois de feito o template o arquivo pode ser lido com apenas

IDLgt a=read_ascii(filesearch_scamtxttemplate=templ)IDLgt helpa Structure ltd4ec4608gt 11 tags length=416 data length=416 refs=1 FIELD01 STRING Array[4] FIELD02 LONG Array[4] FIELD03 STRING Array[4] FIELD04 FLOAT Array[4] FIELD05 FLOAT Array[4] FIELD06 STRING Array[4] FIELD07 STRING Array[4] FIELD08 STRING Array[4] FIELD09 FLOAT Array[4] FIELD10 FLOAT Array[4] FIELD11 LONG Array[4]IDLgt printafield01dec18s0001 dec18s0002 dec18s0003 dec18s0004IDLgt printafield04 626300 626300 626300 626300

O template (uma estrutura contendo dados sobre como ler o arquivo) pode ser usado para outros arquivos no mesmo formato No lugar de ter sido criado interativamente poderia ter sido lido de algum arquivo Poderia ter especificado nomes para os campos que seriam mais amigaacuteveis que coias como FIELD11

6489

Arquivos - texto - XML

Extensible Markup Language

Admite grande flexibilidade e por isso pode ter alta complexidade

Valores satildeo colocados dentro de uma estrutura em hieraacuterquica (em uma aacutervore) com os noacutes identificados pelos seus nomes (chaves)

Largamente usado em muitas aacutereas para armazenar conjuntos arbitraacuterios de quaisquer estruturas de dados

A maioria das aplicaccedilotildees usa um formato que eacute um subconjunto do XML especificado por um Schema comumente em um arquivo XML DTD (Document Type Definition)

6589

Arquivos - texto ndash XML ndash exemplos de usos

Armazenamento de dados de aplicaccedilotildees web (comum para exportar importar dados MediaWiki DokuWiki WordPress ADS Lattes etc)

Documentos Office (docx pptx xlsx) OpenOffice (odt opd ods)

Como versotildees de outros formatos FITSML XDF

ldquoScientific Dataset XML NASAs Astronomical Data Center (ADC) sponsors a number of research projects that

use XML for scientific data representation The XML activities at the ADC are sponsored and supported by the NASA Office of Space Science Applied Information Systems Research Program (AISRP)rdquo - httpxmlcoverpagesorgnasa-adchtml

Astronomical Instrument Markup Language (AIML)

SVG ndash Scalable Vector Graphics

Muitas de outras aplicaccedilotildees listadas em httpxmlcoverpagesorgxmlhtmlapplications

6689

Arquivos - texto ndash XML - exemploltxml version=10 gtltDOCTYPE Xdmf SYSTEM Xdmfdtd []gtltXdmf xmlnsxi=httpwwww3org2001XInclude Version=20gt ltDomaingt lt-- Example of Basic Topologies --gt ltInformation Name=Descriptiongt Example of a Polyvertex Topology ltInformationgt ltGrid Name=Polyvertex GridType=Uniformgt ltTopology TopologyType=Polyvertex Dimensions=3 NodesPerElement=3gt ltDataItem Format=XML Dimensions=3 3 NumberType=Floatgt 0 1 2 4 5 6 8 9 10 ltDataItemgt ltTopologygt ltGeometry Type=XYZgt ltDataItem Format=XML Dimensions=4 4 3gt 00 00 00 10 00 00()Que mostra que a interpretaccedilatildeo (parsing) de XML eacute em geral complexa

6789

Arquivos - texto - XML

Haacute muitas bibliotecas de alto niacutevel para fazer o processamento (parsing) e entregar os dados em uma estrutura conveniente

A complexidade em processar XML estaacute em decidir o que fazer com os dados jaacute que os arquivos podem ser muito complexos

As APIs (Application Programming Interfaces) mais comuns para processar XML que satildeo implementadas em muitas linguagens

DOM (Document Object Model) ndash manteacutem todo o conteuacutedo do em uma estrutura de dados (em geral uma aacutervore) em uma variaacutevel (em geral um objeto) Esta pode ser consultada para obter os valores de interesse para os alterar e usada para escrever um arquivo

SAX (Simple API for XML) ndash Interpretador (parser) por objetos O usuaacuterio escreve uma classe herdando da classe SAX provendo os meacutetodos que vatildeo processar os campos agrave medida em que estes satildeo lidos

6889

Arquivos - binaacuterios - FITSFlexible Image Transport System

O formato mais comum para observaccedilotildees astronocircmicas Tambeacutem usado para armazenar quaisquer dados mesmo natildeo relacionados a observaccedilotildees (especialmente tabelas como eacute praacutetica do STSCI)

Conteacutem um (ou mais) cabeccedilalho(s) de texto com metadados (informaccedilotildees sobre os dados como caracteriacutesticas (necessaacuterias para os ler) origem condiccedilotildees em que foram obtidos processamento realizado etc)

SIMPLE = T image conforms to FITS standard BITPIX = 32 bits per data value NAXIS = 2 number of axes NAXIS1 = 1024 NAXIS2 = 1024 BSCALE = 100000 Scaling factor BZERO = 000000 Scaling zero-point TELESCOP= Keck II Telescope SLITNAME= 0041x226 Slit Name SLITPA = 351979 Slit position angle SLITX = 131500 X pixel of the center of the slit LST = 12010446 local apparent sidereal time (()

Depois do cabeccedilalho haacute uma (ou mais) seccedilatildeo(otildees) de dados binaacuterios Costuma(m) ser array(s) 1D (espectros) 2D (imagens) ou 3D (ldquocubos de dadosrdquo)

De inteiros ou reais inteiros satildeo comuns em contagens de instrumentos reais para valores derivados (fluxos intensidades etc)

6989

Arquivos - binaacuterios - FITSNormalmente FITS satildeo lidos escritos por bibliotecas prontas de (relativamente) alto niacutevel usuaacuterio natildeo tem que saber como os dados satildeo armazenados no arquivo nem como os ler escrever Ex (IDL com a biblioteca idlastro)

IDLgt fits_info2dspectrumfits2dspectrumfits has 3 extensionsPrimary header 288 recordsNo dataExtension 1 -- SCI Header 144 records IMAGE ( 1201 1201 )Extension 2 -- ERR Header 72 records IMAGE ( 1201 1201 )Extension 3 -- DQ Header 72 records IMAGE ( 1201 1201 )

IDLgt mydata=readfits(2dspectrumfitsexten_no=1myheader) READFITS Reading FITS extension of type IMAGE READFITS Now reading 1201 by 1201 array

IDLgt extastmyheadermyastIDLgt sz=size(mydatadimensions)IDLgt xy2ad[1sz[0]][1sz[1]]myastcorners_acorners_dIDLgt printcorners_aCorners of the data array from file 2dspectrumfits are at 14487480 33063480

IDLgt printcorners_d -00041264444 00041402222

Obteacutem os dados de coordenadas (WCS) do header

Coloca os dados no array (2D de floats) mydata e o header no array (1D de strings) myheader

Calcula as coordenadas das quinas da imagem atraveacutes do WCS

Provecirc informaccedilotildees sobre o arquivo

7089

Arquivos - binaacuterios - ISIS Cube

Formatos como FITS se adequam muito a ter uma interface de mais alto niacutevel por objetos

Tambeacutem para dados em tabelas FITS muito mais trabalhosos de ler em baixo niacutevel que se adequam muito mais a mapas ou estruturas

Exemplo (de um formato semelhante a FITS ISIS cube)

O objeto ao ser criado lecirc todo o arquivo

cube=pp_editablecube(CM_1553510065_1_ircub)

Meacutetodos fornecem os dados desejados para obter quando necessaacuterio os dados de interesse

Find out the names of the backplanesprintcubegetproperty(backnames)Get the start time of the cubeprintcubegetfromheader(START_TIME)2007-084T100057286Z

Valores no cabeccedilalho podem ser convenientemente fornecidos como um mapa

header=cubeheader_as_hash()printheader[START_TIME]2007-084T100057286Z

7189

Arquivos - binaacuterios ndash ISIS Cube

Os dados satildeo fornecidos como arraysMake a contour plot of the latitudesc=contour(cubegetsuffixbyname(LATITUDE))Get the band with wavelength nearest to 21 (in the units used in the cube)selband=cubegetbandbywavelength(21wavelengths=selwavs)

Interfaces por overload tornam o acesso ainda mais conveniente

selband=cube[21]

selwavs=cube[21]

Retorna um array com a banda de comprimento de onda mais proacuteximo de 21 (microm)

Retorna o comprimento de onda mais proacuteximo de 21 (microm) da banda retornada acima

7289

Arquivos - binaacuterios ndash ISIS Cube Alteraccedilotildees feitas ao conteuacutedo satildeo automaticamente refletidas em todos os

lugares (cabeccedilalho em particular) afetados mantendo o objeto vaacutelido que pode depois ser gravado em um novo arquivo

IDLgt printcubelinescubesamplescubebands 64 64 256

IDLgt helpcubecoreltExpressiongt FLOAT = Array[64 64 256]

IDLgt cubecore=dblarr(100100256)

A linha acima natildeo eacute uma atribuiccedilatildeo eacute uma invocaccedilatildeo de meacutetodo Eacute equivalente acubesetpropertycore=dblarr(100100256)

Eacute o trabalho da funccedilatildeo setproperty decidir se a propriedade passada (core) faz sentido e se fizer fazer todo o trabalho necessaacuterio a esta mudanccedila Para o usuaacuterio eacute tudo automaacutetico e os dados da classe satildeo vaacutelidos o tempo todo

IDLgt helpcubecoreltExpressiongt DOUBLE = Array[100 100 256]

IDLgt printcubelinescubesamplescubebands 100 100 256

IDLgt cubesaveCM_1553510065_1_ir_editedcub

7389

Arquivos - binaacuterios ndash NetCDF e HDF5

Network Common Data Form e Hierarchical Data Format

Os dois uacutenicos formatos bem estabelecidos para dados cientiacuteficos geneacutericos

Armazenam dados como vaacuterias variaacuteveis e seus metadados Para cada variaacutevel haacute (ou pode haver) os metadados

Nome Dimensotildees (do array) Unidades Comentaacuterios

Ambos permitem arrays multidimensionais

Apenas HDF5 permite estruturas (daiacute vem a hierarquia)

Autodocumentados qualquer software que saiba ler um destes formatos lecirc qualquer arquivo sem precisar de conhecimento preacutevio sobre como o arquivo foi gerado

Muito bem suportados em bibliotecas padratildeo e natildeo padratildeo em softwares interativos e visualizadores (inclusive plugins para navegadores)

httpwwwunidataucaredusoftwarenetcdf httpenwikipediaorgwikiHdf5

NetCDF eacute mais simples de usar por natildeo ter hierarquia dando menos trabalho para ler e escrever dados Se hierarquia natildeo eacute necessaacuteria eacute mais conveniente de usar que HDF5

7489

Arquivos - binaacuterios - NetCDF e HDF5Haacute tambeacutem o formato CDL uma versatildeo ASCII do NetCDF A biblioteca padratildeo do NetCDF inclui conversores entre estes formatos

$ ncdump -h refspec_g01_0ncnetcdf refspec_g01_0 dimensions nlay = 51 nwn = 400 nleg = 33 numu = 2 nlev = 52 nphi = 3 ngas = 2 nwnc = 1 scal = 1 v3 = 3 dnl = 1 nk = 1 tdisr = UNLIMITED (0 currently) na = 16

variables float alb(nwn) float z(nlay) float t(nlay) float p(nlay) float wl(nwn) float iof(nwn) float mtau(nwn) float htau(nwn) float hctaus(nwn) float gtau(nwn) float outcos(scal) float phi(nleg) float phic(scal) float umu(numu) float flux(v3 nwn nlev) float mix(nlay ngas) float c(nlay) float psat(nlay) float ga(nwnc) float wlc(nwnc) float inc(scal) int dm(scal) int ord(scal) float fbeam(scal) float wn(nwn) float tautot(nwn nlay) float htaus(nwn nlay) float htaux(nwn nlay) float taug(nwn nlay) float phase(nwn nlay nleg) float ssa(nwn nlay) float uu(nwn nphi nlev numu) float u0u(nwn nlev numu) float tray(nwn nlay) float gtauo(tdisr nwn nlay)

Haacute 14 variaacuteveis usadas como dimensotildees para as 35 variaacuteveis que satildeo arrays

Ex alb(nwn) indica que alb eacute um array 1D de nwn elementos

nwn estaacute armazenado como uma das dimensotildees e eacute 400 portanto alb tem 400 elementos

Parte do conteuacutedo de um arquivo NetCDF em formato CDL (gerado pelo programa ncdump)

7589

Arquivos - binaacuterios - NetCDF e HDF5Conteuacutedo daquele arquivo visualizado com o ncview (acompanha a biblioteca NetCDF padratildeo)

7689

Arquivos - binaacuterios - NetCDF e HDF5O conteuacutedo de todo o arquivo pode ser lido facilmente com as bibliotecas disponiacuteveis e armazenado em contecirciners convenientes Usando um objeto que gera um resultado um pouco mais conveniente

IDLgt h=pp_readncdf(refspec_g01_0nchash)IDLgt printhvar_dims ltObjHeapVar229(HASH)gtvars ltObjHeapVar152(HASH)gtdims ltObjHeapVar118(HASH)gt

IDLgt printh[vars]T 173203 175459 175848 176001 175975 Z 431869 418858 406067 393403 380464 FLUX 300660 145536 0705180 0341669 0165532 PHASE 100000 0779034 0660858 0542052 0449983 TAUTOT0694377 0693420 0693474 0693540 0693636()

IDLgt help(h[vars])[TAUTOT]ltExpressiongt FLOAT = Array[51 400]

IDLgt print(h[var_dims])[TAUTOT]NLAY NWN

IDLgt print(h[dims])[(h[var_dims])[TAUTOT]]NLAY 51NWN 400

7789

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5)

Visualizaccedilatildeo da variaacutevel selecionada

Metadados e alguns valores da variaacutevel selecionada

Variaacutevel a ser criada com o conteuacutedo desta variaacutevel do arquivo

Hierarquia das variaacuteveis do arquivo

7889

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5) Imported variable az

IDLgt helpaz Structure ltd5723f38gt 13 tags length=448 data length=444 refs=1 _NAME STRING az _ICONTYPE STRING binary _TYPE STRING DATASET _FILE STRING INTENSI_test_409OUTh5 _PATH STRING _DATA DOUBLE Array[38] _NDIMENSIONS LONG 1 _DIMENSIONS ULONG64 Array[1] _NELEMENTS ULONG64 38 _DATATYPE STRING H5T_FLOAT _STORAGESIZE ULONG 8 _PRECISION LONG 64 _SIGN STRING

IDLgt printaz_data 00000000 10000000 20000000 30000000 40000000 50000000 60000000 80000000 ()

7989

Arquivos - binaacuterios - imagens

JPEG JPEG200 TIFF GeoTIFF etc

Os formatos comuns de imagens satildeo bem suportados em muacuteltiplas plataformas para uso dentro de programas e interativamente

Alguns formatos tecircm opccedilatildeo de compressatildeo com perda eou sem perda

Armazenam imagens como arrays 2D ou 3D (3D frequumlentemente limitado a 3 ou 4 em uma das dimensotildees uma imagem em 3 ou 4 bandas) de inteiros ou (em alguns formatos) reais

Alguns formatos permitem armazenar metadados para caracterizar as imagens armazenadas

JPEG2000 e GeoTIFF (um subconjunto de TIFF) comuns em astronomia e aacutereas proacuteximas

8089

Arquivos - binaacuterios ndash imagens ndash exemplo (IDL)IDLgt printquery_tiff(issmap_2009tiffinfogeotiff=geo) 1

IDLgt helpinfo Structure ltd4eca4b8gt 18 tags length=144 data length=132 refs=1 CHANNELS LONG 4 DIMENSIONS LONG Array[2] IMAGE_INDEX LONG 0 NUM_IMAGES LONG 1 PIXEL_TYPE INT 1 TYPE STRING TIFF BITS_PER_SAMPLE LONG 8 POSITION FLOAT Array[2] RESOLUTION FLOAT Array[2] UNITS LONG 2 TILE_SIZE LONG Array[2] DESCRIPTION STRING ISS (2009) DATE_TIME STRING 20100218 012436()

IDLgt helpgeo Structure ltd4efa1b8gt 10 tags length=264 data length=262 refs=1 MODELPIXELSCALETAG DOUBLE Array[3] MODELTIEPOINTTAG DOUBLE Array[6 4] GEOGRAPHICTYPEGEOKEY INT 4035 GEOGSEMIMAJORAXISGEOKEY DOUBLE 25750000 GEOGSEMIMINORAXISGEOKEY DOUBLE 25750000()

IDLgt myimage=read_tiff(issmap_2009tiff) Lecirc a imagem para o array myimage

Obteacutem informaccedilotildees sobre o arquivo

8189

Arquivos - binaacuterios ndash formatos nativosLinguagens como IDL R Python Java tecircm seu formato nativo binaacuterio acessado em alto niacutevel Basta mandar salvar ler variaacuteveis no do arquivo a biblioteca padratildeo automagicamente faz todo o trabalho de decidir como gravar ler os dados

Conveniente de usar na proacutepria linguagem Mas raramente existem bibliotecas para ler gravar o formato nativo de uma linguagem a partir de outra Ex (IDL)

IDLgt savefile=2dspectrumsavmydatamyheadercorners_dcorners_averbosecompress SAVE Portable (XDR) compressed SAVERESTORE file SAVE Saved variable MYDATA SAVE Saved variable MYHEADER()

Pode ser lido com apenas (haacute formas mais elaboradas)

IDLgt restore2dspectrumsavverbose RESTORE Portable (XDR) compressed SAVERESTORE file RESTORE Save file written by ltunknowngtltunknowngt Thu Jan 27 191422 2011 RESTORE IDL version 801 (linux x86_64) RESTORE Restored variable MYDATA RESTORE Restored variable MYHEADER()

IDLgt helpmydatamyheadercorners_dcorners_aMYDATA FLOAT = Array[1201 1201]MYHEADER STRING = Array[144]()

8289

Arquivos - processamento em baixo niacutevel

Nem sempre um formato padratildeo eacute a melhor escolha para o problema

Nem sempre haacute escolha (pode-se ter que trabalhar com arquivos que jaacute foram escritos em algum formato proprietaacuterio)

Agraves vezes o formato eacute padratildeo mas natildeo haacute bom suporte a ele disponiacutevel

Em todos estes casos eacute necessaacuterio escrever rotinas em baixo niacutevel que vatildeo ler processar diretamente o conteuacutedo do arquivo

Preferencialmente criando interfaces de alto niacutevel para o programa que vai as usar

8389

Arquivos - processamento em baixo niacutevel - texto

Tomando o exemplo anterior onde as colunas eram de diferentes tipos

NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS dec18s0001 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0002 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0003 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 FLAT 5408757812500 460000 5 dec18s0004 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 DARK 5408757812500 460000 5

A forma mais simples de o ler diretamente eacute definir uma estrutura para receber cada linha e um array destas estruturas para receber todo o arquivo Ex (IDL)

IDLgt record=namecalmpos0filnameechlpos0d0disppos0d0targnameposdirclassmjd_obsitime0d0coadds0IDLgt nlines=file_lines(filesearch_scamtxt)IDLgt mydata=replicate(recordnlines-1)IDLgt header=

Depois de definidas as variaacuteveis que vatildeo receber os dados o arquivo pode ser lido

IDLgt openrunitfilesearch_scamtxtget_lunIDLgt readfunitheaderIDLgt readfunitmydataformat=(A14I8A15F104F104A18A19A15F158F105I15)IDLgt free_lununit

A gravaccedilatildeo de um arquivo texto poderia ser feita de forma semelhante apenas trocando openr por openw (abrir o arquivo para gravaccedilatildeo natildeo leitura) e readf por printf

O arquivo eacute aberto em uma unidade (unit) usada para especificar de onde eacute feita a leitura

Ao final o arquivo eacute fechado

8489

Arquivos - processamento em baixo niacutevel - texto

O que resulta em

IDLgt printheader NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS

IDLgt helpmydataMYDATA STRUCT = -gt ltAnonymousgt Array[4]

IDLgt helpmydata[0] Structure ltd5e38f68gt 11 tags length=136 data length=124 refs=3 NAME STRING dec18s0001 CALMPOS INT 0 FILNAME STRING NIRSPEC-5-AO ECHLPOS DOUBLE 62630000 DISPPOS DOUBLE 36450000 TARGNAME STRING HD85258 POSDIR STRING NIRSPEC-5-AOp1 CLASS STRING STAR MJD_OBS STRING 54087574 ITIME DOUBLE 10000000 COADDS INT 1

Este caso eacute mais complicado que os mais comuns por haver colunas de strings

Se todas fossem de nuacutemeros natildeo teria sido necessaacuterio especificar o formato explicitamente As colunas teriam sido adivinhadas pela biblioteca que lecirc o arquivo Poderia ter sido lido escrito soacute com um array de nuacutemeros sem estruturas

8589

Arquivos - processamento em baixo niacutevel - binaacuterio

Formatos binaacuterios podem ser definidos de qualquer forma O arquivo eacute apenas um conjunto de bytes Cabe ao software saber como os interpretar

Uma escolha comum para que sejam autodocumentados eacute incluir um cabeccedilalho de texto informando as caracteriacutesticas dos dados necessaacuterias para os ler

Ex (IDL) criar um arquivo que armazene um array de doubles com um cabeccedilalho informando as dimensotildees para que o programa que o lecirc saiba como ler os dados

Inventa dados e abre o arquivo

IDLgt data_to_write=dindgen(34)IDLgt openwunitbinary_exampledatget_lun

Escreve as dimensotildees como texto

IDLgt printfunitdimensions of the double array stored belowIDLgt printfunitsize(data_to_writedimensions)

Escreve os dados binaacuterios

IDLgt writeuunitdata_to_write

Fecha o arquivo

IDLgt free_lununit

Escreve em binaacuterio (write unformatted)

8689

Arquivos - processamento em baixo niacutevel - binaacuterio

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

dimensions of the double array stored below 3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

8789

Arquivos - processamento em baixo niacutevel - binaacuterioA leitura deste arquivo eacute igualmente simples

IDLgt header=IDLgt dims=[00]IDLgt openrunitbinary_exampledatget_lun

Lecirc as dimensotildees (armazenadas como texto)

IDLgt readfunitheaderIDLgt readfunitdims

Lecirc a parte binaacuteria depois de saber as dimensotildees

IDLgt data_read=dblarr(dims)IDLgt readuunitdata_read

Fecha o arquivo

IDLgt free_lununit

Verifica que os dados foram gravados e lidos corretamente

IDLgt printarray_equal(data_to_writedata_read) 1

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Lecirc dados binaacuterios (read unformatted)

8889

Sumaacuterio

5 ndash Slides em httpwwwppenteadonetpeapea04_strings_iopdf Strings Expressotildees regulares Arquivos

httpwwwppenteadonetpea

8989

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89

Strings - codificaccedilotildees - Unicode

Haacute duas partes no Unicode o cataacutelogo (uacutenico) e as codificaccedilotildees (vaacuterias)

O cataacutelogo eacute definido independente de codificaccedilotildees Pode ser visto como um mapa onde os pontos de coacutedigo (codepoints) satildeo as

chaves e os valores satildeo os dados sobre aquele caractere

ldquoIn Unicode the letter A is a platonic ideal Its just floating in heaven A

This platonic A is different than B and different from a but the same as A and A and A

The idea that A in a Times New Roman font is the same character as the A in a Helvetica font but different from a in lower case does not seem very controversial but in some languages just figuring out what a letter is can cause controversy

Is the German letter szlig a real letter or just a fancy way of writing ss If a letters shape changes at the end of the word is that a different letter Hebrew says yes Arabic says no

Anyway the smart people at the Unicode consortium have been figuring this out for the last decade or so accompanied by a great deal of highly political debate and you dont have to worry about it Theyve figured it all out alreadyrdquo

de The absolute minimum every software developer absolutely positevely must know about Unicode and character sets (no excuses)

httpwwwjoelonsoftwarecomarticlesUnicodehtml

1189

Strings - codificaccedilotildees - UnicodeOs dados sobre um caractere Unicode satildeo importantes para suas buscas e identificaccedilatildeoIncluem nome e propriedades visiacutevel (printable) numeacuterico alfanumeacuterico maiuacutesculo minuacutesculo ldquoespaccedilordquo (blank) liacutengua matemaacutetico etc

ExsUnicode Character LATIN CAPITAL LETTER A (U+0041)Name LATIN CAPITAL LETTER ABlock Basic LatinCategory Letter Uppercase [Lu]Combine 0BIDI Left-to-Right [L]Mirror NIndex entries Latin Uppercase Alphabet Uppercase Alphabet Latin

Capital Letters LatinLower case U+0061Version Unicode 110 (June 1993)

Unicode Character INTEGRAL (U+222B)Name INTEGRALBlock Mathematical OperatorsCategory Symbol Math [Sm]Combine 0BIDI Other Neutrals [ON]Mirror YIndex entries Integral Signs INTEGRALSee Also latin small letter esh U+0283Version Unicode 110 (June 1993)

(resultados de httpwwwfileformatinfoinfounicodecharsearchhtm)

int

A

1289

Strings - codificaccedilotildees - Unicode

Unicode Character ANGSTROM SIGN (U+212B)Name ANGSTROM SIGNBlock Letterlike SymbolsCategory Letter Uppercase [Lu]Combine 0BIDI Left-to-Right [L]Decomposition LATIN CAPITAL LETTER A WITH RING ABOVE (U+00C5)Mirror NOld name ANGSTROM UNITIndex entries ANGSTROM SIGNLower case U+00E5Comments non SI length unit (=01 nm) named after A J ngstroumlm Å

Swedish physicist preferred representation is U+00C5Version Unicode 110 (June 1993)

Unicode Character GREEK SMALL LETTER ZETA (U+03B6)Name GREEK SMALL LETTER ZETABlock Greek and CopticCategory Letter Lowercase [Ll]Combine 0BIDI Left-to-Right [L]Mirror NUpper case U+0396Title case U+0396Version Unicode 110 (June 1993)

(resultados de httpwwwfileformatinfoinfounicodecharsearchhtm)

ζ

1389

Strings - codificaccedilotildees - UnicodeUnicode Character NABLA (U+2207)Name NABLABlock Mathematical OperatorsCategory Symbol Math [Sm]Combine 0BIDI Other Neutrals [ON]Mirror NIndex entries difference backward backward difference del NABLAComments backward difference gradient del used for Laplacian

operator (written with superscript 2)See Also white down-pointing triangle U+25BDVersion Unicode 110 (June 1993)

Java DatastringtoUpperCase() nablastringtoLowerCase() nablaCharacterUnicodeBlock MATHEMATICAL_OPERATORSCharactercharCount() 1CharactergetDirectionality() DIRECTIONALITY_OTHER_NEUTRALS [13]CharactergetNumericValue() -1CharactergetType() 25CharacterisDefined() YesCharacterisDigit() NoCharacterisIdentifierIgnorable() NoCharacterisLetter() NoCharacterisLetterOrDigit() NoCharacterisLowerCase() NoCharacterisWhitespace() No()

(resultados de httpwwwfileformatinfoinfounicodecharsearchhtm)

nabla

1489

Strings ndash Como codificar Unicode

Haacute vaacuterias formas Nenhuma simples como ASCII porque eacute necessaacuterio um nuacutemero muito maior de pontos de coacutedigo (haacute espaccedilo para 1 114 112 hoje haacute 109 449 alocados)

Apenas usar mais bytes com um nuacutemero constante por caractere exigiria pelo menos 21 bits por caractere (221 eacute 2 097 152)

Seria demais considerando que quase todos os caracteres escritos estatildeo entre os 128 do ASCII

Em quase todo texto 20 de cada 21 bits seriam 0

A maior parte das codificaccedilotildees usa formas mais elaboradas com um nuacutemero variaacutevel de bytes por caractere

Todas as codificaccedilotildees de uso comum tem o ASCII como subconjunto os 128 caracteres do ASCII satildeo codificados em forma idecircntica em ASCII e nas codificaccedilotildees usuais de Unicode

O que ajuda na compatibilidade software Unicode escrevendo texto que soacute conteacutem caracteres do ASCII produz texto idecircntico ao que seria produzido em ASCII

1589

Strings - codificaccedilotildees para Unicode

No mundo ocidental haacute apenas duas codificaccedilotildees de uso comum

UTF-8

ISO 8859-1 (tambeacutem chamado de Latin 1)

Por isso eacute necessaacuterio saber que codificaccedilatildeo usar ao trabalhar com Unicode

Alguns softwares formatos de arquivo informam a codificaccedilatildeo usada

Outros assumem que uma eacute usada (sem ter sido informada)

Outros tentam adivinhar quando natildeo satildeo informados qual eacute (esp navegadores)

Outros soacute perguntam para o usuaacuterio (esp editores de texto)

Sistemas operacionais oferecem variadas formas de digitar caracteres especiais

Pelos coacutedigos numeacutericos

Por programas seletores de caracteres Alguns seletores de caracteres (ex kcharselect do KDE) permitem fazer buscas pelo

nome ou propriedades

1689

Strings - Onde haacute suporte a Unicode em programaccedilatildeo

Linguagens variam muito

Desconhecem Unicode (soacute usam ASCII) C Fortran

Usam nativamente ASCII (inclusive no coacutedigo-fonte) mas tecircm tipos para strings Unicode e ou funccedilotildees para processar Unicode (em variados graus) C C++ IDL R

Usam nativamente Unicode (inclusive no coacutedigo-fonte) e tecircm bom suporte a strings Unicode Java Python Perl

Muitas vezes (mesmo quando Unicode pode ser usado em coacutedigo-fonte) caracteres Unicode satildeo escritos atraveacutes de ASCII com coacutedigos de escape para coacutedigos Unicode Exs

IDLgt p=plot(testtitle=Z(00C5222B))

C C++ Java Python u2207

ReferecircnciasCharacters vs byteshttpwwwtbrayorgongoingWhen200x20030426UTFThe absolute minimum every software developer absolutely positively must know about Unicode and character sets (no excuses)httpwwwjoelonsoftwarecomarticlesUnicodehtmlUnicode character searchhttpwwwfileformatinfoinfounicodecharsearchhtm

em IDL produz intÅ

produz nabla

1789

Strings - processamento baacutesico

Operaccedilotildees mais fundamentais que costumam ser suportadas em ldquotodasrdquo as linguagens bibliotecas padratildeo (exemplos usando sintaxe de IDL)

Atribuiccedilatildeo de literais

IDLgt a=some

IDLgt helpaA STRING = some

IDLgt printasome

Concatenaccedilatildeo

IDLgt b=a+ string

IDLgt helpbB STRING = some string

1889

Strings - processamento baacutesico

Valor loacutegico

String vazio (null string) eacute falso o resto eacute verdadeiro

IDLgt c=

IDLgt if c then printc is not empty string else printc is null string ()c is null string ()

IDLgt c=a

IDLgt if c then printc is not empty string else printc is null string ()c is not empty string

Espaccedilo natildeo eacute o mesmo que string vazio

IDLgt c=

IDLgt if c then printc is not empty string else printc is null string ()c is not empty string

1989

Strings - processamento baacutesico Comparaccedilotildees

IDLgt helpabA STRING = someB STRING = some string

IDLgt printb eq a 0

IDLgt printb gt a 1

IDLgt c=[ab9Some somesome other string]

IDLgt printc[sort(c)]format=(A) some9Somesomesome other stringsome string

IDLgt printa eq A 0

IDLgt printstrcmp(aAfold_case) 1

Comparaccedilotildees de ldquotamanhordquo (maior menor etc) satildeo comparaccedilotildees pela ordem de codificaccedilatildeo (ldquoalfabeacuteticardquo)

Algumas linguagens permitem definir o ordenamento (como considerar maiuacutesculasminuacuteculas letras com acentos nuacutemeros e siacutembolos) Exs Python C++ Java Perl

2089

Strings - processamento baacutesico Substrings

IDLgt printstrmid(abcdefg32)de

Algumas linguagens nativamente suportam iacutendices para indicar substrings C C++ Fortran Python Ex (Python)

gtgtgt s=abcdegtgtgt print(s[25])cde

Outras permitem que sejam definidos iacutendices por objetos strings

Busca de caracteres ou substrings

IDLgt printstrpos(abcdefgd) 3

IDLgt printstrpos(abcdefgj) -1

IDLgt printstrpos(abcdefgbc) 1

2189

Strings - processamento baacutesico

Outros

IDLgt printstrlen(1234567) 7

IDLgt printstrlen(1234567 ) 8

IDLgt printstrlen( 1234567 ) 9

IDLgt helpstrtrim( 1234567 2)ltExpressiongt STRING = 1234567

IDLgt helpstrtrim( 1234567 1)ltExpressiongt STRING = 1234567

IDLgt helpstrtrim( 1234567 0)ltExpressiongt STRING = 1234567

IDLgt printstrupcase(abcdEF)ABCDEF

IDLgt printstrlowcase(abcdEF)abcdef

Medindo quantos caracteres tem o string inclui espaccedilos em branco

Remoccedilatildeo dos brancos agrave esquerda agrave direita ou dos dois lados

2289

Strings - conversatildeo de outros tipos para strings

Eacute uma das operaccedilotildees mais comuns para gerar textos informativos e nomes escrever arquivos (aquivos texto discutidos adiante) etc

Eacute natildeo trivial jaacute que a conversatildeo pode ser feita de muitas formas diferentes

Para tipos fundamentais sempre haacute uma conversatildeo default tanto criando um string como usando algo tipo print (para strings terminal ou arquivos)

Todo comando tipo print (print printf sprintf string write etc) e toda escrita para arquivos texto eacute uma conversatildeo para string (terminais e arquivos texto soacute conteacutem strings)

2389

Strings - conversatildeo de outros tipos para strings

Exemplos de conversotildees (IDL)

IDLgt print[-109] -1 0 9

IDLgt print1d01B10 10000000 1 100000

IDLgt helpstring(1d01B10)ltExpressiongt STRING = 10000000 1 100000

IDLgt printfunitdblarr(343)

Tipos mais elaborados podem ou natildeo ter uma forma predefinida Com objetos eacute comum ser possiacutevel definir a conversatildeo (stringification) ao criar a classe

IDLgt h=hash(a109[01]18b)

IDLgt printh9 0 1a 100000180000 b

Strings

Coloca strings em um arquivo (adiante)

Strings criados por um meacutetodo da classe hash satildeo uma forma de representar o hash

2489

Strings - conversatildeo de outros tipos para strings

Algumas linguagens (Python IDL) tecircm mais de uma forma default de gerar strings Em Python uma forma eacute executaacutevel a outra eacute mais legiacutevel

In [30] x=arange(12)reshape(43)

In [31] print(x)[[ 0 1 2] [ 3 4 5] [ 6 7 8] [ 9 10 11]]

In [32] xOut[32]array([[ 0 1 2] [ 3 4 5] [ 6 7 8] [ 9 10 11]])

In [33] y=array([[ 0 1 2] [ 3 4 5] [ 6 7 8] [ 9 10 11]])

In [37] print(array_equal(xy))True

String mais legiacutevel

String executaacutevelPode ser usado para criar um objeto equivalente

2589

Strings ndash formataccedilatildeo expliacutecita

A formataccedilatildeo pode ser especificada se a conversatildeo default natildeo eacute adequada para definir a conversatildeo em um novo tipo

Cada linguagem tem sua sintaxe para formataccedilatildeo

Haacute dois estilos semelhantes em vaacuterias linguagens

Ambos os estilos satildeo sintaxes diferentes para a mesma ideacuteia Um coacutedigo especifica o tipo de dado sendo passado (inteiro real etc) e detalhes de como seraacute feito o string (largura do campo diacutegitos decimais alinhamento etc)

2689

Strings ndash formataccedilatildeo expliacutecita

Estilo Fortran

IDL

IDLgt print1d0+1d-9 10000000

IDLgt print1d0+1d-9format=(E1610)10000000010E+00

IDLgt printx=1d0+1d-9format=(A0F1613)X= 10000000010000

Estilo C (ldquoprintfrdquo)

IDL

IDLgt printformat=(x=1610e)1d0+1d-9x=10000000010e+00

Python

In [20] print(x=1610e (1e0+1e-9))x=10000000010e+00

Nenhum formato expliacutecito (default)

2789

Strings - formatos tipo Fortran

(apenas o principal ver documentaccedilatildeo para detalhes)

Ex (IDL)

IDLgt printx=1d0+1d-9format=(A0F1613)X= 10000000010000

Tambeacutem haacute modificadores para especificar alinhamento (-) se deve haver (ou ser suprimido) avanccedilo para a pŕoxima linha posiccedilatildeo dentro do campo etc

Coacutedigo Significado Exemplo(s)

A String (A) (10A)

I Inteiro decimal (I) (10I)(-2I)

B Inteiro binaacuterio (B) (10B)

Z Inteiro hexadecimal (Z) (10Z)

O Inteiro octal (O) (10O)

F Real ponto fixo (F)(F52)

E D Real ponto flutuante (E)(D1610)

G Real ponto fixo ou flutuante de acordo com o valor (G)(G10)

ldquordquo String literal (ldquox=rdquoI10)

X Caracteres em branco (A10XI)

2889

Strings - formatos tipo C (printf)(apenas o principal ver documentaccedilatildeo para detalhes)String com campos a serem substituiacutedos por valores (passados adiante) marcados por coacutedigos com

Ex (Python)In [20] print(x=1610e (1e0+1e-9))x=10000000010e+00

Haacute modificadores para especificar alinhamento como preencher o espaccedilo que sobra (espaccedilos zeros etc) para imprimir o sinal + etc

Coacutedigo Significado (tipo) Exemplo(s)

di Inteiro decimal (int) d 5d +05d

u Inteiro decimal sem sinal (unsigned int) u 7u

fF Real em ponto fixo (double float) f 136f

eE Real em ponto flutuante (double float) e 1610e

gG Real em ponto fixo ou flutuante decidido pelo valor (double float)

g 73G

xX Inteiro sem sinal hexadecimal (unsigned int) x 10X

o Inteiro sem sinal octal (unsigned int) o 5o

s String (string) s 10s

c Caractere (char) c

p Ponteiro - estilo C - (void ) p

literal

2989

Strings - conversatildeo de strings para outros tipos

Para gerar dados a partir de strings datas identificadores pedaccedilos de nomes valores numeacutericos armazenados em strings

Tambeacutem sempre haacute conversotildees default para os tipos baacutesicos onde o intepretador programa faz o possiacutevel para entender o string como um valor daquele tipo

Tipicamente eacute feito por casts (funccedilotildees de conversatildeo) reads (de strings ou arquivos texto (arquivos texto satildeo strings)) construtores de objetos ou implicitamente

3089

Strings - conversatildeo de strings para outros tipos - impliacutecitas

Exs (IDL)

IDLgt helpfix([17 17 171 -17 9 8])ltExpressiongt INT = Array[5]

IDLgt printfix([17 17 171 -17 9 8]) 17 17 17 -17 9

IDLgt printdouble([17 17 171 -17 9 8]) 17000000 17000000 17100000 -17000000 90000000

IDLgt readfunitabcd

IDLgt a=0d0IDLgt b=00IDLgt c=0IDLgt reads171d0 189d0 -9abcIDLgt helpabcA DOUBLE = 17100000B FLOAT = 189000C INT = -9

Converte o conteuacutedo do string para os tipos das variaacuteveis abcd (explicado adiante)

3189

Strings - conversatildeo de strings para outros tipos

Quando o default natildeo eacute suficiente (ou quando escrevendo o conversor em uma classe) costuma ser possiacutevel o fazer com formatos semelhantes aos formatos para gerar strings Exs (IDL)

IDLgt a=0d0IDLgt b=00IDLgt c=0IDLgt reads171d0 something 189d0-9abc READS Input conversion error Unit 0 File ltstdingt Error occurred at $MAIN$ Execution halted at $MAIN$

Natildeo funcionou porque sozinho ele natildeo conseguiu saber o que fazer com o ldquosomethingrdquo Usando um formato especiacutefico

IDLgt reads171d0 something 189d0-9 abcformat=(D6111XD611XI)

IDLgt helpabcA DOUBLE = 17100000B FLOAT = 189000C INT = -9

Exemplos mais complicados adiante (arquivos texto)

Variaacuteveis tecircm que ser definidas para informar para que tipo seraacute feita a conversatildeo default

3289

Strings - processamento natildeo baacutesicoOperaccedilotildees importantes e muito necessaacuterias mas que natildeo satildeo suportadas em todas as linguagens bibliotecas padratildeo

Testes (ex IDL)

IDLgt str=[afitsaFITSafitsaabfitsabcfits]

IDLgt printstrmatch(strfits) 1 0 0 1 1

IDLgt printstrmatch(strfitsfold_case) 1 1 0 1 1

IDLgt printstrmatch(strfitsfold_case) 1 1 1 1 1

IDLgt printstrmatch(strfits) 1 0 0 0 0

IDLgt printstrmatch(strfits) 0 0 0 1 0

3389

Strings - processamento natildeo baacutesico

Operaccedilotildees importantes e muito necessaacuterias mas que natildeo satildeo suportadas em todas as linguagens bibliotecas padratildeo

Separaccedilatildeo de partes (Ex IDL)

IDLgt printstrsplit(2011- 131 -extract)format=(A)2011131

Processamento de nomes de arquivos diretoacuterios (Ex IDL)

IDLgt printfile_dirname(some_directoryanother_directorysome_filetxt)some_directoryanother_directory

IDLgt printfile_basename(some_directoryanother_directorysome_filetxt)some_filetxt

IDLgt printfile_basename(another_directorysome_filetxttxt)+_alteredtxtsome_file_alteredtxt

3489

Strings - processamento natildeo baacutesico

Codificaccedilotildees (Ex Python 3)

gtgtgt s=infinite money infinNeuro sign

gtgtgt print(s)infinite money infineuro

gtgtgt print(ascii(s))infinite money u221eu20ac

gtgtgt print(sencode(utf-8))binfinite money xe2x88x9exe2x82xac

3589

Strings - processamento natildeo baacutesico

Perl eacute a linguagem mais avanccedilada para processamento de strings tem suporte nativo a muitas outras operaccedilotildees a semacircntica da linguagem eacute voltada principalmente para processar strings expressotildees regulares (de vaacuterios tipos) natildeo satildeo strings fazem parte da semacircntica

Ex (sem o objetivo que seja compreensiacutevel apenas para indicar o estilo)

Ler um arquivo contendo campos com nomes separados de valores por ()

temperature 10008name some modelx_dimension 100y_dimension 100z_dimension 50()

Armazenado-o em um mapa O que pode ser feito com apenas

While (ltgt) Loop over input linesPut pre-colon text into $1 post-colon into $2 if (m (S+) (+) ) Use $1 as key $2 as value $file_data$1 = $2

3689

Expressotildees regulares - definiccedilatildeo

Expressotildees regulares (regular expressions regex) satildeo a mais poderosa ferramenta para fazer buscas e separar substrings

Regex satildeo uma linguagem com o uacutenico objetivo de especificar propriedades de strings

Implementadas em graus diferentes em todas as linguagens modernas e modernizadas facilita encontrar uma expressatildeo jaacute pronta pois satildeo quase iguais em qualquer linguagem

Estatildeo na biblioteca padratildeo em IDL Python R Perl

Em C++ e Java em bibliotecas comuns (Boost Jregex)

Para que servem

Uma expressatildeo regular especifica propriedades de strings

O interpretador de expressotildees regulares (regular expression engine) recebe a expressatildeo e o string a analisar e determina se o string corresponde (matches) agrave expressatildeo regular

Em alguns casos o interpretador pode tambeacutem informar que parte(s) do string corresponde(m) a que parte(s) da expressatildeo regular e realizar processamentos com estas partes

3789

Expressotildees regulares ndash exemplos de usos Separar partes de strings

Encontrar linhas em arquivos que tenham nomes valores e comentaacuterios e separar estes pedaccedilos

Escalar com comentaacuterio

SLITPA = 351979 Slit position angle

Array 1D sem comentaacuterio (se extendendo por vaacuterias linhas)

BAND_BIN_CENTER = (03505400358950036629003732200379490 0387900104598)

Escalares em diferentes formatos

Total Mechanical Luminosity 15310E+03resources_usedwalltime=005603

Pedaccedilos de nomes

6063 17836E-20 2456 T FeIX((3Pe)3d(2PE)4p_1Po-3s2_3p6_1Se)

Datas separando ano mecircs dia hora (em vaacuterios formatos diferentes)

DATE-OBS= 2006-12-18 universal date of observationDATE_TIME = 2010-07-19T161032START_TIME = 2006-182T225102850Z

3889

Expressotildees regulares ndash exemplos de usos

Separar partes de strings Separar partes de nomes de arquivos (por significarem algo como identificar o

conteuacutedo)

specdec18s0041fitsscamdec18i0054fits15_7_mts_hmpixselh_mr15sav15_7_mts_hwpixselh_mr15sav16_3_mts_hwpixselb_mr16savreadmodel5l_-1_000010000_10000_r05_030_08196_0100000_005000000_1000eps

Determinar se um string eacute um nuacutemero (inteiro real fixo flutuante)

Encontrar identificadores Exs nomes de cataacutelogos endereccedilos HTTPFTP endereccedilos de email

Separar campos em arquivos sendo lidos onde as linhas natildeo tecircm a mesma formataccedilatildeo algumas linhas com colunas separadas por espaccedilos outras por tabs outras por

siacutembolos ignorando linhas de comentaacuterios e linhas vazias

3989

Expressotildees regulares - usoEx (IDL) encontrar nomes de arquivos com algumas propriedades

IDLgt printfilesformat=(A)CM_1477475933_1_viscubCM_1477476864_1_ircubCM_1477476864_1_irgcubCM_1477476864_1_viscubCM_1477477826_1_ircubCM_1477477826_1_irgcubCM_1477477826_1_viscubmosaic2cub

IDLgt printstregex(files+irgcubboolean) 0 0 1 0 0 1 0 0

A expressatildeo regular eacute +irgcub Especifica uma ou mais ocorrecircncias seguidas (+) de qualquer caractere () seguido de uma ocorrecircncia de irgcub (o ponto vem precedido do caractere de

escape () para ser entendido literalmente como um ponto e natildeo como o seu significado especial (qualquer caractere)

Esta aplicaccedilatildeo do interpretador (stregex) retorna um valor Booleano (verdadeirofalso) para cada elemento do string passado (files) que informa se aquele elemento correspondia agravequela expressatildeo regular

Este eacute um exemplo artificial Seria mais faacutecil ter usado strmatch(filesirgcub)

4089

Expressotildees regulares - uso

Em casos como este tipicamente o resultado de stregex seria usado como filtro para selecionar apenas os elementos do array de strings que satisfazem agravequela expressatildeo regular

IDLgt w=where(stregex(files+irgcubboolean)null)IDLgt printfiles[w]format=(A)CM_1477476864_1_irgcubCM_1477477826_1_irgcub

Ex (IDL) Determinar que strings conteacutem uma data no formato yyyy-mm-dd

IDLgt strs=[201002012010-02-012010-2-1aaaa-mm-ddT2010-02-01J]IDLgt printstregex(strs[0-9]4-[0-9]2-[0-9]2boolean) 0 1 0 0 1

Esta expressatildeo regular especifica quatro repeticcedilotildees (4) de diacutegitos (caracteres na faixa [0-9]) seguido de um (-) seguido de duas repeticcedilotildees (2) de dois diacutegitos ([0-9]) seguido de um (-) seguido de duas repeticcedilotildees (2) de dois diacutegitos ([0-9])

Uma expressatildeo regular apenas um pouco mais elaborada poderia corresponder aos 3 formatos de data no array acima E poderia se impedir que a uacuteltima (com outros caracteres antes e depois da data) seja aceita

4189

Expressotildees regulares - regras - caracteres ldquonormaisrdquo

Uma expressatildeo regular usa caracteres ldquonormaisrdquo e especiais para especificar o que se vai procurar na ordem em que aparecem na expressatildeo

Se um caractere eacute normal (natildeo eacute um dos especiais mostrados adiante) ele especifica uma ocorrecircncia daquele caractere

Ex J eacute uma expressatildeo regular que corresponde a qualquer string onde ocorra J Jaacute JA soacute corresponde a strings que tenham JA dentro

Exs (IDL)

IDLgt strs=[JJJJJJaJAjaJa]

IDLgt printstregex(strsJboolean) 1 1 1 0 1

IDLgt printstregex(strsJAboolean) 0 0 1 0 0

4289

Expressotildees regulares - regras - caracteres especiaisCaracteres especiais tecircm outros significados Para significar literalmente aquele caractere deve ser escapado (escaped) com um

Siacutembolo significado exemplo Corresponde(m) Escape o caractere seguinte deve ser interpretado

literalmente natildeo como especial aa

Qualquer caractere ab ajb aab abb jafbc

+ Uma ou mais repeticcedilotildees do que vem agrave esquerda a+b ab aab bab baabh

() Subexpressatildeo para agrupar termos afetados por um caractere especial (como parecircnteses em notaccedilatildeo matemaacutetica)

(ab)+c abc ababc dabababcg

Zero ou mais repeticcedilotildees dos termos agrave esquerda ab abbaab caaabg

Zero ou uma repeticcedilatildeo dos termos agrave esquerda ab b ab cabd cbd

| Alternaccedilatildeo qualquer um dos dois agrave esquerda a|bc ac bc jacd jbcd

n Exatamente n repeticcedilotildees do termo agrave esquerda a2b aab daaabg

n1n2 De n1 a n2 repeticcedilotildees do termo agrave esquerda a12b ab aab aaab gaaabbd

^ Acircncora (no comeccedilo) nada agrave esquerda ^ab ab abb

$ Acircncora (no fim) nada agrave direita ab$ abaab

[] Conjunto de valores (explicado adiante)

4389

Expressotildees regulares - regras - conjuntos de valores

[] denota um conjunto de valores que pode conter

Uma lista de coisas que devem corresponder Ex [abc] signfica qualquer caractere no conjunto abc Correspondem a esta

expressatildeo abcabha

Uma lista de coisas que natildeo podem corresponder [^abc] significa qualquer coisa que natildeo seja a b ou c Correspondem a esta

expressatildeo d jgs gg

Faixas de valores [0-9] signfica qualquer diacutegito [0-9a-zA-Z] significa qualquer diacutegito ou letra

Classes de valores como algumas faixas e outros conjuntos ocorrem com muita frequumlecircncia haacute nomes

especiais para eles Estes (em IDL) vecircm entre [] ex [[digit] significa o mesmo que [0-9]

4489

Expressotildees regulares - regras - classes de valores

Classe signficado

alnum Caracteres alfanumeacutericos 0-9a-zA-Z

alpha Caracteres alfabeacuteticos a-zA-Z

cntrl Caracteres de controle ASCII (natildeo visiacuteveis coacutedigos 1 a 31 e 127)

digit Diacutegitos (decimais) 0-9

graph Caracteres visiacuteveis ASCII 33 a 126 (natildeo inclui o espaccedilo)

lower Letras minuacutesculas a-z

print Caracteres ldquoimprimiacuteveisrdquo (visiacuteveis e o espaccedilo) ASCII 32 a 126

punct Caracteres de pontuaccedilatildeo $amprsquo()+-lt=gt[]^_lsquo|~

space Os caracteres ldquoem brancordquo (blank) espaccedilo tab tab vertical CR LF (ASCII 32 e 9-13)

upper Letras maiuacutesculas A-Z

xdigit Diacutegitos hexadecimais 0-9A-Fa-f

lt Comeccedilo de palavra (palavra definida como sequumlecircncia de coisas natildeo space)

gt Fim de palavra (palavra definida como sequumlecircncia de coisas natildeo space)

Estas satildeo apenas as principais Algumas implementaccedilotildees tecircm muito mais (em particular nas linguagens que usam Unicode nativamente)

4589

Expressotildees regulares - exemplos

Determinar se strings satildeo nuacutemeros (Ex IDL)

IDLgt str=[9-18 875-812-45913E9-98d7a188d032f5]

Inteiros

IDLgt intexpr=^[-+][0-9]+$

IDLgt printstregex(strintexprboolean) 1 1 0 0 0 0 0 0 0 0

Ponto flutuante

IDLgt fpexpr=^[-+](([0-9][0-9]+)|([0-9]+[0-9]))([eEdD][-+][0-9]+)$

IDLgt printstregex(strfpexprboolean) 1 1 0 1 1 1 1 1 0 0

Sinal opcional

1 ou mais diacutegitos

Sinal opcional

0 ou mais diacutegitos opcionalmente seguidos de um ponto e 1 ou mais diacutegitos

1 ou mais diacutegitos opcionalmente seguidos de um ponto e 0 ou mais diacutegitos

ou Expoente opcional letra do expoente seguida de sinal opcional seguido de um ou mais diacutegitos

4689

Expressotildees regulares ndash extraccedilatildeo

Interpretadores de expressotildees regulares costumam oferecer mais que apenas testar se um string corresponde a uma expressatildeo

Em geral tambeacutem podem retornar que parte(s) do string corresponde(m) agrave expressatildeo

Ex (IDL) Determinar se um string conteacutem uma data incluindo os formatos

IDLgt dates=[2011-01-312011 1 3120110131something done on y2011m1d31 with something]

E extrair a data de dentro do string

IDLgt expr=[0-9]4[0-9]12[0-9]12

(4 diacutegitos)(qualquer separador)(1 a 2 diacutegitos)(qualquer separador)(1 a 2 diacutegitos)

IDLgt printstregex(datesexprextract)format=(A)2011-01-312011 1 31201101312011m1d31

Como agora separar ano mecircs e dia Com uma busca e uma extraccedilatildeo para cada Poderia ser mais eacute mais faacutecil com uma uacutenica expressatildeo regular

4789

Expressotildees regulares - aleacutem de apenas testes

Tambeacutem podem retornar que parte(s) do string correspondem agrave expressatildeo toda e agraves suas subexpressotildees (partes da expressatildeo delimitadas por parecircnteses)

Ex (IDL) Separar pedaccedilos de datas Neste caso para a expressatildeo ficar menor assumindo um formato simples (yyyy-mm-ddThhmmssfff) Mas poderia ser um formato mais livre como no exemplo anterior

IDLgt str=Stuff observed on 2011-01-31T123924983 with some instrumentIDLgt expr=([0-9]4)-([0-9]2)-([0-9]2)T([0-9]2)([0-9]2)([0-9]2[0-9]3)

(quatro diacutegitos)-(2 diacutegitos)-(2 diacutegitos)T(2 diacutegitos)(2 diacutegitos)(2 diacutegitos3 diacutegitos)

IDLgt pieces=stregex(strexprextractsubexpr)IDLgt printpiecesformat=(A)2011-01-31T12392498320110131123924983IDLgt d=julday(pieces[2]pieces[3]pieces[1]pieces[4]pieces[5]pieces[6])IDLgt printdformat=(F166) 2455593027372

Expressatildeo inteiraPrimeira subexpressatildeoSegunda subexpressatildeoTerceira subexpressatildeoQuarta subexpressatildeoQuinta subexpressatildeoSexta subexpressatildeo

4889

Expressotildees regulares - referecircncias httpxkcdcom208

Viacutedeos do Software Carpentry

httpsoftware-carpentryorg4_0regexp

4989

Arquivos

Quase todo programa precisa armazenar dados em arquivos

Podem ser pequenos arquivos de paracircmetros ou enormes arquivos de dados produzidos ou a processar

Apesar do sugerido pela praacutetica comum arquivos texto natildeo satildeo sempre a melhor escolha para armazenar dados - e haacute muitas formas diferentes de os usar

Qual eacute a melhor escolha

Assim como para linguagens ou contecirciners natildeo existe ldquoo melhor formatordquo Cada um tem suas vantagens e desvantagens

Dados diferentes (mesmo se usados pelos mesmos programas) em geral se adequam melhor a formatos diferentes

5089

Arquivos - texto X binaacuterios

Em qualquer formato arquivos satildeo armazenados como diacutegitos binaacuterios

Mas haacute duas formas principais como eles podem ser codificados

Arquivos baseados em texto (text files)

Dados satildeo transformados em caracteres usando alguma formataccedilatildeo (mesmo se impliacutecita) e escritos com alguma codificaccedilatildeo de texto (comumente mas natildeo necessariamente ASCII)

Um arquivo texto eacute um ou mais strings As mesmas conversotildees tecircm que ser feitas depara outros tipos

Arquivos ldquobinaacuteriosrdquo (binary files)

Embora todo arquivo seja binaacuterio este nome costuma ser usado soacute para aqueles em que os dados natildeo estatildeo na forma de texto

Com frequumlecircncia (nem sempre) os dados satildeo gravados de forma idecircntica a como satildeo armazenados na memoacuteria

Muitos formatos usam uma mistura de partes em texto e partes binaacuterias

Um cabeccedilalho (header) de texto que daacute informaccedilotildees (metadados) sobre os dados armazenados na parte binaacuteria que vem depois

O cabeccedilalho conteacutem em especial informaccedilotildees sobre como ler os dados binaacuterios

5189

Arquivos - texto X binaacuterios

Vantagens de arquivos texto

Legiacuteveis por pessoas (human readable)

Podem ser auto-suficientes todo o necessaacuterio para os ler e entender o que conteacutem pode ser obtido olhando o arquivo

Satildeo os menos especiacuteficos a linguagens software normalmente satildeo escritos em ASCII ou Unicode e sempre haacute algum suporte a ler escrever texto em linguagens software

Haacute alguns formatos padratildeo para texto (exs CSV XML) que satildeo suportados em muitas plataformas diferentes

5289

Arquivos - texto X binaacuterios

Vantagens de arquivos binaacuterios

Em geral natildeo haacute conversotildees entre o os dados como armazenados na memoacuteria O que torna o armazenamento mais eficiente e sem alteraccedilotildees nos valores

A maior parte dos formatos padronizados eacute binaacuteria Exs FITS cube CDF NetCDF HDF HDF5 JPEG JPEG2000 TIFF GeoTIFF MPEG etc

Eacute mais comum que haja bibliotecas prontas (ateacute de alto niacutevel) para consulta leitura e gravaccedilatildeo

Os formatos melhor desenhados satildeo autodocumentados (em texto ou binaacuterio) para os ler natildeo eacute necessaacuterio conhecimento preacutevio sobre como os dados foram armazenados

Toda linguagem plataforma costuma ter seu formato binaacuterio mais nativo que costuma ser o mais faacutecil para leitura gravaccedilatildeo Em particular nas de alto niacutevel que tecircm formatos autodocumentados (especialmente

em IDL R Python Java)

Muitos formatos tecircm opccedilatildeo de compressatildeo dos dados

5389

Arquivos - proprietaacuterios X padratildeo

Independente da escolha texto binaacuterio programas devem escolher entre usar um formato proacuteprio ou um formato padronizado

A principal vantagem de formatos proacuteprios eacute que satildeo definidos da forma mais conveniente para a aplicaccedilatildeo que os usa simplificando leitura e gravaccedilatildeo e potencialmente otimizando recursos (acesso ao disco tamanho do arquivo etc)

A principal desvantagem de formatos proacuteprios eacute ser necessaacuterio escrever todo o coacutedigo para os ler gravar

Pode dar mais trabalho que usar um formato geneacuterico que natildeo seja exatamente o que melhor se encaixa na aplicaccedilatildeo

O coacutedigo para processar o formato em geral vai ser menos completo e conveniente de usar que o de um formato bem estabelecido usado por muitos outros em muitos ambientes

Cada novo software que for usar estes arquivos vai precisar compartilhar do mesmo coacutedigo ou precisar de coacutedigo novo (em particular se em outra linguagem) para ler gravar naquele formato

Eacute necessaacuterio documentar o formato e decidir sobre como ele seraacute definido

Se outros jaacute colocaram muito trabalho desenvolvendo bons formatos padratildeo bem suportados em muitos ambientes por que ter o trabalho de reinventar (e reprogramar redocumentar e retestar) a roda

5489

Arquivos - padrotildees comuns em astronomia (exs adiante)

Texto

CSV Comma-separated values - bem suportado por muitos softwares

ldquoColunas fixasrdquo Natildeo eacute um padratildeo bem definido mas eacute praacutetica comum para tabelas (2D)

XML Extensible Markup Language - O padratildeo texto mais flexiacutevel de grande uso em programaccedilatildeo geral para armazenar qualquer coisa com frequumlecircncia de forma hieraacuterquica Bem suportado por linguagens modernas (e modernizadas) e bibliotecas das principais

linguagens gerais Alta complexidade o torna trabalhoso de usar

5589

Arquivos - padrotildees comuns em astronomia (exs adiante)Binaacuterios

FITS Flexible Image Transport System - o mais comum para observaccedilotildees astronocircmicas Conteacutem os dados (em geral arrays 1D 2D ou 3D) e documentaccedilatildeo (nos cabeccedilalhos) sobre a origem e caracteriacutesticas dos dados Tambeacutem usado para armazenar tabelas de dados quaisquer mesmo que natildeo sejam observaccedilotildees (especialmente pelo STSCI) Variam muito em qualidade de documentaccedilatildeo

NetCDF Network Common Data Form - evoluccedilatildeo do CDF autodocumentado eacute comum e bem suportado para vaacuterios arrays de dados

HDF5 Hierarchical Data Format ndash autodocumentado comum e bem suportado permitindo aleacutem de simples arrays estruturas (eacute um formato hieraacuterquico)

Formatos de imagens JPEG JPEG2000 TIFF GeoTIFF etc - voltados para arrays 2D3D de inteiros ou (em alguns casos) reais com ou sem compressatildeo JPEG2000 tem caracteriacutesticas mais avanccediladas como imagens multiresoluccedilatildeo

Formatos vetoriais PS EPS DXF SHP SVG - variados niacuteveis de suporte a armazenamento de vetores e formas em 2D ou 3D

ISIS Cube semelhante em caracteriacutesticas ao FITS mais usado em sensoriamento remoto geociecircncias e ciecircncias planetaacuterias em geral para observaccedilotildees 1D 2D ou 3D

Formatos nativos de linguagens todo o trabalho de leitura e gravaccedilatildeo eacute feito automagicamente pela biblioteca padratildeo em IDL R Python Java

5689

Arquivos texto - newlines

Apesar do que possa parecer arquivos texto natildeo tecircm intrinsecamente vaacuterias linhas Arquivos texto satildeo soacute uma sequumlecircncia 1D de caracteres em alguma codificaccedilatildeo Separaccedilatildeo em linhas (equivalente a interpretar o arquivo como 2D em linhas e colunas) eacute

especificada por convenccedilotildees Natildeo haacute apenas uma convenccedilatildeo para o fim de linhas

A mais primitiva convenccedilatildeo eacute separaccedilatildeo nenhuma estipula-se que linhas tenham um nuacutemero fixo N de caracteres e cabe ao software que lecirc o arquivo entender que uma linha nova ocorre regularmente a cada N caracteres

Eacute a forma menos portaacutevel e mais inconveniente eacute necessaacuterio o conhecimento preacutevio (ou por inspeccedilatildeo do arquivo) de quantos caracteres haacute por linha

A maior parte dos editores de texto natildeo vai saber separar linhas desta forma (por falta deste conhecimento preacutevio) Exemplo (de um FITS real)

SIMPLE = T Fits standard BITPIX = 16 Bits per pixel NAXIS = 0 Number of axes EXTEND = T File may contain extensions

O que com as linhas quebradas nos lugares certos seria

SIMPLE = T Fits standard BITPIX = 16 Bits per pixel NAXIS = 0 Number of axes EXTEND = T File may contain extensions

5789

Arquivos texto - newlines

A forma mais comum de especificar linhas eacute com um marcador do final de linha (newline)

Eacute um caractere especial natildeo normalmente presente no texto que serve para marcar fim de linhas

Mas natildeo haacute soacute um padratildeo de newline Os mais comuns

LF (Line Feed ASCII 10) ndash Unix Linux Mac OS X

CR - (Carriage Return ASCII 13) - Mac OS lt10

CR+LF (CR seguido de LF) - Windows DOS

Eacute o motivo de o Notepad (Windows) natildeo entender as quebras de linha de arquivos escritos com o formato nativo de Linux o arquivo soacute tem LF enquanto o editor espera CR+LF

Alguns sistemas (strings em vaacuterias linguagens por exemplo) usam o coacutedigo de escape n para indicar newline que eacute codificado de acordo com o padratildeo sendo usado

Em geral bibliotecas de leitura e gravaccedilatildeo de arquivos usam (default pelo menos) o newline nativo do sistema em que satildeo usadas

Programas de conversatildeo entre os sistemas satildeo comuns (ex dos2unix)

O Wordpad identifica se for usado soacute LF e quebra as linhas de acordo

5889

Arquivos - texto - CSV

Comma-separated values

O formato mais padronizado para tabelas (arrays 2D) em texto (frequentemente mas natildeo necessariamente ASCII)

Bem suportado por bibliotecas padratildeo de linguagens e outros softwares (Excel Calc Origin Google Docs etc)

Conteacutem Linhas de cabeccedilalho (opcionais mas recomendadas) linhas com qualquer texto geral

descrevendo o arquivo e em geral uma linha de tiacutetulo para as colunas da tabela Uma (apenas uma) tabela onde todas as linhas tecircm o mesmo nuacutemero de colunas

Colunas separadas por viacutergulas (opcionalmente pode ser outro separador) Linhas terminadas por newline (qualquer que seja) Strings delimitados por ldquo ldquo

Ex

NAMECALMPOSFILNAMEECHLPOSDISPPOSTARGNAMEPOSDIRCLASSMJD-OBSITIMECOADDSdec18s00010NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001dec18s00020NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001dec18s00120NIRSPEC-5-AO635800364500itan140NIRSPEC-5-AOp2 TITAN5408763000001dec18s00140NIRSPEC-5-AO626300364500itan140NIRSPEC-5-AOp1 TITAN5408763000001dec18s00151NIRSPEC-5-AO626300364500itan140NIRSPEC-5-AOp1ARC5408764000001dec18s00160NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001

Natildeo eacute necessaacuterio que as colunas tenham largura constante

Cabeccedilalho

5989

Arquivos - texto - CSVHaacute amplo suporte a leitura e gravaccedilatildeo de CSV sem precisar recorrer a procedimentos de baixo niacutevel

Podem ser diretamente importados em Excel Calc Origin Google Docs ou lido facilmente com bibliotecas padratildeo comuns Ex (IDL)

IDLgt c=read_csv(filesearch_scamcsvheader=h)IDLgt printhNAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS

IDLgt helpc Structure ltc8bca508gt 11 tags length=5256 data length=5248 refs=1 FIELD01 STRING Array[41] FIELD02 LONG Array[41] FIELD03 STRING Array[41] FIELD04 DOUBLE Array[41] FIELD05 DOUBLE Array[41] FIELD06 STRING Array[41] FIELD07 STRING Array[41] FIELD08 STRING Array[41] FIELD09 STRING Array[41] FIELD10 DOUBLE Array[41] FIELD11 LONG Array[41]

IDLgt printcfield01[03]dec18s0001 dec18s0002 dec18s0003 dec18s0004

IDLgt printcfield03[03]NIRSPEC-5-AO NIRSPEC-5-AO NIRSPEC-5-AO NIRSPEC-5-AO

6089

Arquivos - texto - CSVEx (IDL) Criaccedilatildeo de um CSV com uma tabela de valores

Criaccedilatildeo de 3 arrays 1D (12 elementos) um para cada coluna

IDLgt x=dindgen(3)IDLgt y=dindgen(4)IDLgt xx=reform(rebin(x34)12)IDLgt yy=reform(rebin(reform(y14)34)12)IDLgt f=xx+yy10IDLgt helpxxyyfXX DOUBLE = Array[12]YY DOUBLE = Array[12]F DOUBLE = Array[12]

Escrita do arquivo

IDLgt write_csvexamplecsvxxyyfheader=[XYX+10Y]

ResultadoXYX+10Y000000000000000000000000100000000000000010000000200000000000000020000000000000001000000010000000100000001000000011000000()

6189

Arquivos - texto - ldquoColunas regularesrdquoFixed column width

Natildeo eacute exatamente um padratildeo Eacute uma praacutetica comum

Armazena uma tabela (array 2D) de forma regular simples de ser interpretada e lida

Costumam ter linha(s) de cabeccedilalho descrevendo o conteuacutedo do arquivo em geral com uma linha para os nomes das colunas

As demais linhas conteacutem os dados sempre ocupando a mesma largura por coluna e escritos no mesmo formato em cada coluna

Costumam ser simples de ler inclusive interativamente (exs Excel Calc Origin read_ascii)

Ex (IDL) Uma simples tabela soacute de nuacutemeros

wavl CH4=33 wavl CH4=25 wavl CH4=10 wavl CH4=08 wavl CH4=05 wavl CH4=026 wavl CH4=02 477330000 0090130 477330000 0091110 477330000 0089250 477330000 0087000 477330000 0087140 477330000 0090080 477330000 0088110 480040000 0090930 480040000 0091930 480040000 0090160 480040000 0087930 480040000 0088110 480040000 0090950 480040000 0089090 482750000 0091710 482750000 0092730 482750000 0091060 482750000 0088850 482750000 0089080 482750000 0091810 482750000 0090060 485450000 0092530 485450000 0093570 485450000 0092000 485450000 0089810 485450000 0090100 485450000 0092730 485450000 0091090

IDLgt a=read_ascii(specs_27s_ntxtdata_start=1header=header)IDLgt printheader wavl CH4=33 wavl CH4=25 wavl CH4=10 wavl CH4=08 wavl CH4=05 wavl CH4=026 wavl CH4=02 IDLgt helpa Structure ltd423c9a8gt 1 tags length=224 data length=224 refs=1 FIELD01 FLOAT Array[14 4]

6289

Arquivos - texto - ldquoColunas regularesrdquoJaacute um arquivo um pouco mais difiacutecil de ler

NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS dec18s0001 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0002 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0003 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 FLAT 5408757812500 460000 5 dec18s0004 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 DARK 5408757812500 460000 5

Por ter colunas de tipos diferentes (strings inteiros reais) natildeo eacute possiacutevel o ler em um simples array Mas eacute faacutecil o colocar em uma estrutura de arrays onde cada campo eacute uma coluna

Especificando interativamente como interpretar as linhasIDLgt templ=ascii_template(filesearch_scamtxt)

Nome do campo (default mostrado)

Tipo do campo (identificado automaticamente)

Posiccedilatildeo (caracter) do comeccedilo (identificada automaticamente)

Linha de exemplo para verificar as colunas

6389

Arquivos - texto - ldquoColunas regularesrdquoDepois de feito o template o arquivo pode ser lido com apenas

IDLgt a=read_ascii(filesearch_scamtxttemplate=templ)IDLgt helpa Structure ltd4ec4608gt 11 tags length=416 data length=416 refs=1 FIELD01 STRING Array[4] FIELD02 LONG Array[4] FIELD03 STRING Array[4] FIELD04 FLOAT Array[4] FIELD05 FLOAT Array[4] FIELD06 STRING Array[4] FIELD07 STRING Array[4] FIELD08 STRING Array[4] FIELD09 FLOAT Array[4] FIELD10 FLOAT Array[4] FIELD11 LONG Array[4]IDLgt printafield01dec18s0001 dec18s0002 dec18s0003 dec18s0004IDLgt printafield04 626300 626300 626300 626300

O template (uma estrutura contendo dados sobre como ler o arquivo) pode ser usado para outros arquivos no mesmo formato No lugar de ter sido criado interativamente poderia ter sido lido de algum arquivo Poderia ter especificado nomes para os campos que seriam mais amigaacuteveis que coias como FIELD11

6489

Arquivos - texto - XML

Extensible Markup Language

Admite grande flexibilidade e por isso pode ter alta complexidade

Valores satildeo colocados dentro de uma estrutura em hieraacuterquica (em uma aacutervore) com os noacutes identificados pelos seus nomes (chaves)

Largamente usado em muitas aacutereas para armazenar conjuntos arbitraacuterios de quaisquer estruturas de dados

A maioria das aplicaccedilotildees usa um formato que eacute um subconjunto do XML especificado por um Schema comumente em um arquivo XML DTD (Document Type Definition)

6589

Arquivos - texto ndash XML ndash exemplos de usos

Armazenamento de dados de aplicaccedilotildees web (comum para exportar importar dados MediaWiki DokuWiki WordPress ADS Lattes etc)

Documentos Office (docx pptx xlsx) OpenOffice (odt opd ods)

Como versotildees de outros formatos FITSML XDF

ldquoScientific Dataset XML NASAs Astronomical Data Center (ADC) sponsors a number of research projects that

use XML for scientific data representation The XML activities at the ADC are sponsored and supported by the NASA Office of Space Science Applied Information Systems Research Program (AISRP)rdquo - httpxmlcoverpagesorgnasa-adchtml

Astronomical Instrument Markup Language (AIML)

SVG ndash Scalable Vector Graphics

Muitas de outras aplicaccedilotildees listadas em httpxmlcoverpagesorgxmlhtmlapplications

6689

Arquivos - texto ndash XML - exemploltxml version=10 gtltDOCTYPE Xdmf SYSTEM Xdmfdtd []gtltXdmf xmlnsxi=httpwwww3org2001XInclude Version=20gt ltDomaingt lt-- Example of Basic Topologies --gt ltInformation Name=Descriptiongt Example of a Polyvertex Topology ltInformationgt ltGrid Name=Polyvertex GridType=Uniformgt ltTopology TopologyType=Polyvertex Dimensions=3 NodesPerElement=3gt ltDataItem Format=XML Dimensions=3 3 NumberType=Floatgt 0 1 2 4 5 6 8 9 10 ltDataItemgt ltTopologygt ltGeometry Type=XYZgt ltDataItem Format=XML Dimensions=4 4 3gt 00 00 00 10 00 00()Que mostra que a interpretaccedilatildeo (parsing) de XML eacute em geral complexa

6789

Arquivos - texto - XML

Haacute muitas bibliotecas de alto niacutevel para fazer o processamento (parsing) e entregar os dados em uma estrutura conveniente

A complexidade em processar XML estaacute em decidir o que fazer com os dados jaacute que os arquivos podem ser muito complexos

As APIs (Application Programming Interfaces) mais comuns para processar XML que satildeo implementadas em muitas linguagens

DOM (Document Object Model) ndash manteacutem todo o conteuacutedo do em uma estrutura de dados (em geral uma aacutervore) em uma variaacutevel (em geral um objeto) Esta pode ser consultada para obter os valores de interesse para os alterar e usada para escrever um arquivo

SAX (Simple API for XML) ndash Interpretador (parser) por objetos O usuaacuterio escreve uma classe herdando da classe SAX provendo os meacutetodos que vatildeo processar os campos agrave medida em que estes satildeo lidos

6889

Arquivos - binaacuterios - FITSFlexible Image Transport System

O formato mais comum para observaccedilotildees astronocircmicas Tambeacutem usado para armazenar quaisquer dados mesmo natildeo relacionados a observaccedilotildees (especialmente tabelas como eacute praacutetica do STSCI)

Conteacutem um (ou mais) cabeccedilalho(s) de texto com metadados (informaccedilotildees sobre os dados como caracteriacutesticas (necessaacuterias para os ler) origem condiccedilotildees em que foram obtidos processamento realizado etc)

SIMPLE = T image conforms to FITS standard BITPIX = 32 bits per data value NAXIS = 2 number of axes NAXIS1 = 1024 NAXIS2 = 1024 BSCALE = 100000 Scaling factor BZERO = 000000 Scaling zero-point TELESCOP= Keck II Telescope SLITNAME= 0041x226 Slit Name SLITPA = 351979 Slit position angle SLITX = 131500 X pixel of the center of the slit LST = 12010446 local apparent sidereal time (()

Depois do cabeccedilalho haacute uma (ou mais) seccedilatildeo(otildees) de dados binaacuterios Costuma(m) ser array(s) 1D (espectros) 2D (imagens) ou 3D (ldquocubos de dadosrdquo)

De inteiros ou reais inteiros satildeo comuns em contagens de instrumentos reais para valores derivados (fluxos intensidades etc)

6989

Arquivos - binaacuterios - FITSNormalmente FITS satildeo lidos escritos por bibliotecas prontas de (relativamente) alto niacutevel usuaacuterio natildeo tem que saber como os dados satildeo armazenados no arquivo nem como os ler escrever Ex (IDL com a biblioteca idlastro)

IDLgt fits_info2dspectrumfits2dspectrumfits has 3 extensionsPrimary header 288 recordsNo dataExtension 1 -- SCI Header 144 records IMAGE ( 1201 1201 )Extension 2 -- ERR Header 72 records IMAGE ( 1201 1201 )Extension 3 -- DQ Header 72 records IMAGE ( 1201 1201 )

IDLgt mydata=readfits(2dspectrumfitsexten_no=1myheader) READFITS Reading FITS extension of type IMAGE READFITS Now reading 1201 by 1201 array

IDLgt extastmyheadermyastIDLgt sz=size(mydatadimensions)IDLgt xy2ad[1sz[0]][1sz[1]]myastcorners_acorners_dIDLgt printcorners_aCorners of the data array from file 2dspectrumfits are at 14487480 33063480

IDLgt printcorners_d -00041264444 00041402222

Obteacutem os dados de coordenadas (WCS) do header

Coloca os dados no array (2D de floats) mydata e o header no array (1D de strings) myheader

Calcula as coordenadas das quinas da imagem atraveacutes do WCS

Provecirc informaccedilotildees sobre o arquivo

7089

Arquivos - binaacuterios - ISIS Cube

Formatos como FITS se adequam muito a ter uma interface de mais alto niacutevel por objetos

Tambeacutem para dados em tabelas FITS muito mais trabalhosos de ler em baixo niacutevel que se adequam muito mais a mapas ou estruturas

Exemplo (de um formato semelhante a FITS ISIS cube)

O objeto ao ser criado lecirc todo o arquivo

cube=pp_editablecube(CM_1553510065_1_ircub)

Meacutetodos fornecem os dados desejados para obter quando necessaacuterio os dados de interesse

Find out the names of the backplanesprintcubegetproperty(backnames)Get the start time of the cubeprintcubegetfromheader(START_TIME)2007-084T100057286Z

Valores no cabeccedilalho podem ser convenientemente fornecidos como um mapa

header=cubeheader_as_hash()printheader[START_TIME]2007-084T100057286Z

7189

Arquivos - binaacuterios ndash ISIS Cube

Os dados satildeo fornecidos como arraysMake a contour plot of the latitudesc=contour(cubegetsuffixbyname(LATITUDE))Get the band with wavelength nearest to 21 (in the units used in the cube)selband=cubegetbandbywavelength(21wavelengths=selwavs)

Interfaces por overload tornam o acesso ainda mais conveniente

selband=cube[21]

selwavs=cube[21]

Retorna um array com a banda de comprimento de onda mais proacuteximo de 21 (microm)

Retorna o comprimento de onda mais proacuteximo de 21 (microm) da banda retornada acima

7289

Arquivos - binaacuterios ndash ISIS Cube Alteraccedilotildees feitas ao conteuacutedo satildeo automaticamente refletidas em todos os

lugares (cabeccedilalho em particular) afetados mantendo o objeto vaacutelido que pode depois ser gravado em um novo arquivo

IDLgt printcubelinescubesamplescubebands 64 64 256

IDLgt helpcubecoreltExpressiongt FLOAT = Array[64 64 256]

IDLgt cubecore=dblarr(100100256)

A linha acima natildeo eacute uma atribuiccedilatildeo eacute uma invocaccedilatildeo de meacutetodo Eacute equivalente acubesetpropertycore=dblarr(100100256)

Eacute o trabalho da funccedilatildeo setproperty decidir se a propriedade passada (core) faz sentido e se fizer fazer todo o trabalho necessaacuterio a esta mudanccedila Para o usuaacuterio eacute tudo automaacutetico e os dados da classe satildeo vaacutelidos o tempo todo

IDLgt helpcubecoreltExpressiongt DOUBLE = Array[100 100 256]

IDLgt printcubelinescubesamplescubebands 100 100 256

IDLgt cubesaveCM_1553510065_1_ir_editedcub

7389

Arquivos - binaacuterios ndash NetCDF e HDF5

Network Common Data Form e Hierarchical Data Format

Os dois uacutenicos formatos bem estabelecidos para dados cientiacuteficos geneacutericos

Armazenam dados como vaacuterias variaacuteveis e seus metadados Para cada variaacutevel haacute (ou pode haver) os metadados

Nome Dimensotildees (do array) Unidades Comentaacuterios

Ambos permitem arrays multidimensionais

Apenas HDF5 permite estruturas (daiacute vem a hierarquia)

Autodocumentados qualquer software que saiba ler um destes formatos lecirc qualquer arquivo sem precisar de conhecimento preacutevio sobre como o arquivo foi gerado

Muito bem suportados em bibliotecas padratildeo e natildeo padratildeo em softwares interativos e visualizadores (inclusive plugins para navegadores)

httpwwwunidataucaredusoftwarenetcdf httpenwikipediaorgwikiHdf5

NetCDF eacute mais simples de usar por natildeo ter hierarquia dando menos trabalho para ler e escrever dados Se hierarquia natildeo eacute necessaacuteria eacute mais conveniente de usar que HDF5

7489

Arquivos - binaacuterios - NetCDF e HDF5Haacute tambeacutem o formato CDL uma versatildeo ASCII do NetCDF A biblioteca padratildeo do NetCDF inclui conversores entre estes formatos

$ ncdump -h refspec_g01_0ncnetcdf refspec_g01_0 dimensions nlay = 51 nwn = 400 nleg = 33 numu = 2 nlev = 52 nphi = 3 ngas = 2 nwnc = 1 scal = 1 v3 = 3 dnl = 1 nk = 1 tdisr = UNLIMITED (0 currently) na = 16

variables float alb(nwn) float z(nlay) float t(nlay) float p(nlay) float wl(nwn) float iof(nwn) float mtau(nwn) float htau(nwn) float hctaus(nwn) float gtau(nwn) float outcos(scal) float phi(nleg) float phic(scal) float umu(numu) float flux(v3 nwn nlev) float mix(nlay ngas) float c(nlay) float psat(nlay) float ga(nwnc) float wlc(nwnc) float inc(scal) int dm(scal) int ord(scal) float fbeam(scal) float wn(nwn) float tautot(nwn nlay) float htaus(nwn nlay) float htaux(nwn nlay) float taug(nwn nlay) float phase(nwn nlay nleg) float ssa(nwn nlay) float uu(nwn nphi nlev numu) float u0u(nwn nlev numu) float tray(nwn nlay) float gtauo(tdisr nwn nlay)

Haacute 14 variaacuteveis usadas como dimensotildees para as 35 variaacuteveis que satildeo arrays

Ex alb(nwn) indica que alb eacute um array 1D de nwn elementos

nwn estaacute armazenado como uma das dimensotildees e eacute 400 portanto alb tem 400 elementos

Parte do conteuacutedo de um arquivo NetCDF em formato CDL (gerado pelo programa ncdump)

7589

Arquivos - binaacuterios - NetCDF e HDF5Conteuacutedo daquele arquivo visualizado com o ncview (acompanha a biblioteca NetCDF padratildeo)

7689

Arquivos - binaacuterios - NetCDF e HDF5O conteuacutedo de todo o arquivo pode ser lido facilmente com as bibliotecas disponiacuteveis e armazenado em contecirciners convenientes Usando um objeto que gera um resultado um pouco mais conveniente

IDLgt h=pp_readncdf(refspec_g01_0nchash)IDLgt printhvar_dims ltObjHeapVar229(HASH)gtvars ltObjHeapVar152(HASH)gtdims ltObjHeapVar118(HASH)gt

IDLgt printh[vars]T 173203 175459 175848 176001 175975 Z 431869 418858 406067 393403 380464 FLUX 300660 145536 0705180 0341669 0165532 PHASE 100000 0779034 0660858 0542052 0449983 TAUTOT0694377 0693420 0693474 0693540 0693636()

IDLgt help(h[vars])[TAUTOT]ltExpressiongt FLOAT = Array[51 400]

IDLgt print(h[var_dims])[TAUTOT]NLAY NWN

IDLgt print(h[dims])[(h[var_dims])[TAUTOT]]NLAY 51NWN 400

7789

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5)

Visualizaccedilatildeo da variaacutevel selecionada

Metadados e alguns valores da variaacutevel selecionada

Variaacutevel a ser criada com o conteuacutedo desta variaacutevel do arquivo

Hierarquia das variaacuteveis do arquivo

7889

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5) Imported variable az

IDLgt helpaz Structure ltd5723f38gt 13 tags length=448 data length=444 refs=1 _NAME STRING az _ICONTYPE STRING binary _TYPE STRING DATASET _FILE STRING INTENSI_test_409OUTh5 _PATH STRING _DATA DOUBLE Array[38] _NDIMENSIONS LONG 1 _DIMENSIONS ULONG64 Array[1] _NELEMENTS ULONG64 38 _DATATYPE STRING H5T_FLOAT _STORAGESIZE ULONG 8 _PRECISION LONG 64 _SIGN STRING

IDLgt printaz_data 00000000 10000000 20000000 30000000 40000000 50000000 60000000 80000000 ()

7989

Arquivos - binaacuterios - imagens

JPEG JPEG200 TIFF GeoTIFF etc

Os formatos comuns de imagens satildeo bem suportados em muacuteltiplas plataformas para uso dentro de programas e interativamente

Alguns formatos tecircm opccedilatildeo de compressatildeo com perda eou sem perda

Armazenam imagens como arrays 2D ou 3D (3D frequumlentemente limitado a 3 ou 4 em uma das dimensotildees uma imagem em 3 ou 4 bandas) de inteiros ou (em alguns formatos) reais

Alguns formatos permitem armazenar metadados para caracterizar as imagens armazenadas

JPEG2000 e GeoTIFF (um subconjunto de TIFF) comuns em astronomia e aacutereas proacuteximas

8089

Arquivos - binaacuterios ndash imagens ndash exemplo (IDL)IDLgt printquery_tiff(issmap_2009tiffinfogeotiff=geo) 1

IDLgt helpinfo Structure ltd4eca4b8gt 18 tags length=144 data length=132 refs=1 CHANNELS LONG 4 DIMENSIONS LONG Array[2] IMAGE_INDEX LONG 0 NUM_IMAGES LONG 1 PIXEL_TYPE INT 1 TYPE STRING TIFF BITS_PER_SAMPLE LONG 8 POSITION FLOAT Array[2] RESOLUTION FLOAT Array[2] UNITS LONG 2 TILE_SIZE LONG Array[2] DESCRIPTION STRING ISS (2009) DATE_TIME STRING 20100218 012436()

IDLgt helpgeo Structure ltd4efa1b8gt 10 tags length=264 data length=262 refs=1 MODELPIXELSCALETAG DOUBLE Array[3] MODELTIEPOINTTAG DOUBLE Array[6 4] GEOGRAPHICTYPEGEOKEY INT 4035 GEOGSEMIMAJORAXISGEOKEY DOUBLE 25750000 GEOGSEMIMINORAXISGEOKEY DOUBLE 25750000()

IDLgt myimage=read_tiff(issmap_2009tiff) Lecirc a imagem para o array myimage

Obteacutem informaccedilotildees sobre o arquivo

8189

Arquivos - binaacuterios ndash formatos nativosLinguagens como IDL R Python Java tecircm seu formato nativo binaacuterio acessado em alto niacutevel Basta mandar salvar ler variaacuteveis no do arquivo a biblioteca padratildeo automagicamente faz todo o trabalho de decidir como gravar ler os dados

Conveniente de usar na proacutepria linguagem Mas raramente existem bibliotecas para ler gravar o formato nativo de uma linguagem a partir de outra Ex (IDL)

IDLgt savefile=2dspectrumsavmydatamyheadercorners_dcorners_averbosecompress SAVE Portable (XDR) compressed SAVERESTORE file SAVE Saved variable MYDATA SAVE Saved variable MYHEADER()

Pode ser lido com apenas (haacute formas mais elaboradas)

IDLgt restore2dspectrumsavverbose RESTORE Portable (XDR) compressed SAVERESTORE file RESTORE Save file written by ltunknowngtltunknowngt Thu Jan 27 191422 2011 RESTORE IDL version 801 (linux x86_64) RESTORE Restored variable MYDATA RESTORE Restored variable MYHEADER()

IDLgt helpmydatamyheadercorners_dcorners_aMYDATA FLOAT = Array[1201 1201]MYHEADER STRING = Array[144]()

8289

Arquivos - processamento em baixo niacutevel

Nem sempre um formato padratildeo eacute a melhor escolha para o problema

Nem sempre haacute escolha (pode-se ter que trabalhar com arquivos que jaacute foram escritos em algum formato proprietaacuterio)

Agraves vezes o formato eacute padratildeo mas natildeo haacute bom suporte a ele disponiacutevel

Em todos estes casos eacute necessaacuterio escrever rotinas em baixo niacutevel que vatildeo ler processar diretamente o conteuacutedo do arquivo

Preferencialmente criando interfaces de alto niacutevel para o programa que vai as usar

8389

Arquivos - processamento em baixo niacutevel - texto

Tomando o exemplo anterior onde as colunas eram de diferentes tipos

NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS dec18s0001 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0002 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0003 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 FLAT 5408757812500 460000 5 dec18s0004 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 DARK 5408757812500 460000 5

A forma mais simples de o ler diretamente eacute definir uma estrutura para receber cada linha e um array destas estruturas para receber todo o arquivo Ex (IDL)

IDLgt record=namecalmpos0filnameechlpos0d0disppos0d0targnameposdirclassmjd_obsitime0d0coadds0IDLgt nlines=file_lines(filesearch_scamtxt)IDLgt mydata=replicate(recordnlines-1)IDLgt header=

Depois de definidas as variaacuteveis que vatildeo receber os dados o arquivo pode ser lido

IDLgt openrunitfilesearch_scamtxtget_lunIDLgt readfunitheaderIDLgt readfunitmydataformat=(A14I8A15F104F104A18A19A15F158F105I15)IDLgt free_lununit

A gravaccedilatildeo de um arquivo texto poderia ser feita de forma semelhante apenas trocando openr por openw (abrir o arquivo para gravaccedilatildeo natildeo leitura) e readf por printf

O arquivo eacute aberto em uma unidade (unit) usada para especificar de onde eacute feita a leitura

Ao final o arquivo eacute fechado

8489

Arquivos - processamento em baixo niacutevel - texto

O que resulta em

IDLgt printheader NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS

IDLgt helpmydataMYDATA STRUCT = -gt ltAnonymousgt Array[4]

IDLgt helpmydata[0] Structure ltd5e38f68gt 11 tags length=136 data length=124 refs=3 NAME STRING dec18s0001 CALMPOS INT 0 FILNAME STRING NIRSPEC-5-AO ECHLPOS DOUBLE 62630000 DISPPOS DOUBLE 36450000 TARGNAME STRING HD85258 POSDIR STRING NIRSPEC-5-AOp1 CLASS STRING STAR MJD_OBS STRING 54087574 ITIME DOUBLE 10000000 COADDS INT 1

Este caso eacute mais complicado que os mais comuns por haver colunas de strings

Se todas fossem de nuacutemeros natildeo teria sido necessaacuterio especificar o formato explicitamente As colunas teriam sido adivinhadas pela biblioteca que lecirc o arquivo Poderia ter sido lido escrito soacute com um array de nuacutemeros sem estruturas

8589

Arquivos - processamento em baixo niacutevel - binaacuterio

Formatos binaacuterios podem ser definidos de qualquer forma O arquivo eacute apenas um conjunto de bytes Cabe ao software saber como os interpretar

Uma escolha comum para que sejam autodocumentados eacute incluir um cabeccedilalho de texto informando as caracteriacutesticas dos dados necessaacuterias para os ler

Ex (IDL) criar um arquivo que armazene um array de doubles com um cabeccedilalho informando as dimensotildees para que o programa que o lecirc saiba como ler os dados

Inventa dados e abre o arquivo

IDLgt data_to_write=dindgen(34)IDLgt openwunitbinary_exampledatget_lun

Escreve as dimensotildees como texto

IDLgt printfunitdimensions of the double array stored belowIDLgt printfunitsize(data_to_writedimensions)

Escreve os dados binaacuterios

IDLgt writeuunitdata_to_write

Fecha o arquivo

IDLgt free_lununit

Escreve em binaacuterio (write unformatted)

8689

Arquivos - processamento em baixo niacutevel - binaacuterio

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

dimensions of the double array stored below 3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

8789

Arquivos - processamento em baixo niacutevel - binaacuterioA leitura deste arquivo eacute igualmente simples

IDLgt header=IDLgt dims=[00]IDLgt openrunitbinary_exampledatget_lun

Lecirc as dimensotildees (armazenadas como texto)

IDLgt readfunitheaderIDLgt readfunitdims

Lecirc a parte binaacuteria depois de saber as dimensotildees

IDLgt data_read=dblarr(dims)IDLgt readuunitdata_read

Fecha o arquivo

IDLgt free_lununit

Verifica que os dados foram gravados e lidos corretamente

IDLgt printarray_equal(data_to_writedata_read) 1

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Lecirc dados binaacuterios (read unformatted)

8889

Sumaacuterio

5 ndash Slides em httpwwwppenteadonetpeapea04_strings_iopdf Strings Expressotildees regulares Arquivos

httpwwwppenteadonetpea

8989

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89

Strings - codificaccedilotildees - UnicodeOs dados sobre um caractere Unicode satildeo importantes para suas buscas e identificaccedilatildeoIncluem nome e propriedades visiacutevel (printable) numeacuterico alfanumeacuterico maiuacutesculo minuacutesculo ldquoespaccedilordquo (blank) liacutengua matemaacutetico etc

ExsUnicode Character LATIN CAPITAL LETTER A (U+0041)Name LATIN CAPITAL LETTER ABlock Basic LatinCategory Letter Uppercase [Lu]Combine 0BIDI Left-to-Right [L]Mirror NIndex entries Latin Uppercase Alphabet Uppercase Alphabet Latin

Capital Letters LatinLower case U+0061Version Unicode 110 (June 1993)

Unicode Character INTEGRAL (U+222B)Name INTEGRALBlock Mathematical OperatorsCategory Symbol Math [Sm]Combine 0BIDI Other Neutrals [ON]Mirror YIndex entries Integral Signs INTEGRALSee Also latin small letter esh U+0283Version Unicode 110 (June 1993)

(resultados de httpwwwfileformatinfoinfounicodecharsearchhtm)

int

A

1289

Strings - codificaccedilotildees - Unicode

Unicode Character ANGSTROM SIGN (U+212B)Name ANGSTROM SIGNBlock Letterlike SymbolsCategory Letter Uppercase [Lu]Combine 0BIDI Left-to-Right [L]Decomposition LATIN CAPITAL LETTER A WITH RING ABOVE (U+00C5)Mirror NOld name ANGSTROM UNITIndex entries ANGSTROM SIGNLower case U+00E5Comments non SI length unit (=01 nm) named after A J ngstroumlm Å

Swedish physicist preferred representation is U+00C5Version Unicode 110 (June 1993)

Unicode Character GREEK SMALL LETTER ZETA (U+03B6)Name GREEK SMALL LETTER ZETABlock Greek and CopticCategory Letter Lowercase [Ll]Combine 0BIDI Left-to-Right [L]Mirror NUpper case U+0396Title case U+0396Version Unicode 110 (June 1993)

(resultados de httpwwwfileformatinfoinfounicodecharsearchhtm)

ζ

1389

Strings - codificaccedilotildees - UnicodeUnicode Character NABLA (U+2207)Name NABLABlock Mathematical OperatorsCategory Symbol Math [Sm]Combine 0BIDI Other Neutrals [ON]Mirror NIndex entries difference backward backward difference del NABLAComments backward difference gradient del used for Laplacian

operator (written with superscript 2)See Also white down-pointing triangle U+25BDVersion Unicode 110 (June 1993)

Java DatastringtoUpperCase() nablastringtoLowerCase() nablaCharacterUnicodeBlock MATHEMATICAL_OPERATORSCharactercharCount() 1CharactergetDirectionality() DIRECTIONALITY_OTHER_NEUTRALS [13]CharactergetNumericValue() -1CharactergetType() 25CharacterisDefined() YesCharacterisDigit() NoCharacterisIdentifierIgnorable() NoCharacterisLetter() NoCharacterisLetterOrDigit() NoCharacterisLowerCase() NoCharacterisWhitespace() No()

(resultados de httpwwwfileformatinfoinfounicodecharsearchhtm)

nabla

1489

Strings ndash Como codificar Unicode

Haacute vaacuterias formas Nenhuma simples como ASCII porque eacute necessaacuterio um nuacutemero muito maior de pontos de coacutedigo (haacute espaccedilo para 1 114 112 hoje haacute 109 449 alocados)

Apenas usar mais bytes com um nuacutemero constante por caractere exigiria pelo menos 21 bits por caractere (221 eacute 2 097 152)

Seria demais considerando que quase todos os caracteres escritos estatildeo entre os 128 do ASCII

Em quase todo texto 20 de cada 21 bits seriam 0

A maior parte das codificaccedilotildees usa formas mais elaboradas com um nuacutemero variaacutevel de bytes por caractere

Todas as codificaccedilotildees de uso comum tem o ASCII como subconjunto os 128 caracteres do ASCII satildeo codificados em forma idecircntica em ASCII e nas codificaccedilotildees usuais de Unicode

O que ajuda na compatibilidade software Unicode escrevendo texto que soacute conteacutem caracteres do ASCII produz texto idecircntico ao que seria produzido em ASCII

1589

Strings - codificaccedilotildees para Unicode

No mundo ocidental haacute apenas duas codificaccedilotildees de uso comum

UTF-8

ISO 8859-1 (tambeacutem chamado de Latin 1)

Por isso eacute necessaacuterio saber que codificaccedilatildeo usar ao trabalhar com Unicode

Alguns softwares formatos de arquivo informam a codificaccedilatildeo usada

Outros assumem que uma eacute usada (sem ter sido informada)

Outros tentam adivinhar quando natildeo satildeo informados qual eacute (esp navegadores)

Outros soacute perguntam para o usuaacuterio (esp editores de texto)

Sistemas operacionais oferecem variadas formas de digitar caracteres especiais

Pelos coacutedigos numeacutericos

Por programas seletores de caracteres Alguns seletores de caracteres (ex kcharselect do KDE) permitem fazer buscas pelo

nome ou propriedades

1689

Strings - Onde haacute suporte a Unicode em programaccedilatildeo

Linguagens variam muito

Desconhecem Unicode (soacute usam ASCII) C Fortran

Usam nativamente ASCII (inclusive no coacutedigo-fonte) mas tecircm tipos para strings Unicode e ou funccedilotildees para processar Unicode (em variados graus) C C++ IDL R

Usam nativamente Unicode (inclusive no coacutedigo-fonte) e tecircm bom suporte a strings Unicode Java Python Perl

Muitas vezes (mesmo quando Unicode pode ser usado em coacutedigo-fonte) caracteres Unicode satildeo escritos atraveacutes de ASCII com coacutedigos de escape para coacutedigos Unicode Exs

IDLgt p=plot(testtitle=Z(00C5222B))

C C++ Java Python u2207

ReferecircnciasCharacters vs byteshttpwwwtbrayorgongoingWhen200x20030426UTFThe absolute minimum every software developer absolutely positively must know about Unicode and character sets (no excuses)httpwwwjoelonsoftwarecomarticlesUnicodehtmlUnicode character searchhttpwwwfileformatinfoinfounicodecharsearchhtm

em IDL produz intÅ

produz nabla

1789

Strings - processamento baacutesico

Operaccedilotildees mais fundamentais que costumam ser suportadas em ldquotodasrdquo as linguagens bibliotecas padratildeo (exemplos usando sintaxe de IDL)

Atribuiccedilatildeo de literais

IDLgt a=some

IDLgt helpaA STRING = some

IDLgt printasome

Concatenaccedilatildeo

IDLgt b=a+ string

IDLgt helpbB STRING = some string

1889

Strings - processamento baacutesico

Valor loacutegico

String vazio (null string) eacute falso o resto eacute verdadeiro

IDLgt c=

IDLgt if c then printc is not empty string else printc is null string ()c is null string ()

IDLgt c=a

IDLgt if c then printc is not empty string else printc is null string ()c is not empty string

Espaccedilo natildeo eacute o mesmo que string vazio

IDLgt c=

IDLgt if c then printc is not empty string else printc is null string ()c is not empty string

1989

Strings - processamento baacutesico Comparaccedilotildees

IDLgt helpabA STRING = someB STRING = some string

IDLgt printb eq a 0

IDLgt printb gt a 1

IDLgt c=[ab9Some somesome other string]

IDLgt printc[sort(c)]format=(A) some9Somesomesome other stringsome string

IDLgt printa eq A 0

IDLgt printstrcmp(aAfold_case) 1

Comparaccedilotildees de ldquotamanhordquo (maior menor etc) satildeo comparaccedilotildees pela ordem de codificaccedilatildeo (ldquoalfabeacuteticardquo)

Algumas linguagens permitem definir o ordenamento (como considerar maiuacutesculasminuacuteculas letras com acentos nuacutemeros e siacutembolos) Exs Python C++ Java Perl

2089

Strings - processamento baacutesico Substrings

IDLgt printstrmid(abcdefg32)de

Algumas linguagens nativamente suportam iacutendices para indicar substrings C C++ Fortran Python Ex (Python)

gtgtgt s=abcdegtgtgt print(s[25])cde

Outras permitem que sejam definidos iacutendices por objetos strings

Busca de caracteres ou substrings

IDLgt printstrpos(abcdefgd) 3

IDLgt printstrpos(abcdefgj) -1

IDLgt printstrpos(abcdefgbc) 1

2189

Strings - processamento baacutesico

Outros

IDLgt printstrlen(1234567) 7

IDLgt printstrlen(1234567 ) 8

IDLgt printstrlen( 1234567 ) 9

IDLgt helpstrtrim( 1234567 2)ltExpressiongt STRING = 1234567

IDLgt helpstrtrim( 1234567 1)ltExpressiongt STRING = 1234567

IDLgt helpstrtrim( 1234567 0)ltExpressiongt STRING = 1234567

IDLgt printstrupcase(abcdEF)ABCDEF

IDLgt printstrlowcase(abcdEF)abcdef

Medindo quantos caracteres tem o string inclui espaccedilos em branco

Remoccedilatildeo dos brancos agrave esquerda agrave direita ou dos dois lados

2289

Strings - conversatildeo de outros tipos para strings

Eacute uma das operaccedilotildees mais comuns para gerar textos informativos e nomes escrever arquivos (aquivos texto discutidos adiante) etc

Eacute natildeo trivial jaacute que a conversatildeo pode ser feita de muitas formas diferentes

Para tipos fundamentais sempre haacute uma conversatildeo default tanto criando um string como usando algo tipo print (para strings terminal ou arquivos)

Todo comando tipo print (print printf sprintf string write etc) e toda escrita para arquivos texto eacute uma conversatildeo para string (terminais e arquivos texto soacute conteacutem strings)

2389

Strings - conversatildeo de outros tipos para strings

Exemplos de conversotildees (IDL)

IDLgt print[-109] -1 0 9

IDLgt print1d01B10 10000000 1 100000

IDLgt helpstring(1d01B10)ltExpressiongt STRING = 10000000 1 100000

IDLgt printfunitdblarr(343)

Tipos mais elaborados podem ou natildeo ter uma forma predefinida Com objetos eacute comum ser possiacutevel definir a conversatildeo (stringification) ao criar a classe

IDLgt h=hash(a109[01]18b)

IDLgt printh9 0 1a 100000180000 b

Strings

Coloca strings em um arquivo (adiante)

Strings criados por um meacutetodo da classe hash satildeo uma forma de representar o hash

2489

Strings - conversatildeo de outros tipos para strings

Algumas linguagens (Python IDL) tecircm mais de uma forma default de gerar strings Em Python uma forma eacute executaacutevel a outra eacute mais legiacutevel

In [30] x=arange(12)reshape(43)

In [31] print(x)[[ 0 1 2] [ 3 4 5] [ 6 7 8] [ 9 10 11]]

In [32] xOut[32]array([[ 0 1 2] [ 3 4 5] [ 6 7 8] [ 9 10 11]])

In [33] y=array([[ 0 1 2] [ 3 4 5] [ 6 7 8] [ 9 10 11]])

In [37] print(array_equal(xy))True

String mais legiacutevel

String executaacutevelPode ser usado para criar um objeto equivalente

2589

Strings ndash formataccedilatildeo expliacutecita

A formataccedilatildeo pode ser especificada se a conversatildeo default natildeo eacute adequada para definir a conversatildeo em um novo tipo

Cada linguagem tem sua sintaxe para formataccedilatildeo

Haacute dois estilos semelhantes em vaacuterias linguagens

Ambos os estilos satildeo sintaxes diferentes para a mesma ideacuteia Um coacutedigo especifica o tipo de dado sendo passado (inteiro real etc) e detalhes de como seraacute feito o string (largura do campo diacutegitos decimais alinhamento etc)

2689

Strings ndash formataccedilatildeo expliacutecita

Estilo Fortran

IDL

IDLgt print1d0+1d-9 10000000

IDLgt print1d0+1d-9format=(E1610)10000000010E+00

IDLgt printx=1d0+1d-9format=(A0F1613)X= 10000000010000

Estilo C (ldquoprintfrdquo)

IDL

IDLgt printformat=(x=1610e)1d0+1d-9x=10000000010e+00

Python

In [20] print(x=1610e (1e0+1e-9))x=10000000010e+00

Nenhum formato expliacutecito (default)

2789

Strings - formatos tipo Fortran

(apenas o principal ver documentaccedilatildeo para detalhes)

Ex (IDL)

IDLgt printx=1d0+1d-9format=(A0F1613)X= 10000000010000

Tambeacutem haacute modificadores para especificar alinhamento (-) se deve haver (ou ser suprimido) avanccedilo para a pŕoxima linha posiccedilatildeo dentro do campo etc

Coacutedigo Significado Exemplo(s)

A String (A) (10A)

I Inteiro decimal (I) (10I)(-2I)

B Inteiro binaacuterio (B) (10B)

Z Inteiro hexadecimal (Z) (10Z)

O Inteiro octal (O) (10O)

F Real ponto fixo (F)(F52)

E D Real ponto flutuante (E)(D1610)

G Real ponto fixo ou flutuante de acordo com o valor (G)(G10)

ldquordquo String literal (ldquox=rdquoI10)

X Caracteres em branco (A10XI)

2889

Strings - formatos tipo C (printf)(apenas o principal ver documentaccedilatildeo para detalhes)String com campos a serem substituiacutedos por valores (passados adiante) marcados por coacutedigos com

Ex (Python)In [20] print(x=1610e (1e0+1e-9))x=10000000010e+00

Haacute modificadores para especificar alinhamento como preencher o espaccedilo que sobra (espaccedilos zeros etc) para imprimir o sinal + etc

Coacutedigo Significado (tipo) Exemplo(s)

di Inteiro decimal (int) d 5d +05d

u Inteiro decimal sem sinal (unsigned int) u 7u

fF Real em ponto fixo (double float) f 136f

eE Real em ponto flutuante (double float) e 1610e

gG Real em ponto fixo ou flutuante decidido pelo valor (double float)

g 73G

xX Inteiro sem sinal hexadecimal (unsigned int) x 10X

o Inteiro sem sinal octal (unsigned int) o 5o

s String (string) s 10s

c Caractere (char) c

p Ponteiro - estilo C - (void ) p

literal

2989

Strings - conversatildeo de strings para outros tipos

Para gerar dados a partir de strings datas identificadores pedaccedilos de nomes valores numeacutericos armazenados em strings

Tambeacutem sempre haacute conversotildees default para os tipos baacutesicos onde o intepretador programa faz o possiacutevel para entender o string como um valor daquele tipo

Tipicamente eacute feito por casts (funccedilotildees de conversatildeo) reads (de strings ou arquivos texto (arquivos texto satildeo strings)) construtores de objetos ou implicitamente

3089

Strings - conversatildeo de strings para outros tipos - impliacutecitas

Exs (IDL)

IDLgt helpfix([17 17 171 -17 9 8])ltExpressiongt INT = Array[5]

IDLgt printfix([17 17 171 -17 9 8]) 17 17 17 -17 9

IDLgt printdouble([17 17 171 -17 9 8]) 17000000 17000000 17100000 -17000000 90000000

IDLgt readfunitabcd

IDLgt a=0d0IDLgt b=00IDLgt c=0IDLgt reads171d0 189d0 -9abcIDLgt helpabcA DOUBLE = 17100000B FLOAT = 189000C INT = -9

Converte o conteuacutedo do string para os tipos das variaacuteveis abcd (explicado adiante)

3189

Strings - conversatildeo de strings para outros tipos

Quando o default natildeo eacute suficiente (ou quando escrevendo o conversor em uma classe) costuma ser possiacutevel o fazer com formatos semelhantes aos formatos para gerar strings Exs (IDL)

IDLgt a=0d0IDLgt b=00IDLgt c=0IDLgt reads171d0 something 189d0-9abc READS Input conversion error Unit 0 File ltstdingt Error occurred at $MAIN$ Execution halted at $MAIN$

Natildeo funcionou porque sozinho ele natildeo conseguiu saber o que fazer com o ldquosomethingrdquo Usando um formato especiacutefico

IDLgt reads171d0 something 189d0-9 abcformat=(D6111XD611XI)

IDLgt helpabcA DOUBLE = 17100000B FLOAT = 189000C INT = -9

Exemplos mais complicados adiante (arquivos texto)

Variaacuteveis tecircm que ser definidas para informar para que tipo seraacute feita a conversatildeo default

3289

Strings - processamento natildeo baacutesicoOperaccedilotildees importantes e muito necessaacuterias mas que natildeo satildeo suportadas em todas as linguagens bibliotecas padratildeo

Testes (ex IDL)

IDLgt str=[afitsaFITSafitsaabfitsabcfits]

IDLgt printstrmatch(strfits) 1 0 0 1 1

IDLgt printstrmatch(strfitsfold_case) 1 1 0 1 1

IDLgt printstrmatch(strfitsfold_case) 1 1 1 1 1

IDLgt printstrmatch(strfits) 1 0 0 0 0

IDLgt printstrmatch(strfits) 0 0 0 1 0

3389

Strings - processamento natildeo baacutesico

Operaccedilotildees importantes e muito necessaacuterias mas que natildeo satildeo suportadas em todas as linguagens bibliotecas padratildeo

Separaccedilatildeo de partes (Ex IDL)

IDLgt printstrsplit(2011- 131 -extract)format=(A)2011131

Processamento de nomes de arquivos diretoacuterios (Ex IDL)

IDLgt printfile_dirname(some_directoryanother_directorysome_filetxt)some_directoryanother_directory

IDLgt printfile_basename(some_directoryanother_directorysome_filetxt)some_filetxt

IDLgt printfile_basename(another_directorysome_filetxttxt)+_alteredtxtsome_file_alteredtxt

3489

Strings - processamento natildeo baacutesico

Codificaccedilotildees (Ex Python 3)

gtgtgt s=infinite money infinNeuro sign

gtgtgt print(s)infinite money infineuro

gtgtgt print(ascii(s))infinite money u221eu20ac

gtgtgt print(sencode(utf-8))binfinite money xe2x88x9exe2x82xac

3589

Strings - processamento natildeo baacutesico

Perl eacute a linguagem mais avanccedilada para processamento de strings tem suporte nativo a muitas outras operaccedilotildees a semacircntica da linguagem eacute voltada principalmente para processar strings expressotildees regulares (de vaacuterios tipos) natildeo satildeo strings fazem parte da semacircntica

Ex (sem o objetivo que seja compreensiacutevel apenas para indicar o estilo)

Ler um arquivo contendo campos com nomes separados de valores por ()

temperature 10008name some modelx_dimension 100y_dimension 100z_dimension 50()

Armazenado-o em um mapa O que pode ser feito com apenas

While (ltgt) Loop over input linesPut pre-colon text into $1 post-colon into $2 if (m (S+) (+) ) Use $1 as key $2 as value $file_data$1 = $2

3689

Expressotildees regulares - definiccedilatildeo

Expressotildees regulares (regular expressions regex) satildeo a mais poderosa ferramenta para fazer buscas e separar substrings

Regex satildeo uma linguagem com o uacutenico objetivo de especificar propriedades de strings

Implementadas em graus diferentes em todas as linguagens modernas e modernizadas facilita encontrar uma expressatildeo jaacute pronta pois satildeo quase iguais em qualquer linguagem

Estatildeo na biblioteca padratildeo em IDL Python R Perl

Em C++ e Java em bibliotecas comuns (Boost Jregex)

Para que servem

Uma expressatildeo regular especifica propriedades de strings

O interpretador de expressotildees regulares (regular expression engine) recebe a expressatildeo e o string a analisar e determina se o string corresponde (matches) agrave expressatildeo regular

Em alguns casos o interpretador pode tambeacutem informar que parte(s) do string corresponde(m) a que parte(s) da expressatildeo regular e realizar processamentos com estas partes

3789

Expressotildees regulares ndash exemplos de usos Separar partes de strings

Encontrar linhas em arquivos que tenham nomes valores e comentaacuterios e separar estes pedaccedilos

Escalar com comentaacuterio

SLITPA = 351979 Slit position angle

Array 1D sem comentaacuterio (se extendendo por vaacuterias linhas)

BAND_BIN_CENTER = (03505400358950036629003732200379490 0387900104598)

Escalares em diferentes formatos

Total Mechanical Luminosity 15310E+03resources_usedwalltime=005603

Pedaccedilos de nomes

6063 17836E-20 2456 T FeIX((3Pe)3d(2PE)4p_1Po-3s2_3p6_1Se)

Datas separando ano mecircs dia hora (em vaacuterios formatos diferentes)

DATE-OBS= 2006-12-18 universal date of observationDATE_TIME = 2010-07-19T161032START_TIME = 2006-182T225102850Z

3889

Expressotildees regulares ndash exemplos de usos

Separar partes de strings Separar partes de nomes de arquivos (por significarem algo como identificar o

conteuacutedo)

specdec18s0041fitsscamdec18i0054fits15_7_mts_hmpixselh_mr15sav15_7_mts_hwpixselh_mr15sav16_3_mts_hwpixselb_mr16savreadmodel5l_-1_000010000_10000_r05_030_08196_0100000_005000000_1000eps

Determinar se um string eacute um nuacutemero (inteiro real fixo flutuante)

Encontrar identificadores Exs nomes de cataacutelogos endereccedilos HTTPFTP endereccedilos de email

Separar campos em arquivos sendo lidos onde as linhas natildeo tecircm a mesma formataccedilatildeo algumas linhas com colunas separadas por espaccedilos outras por tabs outras por

siacutembolos ignorando linhas de comentaacuterios e linhas vazias

3989

Expressotildees regulares - usoEx (IDL) encontrar nomes de arquivos com algumas propriedades

IDLgt printfilesformat=(A)CM_1477475933_1_viscubCM_1477476864_1_ircubCM_1477476864_1_irgcubCM_1477476864_1_viscubCM_1477477826_1_ircubCM_1477477826_1_irgcubCM_1477477826_1_viscubmosaic2cub

IDLgt printstregex(files+irgcubboolean) 0 0 1 0 0 1 0 0

A expressatildeo regular eacute +irgcub Especifica uma ou mais ocorrecircncias seguidas (+) de qualquer caractere () seguido de uma ocorrecircncia de irgcub (o ponto vem precedido do caractere de

escape () para ser entendido literalmente como um ponto e natildeo como o seu significado especial (qualquer caractere)

Esta aplicaccedilatildeo do interpretador (stregex) retorna um valor Booleano (verdadeirofalso) para cada elemento do string passado (files) que informa se aquele elemento correspondia agravequela expressatildeo regular

Este eacute um exemplo artificial Seria mais faacutecil ter usado strmatch(filesirgcub)

4089

Expressotildees regulares - uso

Em casos como este tipicamente o resultado de stregex seria usado como filtro para selecionar apenas os elementos do array de strings que satisfazem agravequela expressatildeo regular

IDLgt w=where(stregex(files+irgcubboolean)null)IDLgt printfiles[w]format=(A)CM_1477476864_1_irgcubCM_1477477826_1_irgcub

Ex (IDL) Determinar que strings conteacutem uma data no formato yyyy-mm-dd

IDLgt strs=[201002012010-02-012010-2-1aaaa-mm-ddT2010-02-01J]IDLgt printstregex(strs[0-9]4-[0-9]2-[0-9]2boolean) 0 1 0 0 1

Esta expressatildeo regular especifica quatro repeticcedilotildees (4) de diacutegitos (caracteres na faixa [0-9]) seguido de um (-) seguido de duas repeticcedilotildees (2) de dois diacutegitos ([0-9]) seguido de um (-) seguido de duas repeticcedilotildees (2) de dois diacutegitos ([0-9])

Uma expressatildeo regular apenas um pouco mais elaborada poderia corresponder aos 3 formatos de data no array acima E poderia se impedir que a uacuteltima (com outros caracteres antes e depois da data) seja aceita

4189

Expressotildees regulares - regras - caracteres ldquonormaisrdquo

Uma expressatildeo regular usa caracteres ldquonormaisrdquo e especiais para especificar o que se vai procurar na ordem em que aparecem na expressatildeo

Se um caractere eacute normal (natildeo eacute um dos especiais mostrados adiante) ele especifica uma ocorrecircncia daquele caractere

Ex J eacute uma expressatildeo regular que corresponde a qualquer string onde ocorra J Jaacute JA soacute corresponde a strings que tenham JA dentro

Exs (IDL)

IDLgt strs=[JJJJJJaJAjaJa]

IDLgt printstregex(strsJboolean) 1 1 1 0 1

IDLgt printstregex(strsJAboolean) 0 0 1 0 0

4289

Expressotildees regulares - regras - caracteres especiaisCaracteres especiais tecircm outros significados Para significar literalmente aquele caractere deve ser escapado (escaped) com um

Siacutembolo significado exemplo Corresponde(m) Escape o caractere seguinte deve ser interpretado

literalmente natildeo como especial aa

Qualquer caractere ab ajb aab abb jafbc

+ Uma ou mais repeticcedilotildees do que vem agrave esquerda a+b ab aab bab baabh

() Subexpressatildeo para agrupar termos afetados por um caractere especial (como parecircnteses em notaccedilatildeo matemaacutetica)

(ab)+c abc ababc dabababcg

Zero ou mais repeticcedilotildees dos termos agrave esquerda ab abbaab caaabg

Zero ou uma repeticcedilatildeo dos termos agrave esquerda ab b ab cabd cbd

| Alternaccedilatildeo qualquer um dos dois agrave esquerda a|bc ac bc jacd jbcd

n Exatamente n repeticcedilotildees do termo agrave esquerda a2b aab daaabg

n1n2 De n1 a n2 repeticcedilotildees do termo agrave esquerda a12b ab aab aaab gaaabbd

^ Acircncora (no comeccedilo) nada agrave esquerda ^ab ab abb

$ Acircncora (no fim) nada agrave direita ab$ abaab

[] Conjunto de valores (explicado adiante)

4389

Expressotildees regulares - regras - conjuntos de valores

[] denota um conjunto de valores que pode conter

Uma lista de coisas que devem corresponder Ex [abc] signfica qualquer caractere no conjunto abc Correspondem a esta

expressatildeo abcabha

Uma lista de coisas que natildeo podem corresponder [^abc] significa qualquer coisa que natildeo seja a b ou c Correspondem a esta

expressatildeo d jgs gg

Faixas de valores [0-9] signfica qualquer diacutegito [0-9a-zA-Z] significa qualquer diacutegito ou letra

Classes de valores como algumas faixas e outros conjuntos ocorrem com muita frequumlecircncia haacute nomes

especiais para eles Estes (em IDL) vecircm entre [] ex [[digit] significa o mesmo que [0-9]

4489

Expressotildees regulares - regras - classes de valores

Classe signficado

alnum Caracteres alfanumeacutericos 0-9a-zA-Z

alpha Caracteres alfabeacuteticos a-zA-Z

cntrl Caracteres de controle ASCII (natildeo visiacuteveis coacutedigos 1 a 31 e 127)

digit Diacutegitos (decimais) 0-9

graph Caracteres visiacuteveis ASCII 33 a 126 (natildeo inclui o espaccedilo)

lower Letras minuacutesculas a-z

print Caracteres ldquoimprimiacuteveisrdquo (visiacuteveis e o espaccedilo) ASCII 32 a 126

punct Caracteres de pontuaccedilatildeo $amprsquo()+-lt=gt[]^_lsquo|~

space Os caracteres ldquoem brancordquo (blank) espaccedilo tab tab vertical CR LF (ASCII 32 e 9-13)

upper Letras maiuacutesculas A-Z

xdigit Diacutegitos hexadecimais 0-9A-Fa-f

lt Comeccedilo de palavra (palavra definida como sequumlecircncia de coisas natildeo space)

gt Fim de palavra (palavra definida como sequumlecircncia de coisas natildeo space)

Estas satildeo apenas as principais Algumas implementaccedilotildees tecircm muito mais (em particular nas linguagens que usam Unicode nativamente)

4589

Expressotildees regulares - exemplos

Determinar se strings satildeo nuacutemeros (Ex IDL)

IDLgt str=[9-18 875-812-45913E9-98d7a188d032f5]

Inteiros

IDLgt intexpr=^[-+][0-9]+$

IDLgt printstregex(strintexprboolean) 1 1 0 0 0 0 0 0 0 0

Ponto flutuante

IDLgt fpexpr=^[-+](([0-9][0-9]+)|([0-9]+[0-9]))([eEdD][-+][0-9]+)$

IDLgt printstregex(strfpexprboolean) 1 1 0 1 1 1 1 1 0 0

Sinal opcional

1 ou mais diacutegitos

Sinal opcional

0 ou mais diacutegitos opcionalmente seguidos de um ponto e 1 ou mais diacutegitos

1 ou mais diacutegitos opcionalmente seguidos de um ponto e 0 ou mais diacutegitos

ou Expoente opcional letra do expoente seguida de sinal opcional seguido de um ou mais diacutegitos

4689

Expressotildees regulares ndash extraccedilatildeo

Interpretadores de expressotildees regulares costumam oferecer mais que apenas testar se um string corresponde a uma expressatildeo

Em geral tambeacutem podem retornar que parte(s) do string corresponde(m) agrave expressatildeo

Ex (IDL) Determinar se um string conteacutem uma data incluindo os formatos

IDLgt dates=[2011-01-312011 1 3120110131something done on y2011m1d31 with something]

E extrair a data de dentro do string

IDLgt expr=[0-9]4[0-9]12[0-9]12

(4 diacutegitos)(qualquer separador)(1 a 2 diacutegitos)(qualquer separador)(1 a 2 diacutegitos)

IDLgt printstregex(datesexprextract)format=(A)2011-01-312011 1 31201101312011m1d31

Como agora separar ano mecircs e dia Com uma busca e uma extraccedilatildeo para cada Poderia ser mais eacute mais faacutecil com uma uacutenica expressatildeo regular

4789

Expressotildees regulares - aleacutem de apenas testes

Tambeacutem podem retornar que parte(s) do string correspondem agrave expressatildeo toda e agraves suas subexpressotildees (partes da expressatildeo delimitadas por parecircnteses)

Ex (IDL) Separar pedaccedilos de datas Neste caso para a expressatildeo ficar menor assumindo um formato simples (yyyy-mm-ddThhmmssfff) Mas poderia ser um formato mais livre como no exemplo anterior

IDLgt str=Stuff observed on 2011-01-31T123924983 with some instrumentIDLgt expr=([0-9]4)-([0-9]2)-([0-9]2)T([0-9]2)([0-9]2)([0-9]2[0-9]3)

(quatro diacutegitos)-(2 diacutegitos)-(2 diacutegitos)T(2 diacutegitos)(2 diacutegitos)(2 diacutegitos3 diacutegitos)

IDLgt pieces=stregex(strexprextractsubexpr)IDLgt printpiecesformat=(A)2011-01-31T12392498320110131123924983IDLgt d=julday(pieces[2]pieces[3]pieces[1]pieces[4]pieces[5]pieces[6])IDLgt printdformat=(F166) 2455593027372

Expressatildeo inteiraPrimeira subexpressatildeoSegunda subexpressatildeoTerceira subexpressatildeoQuarta subexpressatildeoQuinta subexpressatildeoSexta subexpressatildeo

4889

Expressotildees regulares - referecircncias httpxkcdcom208

Viacutedeos do Software Carpentry

httpsoftware-carpentryorg4_0regexp

4989

Arquivos

Quase todo programa precisa armazenar dados em arquivos

Podem ser pequenos arquivos de paracircmetros ou enormes arquivos de dados produzidos ou a processar

Apesar do sugerido pela praacutetica comum arquivos texto natildeo satildeo sempre a melhor escolha para armazenar dados - e haacute muitas formas diferentes de os usar

Qual eacute a melhor escolha

Assim como para linguagens ou contecirciners natildeo existe ldquoo melhor formatordquo Cada um tem suas vantagens e desvantagens

Dados diferentes (mesmo se usados pelos mesmos programas) em geral se adequam melhor a formatos diferentes

5089

Arquivos - texto X binaacuterios

Em qualquer formato arquivos satildeo armazenados como diacutegitos binaacuterios

Mas haacute duas formas principais como eles podem ser codificados

Arquivos baseados em texto (text files)

Dados satildeo transformados em caracteres usando alguma formataccedilatildeo (mesmo se impliacutecita) e escritos com alguma codificaccedilatildeo de texto (comumente mas natildeo necessariamente ASCII)

Um arquivo texto eacute um ou mais strings As mesmas conversotildees tecircm que ser feitas depara outros tipos

Arquivos ldquobinaacuteriosrdquo (binary files)

Embora todo arquivo seja binaacuterio este nome costuma ser usado soacute para aqueles em que os dados natildeo estatildeo na forma de texto

Com frequumlecircncia (nem sempre) os dados satildeo gravados de forma idecircntica a como satildeo armazenados na memoacuteria

Muitos formatos usam uma mistura de partes em texto e partes binaacuterias

Um cabeccedilalho (header) de texto que daacute informaccedilotildees (metadados) sobre os dados armazenados na parte binaacuteria que vem depois

O cabeccedilalho conteacutem em especial informaccedilotildees sobre como ler os dados binaacuterios

5189

Arquivos - texto X binaacuterios

Vantagens de arquivos texto

Legiacuteveis por pessoas (human readable)

Podem ser auto-suficientes todo o necessaacuterio para os ler e entender o que conteacutem pode ser obtido olhando o arquivo

Satildeo os menos especiacuteficos a linguagens software normalmente satildeo escritos em ASCII ou Unicode e sempre haacute algum suporte a ler escrever texto em linguagens software

Haacute alguns formatos padratildeo para texto (exs CSV XML) que satildeo suportados em muitas plataformas diferentes

5289

Arquivos - texto X binaacuterios

Vantagens de arquivos binaacuterios

Em geral natildeo haacute conversotildees entre o os dados como armazenados na memoacuteria O que torna o armazenamento mais eficiente e sem alteraccedilotildees nos valores

A maior parte dos formatos padronizados eacute binaacuteria Exs FITS cube CDF NetCDF HDF HDF5 JPEG JPEG2000 TIFF GeoTIFF MPEG etc

Eacute mais comum que haja bibliotecas prontas (ateacute de alto niacutevel) para consulta leitura e gravaccedilatildeo

Os formatos melhor desenhados satildeo autodocumentados (em texto ou binaacuterio) para os ler natildeo eacute necessaacuterio conhecimento preacutevio sobre como os dados foram armazenados

Toda linguagem plataforma costuma ter seu formato binaacuterio mais nativo que costuma ser o mais faacutecil para leitura gravaccedilatildeo Em particular nas de alto niacutevel que tecircm formatos autodocumentados (especialmente

em IDL R Python Java)

Muitos formatos tecircm opccedilatildeo de compressatildeo dos dados

5389

Arquivos - proprietaacuterios X padratildeo

Independente da escolha texto binaacuterio programas devem escolher entre usar um formato proacuteprio ou um formato padronizado

A principal vantagem de formatos proacuteprios eacute que satildeo definidos da forma mais conveniente para a aplicaccedilatildeo que os usa simplificando leitura e gravaccedilatildeo e potencialmente otimizando recursos (acesso ao disco tamanho do arquivo etc)

A principal desvantagem de formatos proacuteprios eacute ser necessaacuterio escrever todo o coacutedigo para os ler gravar

Pode dar mais trabalho que usar um formato geneacuterico que natildeo seja exatamente o que melhor se encaixa na aplicaccedilatildeo

O coacutedigo para processar o formato em geral vai ser menos completo e conveniente de usar que o de um formato bem estabelecido usado por muitos outros em muitos ambientes

Cada novo software que for usar estes arquivos vai precisar compartilhar do mesmo coacutedigo ou precisar de coacutedigo novo (em particular se em outra linguagem) para ler gravar naquele formato

Eacute necessaacuterio documentar o formato e decidir sobre como ele seraacute definido

Se outros jaacute colocaram muito trabalho desenvolvendo bons formatos padratildeo bem suportados em muitos ambientes por que ter o trabalho de reinventar (e reprogramar redocumentar e retestar) a roda

5489

Arquivos - padrotildees comuns em astronomia (exs adiante)

Texto

CSV Comma-separated values - bem suportado por muitos softwares

ldquoColunas fixasrdquo Natildeo eacute um padratildeo bem definido mas eacute praacutetica comum para tabelas (2D)

XML Extensible Markup Language - O padratildeo texto mais flexiacutevel de grande uso em programaccedilatildeo geral para armazenar qualquer coisa com frequumlecircncia de forma hieraacuterquica Bem suportado por linguagens modernas (e modernizadas) e bibliotecas das principais

linguagens gerais Alta complexidade o torna trabalhoso de usar

5589

Arquivos - padrotildees comuns em astronomia (exs adiante)Binaacuterios

FITS Flexible Image Transport System - o mais comum para observaccedilotildees astronocircmicas Conteacutem os dados (em geral arrays 1D 2D ou 3D) e documentaccedilatildeo (nos cabeccedilalhos) sobre a origem e caracteriacutesticas dos dados Tambeacutem usado para armazenar tabelas de dados quaisquer mesmo que natildeo sejam observaccedilotildees (especialmente pelo STSCI) Variam muito em qualidade de documentaccedilatildeo

NetCDF Network Common Data Form - evoluccedilatildeo do CDF autodocumentado eacute comum e bem suportado para vaacuterios arrays de dados

HDF5 Hierarchical Data Format ndash autodocumentado comum e bem suportado permitindo aleacutem de simples arrays estruturas (eacute um formato hieraacuterquico)

Formatos de imagens JPEG JPEG2000 TIFF GeoTIFF etc - voltados para arrays 2D3D de inteiros ou (em alguns casos) reais com ou sem compressatildeo JPEG2000 tem caracteriacutesticas mais avanccediladas como imagens multiresoluccedilatildeo

Formatos vetoriais PS EPS DXF SHP SVG - variados niacuteveis de suporte a armazenamento de vetores e formas em 2D ou 3D

ISIS Cube semelhante em caracteriacutesticas ao FITS mais usado em sensoriamento remoto geociecircncias e ciecircncias planetaacuterias em geral para observaccedilotildees 1D 2D ou 3D

Formatos nativos de linguagens todo o trabalho de leitura e gravaccedilatildeo eacute feito automagicamente pela biblioteca padratildeo em IDL R Python Java

5689

Arquivos texto - newlines

Apesar do que possa parecer arquivos texto natildeo tecircm intrinsecamente vaacuterias linhas Arquivos texto satildeo soacute uma sequumlecircncia 1D de caracteres em alguma codificaccedilatildeo Separaccedilatildeo em linhas (equivalente a interpretar o arquivo como 2D em linhas e colunas) eacute

especificada por convenccedilotildees Natildeo haacute apenas uma convenccedilatildeo para o fim de linhas

A mais primitiva convenccedilatildeo eacute separaccedilatildeo nenhuma estipula-se que linhas tenham um nuacutemero fixo N de caracteres e cabe ao software que lecirc o arquivo entender que uma linha nova ocorre regularmente a cada N caracteres

Eacute a forma menos portaacutevel e mais inconveniente eacute necessaacuterio o conhecimento preacutevio (ou por inspeccedilatildeo do arquivo) de quantos caracteres haacute por linha

A maior parte dos editores de texto natildeo vai saber separar linhas desta forma (por falta deste conhecimento preacutevio) Exemplo (de um FITS real)

SIMPLE = T Fits standard BITPIX = 16 Bits per pixel NAXIS = 0 Number of axes EXTEND = T File may contain extensions

O que com as linhas quebradas nos lugares certos seria

SIMPLE = T Fits standard BITPIX = 16 Bits per pixel NAXIS = 0 Number of axes EXTEND = T File may contain extensions

5789

Arquivos texto - newlines

A forma mais comum de especificar linhas eacute com um marcador do final de linha (newline)

Eacute um caractere especial natildeo normalmente presente no texto que serve para marcar fim de linhas

Mas natildeo haacute soacute um padratildeo de newline Os mais comuns

LF (Line Feed ASCII 10) ndash Unix Linux Mac OS X

CR - (Carriage Return ASCII 13) - Mac OS lt10

CR+LF (CR seguido de LF) - Windows DOS

Eacute o motivo de o Notepad (Windows) natildeo entender as quebras de linha de arquivos escritos com o formato nativo de Linux o arquivo soacute tem LF enquanto o editor espera CR+LF

Alguns sistemas (strings em vaacuterias linguagens por exemplo) usam o coacutedigo de escape n para indicar newline que eacute codificado de acordo com o padratildeo sendo usado

Em geral bibliotecas de leitura e gravaccedilatildeo de arquivos usam (default pelo menos) o newline nativo do sistema em que satildeo usadas

Programas de conversatildeo entre os sistemas satildeo comuns (ex dos2unix)

O Wordpad identifica se for usado soacute LF e quebra as linhas de acordo

5889

Arquivos - texto - CSV

Comma-separated values

O formato mais padronizado para tabelas (arrays 2D) em texto (frequentemente mas natildeo necessariamente ASCII)

Bem suportado por bibliotecas padratildeo de linguagens e outros softwares (Excel Calc Origin Google Docs etc)

Conteacutem Linhas de cabeccedilalho (opcionais mas recomendadas) linhas com qualquer texto geral

descrevendo o arquivo e em geral uma linha de tiacutetulo para as colunas da tabela Uma (apenas uma) tabela onde todas as linhas tecircm o mesmo nuacutemero de colunas

Colunas separadas por viacutergulas (opcionalmente pode ser outro separador) Linhas terminadas por newline (qualquer que seja) Strings delimitados por ldquo ldquo

Ex

NAMECALMPOSFILNAMEECHLPOSDISPPOSTARGNAMEPOSDIRCLASSMJD-OBSITIMECOADDSdec18s00010NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001dec18s00020NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001dec18s00120NIRSPEC-5-AO635800364500itan140NIRSPEC-5-AOp2 TITAN5408763000001dec18s00140NIRSPEC-5-AO626300364500itan140NIRSPEC-5-AOp1 TITAN5408763000001dec18s00151NIRSPEC-5-AO626300364500itan140NIRSPEC-5-AOp1ARC5408764000001dec18s00160NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001

Natildeo eacute necessaacuterio que as colunas tenham largura constante

Cabeccedilalho

5989

Arquivos - texto - CSVHaacute amplo suporte a leitura e gravaccedilatildeo de CSV sem precisar recorrer a procedimentos de baixo niacutevel

Podem ser diretamente importados em Excel Calc Origin Google Docs ou lido facilmente com bibliotecas padratildeo comuns Ex (IDL)

IDLgt c=read_csv(filesearch_scamcsvheader=h)IDLgt printhNAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS

IDLgt helpc Structure ltc8bca508gt 11 tags length=5256 data length=5248 refs=1 FIELD01 STRING Array[41] FIELD02 LONG Array[41] FIELD03 STRING Array[41] FIELD04 DOUBLE Array[41] FIELD05 DOUBLE Array[41] FIELD06 STRING Array[41] FIELD07 STRING Array[41] FIELD08 STRING Array[41] FIELD09 STRING Array[41] FIELD10 DOUBLE Array[41] FIELD11 LONG Array[41]

IDLgt printcfield01[03]dec18s0001 dec18s0002 dec18s0003 dec18s0004

IDLgt printcfield03[03]NIRSPEC-5-AO NIRSPEC-5-AO NIRSPEC-5-AO NIRSPEC-5-AO

6089

Arquivos - texto - CSVEx (IDL) Criaccedilatildeo de um CSV com uma tabela de valores

Criaccedilatildeo de 3 arrays 1D (12 elementos) um para cada coluna

IDLgt x=dindgen(3)IDLgt y=dindgen(4)IDLgt xx=reform(rebin(x34)12)IDLgt yy=reform(rebin(reform(y14)34)12)IDLgt f=xx+yy10IDLgt helpxxyyfXX DOUBLE = Array[12]YY DOUBLE = Array[12]F DOUBLE = Array[12]

Escrita do arquivo

IDLgt write_csvexamplecsvxxyyfheader=[XYX+10Y]

ResultadoXYX+10Y000000000000000000000000100000000000000010000000200000000000000020000000000000001000000010000000100000001000000011000000()

6189

Arquivos - texto - ldquoColunas regularesrdquoFixed column width

Natildeo eacute exatamente um padratildeo Eacute uma praacutetica comum

Armazena uma tabela (array 2D) de forma regular simples de ser interpretada e lida

Costumam ter linha(s) de cabeccedilalho descrevendo o conteuacutedo do arquivo em geral com uma linha para os nomes das colunas

As demais linhas conteacutem os dados sempre ocupando a mesma largura por coluna e escritos no mesmo formato em cada coluna

Costumam ser simples de ler inclusive interativamente (exs Excel Calc Origin read_ascii)

Ex (IDL) Uma simples tabela soacute de nuacutemeros

wavl CH4=33 wavl CH4=25 wavl CH4=10 wavl CH4=08 wavl CH4=05 wavl CH4=026 wavl CH4=02 477330000 0090130 477330000 0091110 477330000 0089250 477330000 0087000 477330000 0087140 477330000 0090080 477330000 0088110 480040000 0090930 480040000 0091930 480040000 0090160 480040000 0087930 480040000 0088110 480040000 0090950 480040000 0089090 482750000 0091710 482750000 0092730 482750000 0091060 482750000 0088850 482750000 0089080 482750000 0091810 482750000 0090060 485450000 0092530 485450000 0093570 485450000 0092000 485450000 0089810 485450000 0090100 485450000 0092730 485450000 0091090

IDLgt a=read_ascii(specs_27s_ntxtdata_start=1header=header)IDLgt printheader wavl CH4=33 wavl CH4=25 wavl CH4=10 wavl CH4=08 wavl CH4=05 wavl CH4=026 wavl CH4=02 IDLgt helpa Structure ltd423c9a8gt 1 tags length=224 data length=224 refs=1 FIELD01 FLOAT Array[14 4]

6289

Arquivos - texto - ldquoColunas regularesrdquoJaacute um arquivo um pouco mais difiacutecil de ler

NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS dec18s0001 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0002 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0003 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 FLAT 5408757812500 460000 5 dec18s0004 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 DARK 5408757812500 460000 5

Por ter colunas de tipos diferentes (strings inteiros reais) natildeo eacute possiacutevel o ler em um simples array Mas eacute faacutecil o colocar em uma estrutura de arrays onde cada campo eacute uma coluna

Especificando interativamente como interpretar as linhasIDLgt templ=ascii_template(filesearch_scamtxt)

Nome do campo (default mostrado)

Tipo do campo (identificado automaticamente)

Posiccedilatildeo (caracter) do comeccedilo (identificada automaticamente)

Linha de exemplo para verificar as colunas

6389

Arquivos - texto - ldquoColunas regularesrdquoDepois de feito o template o arquivo pode ser lido com apenas

IDLgt a=read_ascii(filesearch_scamtxttemplate=templ)IDLgt helpa Structure ltd4ec4608gt 11 tags length=416 data length=416 refs=1 FIELD01 STRING Array[4] FIELD02 LONG Array[4] FIELD03 STRING Array[4] FIELD04 FLOAT Array[4] FIELD05 FLOAT Array[4] FIELD06 STRING Array[4] FIELD07 STRING Array[4] FIELD08 STRING Array[4] FIELD09 FLOAT Array[4] FIELD10 FLOAT Array[4] FIELD11 LONG Array[4]IDLgt printafield01dec18s0001 dec18s0002 dec18s0003 dec18s0004IDLgt printafield04 626300 626300 626300 626300

O template (uma estrutura contendo dados sobre como ler o arquivo) pode ser usado para outros arquivos no mesmo formato No lugar de ter sido criado interativamente poderia ter sido lido de algum arquivo Poderia ter especificado nomes para os campos que seriam mais amigaacuteveis que coias como FIELD11

6489

Arquivos - texto - XML

Extensible Markup Language

Admite grande flexibilidade e por isso pode ter alta complexidade

Valores satildeo colocados dentro de uma estrutura em hieraacuterquica (em uma aacutervore) com os noacutes identificados pelos seus nomes (chaves)

Largamente usado em muitas aacutereas para armazenar conjuntos arbitraacuterios de quaisquer estruturas de dados

A maioria das aplicaccedilotildees usa um formato que eacute um subconjunto do XML especificado por um Schema comumente em um arquivo XML DTD (Document Type Definition)

6589

Arquivos - texto ndash XML ndash exemplos de usos

Armazenamento de dados de aplicaccedilotildees web (comum para exportar importar dados MediaWiki DokuWiki WordPress ADS Lattes etc)

Documentos Office (docx pptx xlsx) OpenOffice (odt opd ods)

Como versotildees de outros formatos FITSML XDF

ldquoScientific Dataset XML NASAs Astronomical Data Center (ADC) sponsors a number of research projects that

use XML for scientific data representation The XML activities at the ADC are sponsored and supported by the NASA Office of Space Science Applied Information Systems Research Program (AISRP)rdquo - httpxmlcoverpagesorgnasa-adchtml

Astronomical Instrument Markup Language (AIML)

SVG ndash Scalable Vector Graphics

Muitas de outras aplicaccedilotildees listadas em httpxmlcoverpagesorgxmlhtmlapplications

6689

Arquivos - texto ndash XML - exemploltxml version=10 gtltDOCTYPE Xdmf SYSTEM Xdmfdtd []gtltXdmf xmlnsxi=httpwwww3org2001XInclude Version=20gt ltDomaingt lt-- Example of Basic Topologies --gt ltInformation Name=Descriptiongt Example of a Polyvertex Topology ltInformationgt ltGrid Name=Polyvertex GridType=Uniformgt ltTopology TopologyType=Polyvertex Dimensions=3 NodesPerElement=3gt ltDataItem Format=XML Dimensions=3 3 NumberType=Floatgt 0 1 2 4 5 6 8 9 10 ltDataItemgt ltTopologygt ltGeometry Type=XYZgt ltDataItem Format=XML Dimensions=4 4 3gt 00 00 00 10 00 00()Que mostra que a interpretaccedilatildeo (parsing) de XML eacute em geral complexa

6789

Arquivos - texto - XML

Haacute muitas bibliotecas de alto niacutevel para fazer o processamento (parsing) e entregar os dados em uma estrutura conveniente

A complexidade em processar XML estaacute em decidir o que fazer com os dados jaacute que os arquivos podem ser muito complexos

As APIs (Application Programming Interfaces) mais comuns para processar XML que satildeo implementadas em muitas linguagens

DOM (Document Object Model) ndash manteacutem todo o conteuacutedo do em uma estrutura de dados (em geral uma aacutervore) em uma variaacutevel (em geral um objeto) Esta pode ser consultada para obter os valores de interesse para os alterar e usada para escrever um arquivo

SAX (Simple API for XML) ndash Interpretador (parser) por objetos O usuaacuterio escreve uma classe herdando da classe SAX provendo os meacutetodos que vatildeo processar os campos agrave medida em que estes satildeo lidos

6889

Arquivos - binaacuterios - FITSFlexible Image Transport System

O formato mais comum para observaccedilotildees astronocircmicas Tambeacutem usado para armazenar quaisquer dados mesmo natildeo relacionados a observaccedilotildees (especialmente tabelas como eacute praacutetica do STSCI)

Conteacutem um (ou mais) cabeccedilalho(s) de texto com metadados (informaccedilotildees sobre os dados como caracteriacutesticas (necessaacuterias para os ler) origem condiccedilotildees em que foram obtidos processamento realizado etc)

SIMPLE = T image conforms to FITS standard BITPIX = 32 bits per data value NAXIS = 2 number of axes NAXIS1 = 1024 NAXIS2 = 1024 BSCALE = 100000 Scaling factor BZERO = 000000 Scaling zero-point TELESCOP= Keck II Telescope SLITNAME= 0041x226 Slit Name SLITPA = 351979 Slit position angle SLITX = 131500 X pixel of the center of the slit LST = 12010446 local apparent sidereal time (()

Depois do cabeccedilalho haacute uma (ou mais) seccedilatildeo(otildees) de dados binaacuterios Costuma(m) ser array(s) 1D (espectros) 2D (imagens) ou 3D (ldquocubos de dadosrdquo)

De inteiros ou reais inteiros satildeo comuns em contagens de instrumentos reais para valores derivados (fluxos intensidades etc)

6989

Arquivos - binaacuterios - FITSNormalmente FITS satildeo lidos escritos por bibliotecas prontas de (relativamente) alto niacutevel usuaacuterio natildeo tem que saber como os dados satildeo armazenados no arquivo nem como os ler escrever Ex (IDL com a biblioteca idlastro)

IDLgt fits_info2dspectrumfits2dspectrumfits has 3 extensionsPrimary header 288 recordsNo dataExtension 1 -- SCI Header 144 records IMAGE ( 1201 1201 )Extension 2 -- ERR Header 72 records IMAGE ( 1201 1201 )Extension 3 -- DQ Header 72 records IMAGE ( 1201 1201 )

IDLgt mydata=readfits(2dspectrumfitsexten_no=1myheader) READFITS Reading FITS extension of type IMAGE READFITS Now reading 1201 by 1201 array

IDLgt extastmyheadermyastIDLgt sz=size(mydatadimensions)IDLgt xy2ad[1sz[0]][1sz[1]]myastcorners_acorners_dIDLgt printcorners_aCorners of the data array from file 2dspectrumfits are at 14487480 33063480

IDLgt printcorners_d -00041264444 00041402222

Obteacutem os dados de coordenadas (WCS) do header

Coloca os dados no array (2D de floats) mydata e o header no array (1D de strings) myheader

Calcula as coordenadas das quinas da imagem atraveacutes do WCS

Provecirc informaccedilotildees sobre o arquivo

7089

Arquivos - binaacuterios - ISIS Cube

Formatos como FITS se adequam muito a ter uma interface de mais alto niacutevel por objetos

Tambeacutem para dados em tabelas FITS muito mais trabalhosos de ler em baixo niacutevel que se adequam muito mais a mapas ou estruturas

Exemplo (de um formato semelhante a FITS ISIS cube)

O objeto ao ser criado lecirc todo o arquivo

cube=pp_editablecube(CM_1553510065_1_ircub)

Meacutetodos fornecem os dados desejados para obter quando necessaacuterio os dados de interesse

Find out the names of the backplanesprintcubegetproperty(backnames)Get the start time of the cubeprintcubegetfromheader(START_TIME)2007-084T100057286Z

Valores no cabeccedilalho podem ser convenientemente fornecidos como um mapa

header=cubeheader_as_hash()printheader[START_TIME]2007-084T100057286Z

7189

Arquivos - binaacuterios ndash ISIS Cube

Os dados satildeo fornecidos como arraysMake a contour plot of the latitudesc=contour(cubegetsuffixbyname(LATITUDE))Get the band with wavelength nearest to 21 (in the units used in the cube)selband=cubegetbandbywavelength(21wavelengths=selwavs)

Interfaces por overload tornam o acesso ainda mais conveniente

selband=cube[21]

selwavs=cube[21]

Retorna um array com a banda de comprimento de onda mais proacuteximo de 21 (microm)

Retorna o comprimento de onda mais proacuteximo de 21 (microm) da banda retornada acima

7289

Arquivos - binaacuterios ndash ISIS Cube Alteraccedilotildees feitas ao conteuacutedo satildeo automaticamente refletidas em todos os

lugares (cabeccedilalho em particular) afetados mantendo o objeto vaacutelido que pode depois ser gravado em um novo arquivo

IDLgt printcubelinescubesamplescubebands 64 64 256

IDLgt helpcubecoreltExpressiongt FLOAT = Array[64 64 256]

IDLgt cubecore=dblarr(100100256)

A linha acima natildeo eacute uma atribuiccedilatildeo eacute uma invocaccedilatildeo de meacutetodo Eacute equivalente acubesetpropertycore=dblarr(100100256)

Eacute o trabalho da funccedilatildeo setproperty decidir se a propriedade passada (core) faz sentido e se fizer fazer todo o trabalho necessaacuterio a esta mudanccedila Para o usuaacuterio eacute tudo automaacutetico e os dados da classe satildeo vaacutelidos o tempo todo

IDLgt helpcubecoreltExpressiongt DOUBLE = Array[100 100 256]

IDLgt printcubelinescubesamplescubebands 100 100 256

IDLgt cubesaveCM_1553510065_1_ir_editedcub

7389

Arquivos - binaacuterios ndash NetCDF e HDF5

Network Common Data Form e Hierarchical Data Format

Os dois uacutenicos formatos bem estabelecidos para dados cientiacuteficos geneacutericos

Armazenam dados como vaacuterias variaacuteveis e seus metadados Para cada variaacutevel haacute (ou pode haver) os metadados

Nome Dimensotildees (do array) Unidades Comentaacuterios

Ambos permitem arrays multidimensionais

Apenas HDF5 permite estruturas (daiacute vem a hierarquia)

Autodocumentados qualquer software que saiba ler um destes formatos lecirc qualquer arquivo sem precisar de conhecimento preacutevio sobre como o arquivo foi gerado

Muito bem suportados em bibliotecas padratildeo e natildeo padratildeo em softwares interativos e visualizadores (inclusive plugins para navegadores)

httpwwwunidataucaredusoftwarenetcdf httpenwikipediaorgwikiHdf5

NetCDF eacute mais simples de usar por natildeo ter hierarquia dando menos trabalho para ler e escrever dados Se hierarquia natildeo eacute necessaacuteria eacute mais conveniente de usar que HDF5

7489

Arquivos - binaacuterios - NetCDF e HDF5Haacute tambeacutem o formato CDL uma versatildeo ASCII do NetCDF A biblioteca padratildeo do NetCDF inclui conversores entre estes formatos

$ ncdump -h refspec_g01_0ncnetcdf refspec_g01_0 dimensions nlay = 51 nwn = 400 nleg = 33 numu = 2 nlev = 52 nphi = 3 ngas = 2 nwnc = 1 scal = 1 v3 = 3 dnl = 1 nk = 1 tdisr = UNLIMITED (0 currently) na = 16

variables float alb(nwn) float z(nlay) float t(nlay) float p(nlay) float wl(nwn) float iof(nwn) float mtau(nwn) float htau(nwn) float hctaus(nwn) float gtau(nwn) float outcos(scal) float phi(nleg) float phic(scal) float umu(numu) float flux(v3 nwn nlev) float mix(nlay ngas) float c(nlay) float psat(nlay) float ga(nwnc) float wlc(nwnc) float inc(scal) int dm(scal) int ord(scal) float fbeam(scal) float wn(nwn) float tautot(nwn nlay) float htaus(nwn nlay) float htaux(nwn nlay) float taug(nwn nlay) float phase(nwn nlay nleg) float ssa(nwn nlay) float uu(nwn nphi nlev numu) float u0u(nwn nlev numu) float tray(nwn nlay) float gtauo(tdisr nwn nlay)

Haacute 14 variaacuteveis usadas como dimensotildees para as 35 variaacuteveis que satildeo arrays

Ex alb(nwn) indica que alb eacute um array 1D de nwn elementos

nwn estaacute armazenado como uma das dimensotildees e eacute 400 portanto alb tem 400 elementos

Parte do conteuacutedo de um arquivo NetCDF em formato CDL (gerado pelo programa ncdump)

7589

Arquivos - binaacuterios - NetCDF e HDF5Conteuacutedo daquele arquivo visualizado com o ncview (acompanha a biblioteca NetCDF padratildeo)

7689

Arquivos - binaacuterios - NetCDF e HDF5O conteuacutedo de todo o arquivo pode ser lido facilmente com as bibliotecas disponiacuteveis e armazenado em contecirciners convenientes Usando um objeto que gera um resultado um pouco mais conveniente

IDLgt h=pp_readncdf(refspec_g01_0nchash)IDLgt printhvar_dims ltObjHeapVar229(HASH)gtvars ltObjHeapVar152(HASH)gtdims ltObjHeapVar118(HASH)gt

IDLgt printh[vars]T 173203 175459 175848 176001 175975 Z 431869 418858 406067 393403 380464 FLUX 300660 145536 0705180 0341669 0165532 PHASE 100000 0779034 0660858 0542052 0449983 TAUTOT0694377 0693420 0693474 0693540 0693636()

IDLgt help(h[vars])[TAUTOT]ltExpressiongt FLOAT = Array[51 400]

IDLgt print(h[var_dims])[TAUTOT]NLAY NWN

IDLgt print(h[dims])[(h[var_dims])[TAUTOT]]NLAY 51NWN 400

7789

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5)

Visualizaccedilatildeo da variaacutevel selecionada

Metadados e alguns valores da variaacutevel selecionada

Variaacutevel a ser criada com o conteuacutedo desta variaacutevel do arquivo

Hierarquia das variaacuteveis do arquivo

7889

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5) Imported variable az

IDLgt helpaz Structure ltd5723f38gt 13 tags length=448 data length=444 refs=1 _NAME STRING az _ICONTYPE STRING binary _TYPE STRING DATASET _FILE STRING INTENSI_test_409OUTh5 _PATH STRING _DATA DOUBLE Array[38] _NDIMENSIONS LONG 1 _DIMENSIONS ULONG64 Array[1] _NELEMENTS ULONG64 38 _DATATYPE STRING H5T_FLOAT _STORAGESIZE ULONG 8 _PRECISION LONG 64 _SIGN STRING

IDLgt printaz_data 00000000 10000000 20000000 30000000 40000000 50000000 60000000 80000000 ()

7989

Arquivos - binaacuterios - imagens

JPEG JPEG200 TIFF GeoTIFF etc

Os formatos comuns de imagens satildeo bem suportados em muacuteltiplas plataformas para uso dentro de programas e interativamente

Alguns formatos tecircm opccedilatildeo de compressatildeo com perda eou sem perda

Armazenam imagens como arrays 2D ou 3D (3D frequumlentemente limitado a 3 ou 4 em uma das dimensotildees uma imagem em 3 ou 4 bandas) de inteiros ou (em alguns formatos) reais

Alguns formatos permitem armazenar metadados para caracterizar as imagens armazenadas

JPEG2000 e GeoTIFF (um subconjunto de TIFF) comuns em astronomia e aacutereas proacuteximas

8089

Arquivos - binaacuterios ndash imagens ndash exemplo (IDL)IDLgt printquery_tiff(issmap_2009tiffinfogeotiff=geo) 1

IDLgt helpinfo Structure ltd4eca4b8gt 18 tags length=144 data length=132 refs=1 CHANNELS LONG 4 DIMENSIONS LONG Array[2] IMAGE_INDEX LONG 0 NUM_IMAGES LONG 1 PIXEL_TYPE INT 1 TYPE STRING TIFF BITS_PER_SAMPLE LONG 8 POSITION FLOAT Array[2] RESOLUTION FLOAT Array[2] UNITS LONG 2 TILE_SIZE LONG Array[2] DESCRIPTION STRING ISS (2009) DATE_TIME STRING 20100218 012436()

IDLgt helpgeo Structure ltd4efa1b8gt 10 tags length=264 data length=262 refs=1 MODELPIXELSCALETAG DOUBLE Array[3] MODELTIEPOINTTAG DOUBLE Array[6 4] GEOGRAPHICTYPEGEOKEY INT 4035 GEOGSEMIMAJORAXISGEOKEY DOUBLE 25750000 GEOGSEMIMINORAXISGEOKEY DOUBLE 25750000()

IDLgt myimage=read_tiff(issmap_2009tiff) Lecirc a imagem para o array myimage

Obteacutem informaccedilotildees sobre o arquivo

8189

Arquivos - binaacuterios ndash formatos nativosLinguagens como IDL R Python Java tecircm seu formato nativo binaacuterio acessado em alto niacutevel Basta mandar salvar ler variaacuteveis no do arquivo a biblioteca padratildeo automagicamente faz todo o trabalho de decidir como gravar ler os dados

Conveniente de usar na proacutepria linguagem Mas raramente existem bibliotecas para ler gravar o formato nativo de uma linguagem a partir de outra Ex (IDL)

IDLgt savefile=2dspectrumsavmydatamyheadercorners_dcorners_averbosecompress SAVE Portable (XDR) compressed SAVERESTORE file SAVE Saved variable MYDATA SAVE Saved variable MYHEADER()

Pode ser lido com apenas (haacute formas mais elaboradas)

IDLgt restore2dspectrumsavverbose RESTORE Portable (XDR) compressed SAVERESTORE file RESTORE Save file written by ltunknowngtltunknowngt Thu Jan 27 191422 2011 RESTORE IDL version 801 (linux x86_64) RESTORE Restored variable MYDATA RESTORE Restored variable MYHEADER()

IDLgt helpmydatamyheadercorners_dcorners_aMYDATA FLOAT = Array[1201 1201]MYHEADER STRING = Array[144]()

8289

Arquivos - processamento em baixo niacutevel

Nem sempre um formato padratildeo eacute a melhor escolha para o problema

Nem sempre haacute escolha (pode-se ter que trabalhar com arquivos que jaacute foram escritos em algum formato proprietaacuterio)

Agraves vezes o formato eacute padratildeo mas natildeo haacute bom suporte a ele disponiacutevel

Em todos estes casos eacute necessaacuterio escrever rotinas em baixo niacutevel que vatildeo ler processar diretamente o conteuacutedo do arquivo

Preferencialmente criando interfaces de alto niacutevel para o programa que vai as usar

8389

Arquivos - processamento em baixo niacutevel - texto

Tomando o exemplo anterior onde as colunas eram de diferentes tipos

NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS dec18s0001 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0002 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0003 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 FLAT 5408757812500 460000 5 dec18s0004 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 DARK 5408757812500 460000 5

A forma mais simples de o ler diretamente eacute definir uma estrutura para receber cada linha e um array destas estruturas para receber todo o arquivo Ex (IDL)

IDLgt record=namecalmpos0filnameechlpos0d0disppos0d0targnameposdirclassmjd_obsitime0d0coadds0IDLgt nlines=file_lines(filesearch_scamtxt)IDLgt mydata=replicate(recordnlines-1)IDLgt header=

Depois de definidas as variaacuteveis que vatildeo receber os dados o arquivo pode ser lido

IDLgt openrunitfilesearch_scamtxtget_lunIDLgt readfunitheaderIDLgt readfunitmydataformat=(A14I8A15F104F104A18A19A15F158F105I15)IDLgt free_lununit

A gravaccedilatildeo de um arquivo texto poderia ser feita de forma semelhante apenas trocando openr por openw (abrir o arquivo para gravaccedilatildeo natildeo leitura) e readf por printf

O arquivo eacute aberto em uma unidade (unit) usada para especificar de onde eacute feita a leitura

Ao final o arquivo eacute fechado

8489

Arquivos - processamento em baixo niacutevel - texto

O que resulta em

IDLgt printheader NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS

IDLgt helpmydataMYDATA STRUCT = -gt ltAnonymousgt Array[4]

IDLgt helpmydata[0] Structure ltd5e38f68gt 11 tags length=136 data length=124 refs=3 NAME STRING dec18s0001 CALMPOS INT 0 FILNAME STRING NIRSPEC-5-AO ECHLPOS DOUBLE 62630000 DISPPOS DOUBLE 36450000 TARGNAME STRING HD85258 POSDIR STRING NIRSPEC-5-AOp1 CLASS STRING STAR MJD_OBS STRING 54087574 ITIME DOUBLE 10000000 COADDS INT 1

Este caso eacute mais complicado que os mais comuns por haver colunas de strings

Se todas fossem de nuacutemeros natildeo teria sido necessaacuterio especificar o formato explicitamente As colunas teriam sido adivinhadas pela biblioteca que lecirc o arquivo Poderia ter sido lido escrito soacute com um array de nuacutemeros sem estruturas

8589

Arquivos - processamento em baixo niacutevel - binaacuterio

Formatos binaacuterios podem ser definidos de qualquer forma O arquivo eacute apenas um conjunto de bytes Cabe ao software saber como os interpretar

Uma escolha comum para que sejam autodocumentados eacute incluir um cabeccedilalho de texto informando as caracteriacutesticas dos dados necessaacuterias para os ler

Ex (IDL) criar um arquivo que armazene um array de doubles com um cabeccedilalho informando as dimensotildees para que o programa que o lecirc saiba como ler os dados

Inventa dados e abre o arquivo

IDLgt data_to_write=dindgen(34)IDLgt openwunitbinary_exampledatget_lun

Escreve as dimensotildees como texto

IDLgt printfunitdimensions of the double array stored belowIDLgt printfunitsize(data_to_writedimensions)

Escreve os dados binaacuterios

IDLgt writeuunitdata_to_write

Fecha o arquivo

IDLgt free_lununit

Escreve em binaacuterio (write unformatted)

8689

Arquivos - processamento em baixo niacutevel - binaacuterio

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

dimensions of the double array stored below 3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

8789

Arquivos - processamento em baixo niacutevel - binaacuterioA leitura deste arquivo eacute igualmente simples

IDLgt header=IDLgt dims=[00]IDLgt openrunitbinary_exampledatget_lun

Lecirc as dimensotildees (armazenadas como texto)

IDLgt readfunitheaderIDLgt readfunitdims

Lecirc a parte binaacuteria depois de saber as dimensotildees

IDLgt data_read=dblarr(dims)IDLgt readuunitdata_read

Fecha o arquivo

IDLgt free_lununit

Verifica que os dados foram gravados e lidos corretamente

IDLgt printarray_equal(data_to_writedata_read) 1

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Lecirc dados binaacuterios (read unformatted)

8889

Sumaacuterio

5 ndash Slides em httpwwwppenteadonetpeapea04_strings_iopdf Strings Expressotildees regulares Arquivos

httpwwwppenteadonetpea

8989

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89

Strings - codificaccedilotildees - Unicode

Unicode Character ANGSTROM SIGN (U+212B)Name ANGSTROM SIGNBlock Letterlike SymbolsCategory Letter Uppercase [Lu]Combine 0BIDI Left-to-Right [L]Decomposition LATIN CAPITAL LETTER A WITH RING ABOVE (U+00C5)Mirror NOld name ANGSTROM UNITIndex entries ANGSTROM SIGNLower case U+00E5Comments non SI length unit (=01 nm) named after A J ngstroumlm Å

Swedish physicist preferred representation is U+00C5Version Unicode 110 (June 1993)

Unicode Character GREEK SMALL LETTER ZETA (U+03B6)Name GREEK SMALL LETTER ZETABlock Greek and CopticCategory Letter Lowercase [Ll]Combine 0BIDI Left-to-Right [L]Mirror NUpper case U+0396Title case U+0396Version Unicode 110 (June 1993)

(resultados de httpwwwfileformatinfoinfounicodecharsearchhtm)

ζ

1389

Strings - codificaccedilotildees - UnicodeUnicode Character NABLA (U+2207)Name NABLABlock Mathematical OperatorsCategory Symbol Math [Sm]Combine 0BIDI Other Neutrals [ON]Mirror NIndex entries difference backward backward difference del NABLAComments backward difference gradient del used for Laplacian

operator (written with superscript 2)See Also white down-pointing triangle U+25BDVersion Unicode 110 (June 1993)

Java DatastringtoUpperCase() nablastringtoLowerCase() nablaCharacterUnicodeBlock MATHEMATICAL_OPERATORSCharactercharCount() 1CharactergetDirectionality() DIRECTIONALITY_OTHER_NEUTRALS [13]CharactergetNumericValue() -1CharactergetType() 25CharacterisDefined() YesCharacterisDigit() NoCharacterisIdentifierIgnorable() NoCharacterisLetter() NoCharacterisLetterOrDigit() NoCharacterisLowerCase() NoCharacterisWhitespace() No()

(resultados de httpwwwfileformatinfoinfounicodecharsearchhtm)

nabla

1489

Strings ndash Como codificar Unicode

Haacute vaacuterias formas Nenhuma simples como ASCII porque eacute necessaacuterio um nuacutemero muito maior de pontos de coacutedigo (haacute espaccedilo para 1 114 112 hoje haacute 109 449 alocados)

Apenas usar mais bytes com um nuacutemero constante por caractere exigiria pelo menos 21 bits por caractere (221 eacute 2 097 152)

Seria demais considerando que quase todos os caracteres escritos estatildeo entre os 128 do ASCII

Em quase todo texto 20 de cada 21 bits seriam 0

A maior parte das codificaccedilotildees usa formas mais elaboradas com um nuacutemero variaacutevel de bytes por caractere

Todas as codificaccedilotildees de uso comum tem o ASCII como subconjunto os 128 caracteres do ASCII satildeo codificados em forma idecircntica em ASCII e nas codificaccedilotildees usuais de Unicode

O que ajuda na compatibilidade software Unicode escrevendo texto que soacute conteacutem caracteres do ASCII produz texto idecircntico ao que seria produzido em ASCII

1589

Strings - codificaccedilotildees para Unicode

No mundo ocidental haacute apenas duas codificaccedilotildees de uso comum

UTF-8

ISO 8859-1 (tambeacutem chamado de Latin 1)

Por isso eacute necessaacuterio saber que codificaccedilatildeo usar ao trabalhar com Unicode

Alguns softwares formatos de arquivo informam a codificaccedilatildeo usada

Outros assumem que uma eacute usada (sem ter sido informada)

Outros tentam adivinhar quando natildeo satildeo informados qual eacute (esp navegadores)

Outros soacute perguntam para o usuaacuterio (esp editores de texto)

Sistemas operacionais oferecem variadas formas de digitar caracteres especiais

Pelos coacutedigos numeacutericos

Por programas seletores de caracteres Alguns seletores de caracteres (ex kcharselect do KDE) permitem fazer buscas pelo

nome ou propriedades

1689

Strings - Onde haacute suporte a Unicode em programaccedilatildeo

Linguagens variam muito

Desconhecem Unicode (soacute usam ASCII) C Fortran

Usam nativamente ASCII (inclusive no coacutedigo-fonte) mas tecircm tipos para strings Unicode e ou funccedilotildees para processar Unicode (em variados graus) C C++ IDL R

Usam nativamente Unicode (inclusive no coacutedigo-fonte) e tecircm bom suporte a strings Unicode Java Python Perl

Muitas vezes (mesmo quando Unicode pode ser usado em coacutedigo-fonte) caracteres Unicode satildeo escritos atraveacutes de ASCII com coacutedigos de escape para coacutedigos Unicode Exs

IDLgt p=plot(testtitle=Z(00C5222B))

C C++ Java Python u2207

ReferecircnciasCharacters vs byteshttpwwwtbrayorgongoingWhen200x20030426UTFThe absolute minimum every software developer absolutely positively must know about Unicode and character sets (no excuses)httpwwwjoelonsoftwarecomarticlesUnicodehtmlUnicode character searchhttpwwwfileformatinfoinfounicodecharsearchhtm

em IDL produz intÅ

produz nabla

1789

Strings - processamento baacutesico

Operaccedilotildees mais fundamentais que costumam ser suportadas em ldquotodasrdquo as linguagens bibliotecas padratildeo (exemplos usando sintaxe de IDL)

Atribuiccedilatildeo de literais

IDLgt a=some

IDLgt helpaA STRING = some

IDLgt printasome

Concatenaccedilatildeo

IDLgt b=a+ string

IDLgt helpbB STRING = some string

1889

Strings - processamento baacutesico

Valor loacutegico

String vazio (null string) eacute falso o resto eacute verdadeiro

IDLgt c=

IDLgt if c then printc is not empty string else printc is null string ()c is null string ()

IDLgt c=a

IDLgt if c then printc is not empty string else printc is null string ()c is not empty string

Espaccedilo natildeo eacute o mesmo que string vazio

IDLgt c=

IDLgt if c then printc is not empty string else printc is null string ()c is not empty string

1989

Strings - processamento baacutesico Comparaccedilotildees

IDLgt helpabA STRING = someB STRING = some string

IDLgt printb eq a 0

IDLgt printb gt a 1

IDLgt c=[ab9Some somesome other string]

IDLgt printc[sort(c)]format=(A) some9Somesomesome other stringsome string

IDLgt printa eq A 0

IDLgt printstrcmp(aAfold_case) 1

Comparaccedilotildees de ldquotamanhordquo (maior menor etc) satildeo comparaccedilotildees pela ordem de codificaccedilatildeo (ldquoalfabeacuteticardquo)

Algumas linguagens permitem definir o ordenamento (como considerar maiuacutesculasminuacuteculas letras com acentos nuacutemeros e siacutembolos) Exs Python C++ Java Perl

2089

Strings - processamento baacutesico Substrings

IDLgt printstrmid(abcdefg32)de

Algumas linguagens nativamente suportam iacutendices para indicar substrings C C++ Fortran Python Ex (Python)

gtgtgt s=abcdegtgtgt print(s[25])cde

Outras permitem que sejam definidos iacutendices por objetos strings

Busca de caracteres ou substrings

IDLgt printstrpos(abcdefgd) 3

IDLgt printstrpos(abcdefgj) -1

IDLgt printstrpos(abcdefgbc) 1

2189

Strings - processamento baacutesico

Outros

IDLgt printstrlen(1234567) 7

IDLgt printstrlen(1234567 ) 8

IDLgt printstrlen( 1234567 ) 9

IDLgt helpstrtrim( 1234567 2)ltExpressiongt STRING = 1234567

IDLgt helpstrtrim( 1234567 1)ltExpressiongt STRING = 1234567

IDLgt helpstrtrim( 1234567 0)ltExpressiongt STRING = 1234567

IDLgt printstrupcase(abcdEF)ABCDEF

IDLgt printstrlowcase(abcdEF)abcdef

Medindo quantos caracteres tem o string inclui espaccedilos em branco

Remoccedilatildeo dos brancos agrave esquerda agrave direita ou dos dois lados

2289

Strings - conversatildeo de outros tipos para strings

Eacute uma das operaccedilotildees mais comuns para gerar textos informativos e nomes escrever arquivos (aquivos texto discutidos adiante) etc

Eacute natildeo trivial jaacute que a conversatildeo pode ser feita de muitas formas diferentes

Para tipos fundamentais sempre haacute uma conversatildeo default tanto criando um string como usando algo tipo print (para strings terminal ou arquivos)

Todo comando tipo print (print printf sprintf string write etc) e toda escrita para arquivos texto eacute uma conversatildeo para string (terminais e arquivos texto soacute conteacutem strings)

2389

Strings - conversatildeo de outros tipos para strings

Exemplos de conversotildees (IDL)

IDLgt print[-109] -1 0 9

IDLgt print1d01B10 10000000 1 100000

IDLgt helpstring(1d01B10)ltExpressiongt STRING = 10000000 1 100000

IDLgt printfunitdblarr(343)

Tipos mais elaborados podem ou natildeo ter uma forma predefinida Com objetos eacute comum ser possiacutevel definir a conversatildeo (stringification) ao criar a classe

IDLgt h=hash(a109[01]18b)

IDLgt printh9 0 1a 100000180000 b

Strings

Coloca strings em um arquivo (adiante)

Strings criados por um meacutetodo da classe hash satildeo uma forma de representar o hash

2489

Strings - conversatildeo de outros tipos para strings

Algumas linguagens (Python IDL) tecircm mais de uma forma default de gerar strings Em Python uma forma eacute executaacutevel a outra eacute mais legiacutevel

In [30] x=arange(12)reshape(43)

In [31] print(x)[[ 0 1 2] [ 3 4 5] [ 6 7 8] [ 9 10 11]]

In [32] xOut[32]array([[ 0 1 2] [ 3 4 5] [ 6 7 8] [ 9 10 11]])

In [33] y=array([[ 0 1 2] [ 3 4 5] [ 6 7 8] [ 9 10 11]])

In [37] print(array_equal(xy))True

String mais legiacutevel

String executaacutevelPode ser usado para criar um objeto equivalente

2589

Strings ndash formataccedilatildeo expliacutecita

A formataccedilatildeo pode ser especificada se a conversatildeo default natildeo eacute adequada para definir a conversatildeo em um novo tipo

Cada linguagem tem sua sintaxe para formataccedilatildeo

Haacute dois estilos semelhantes em vaacuterias linguagens

Ambos os estilos satildeo sintaxes diferentes para a mesma ideacuteia Um coacutedigo especifica o tipo de dado sendo passado (inteiro real etc) e detalhes de como seraacute feito o string (largura do campo diacutegitos decimais alinhamento etc)

2689

Strings ndash formataccedilatildeo expliacutecita

Estilo Fortran

IDL

IDLgt print1d0+1d-9 10000000

IDLgt print1d0+1d-9format=(E1610)10000000010E+00

IDLgt printx=1d0+1d-9format=(A0F1613)X= 10000000010000

Estilo C (ldquoprintfrdquo)

IDL

IDLgt printformat=(x=1610e)1d0+1d-9x=10000000010e+00

Python

In [20] print(x=1610e (1e0+1e-9))x=10000000010e+00

Nenhum formato expliacutecito (default)

2789

Strings - formatos tipo Fortran

(apenas o principal ver documentaccedilatildeo para detalhes)

Ex (IDL)

IDLgt printx=1d0+1d-9format=(A0F1613)X= 10000000010000

Tambeacutem haacute modificadores para especificar alinhamento (-) se deve haver (ou ser suprimido) avanccedilo para a pŕoxima linha posiccedilatildeo dentro do campo etc

Coacutedigo Significado Exemplo(s)

A String (A) (10A)

I Inteiro decimal (I) (10I)(-2I)

B Inteiro binaacuterio (B) (10B)

Z Inteiro hexadecimal (Z) (10Z)

O Inteiro octal (O) (10O)

F Real ponto fixo (F)(F52)

E D Real ponto flutuante (E)(D1610)

G Real ponto fixo ou flutuante de acordo com o valor (G)(G10)

ldquordquo String literal (ldquox=rdquoI10)

X Caracteres em branco (A10XI)

2889

Strings - formatos tipo C (printf)(apenas o principal ver documentaccedilatildeo para detalhes)String com campos a serem substituiacutedos por valores (passados adiante) marcados por coacutedigos com

Ex (Python)In [20] print(x=1610e (1e0+1e-9))x=10000000010e+00

Haacute modificadores para especificar alinhamento como preencher o espaccedilo que sobra (espaccedilos zeros etc) para imprimir o sinal + etc

Coacutedigo Significado (tipo) Exemplo(s)

di Inteiro decimal (int) d 5d +05d

u Inteiro decimal sem sinal (unsigned int) u 7u

fF Real em ponto fixo (double float) f 136f

eE Real em ponto flutuante (double float) e 1610e

gG Real em ponto fixo ou flutuante decidido pelo valor (double float)

g 73G

xX Inteiro sem sinal hexadecimal (unsigned int) x 10X

o Inteiro sem sinal octal (unsigned int) o 5o

s String (string) s 10s

c Caractere (char) c

p Ponteiro - estilo C - (void ) p

literal

2989

Strings - conversatildeo de strings para outros tipos

Para gerar dados a partir de strings datas identificadores pedaccedilos de nomes valores numeacutericos armazenados em strings

Tambeacutem sempre haacute conversotildees default para os tipos baacutesicos onde o intepretador programa faz o possiacutevel para entender o string como um valor daquele tipo

Tipicamente eacute feito por casts (funccedilotildees de conversatildeo) reads (de strings ou arquivos texto (arquivos texto satildeo strings)) construtores de objetos ou implicitamente

3089

Strings - conversatildeo de strings para outros tipos - impliacutecitas

Exs (IDL)

IDLgt helpfix([17 17 171 -17 9 8])ltExpressiongt INT = Array[5]

IDLgt printfix([17 17 171 -17 9 8]) 17 17 17 -17 9

IDLgt printdouble([17 17 171 -17 9 8]) 17000000 17000000 17100000 -17000000 90000000

IDLgt readfunitabcd

IDLgt a=0d0IDLgt b=00IDLgt c=0IDLgt reads171d0 189d0 -9abcIDLgt helpabcA DOUBLE = 17100000B FLOAT = 189000C INT = -9

Converte o conteuacutedo do string para os tipos das variaacuteveis abcd (explicado adiante)

3189

Strings - conversatildeo de strings para outros tipos

Quando o default natildeo eacute suficiente (ou quando escrevendo o conversor em uma classe) costuma ser possiacutevel o fazer com formatos semelhantes aos formatos para gerar strings Exs (IDL)

IDLgt a=0d0IDLgt b=00IDLgt c=0IDLgt reads171d0 something 189d0-9abc READS Input conversion error Unit 0 File ltstdingt Error occurred at $MAIN$ Execution halted at $MAIN$

Natildeo funcionou porque sozinho ele natildeo conseguiu saber o que fazer com o ldquosomethingrdquo Usando um formato especiacutefico

IDLgt reads171d0 something 189d0-9 abcformat=(D6111XD611XI)

IDLgt helpabcA DOUBLE = 17100000B FLOAT = 189000C INT = -9

Exemplos mais complicados adiante (arquivos texto)

Variaacuteveis tecircm que ser definidas para informar para que tipo seraacute feita a conversatildeo default

3289

Strings - processamento natildeo baacutesicoOperaccedilotildees importantes e muito necessaacuterias mas que natildeo satildeo suportadas em todas as linguagens bibliotecas padratildeo

Testes (ex IDL)

IDLgt str=[afitsaFITSafitsaabfitsabcfits]

IDLgt printstrmatch(strfits) 1 0 0 1 1

IDLgt printstrmatch(strfitsfold_case) 1 1 0 1 1

IDLgt printstrmatch(strfitsfold_case) 1 1 1 1 1

IDLgt printstrmatch(strfits) 1 0 0 0 0

IDLgt printstrmatch(strfits) 0 0 0 1 0

3389

Strings - processamento natildeo baacutesico

Operaccedilotildees importantes e muito necessaacuterias mas que natildeo satildeo suportadas em todas as linguagens bibliotecas padratildeo

Separaccedilatildeo de partes (Ex IDL)

IDLgt printstrsplit(2011- 131 -extract)format=(A)2011131

Processamento de nomes de arquivos diretoacuterios (Ex IDL)

IDLgt printfile_dirname(some_directoryanother_directorysome_filetxt)some_directoryanother_directory

IDLgt printfile_basename(some_directoryanother_directorysome_filetxt)some_filetxt

IDLgt printfile_basename(another_directorysome_filetxttxt)+_alteredtxtsome_file_alteredtxt

3489

Strings - processamento natildeo baacutesico

Codificaccedilotildees (Ex Python 3)

gtgtgt s=infinite money infinNeuro sign

gtgtgt print(s)infinite money infineuro

gtgtgt print(ascii(s))infinite money u221eu20ac

gtgtgt print(sencode(utf-8))binfinite money xe2x88x9exe2x82xac

3589

Strings - processamento natildeo baacutesico

Perl eacute a linguagem mais avanccedilada para processamento de strings tem suporte nativo a muitas outras operaccedilotildees a semacircntica da linguagem eacute voltada principalmente para processar strings expressotildees regulares (de vaacuterios tipos) natildeo satildeo strings fazem parte da semacircntica

Ex (sem o objetivo que seja compreensiacutevel apenas para indicar o estilo)

Ler um arquivo contendo campos com nomes separados de valores por ()

temperature 10008name some modelx_dimension 100y_dimension 100z_dimension 50()

Armazenado-o em um mapa O que pode ser feito com apenas

While (ltgt) Loop over input linesPut pre-colon text into $1 post-colon into $2 if (m (S+) (+) ) Use $1 as key $2 as value $file_data$1 = $2

3689

Expressotildees regulares - definiccedilatildeo

Expressotildees regulares (regular expressions regex) satildeo a mais poderosa ferramenta para fazer buscas e separar substrings

Regex satildeo uma linguagem com o uacutenico objetivo de especificar propriedades de strings

Implementadas em graus diferentes em todas as linguagens modernas e modernizadas facilita encontrar uma expressatildeo jaacute pronta pois satildeo quase iguais em qualquer linguagem

Estatildeo na biblioteca padratildeo em IDL Python R Perl

Em C++ e Java em bibliotecas comuns (Boost Jregex)

Para que servem

Uma expressatildeo regular especifica propriedades de strings

O interpretador de expressotildees regulares (regular expression engine) recebe a expressatildeo e o string a analisar e determina se o string corresponde (matches) agrave expressatildeo regular

Em alguns casos o interpretador pode tambeacutem informar que parte(s) do string corresponde(m) a que parte(s) da expressatildeo regular e realizar processamentos com estas partes

3789

Expressotildees regulares ndash exemplos de usos Separar partes de strings

Encontrar linhas em arquivos que tenham nomes valores e comentaacuterios e separar estes pedaccedilos

Escalar com comentaacuterio

SLITPA = 351979 Slit position angle

Array 1D sem comentaacuterio (se extendendo por vaacuterias linhas)

BAND_BIN_CENTER = (03505400358950036629003732200379490 0387900104598)

Escalares em diferentes formatos

Total Mechanical Luminosity 15310E+03resources_usedwalltime=005603

Pedaccedilos de nomes

6063 17836E-20 2456 T FeIX((3Pe)3d(2PE)4p_1Po-3s2_3p6_1Se)

Datas separando ano mecircs dia hora (em vaacuterios formatos diferentes)

DATE-OBS= 2006-12-18 universal date of observationDATE_TIME = 2010-07-19T161032START_TIME = 2006-182T225102850Z

3889

Expressotildees regulares ndash exemplos de usos

Separar partes de strings Separar partes de nomes de arquivos (por significarem algo como identificar o

conteuacutedo)

specdec18s0041fitsscamdec18i0054fits15_7_mts_hmpixselh_mr15sav15_7_mts_hwpixselh_mr15sav16_3_mts_hwpixselb_mr16savreadmodel5l_-1_000010000_10000_r05_030_08196_0100000_005000000_1000eps

Determinar se um string eacute um nuacutemero (inteiro real fixo flutuante)

Encontrar identificadores Exs nomes de cataacutelogos endereccedilos HTTPFTP endereccedilos de email

Separar campos em arquivos sendo lidos onde as linhas natildeo tecircm a mesma formataccedilatildeo algumas linhas com colunas separadas por espaccedilos outras por tabs outras por

siacutembolos ignorando linhas de comentaacuterios e linhas vazias

3989

Expressotildees regulares - usoEx (IDL) encontrar nomes de arquivos com algumas propriedades

IDLgt printfilesformat=(A)CM_1477475933_1_viscubCM_1477476864_1_ircubCM_1477476864_1_irgcubCM_1477476864_1_viscubCM_1477477826_1_ircubCM_1477477826_1_irgcubCM_1477477826_1_viscubmosaic2cub

IDLgt printstregex(files+irgcubboolean) 0 0 1 0 0 1 0 0

A expressatildeo regular eacute +irgcub Especifica uma ou mais ocorrecircncias seguidas (+) de qualquer caractere () seguido de uma ocorrecircncia de irgcub (o ponto vem precedido do caractere de

escape () para ser entendido literalmente como um ponto e natildeo como o seu significado especial (qualquer caractere)

Esta aplicaccedilatildeo do interpretador (stregex) retorna um valor Booleano (verdadeirofalso) para cada elemento do string passado (files) que informa se aquele elemento correspondia agravequela expressatildeo regular

Este eacute um exemplo artificial Seria mais faacutecil ter usado strmatch(filesirgcub)

4089

Expressotildees regulares - uso

Em casos como este tipicamente o resultado de stregex seria usado como filtro para selecionar apenas os elementos do array de strings que satisfazem agravequela expressatildeo regular

IDLgt w=where(stregex(files+irgcubboolean)null)IDLgt printfiles[w]format=(A)CM_1477476864_1_irgcubCM_1477477826_1_irgcub

Ex (IDL) Determinar que strings conteacutem uma data no formato yyyy-mm-dd

IDLgt strs=[201002012010-02-012010-2-1aaaa-mm-ddT2010-02-01J]IDLgt printstregex(strs[0-9]4-[0-9]2-[0-9]2boolean) 0 1 0 0 1

Esta expressatildeo regular especifica quatro repeticcedilotildees (4) de diacutegitos (caracteres na faixa [0-9]) seguido de um (-) seguido de duas repeticcedilotildees (2) de dois diacutegitos ([0-9]) seguido de um (-) seguido de duas repeticcedilotildees (2) de dois diacutegitos ([0-9])

Uma expressatildeo regular apenas um pouco mais elaborada poderia corresponder aos 3 formatos de data no array acima E poderia se impedir que a uacuteltima (com outros caracteres antes e depois da data) seja aceita

4189

Expressotildees regulares - regras - caracteres ldquonormaisrdquo

Uma expressatildeo regular usa caracteres ldquonormaisrdquo e especiais para especificar o que se vai procurar na ordem em que aparecem na expressatildeo

Se um caractere eacute normal (natildeo eacute um dos especiais mostrados adiante) ele especifica uma ocorrecircncia daquele caractere

Ex J eacute uma expressatildeo regular que corresponde a qualquer string onde ocorra J Jaacute JA soacute corresponde a strings que tenham JA dentro

Exs (IDL)

IDLgt strs=[JJJJJJaJAjaJa]

IDLgt printstregex(strsJboolean) 1 1 1 0 1

IDLgt printstregex(strsJAboolean) 0 0 1 0 0

4289

Expressotildees regulares - regras - caracteres especiaisCaracteres especiais tecircm outros significados Para significar literalmente aquele caractere deve ser escapado (escaped) com um

Siacutembolo significado exemplo Corresponde(m) Escape o caractere seguinte deve ser interpretado

literalmente natildeo como especial aa

Qualquer caractere ab ajb aab abb jafbc

+ Uma ou mais repeticcedilotildees do que vem agrave esquerda a+b ab aab bab baabh

() Subexpressatildeo para agrupar termos afetados por um caractere especial (como parecircnteses em notaccedilatildeo matemaacutetica)

(ab)+c abc ababc dabababcg

Zero ou mais repeticcedilotildees dos termos agrave esquerda ab abbaab caaabg

Zero ou uma repeticcedilatildeo dos termos agrave esquerda ab b ab cabd cbd

| Alternaccedilatildeo qualquer um dos dois agrave esquerda a|bc ac bc jacd jbcd

n Exatamente n repeticcedilotildees do termo agrave esquerda a2b aab daaabg

n1n2 De n1 a n2 repeticcedilotildees do termo agrave esquerda a12b ab aab aaab gaaabbd

^ Acircncora (no comeccedilo) nada agrave esquerda ^ab ab abb

$ Acircncora (no fim) nada agrave direita ab$ abaab

[] Conjunto de valores (explicado adiante)

4389

Expressotildees regulares - regras - conjuntos de valores

[] denota um conjunto de valores que pode conter

Uma lista de coisas que devem corresponder Ex [abc] signfica qualquer caractere no conjunto abc Correspondem a esta

expressatildeo abcabha

Uma lista de coisas que natildeo podem corresponder [^abc] significa qualquer coisa que natildeo seja a b ou c Correspondem a esta

expressatildeo d jgs gg

Faixas de valores [0-9] signfica qualquer diacutegito [0-9a-zA-Z] significa qualquer diacutegito ou letra

Classes de valores como algumas faixas e outros conjuntos ocorrem com muita frequumlecircncia haacute nomes

especiais para eles Estes (em IDL) vecircm entre [] ex [[digit] significa o mesmo que [0-9]

4489

Expressotildees regulares - regras - classes de valores

Classe signficado

alnum Caracteres alfanumeacutericos 0-9a-zA-Z

alpha Caracteres alfabeacuteticos a-zA-Z

cntrl Caracteres de controle ASCII (natildeo visiacuteveis coacutedigos 1 a 31 e 127)

digit Diacutegitos (decimais) 0-9

graph Caracteres visiacuteveis ASCII 33 a 126 (natildeo inclui o espaccedilo)

lower Letras minuacutesculas a-z

print Caracteres ldquoimprimiacuteveisrdquo (visiacuteveis e o espaccedilo) ASCII 32 a 126

punct Caracteres de pontuaccedilatildeo $amprsquo()+-lt=gt[]^_lsquo|~

space Os caracteres ldquoem brancordquo (blank) espaccedilo tab tab vertical CR LF (ASCII 32 e 9-13)

upper Letras maiuacutesculas A-Z

xdigit Diacutegitos hexadecimais 0-9A-Fa-f

lt Comeccedilo de palavra (palavra definida como sequumlecircncia de coisas natildeo space)

gt Fim de palavra (palavra definida como sequumlecircncia de coisas natildeo space)

Estas satildeo apenas as principais Algumas implementaccedilotildees tecircm muito mais (em particular nas linguagens que usam Unicode nativamente)

4589

Expressotildees regulares - exemplos

Determinar se strings satildeo nuacutemeros (Ex IDL)

IDLgt str=[9-18 875-812-45913E9-98d7a188d032f5]

Inteiros

IDLgt intexpr=^[-+][0-9]+$

IDLgt printstregex(strintexprboolean) 1 1 0 0 0 0 0 0 0 0

Ponto flutuante

IDLgt fpexpr=^[-+](([0-9][0-9]+)|([0-9]+[0-9]))([eEdD][-+][0-9]+)$

IDLgt printstregex(strfpexprboolean) 1 1 0 1 1 1 1 1 0 0

Sinal opcional

1 ou mais diacutegitos

Sinal opcional

0 ou mais diacutegitos opcionalmente seguidos de um ponto e 1 ou mais diacutegitos

1 ou mais diacutegitos opcionalmente seguidos de um ponto e 0 ou mais diacutegitos

ou Expoente opcional letra do expoente seguida de sinal opcional seguido de um ou mais diacutegitos

4689

Expressotildees regulares ndash extraccedilatildeo

Interpretadores de expressotildees regulares costumam oferecer mais que apenas testar se um string corresponde a uma expressatildeo

Em geral tambeacutem podem retornar que parte(s) do string corresponde(m) agrave expressatildeo

Ex (IDL) Determinar se um string conteacutem uma data incluindo os formatos

IDLgt dates=[2011-01-312011 1 3120110131something done on y2011m1d31 with something]

E extrair a data de dentro do string

IDLgt expr=[0-9]4[0-9]12[0-9]12

(4 diacutegitos)(qualquer separador)(1 a 2 diacutegitos)(qualquer separador)(1 a 2 diacutegitos)

IDLgt printstregex(datesexprextract)format=(A)2011-01-312011 1 31201101312011m1d31

Como agora separar ano mecircs e dia Com uma busca e uma extraccedilatildeo para cada Poderia ser mais eacute mais faacutecil com uma uacutenica expressatildeo regular

4789

Expressotildees regulares - aleacutem de apenas testes

Tambeacutem podem retornar que parte(s) do string correspondem agrave expressatildeo toda e agraves suas subexpressotildees (partes da expressatildeo delimitadas por parecircnteses)

Ex (IDL) Separar pedaccedilos de datas Neste caso para a expressatildeo ficar menor assumindo um formato simples (yyyy-mm-ddThhmmssfff) Mas poderia ser um formato mais livre como no exemplo anterior

IDLgt str=Stuff observed on 2011-01-31T123924983 with some instrumentIDLgt expr=([0-9]4)-([0-9]2)-([0-9]2)T([0-9]2)([0-9]2)([0-9]2[0-9]3)

(quatro diacutegitos)-(2 diacutegitos)-(2 diacutegitos)T(2 diacutegitos)(2 diacutegitos)(2 diacutegitos3 diacutegitos)

IDLgt pieces=stregex(strexprextractsubexpr)IDLgt printpiecesformat=(A)2011-01-31T12392498320110131123924983IDLgt d=julday(pieces[2]pieces[3]pieces[1]pieces[4]pieces[5]pieces[6])IDLgt printdformat=(F166) 2455593027372

Expressatildeo inteiraPrimeira subexpressatildeoSegunda subexpressatildeoTerceira subexpressatildeoQuarta subexpressatildeoQuinta subexpressatildeoSexta subexpressatildeo

4889

Expressotildees regulares - referecircncias httpxkcdcom208

Viacutedeos do Software Carpentry

httpsoftware-carpentryorg4_0regexp

4989

Arquivos

Quase todo programa precisa armazenar dados em arquivos

Podem ser pequenos arquivos de paracircmetros ou enormes arquivos de dados produzidos ou a processar

Apesar do sugerido pela praacutetica comum arquivos texto natildeo satildeo sempre a melhor escolha para armazenar dados - e haacute muitas formas diferentes de os usar

Qual eacute a melhor escolha

Assim como para linguagens ou contecirciners natildeo existe ldquoo melhor formatordquo Cada um tem suas vantagens e desvantagens

Dados diferentes (mesmo se usados pelos mesmos programas) em geral se adequam melhor a formatos diferentes

5089

Arquivos - texto X binaacuterios

Em qualquer formato arquivos satildeo armazenados como diacutegitos binaacuterios

Mas haacute duas formas principais como eles podem ser codificados

Arquivos baseados em texto (text files)

Dados satildeo transformados em caracteres usando alguma formataccedilatildeo (mesmo se impliacutecita) e escritos com alguma codificaccedilatildeo de texto (comumente mas natildeo necessariamente ASCII)

Um arquivo texto eacute um ou mais strings As mesmas conversotildees tecircm que ser feitas depara outros tipos

Arquivos ldquobinaacuteriosrdquo (binary files)

Embora todo arquivo seja binaacuterio este nome costuma ser usado soacute para aqueles em que os dados natildeo estatildeo na forma de texto

Com frequumlecircncia (nem sempre) os dados satildeo gravados de forma idecircntica a como satildeo armazenados na memoacuteria

Muitos formatos usam uma mistura de partes em texto e partes binaacuterias

Um cabeccedilalho (header) de texto que daacute informaccedilotildees (metadados) sobre os dados armazenados na parte binaacuteria que vem depois

O cabeccedilalho conteacutem em especial informaccedilotildees sobre como ler os dados binaacuterios

5189

Arquivos - texto X binaacuterios

Vantagens de arquivos texto

Legiacuteveis por pessoas (human readable)

Podem ser auto-suficientes todo o necessaacuterio para os ler e entender o que conteacutem pode ser obtido olhando o arquivo

Satildeo os menos especiacuteficos a linguagens software normalmente satildeo escritos em ASCII ou Unicode e sempre haacute algum suporte a ler escrever texto em linguagens software

Haacute alguns formatos padratildeo para texto (exs CSV XML) que satildeo suportados em muitas plataformas diferentes

5289

Arquivos - texto X binaacuterios

Vantagens de arquivos binaacuterios

Em geral natildeo haacute conversotildees entre o os dados como armazenados na memoacuteria O que torna o armazenamento mais eficiente e sem alteraccedilotildees nos valores

A maior parte dos formatos padronizados eacute binaacuteria Exs FITS cube CDF NetCDF HDF HDF5 JPEG JPEG2000 TIFF GeoTIFF MPEG etc

Eacute mais comum que haja bibliotecas prontas (ateacute de alto niacutevel) para consulta leitura e gravaccedilatildeo

Os formatos melhor desenhados satildeo autodocumentados (em texto ou binaacuterio) para os ler natildeo eacute necessaacuterio conhecimento preacutevio sobre como os dados foram armazenados

Toda linguagem plataforma costuma ter seu formato binaacuterio mais nativo que costuma ser o mais faacutecil para leitura gravaccedilatildeo Em particular nas de alto niacutevel que tecircm formatos autodocumentados (especialmente

em IDL R Python Java)

Muitos formatos tecircm opccedilatildeo de compressatildeo dos dados

5389

Arquivos - proprietaacuterios X padratildeo

Independente da escolha texto binaacuterio programas devem escolher entre usar um formato proacuteprio ou um formato padronizado

A principal vantagem de formatos proacuteprios eacute que satildeo definidos da forma mais conveniente para a aplicaccedilatildeo que os usa simplificando leitura e gravaccedilatildeo e potencialmente otimizando recursos (acesso ao disco tamanho do arquivo etc)

A principal desvantagem de formatos proacuteprios eacute ser necessaacuterio escrever todo o coacutedigo para os ler gravar

Pode dar mais trabalho que usar um formato geneacuterico que natildeo seja exatamente o que melhor se encaixa na aplicaccedilatildeo

O coacutedigo para processar o formato em geral vai ser menos completo e conveniente de usar que o de um formato bem estabelecido usado por muitos outros em muitos ambientes

Cada novo software que for usar estes arquivos vai precisar compartilhar do mesmo coacutedigo ou precisar de coacutedigo novo (em particular se em outra linguagem) para ler gravar naquele formato

Eacute necessaacuterio documentar o formato e decidir sobre como ele seraacute definido

Se outros jaacute colocaram muito trabalho desenvolvendo bons formatos padratildeo bem suportados em muitos ambientes por que ter o trabalho de reinventar (e reprogramar redocumentar e retestar) a roda

5489

Arquivos - padrotildees comuns em astronomia (exs adiante)

Texto

CSV Comma-separated values - bem suportado por muitos softwares

ldquoColunas fixasrdquo Natildeo eacute um padratildeo bem definido mas eacute praacutetica comum para tabelas (2D)

XML Extensible Markup Language - O padratildeo texto mais flexiacutevel de grande uso em programaccedilatildeo geral para armazenar qualquer coisa com frequumlecircncia de forma hieraacuterquica Bem suportado por linguagens modernas (e modernizadas) e bibliotecas das principais

linguagens gerais Alta complexidade o torna trabalhoso de usar

5589

Arquivos - padrotildees comuns em astronomia (exs adiante)Binaacuterios

FITS Flexible Image Transport System - o mais comum para observaccedilotildees astronocircmicas Conteacutem os dados (em geral arrays 1D 2D ou 3D) e documentaccedilatildeo (nos cabeccedilalhos) sobre a origem e caracteriacutesticas dos dados Tambeacutem usado para armazenar tabelas de dados quaisquer mesmo que natildeo sejam observaccedilotildees (especialmente pelo STSCI) Variam muito em qualidade de documentaccedilatildeo

NetCDF Network Common Data Form - evoluccedilatildeo do CDF autodocumentado eacute comum e bem suportado para vaacuterios arrays de dados

HDF5 Hierarchical Data Format ndash autodocumentado comum e bem suportado permitindo aleacutem de simples arrays estruturas (eacute um formato hieraacuterquico)

Formatos de imagens JPEG JPEG2000 TIFF GeoTIFF etc - voltados para arrays 2D3D de inteiros ou (em alguns casos) reais com ou sem compressatildeo JPEG2000 tem caracteriacutesticas mais avanccediladas como imagens multiresoluccedilatildeo

Formatos vetoriais PS EPS DXF SHP SVG - variados niacuteveis de suporte a armazenamento de vetores e formas em 2D ou 3D

ISIS Cube semelhante em caracteriacutesticas ao FITS mais usado em sensoriamento remoto geociecircncias e ciecircncias planetaacuterias em geral para observaccedilotildees 1D 2D ou 3D

Formatos nativos de linguagens todo o trabalho de leitura e gravaccedilatildeo eacute feito automagicamente pela biblioteca padratildeo em IDL R Python Java

5689

Arquivos texto - newlines

Apesar do que possa parecer arquivos texto natildeo tecircm intrinsecamente vaacuterias linhas Arquivos texto satildeo soacute uma sequumlecircncia 1D de caracteres em alguma codificaccedilatildeo Separaccedilatildeo em linhas (equivalente a interpretar o arquivo como 2D em linhas e colunas) eacute

especificada por convenccedilotildees Natildeo haacute apenas uma convenccedilatildeo para o fim de linhas

A mais primitiva convenccedilatildeo eacute separaccedilatildeo nenhuma estipula-se que linhas tenham um nuacutemero fixo N de caracteres e cabe ao software que lecirc o arquivo entender que uma linha nova ocorre regularmente a cada N caracteres

Eacute a forma menos portaacutevel e mais inconveniente eacute necessaacuterio o conhecimento preacutevio (ou por inspeccedilatildeo do arquivo) de quantos caracteres haacute por linha

A maior parte dos editores de texto natildeo vai saber separar linhas desta forma (por falta deste conhecimento preacutevio) Exemplo (de um FITS real)

SIMPLE = T Fits standard BITPIX = 16 Bits per pixel NAXIS = 0 Number of axes EXTEND = T File may contain extensions

O que com as linhas quebradas nos lugares certos seria

SIMPLE = T Fits standard BITPIX = 16 Bits per pixel NAXIS = 0 Number of axes EXTEND = T File may contain extensions

5789

Arquivos texto - newlines

A forma mais comum de especificar linhas eacute com um marcador do final de linha (newline)

Eacute um caractere especial natildeo normalmente presente no texto que serve para marcar fim de linhas

Mas natildeo haacute soacute um padratildeo de newline Os mais comuns

LF (Line Feed ASCII 10) ndash Unix Linux Mac OS X

CR - (Carriage Return ASCII 13) - Mac OS lt10

CR+LF (CR seguido de LF) - Windows DOS

Eacute o motivo de o Notepad (Windows) natildeo entender as quebras de linha de arquivos escritos com o formato nativo de Linux o arquivo soacute tem LF enquanto o editor espera CR+LF

Alguns sistemas (strings em vaacuterias linguagens por exemplo) usam o coacutedigo de escape n para indicar newline que eacute codificado de acordo com o padratildeo sendo usado

Em geral bibliotecas de leitura e gravaccedilatildeo de arquivos usam (default pelo menos) o newline nativo do sistema em que satildeo usadas

Programas de conversatildeo entre os sistemas satildeo comuns (ex dos2unix)

O Wordpad identifica se for usado soacute LF e quebra as linhas de acordo

5889

Arquivos - texto - CSV

Comma-separated values

O formato mais padronizado para tabelas (arrays 2D) em texto (frequentemente mas natildeo necessariamente ASCII)

Bem suportado por bibliotecas padratildeo de linguagens e outros softwares (Excel Calc Origin Google Docs etc)

Conteacutem Linhas de cabeccedilalho (opcionais mas recomendadas) linhas com qualquer texto geral

descrevendo o arquivo e em geral uma linha de tiacutetulo para as colunas da tabela Uma (apenas uma) tabela onde todas as linhas tecircm o mesmo nuacutemero de colunas

Colunas separadas por viacutergulas (opcionalmente pode ser outro separador) Linhas terminadas por newline (qualquer que seja) Strings delimitados por ldquo ldquo

Ex

NAMECALMPOSFILNAMEECHLPOSDISPPOSTARGNAMEPOSDIRCLASSMJD-OBSITIMECOADDSdec18s00010NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001dec18s00020NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001dec18s00120NIRSPEC-5-AO635800364500itan140NIRSPEC-5-AOp2 TITAN5408763000001dec18s00140NIRSPEC-5-AO626300364500itan140NIRSPEC-5-AOp1 TITAN5408763000001dec18s00151NIRSPEC-5-AO626300364500itan140NIRSPEC-5-AOp1ARC5408764000001dec18s00160NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001

Natildeo eacute necessaacuterio que as colunas tenham largura constante

Cabeccedilalho

5989

Arquivos - texto - CSVHaacute amplo suporte a leitura e gravaccedilatildeo de CSV sem precisar recorrer a procedimentos de baixo niacutevel

Podem ser diretamente importados em Excel Calc Origin Google Docs ou lido facilmente com bibliotecas padratildeo comuns Ex (IDL)

IDLgt c=read_csv(filesearch_scamcsvheader=h)IDLgt printhNAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS

IDLgt helpc Structure ltc8bca508gt 11 tags length=5256 data length=5248 refs=1 FIELD01 STRING Array[41] FIELD02 LONG Array[41] FIELD03 STRING Array[41] FIELD04 DOUBLE Array[41] FIELD05 DOUBLE Array[41] FIELD06 STRING Array[41] FIELD07 STRING Array[41] FIELD08 STRING Array[41] FIELD09 STRING Array[41] FIELD10 DOUBLE Array[41] FIELD11 LONG Array[41]

IDLgt printcfield01[03]dec18s0001 dec18s0002 dec18s0003 dec18s0004

IDLgt printcfield03[03]NIRSPEC-5-AO NIRSPEC-5-AO NIRSPEC-5-AO NIRSPEC-5-AO

6089

Arquivos - texto - CSVEx (IDL) Criaccedilatildeo de um CSV com uma tabela de valores

Criaccedilatildeo de 3 arrays 1D (12 elementos) um para cada coluna

IDLgt x=dindgen(3)IDLgt y=dindgen(4)IDLgt xx=reform(rebin(x34)12)IDLgt yy=reform(rebin(reform(y14)34)12)IDLgt f=xx+yy10IDLgt helpxxyyfXX DOUBLE = Array[12]YY DOUBLE = Array[12]F DOUBLE = Array[12]

Escrita do arquivo

IDLgt write_csvexamplecsvxxyyfheader=[XYX+10Y]

ResultadoXYX+10Y000000000000000000000000100000000000000010000000200000000000000020000000000000001000000010000000100000001000000011000000()

6189

Arquivos - texto - ldquoColunas regularesrdquoFixed column width

Natildeo eacute exatamente um padratildeo Eacute uma praacutetica comum

Armazena uma tabela (array 2D) de forma regular simples de ser interpretada e lida

Costumam ter linha(s) de cabeccedilalho descrevendo o conteuacutedo do arquivo em geral com uma linha para os nomes das colunas

As demais linhas conteacutem os dados sempre ocupando a mesma largura por coluna e escritos no mesmo formato em cada coluna

Costumam ser simples de ler inclusive interativamente (exs Excel Calc Origin read_ascii)

Ex (IDL) Uma simples tabela soacute de nuacutemeros

wavl CH4=33 wavl CH4=25 wavl CH4=10 wavl CH4=08 wavl CH4=05 wavl CH4=026 wavl CH4=02 477330000 0090130 477330000 0091110 477330000 0089250 477330000 0087000 477330000 0087140 477330000 0090080 477330000 0088110 480040000 0090930 480040000 0091930 480040000 0090160 480040000 0087930 480040000 0088110 480040000 0090950 480040000 0089090 482750000 0091710 482750000 0092730 482750000 0091060 482750000 0088850 482750000 0089080 482750000 0091810 482750000 0090060 485450000 0092530 485450000 0093570 485450000 0092000 485450000 0089810 485450000 0090100 485450000 0092730 485450000 0091090

IDLgt a=read_ascii(specs_27s_ntxtdata_start=1header=header)IDLgt printheader wavl CH4=33 wavl CH4=25 wavl CH4=10 wavl CH4=08 wavl CH4=05 wavl CH4=026 wavl CH4=02 IDLgt helpa Structure ltd423c9a8gt 1 tags length=224 data length=224 refs=1 FIELD01 FLOAT Array[14 4]

6289

Arquivos - texto - ldquoColunas regularesrdquoJaacute um arquivo um pouco mais difiacutecil de ler

NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS dec18s0001 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0002 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0003 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 FLAT 5408757812500 460000 5 dec18s0004 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 DARK 5408757812500 460000 5

Por ter colunas de tipos diferentes (strings inteiros reais) natildeo eacute possiacutevel o ler em um simples array Mas eacute faacutecil o colocar em uma estrutura de arrays onde cada campo eacute uma coluna

Especificando interativamente como interpretar as linhasIDLgt templ=ascii_template(filesearch_scamtxt)

Nome do campo (default mostrado)

Tipo do campo (identificado automaticamente)

Posiccedilatildeo (caracter) do comeccedilo (identificada automaticamente)

Linha de exemplo para verificar as colunas

6389

Arquivos - texto - ldquoColunas regularesrdquoDepois de feito o template o arquivo pode ser lido com apenas

IDLgt a=read_ascii(filesearch_scamtxttemplate=templ)IDLgt helpa Structure ltd4ec4608gt 11 tags length=416 data length=416 refs=1 FIELD01 STRING Array[4] FIELD02 LONG Array[4] FIELD03 STRING Array[4] FIELD04 FLOAT Array[4] FIELD05 FLOAT Array[4] FIELD06 STRING Array[4] FIELD07 STRING Array[4] FIELD08 STRING Array[4] FIELD09 FLOAT Array[4] FIELD10 FLOAT Array[4] FIELD11 LONG Array[4]IDLgt printafield01dec18s0001 dec18s0002 dec18s0003 dec18s0004IDLgt printafield04 626300 626300 626300 626300

O template (uma estrutura contendo dados sobre como ler o arquivo) pode ser usado para outros arquivos no mesmo formato No lugar de ter sido criado interativamente poderia ter sido lido de algum arquivo Poderia ter especificado nomes para os campos que seriam mais amigaacuteveis que coias como FIELD11

6489

Arquivos - texto - XML

Extensible Markup Language

Admite grande flexibilidade e por isso pode ter alta complexidade

Valores satildeo colocados dentro de uma estrutura em hieraacuterquica (em uma aacutervore) com os noacutes identificados pelos seus nomes (chaves)

Largamente usado em muitas aacutereas para armazenar conjuntos arbitraacuterios de quaisquer estruturas de dados

A maioria das aplicaccedilotildees usa um formato que eacute um subconjunto do XML especificado por um Schema comumente em um arquivo XML DTD (Document Type Definition)

6589

Arquivos - texto ndash XML ndash exemplos de usos

Armazenamento de dados de aplicaccedilotildees web (comum para exportar importar dados MediaWiki DokuWiki WordPress ADS Lattes etc)

Documentos Office (docx pptx xlsx) OpenOffice (odt opd ods)

Como versotildees de outros formatos FITSML XDF

ldquoScientific Dataset XML NASAs Astronomical Data Center (ADC) sponsors a number of research projects that

use XML for scientific data representation The XML activities at the ADC are sponsored and supported by the NASA Office of Space Science Applied Information Systems Research Program (AISRP)rdquo - httpxmlcoverpagesorgnasa-adchtml

Astronomical Instrument Markup Language (AIML)

SVG ndash Scalable Vector Graphics

Muitas de outras aplicaccedilotildees listadas em httpxmlcoverpagesorgxmlhtmlapplications

6689

Arquivos - texto ndash XML - exemploltxml version=10 gtltDOCTYPE Xdmf SYSTEM Xdmfdtd []gtltXdmf xmlnsxi=httpwwww3org2001XInclude Version=20gt ltDomaingt lt-- Example of Basic Topologies --gt ltInformation Name=Descriptiongt Example of a Polyvertex Topology ltInformationgt ltGrid Name=Polyvertex GridType=Uniformgt ltTopology TopologyType=Polyvertex Dimensions=3 NodesPerElement=3gt ltDataItem Format=XML Dimensions=3 3 NumberType=Floatgt 0 1 2 4 5 6 8 9 10 ltDataItemgt ltTopologygt ltGeometry Type=XYZgt ltDataItem Format=XML Dimensions=4 4 3gt 00 00 00 10 00 00()Que mostra que a interpretaccedilatildeo (parsing) de XML eacute em geral complexa

6789

Arquivos - texto - XML

Haacute muitas bibliotecas de alto niacutevel para fazer o processamento (parsing) e entregar os dados em uma estrutura conveniente

A complexidade em processar XML estaacute em decidir o que fazer com os dados jaacute que os arquivos podem ser muito complexos

As APIs (Application Programming Interfaces) mais comuns para processar XML que satildeo implementadas em muitas linguagens

DOM (Document Object Model) ndash manteacutem todo o conteuacutedo do em uma estrutura de dados (em geral uma aacutervore) em uma variaacutevel (em geral um objeto) Esta pode ser consultada para obter os valores de interesse para os alterar e usada para escrever um arquivo

SAX (Simple API for XML) ndash Interpretador (parser) por objetos O usuaacuterio escreve uma classe herdando da classe SAX provendo os meacutetodos que vatildeo processar os campos agrave medida em que estes satildeo lidos

6889

Arquivos - binaacuterios - FITSFlexible Image Transport System

O formato mais comum para observaccedilotildees astronocircmicas Tambeacutem usado para armazenar quaisquer dados mesmo natildeo relacionados a observaccedilotildees (especialmente tabelas como eacute praacutetica do STSCI)

Conteacutem um (ou mais) cabeccedilalho(s) de texto com metadados (informaccedilotildees sobre os dados como caracteriacutesticas (necessaacuterias para os ler) origem condiccedilotildees em que foram obtidos processamento realizado etc)

SIMPLE = T image conforms to FITS standard BITPIX = 32 bits per data value NAXIS = 2 number of axes NAXIS1 = 1024 NAXIS2 = 1024 BSCALE = 100000 Scaling factor BZERO = 000000 Scaling zero-point TELESCOP= Keck II Telescope SLITNAME= 0041x226 Slit Name SLITPA = 351979 Slit position angle SLITX = 131500 X pixel of the center of the slit LST = 12010446 local apparent sidereal time (()

Depois do cabeccedilalho haacute uma (ou mais) seccedilatildeo(otildees) de dados binaacuterios Costuma(m) ser array(s) 1D (espectros) 2D (imagens) ou 3D (ldquocubos de dadosrdquo)

De inteiros ou reais inteiros satildeo comuns em contagens de instrumentos reais para valores derivados (fluxos intensidades etc)

6989

Arquivos - binaacuterios - FITSNormalmente FITS satildeo lidos escritos por bibliotecas prontas de (relativamente) alto niacutevel usuaacuterio natildeo tem que saber como os dados satildeo armazenados no arquivo nem como os ler escrever Ex (IDL com a biblioteca idlastro)

IDLgt fits_info2dspectrumfits2dspectrumfits has 3 extensionsPrimary header 288 recordsNo dataExtension 1 -- SCI Header 144 records IMAGE ( 1201 1201 )Extension 2 -- ERR Header 72 records IMAGE ( 1201 1201 )Extension 3 -- DQ Header 72 records IMAGE ( 1201 1201 )

IDLgt mydata=readfits(2dspectrumfitsexten_no=1myheader) READFITS Reading FITS extension of type IMAGE READFITS Now reading 1201 by 1201 array

IDLgt extastmyheadermyastIDLgt sz=size(mydatadimensions)IDLgt xy2ad[1sz[0]][1sz[1]]myastcorners_acorners_dIDLgt printcorners_aCorners of the data array from file 2dspectrumfits are at 14487480 33063480

IDLgt printcorners_d -00041264444 00041402222

Obteacutem os dados de coordenadas (WCS) do header

Coloca os dados no array (2D de floats) mydata e o header no array (1D de strings) myheader

Calcula as coordenadas das quinas da imagem atraveacutes do WCS

Provecirc informaccedilotildees sobre o arquivo

7089

Arquivos - binaacuterios - ISIS Cube

Formatos como FITS se adequam muito a ter uma interface de mais alto niacutevel por objetos

Tambeacutem para dados em tabelas FITS muito mais trabalhosos de ler em baixo niacutevel que se adequam muito mais a mapas ou estruturas

Exemplo (de um formato semelhante a FITS ISIS cube)

O objeto ao ser criado lecirc todo o arquivo

cube=pp_editablecube(CM_1553510065_1_ircub)

Meacutetodos fornecem os dados desejados para obter quando necessaacuterio os dados de interesse

Find out the names of the backplanesprintcubegetproperty(backnames)Get the start time of the cubeprintcubegetfromheader(START_TIME)2007-084T100057286Z

Valores no cabeccedilalho podem ser convenientemente fornecidos como um mapa

header=cubeheader_as_hash()printheader[START_TIME]2007-084T100057286Z

7189

Arquivos - binaacuterios ndash ISIS Cube

Os dados satildeo fornecidos como arraysMake a contour plot of the latitudesc=contour(cubegetsuffixbyname(LATITUDE))Get the band with wavelength nearest to 21 (in the units used in the cube)selband=cubegetbandbywavelength(21wavelengths=selwavs)

Interfaces por overload tornam o acesso ainda mais conveniente

selband=cube[21]

selwavs=cube[21]

Retorna um array com a banda de comprimento de onda mais proacuteximo de 21 (microm)

Retorna o comprimento de onda mais proacuteximo de 21 (microm) da banda retornada acima

7289

Arquivos - binaacuterios ndash ISIS Cube Alteraccedilotildees feitas ao conteuacutedo satildeo automaticamente refletidas em todos os

lugares (cabeccedilalho em particular) afetados mantendo o objeto vaacutelido que pode depois ser gravado em um novo arquivo

IDLgt printcubelinescubesamplescubebands 64 64 256

IDLgt helpcubecoreltExpressiongt FLOAT = Array[64 64 256]

IDLgt cubecore=dblarr(100100256)

A linha acima natildeo eacute uma atribuiccedilatildeo eacute uma invocaccedilatildeo de meacutetodo Eacute equivalente acubesetpropertycore=dblarr(100100256)

Eacute o trabalho da funccedilatildeo setproperty decidir se a propriedade passada (core) faz sentido e se fizer fazer todo o trabalho necessaacuterio a esta mudanccedila Para o usuaacuterio eacute tudo automaacutetico e os dados da classe satildeo vaacutelidos o tempo todo

IDLgt helpcubecoreltExpressiongt DOUBLE = Array[100 100 256]

IDLgt printcubelinescubesamplescubebands 100 100 256

IDLgt cubesaveCM_1553510065_1_ir_editedcub

7389

Arquivos - binaacuterios ndash NetCDF e HDF5

Network Common Data Form e Hierarchical Data Format

Os dois uacutenicos formatos bem estabelecidos para dados cientiacuteficos geneacutericos

Armazenam dados como vaacuterias variaacuteveis e seus metadados Para cada variaacutevel haacute (ou pode haver) os metadados

Nome Dimensotildees (do array) Unidades Comentaacuterios

Ambos permitem arrays multidimensionais

Apenas HDF5 permite estruturas (daiacute vem a hierarquia)

Autodocumentados qualquer software que saiba ler um destes formatos lecirc qualquer arquivo sem precisar de conhecimento preacutevio sobre como o arquivo foi gerado

Muito bem suportados em bibliotecas padratildeo e natildeo padratildeo em softwares interativos e visualizadores (inclusive plugins para navegadores)

httpwwwunidataucaredusoftwarenetcdf httpenwikipediaorgwikiHdf5

NetCDF eacute mais simples de usar por natildeo ter hierarquia dando menos trabalho para ler e escrever dados Se hierarquia natildeo eacute necessaacuteria eacute mais conveniente de usar que HDF5

7489

Arquivos - binaacuterios - NetCDF e HDF5Haacute tambeacutem o formato CDL uma versatildeo ASCII do NetCDF A biblioteca padratildeo do NetCDF inclui conversores entre estes formatos

$ ncdump -h refspec_g01_0ncnetcdf refspec_g01_0 dimensions nlay = 51 nwn = 400 nleg = 33 numu = 2 nlev = 52 nphi = 3 ngas = 2 nwnc = 1 scal = 1 v3 = 3 dnl = 1 nk = 1 tdisr = UNLIMITED (0 currently) na = 16

variables float alb(nwn) float z(nlay) float t(nlay) float p(nlay) float wl(nwn) float iof(nwn) float mtau(nwn) float htau(nwn) float hctaus(nwn) float gtau(nwn) float outcos(scal) float phi(nleg) float phic(scal) float umu(numu) float flux(v3 nwn nlev) float mix(nlay ngas) float c(nlay) float psat(nlay) float ga(nwnc) float wlc(nwnc) float inc(scal) int dm(scal) int ord(scal) float fbeam(scal) float wn(nwn) float tautot(nwn nlay) float htaus(nwn nlay) float htaux(nwn nlay) float taug(nwn nlay) float phase(nwn nlay nleg) float ssa(nwn nlay) float uu(nwn nphi nlev numu) float u0u(nwn nlev numu) float tray(nwn nlay) float gtauo(tdisr nwn nlay)

Haacute 14 variaacuteveis usadas como dimensotildees para as 35 variaacuteveis que satildeo arrays

Ex alb(nwn) indica que alb eacute um array 1D de nwn elementos

nwn estaacute armazenado como uma das dimensotildees e eacute 400 portanto alb tem 400 elementos

Parte do conteuacutedo de um arquivo NetCDF em formato CDL (gerado pelo programa ncdump)

7589

Arquivos - binaacuterios - NetCDF e HDF5Conteuacutedo daquele arquivo visualizado com o ncview (acompanha a biblioteca NetCDF padratildeo)

7689

Arquivos - binaacuterios - NetCDF e HDF5O conteuacutedo de todo o arquivo pode ser lido facilmente com as bibliotecas disponiacuteveis e armazenado em contecirciners convenientes Usando um objeto que gera um resultado um pouco mais conveniente

IDLgt h=pp_readncdf(refspec_g01_0nchash)IDLgt printhvar_dims ltObjHeapVar229(HASH)gtvars ltObjHeapVar152(HASH)gtdims ltObjHeapVar118(HASH)gt

IDLgt printh[vars]T 173203 175459 175848 176001 175975 Z 431869 418858 406067 393403 380464 FLUX 300660 145536 0705180 0341669 0165532 PHASE 100000 0779034 0660858 0542052 0449983 TAUTOT0694377 0693420 0693474 0693540 0693636()

IDLgt help(h[vars])[TAUTOT]ltExpressiongt FLOAT = Array[51 400]

IDLgt print(h[var_dims])[TAUTOT]NLAY NWN

IDLgt print(h[dims])[(h[var_dims])[TAUTOT]]NLAY 51NWN 400

7789

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5)

Visualizaccedilatildeo da variaacutevel selecionada

Metadados e alguns valores da variaacutevel selecionada

Variaacutevel a ser criada com o conteuacutedo desta variaacutevel do arquivo

Hierarquia das variaacuteveis do arquivo

7889

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5) Imported variable az

IDLgt helpaz Structure ltd5723f38gt 13 tags length=448 data length=444 refs=1 _NAME STRING az _ICONTYPE STRING binary _TYPE STRING DATASET _FILE STRING INTENSI_test_409OUTh5 _PATH STRING _DATA DOUBLE Array[38] _NDIMENSIONS LONG 1 _DIMENSIONS ULONG64 Array[1] _NELEMENTS ULONG64 38 _DATATYPE STRING H5T_FLOAT _STORAGESIZE ULONG 8 _PRECISION LONG 64 _SIGN STRING

IDLgt printaz_data 00000000 10000000 20000000 30000000 40000000 50000000 60000000 80000000 ()

7989

Arquivos - binaacuterios - imagens

JPEG JPEG200 TIFF GeoTIFF etc

Os formatos comuns de imagens satildeo bem suportados em muacuteltiplas plataformas para uso dentro de programas e interativamente

Alguns formatos tecircm opccedilatildeo de compressatildeo com perda eou sem perda

Armazenam imagens como arrays 2D ou 3D (3D frequumlentemente limitado a 3 ou 4 em uma das dimensotildees uma imagem em 3 ou 4 bandas) de inteiros ou (em alguns formatos) reais

Alguns formatos permitem armazenar metadados para caracterizar as imagens armazenadas

JPEG2000 e GeoTIFF (um subconjunto de TIFF) comuns em astronomia e aacutereas proacuteximas

8089

Arquivos - binaacuterios ndash imagens ndash exemplo (IDL)IDLgt printquery_tiff(issmap_2009tiffinfogeotiff=geo) 1

IDLgt helpinfo Structure ltd4eca4b8gt 18 tags length=144 data length=132 refs=1 CHANNELS LONG 4 DIMENSIONS LONG Array[2] IMAGE_INDEX LONG 0 NUM_IMAGES LONG 1 PIXEL_TYPE INT 1 TYPE STRING TIFF BITS_PER_SAMPLE LONG 8 POSITION FLOAT Array[2] RESOLUTION FLOAT Array[2] UNITS LONG 2 TILE_SIZE LONG Array[2] DESCRIPTION STRING ISS (2009) DATE_TIME STRING 20100218 012436()

IDLgt helpgeo Structure ltd4efa1b8gt 10 tags length=264 data length=262 refs=1 MODELPIXELSCALETAG DOUBLE Array[3] MODELTIEPOINTTAG DOUBLE Array[6 4] GEOGRAPHICTYPEGEOKEY INT 4035 GEOGSEMIMAJORAXISGEOKEY DOUBLE 25750000 GEOGSEMIMINORAXISGEOKEY DOUBLE 25750000()

IDLgt myimage=read_tiff(issmap_2009tiff) Lecirc a imagem para o array myimage

Obteacutem informaccedilotildees sobre o arquivo

8189

Arquivos - binaacuterios ndash formatos nativosLinguagens como IDL R Python Java tecircm seu formato nativo binaacuterio acessado em alto niacutevel Basta mandar salvar ler variaacuteveis no do arquivo a biblioteca padratildeo automagicamente faz todo o trabalho de decidir como gravar ler os dados

Conveniente de usar na proacutepria linguagem Mas raramente existem bibliotecas para ler gravar o formato nativo de uma linguagem a partir de outra Ex (IDL)

IDLgt savefile=2dspectrumsavmydatamyheadercorners_dcorners_averbosecompress SAVE Portable (XDR) compressed SAVERESTORE file SAVE Saved variable MYDATA SAVE Saved variable MYHEADER()

Pode ser lido com apenas (haacute formas mais elaboradas)

IDLgt restore2dspectrumsavverbose RESTORE Portable (XDR) compressed SAVERESTORE file RESTORE Save file written by ltunknowngtltunknowngt Thu Jan 27 191422 2011 RESTORE IDL version 801 (linux x86_64) RESTORE Restored variable MYDATA RESTORE Restored variable MYHEADER()

IDLgt helpmydatamyheadercorners_dcorners_aMYDATA FLOAT = Array[1201 1201]MYHEADER STRING = Array[144]()

8289

Arquivos - processamento em baixo niacutevel

Nem sempre um formato padratildeo eacute a melhor escolha para o problema

Nem sempre haacute escolha (pode-se ter que trabalhar com arquivos que jaacute foram escritos em algum formato proprietaacuterio)

Agraves vezes o formato eacute padratildeo mas natildeo haacute bom suporte a ele disponiacutevel

Em todos estes casos eacute necessaacuterio escrever rotinas em baixo niacutevel que vatildeo ler processar diretamente o conteuacutedo do arquivo

Preferencialmente criando interfaces de alto niacutevel para o programa que vai as usar

8389

Arquivos - processamento em baixo niacutevel - texto

Tomando o exemplo anterior onde as colunas eram de diferentes tipos

NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS dec18s0001 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0002 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0003 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 FLAT 5408757812500 460000 5 dec18s0004 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 DARK 5408757812500 460000 5

A forma mais simples de o ler diretamente eacute definir uma estrutura para receber cada linha e um array destas estruturas para receber todo o arquivo Ex (IDL)

IDLgt record=namecalmpos0filnameechlpos0d0disppos0d0targnameposdirclassmjd_obsitime0d0coadds0IDLgt nlines=file_lines(filesearch_scamtxt)IDLgt mydata=replicate(recordnlines-1)IDLgt header=

Depois de definidas as variaacuteveis que vatildeo receber os dados o arquivo pode ser lido

IDLgt openrunitfilesearch_scamtxtget_lunIDLgt readfunitheaderIDLgt readfunitmydataformat=(A14I8A15F104F104A18A19A15F158F105I15)IDLgt free_lununit

A gravaccedilatildeo de um arquivo texto poderia ser feita de forma semelhante apenas trocando openr por openw (abrir o arquivo para gravaccedilatildeo natildeo leitura) e readf por printf

O arquivo eacute aberto em uma unidade (unit) usada para especificar de onde eacute feita a leitura

Ao final o arquivo eacute fechado

8489

Arquivos - processamento em baixo niacutevel - texto

O que resulta em

IDLgt printheader NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS

IDLgt helpmydataMYDATA STRUCT = -gt ltAnonymousgt Array[4]

IDLgt helpmydata[0] Structure ltd5e38f68gt 11 tags length=136 data length=124 refs=3 NAME STRING dec18s0001 CALMPOS INT 0 FILNAME STRING NIRSPEC-5-AO ECHLPOS DOUBLE 62630000 DISPPOS DOUBLE 36450000 TARGNAME STRING HD85258 POSDIR STRING NIRSPEC-5-AOp1 CLASS STRING STAR MJD_OBS STRING 54087574 ITIME DOUBLE 10000000 COADDS INT 1

Este caso eacute mais complicado que os mais comuns por haver colunas de strings

Se todas fossem de nuacutemeros natildeo teria sido necessaacuterio especificar o formato explicitamente As colunas teriam sido adivinhadas pela biblioteca que lecirc o arquivo Poderia ter sido lido escrito soacute com um array de nuacutemeros sem estruturas

8589

Arquivos - processamento em baixo niacutevel - binaacuterio

Formatos binaacuterios podem ser definidos de qualquer forma O arquivo eacute apenas um conjunto de bytes Cabe ao software saber como os interpretar

Uma escolha comum para que sejam autodocumentados eacute incluir um cabeccedilalho de texto informando as caracteriacutesticas dos dados necessaacuterias para os ler

Ex (IDL) criar um arquivo que armazene um array de doubles com um cabeccedilalho informando as dimensotildees para que o programa que o lecirc saiba como ler os dados

Inventa dados e abre o arquivo

IDLgt data_to_write=dindgen(34)IDLgt openwunitbinary_exampledatget_lun

Escreve as dimensotildees como texto

IDLgt printfunitdimensions of the double array stored belowIDLgt printfunitsize(data_to_writedimensions)

Escreve os dados binaacuterios

IDLgt writeuunitdata_to_write

Fecha o arquivo

IDLgt free_lununit

Escreve em binaacuterio (write unformatted)

8689

Arquivos - processamento em baixo niacutevel - binaacuterio

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

dimensions of the double array stored below 3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

8789

Arquivos - processamento em baixo niacutevel - binaacuterioA leitura deste arquivo eacute igualmente simples

IDLgt header=IDLgt dims=[00]IDLgt openrunitbinary_exampledatget_lun

Lecirc as dimensotildees (armazenadas como texto)

IDLgt readfunitheaderIDLgt readfunitdims

Lecirc a parte binaacuteria depois de saber as dimensotildees

IDLgt data_read=dblarr(dims)IDLgt readuunitdata_read

Fecha o arquivo

IDLgt free_lununit

Verifica que os dados foram gravados e lidos corretamente

IDLgt printarray_equal(data_to_writedata_read) 1

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Lecirc dados binaacuterios (read unformatted)

8889

Sumaacuterio

5 ndash Slides em httpwwwppenteadonetpeapea04_strings_iopdf Strings Expressotildees regulares Arquivos

httpwwwppenteadonetpea

8989

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89

Strings - codificaccedilotildees - UnicodeUnicode Character NABLA (U+2207)Name NABLABlock Mathematical OperatorsCategory Symbol Math [Sm]Combine 0BIDI Other Neutrals [ON]Mirror NIndex entries difference backward backward difference del NABLAComments backward difference gradient del used for Laplacian

operator (written with superscript 2)See Also white down-pointing triangle U+25BDVersion Unicode 110 (June 1993)

Java DatastringtoUpperCase() nablastringtoLowerCase() nablaCharacterUnicodeBlock MATHEMATICAL_OPERATORSCharactercharCount() 1CharactergetDirectionality() DIRECTIONALITY_OTHER_NEUTRALS [13]CharactergetNumericValue() -1CharactergetType() 25CharacterisDefined() YesCharacterisDigit() NoCharacterisIdentifierIgnorable() NoCharacterisLetter() NoCharacterisLetterOrDigit() NoCharacterisLowerCase() NoCharacterisWhitespace() No()

(resultados de httpwwwfileformatinfoinfounicodecharsearchhtm)

nabla

1489

Strings ndash Como codificar Unicode

Haacute vaacuterias formas Nenhuma simples como ASCII porque eacute necessaacuterio um nuacutemero muito maior de pontos de coacutedigo (haacute espaccedilo para 1 114 112 hoje haacute 109 449 alocados)

Apenas usar mais bytes com um nuacutemero constante por caractere exigiria pelo menos 21 bits por caractere (221 eacute 2 097 152)

Seria demais considerando que quase todos os caracteres escritos estatildeo entre os 128 do ASCII

Em quase todo texto 20 de cada 21 bits seriam 0

A maior parte das codificaccedilotildees usa formas mais elaboradas com um nuacutemero variaacutevel de bytes por caractere

Todas as codificaccedilotildees de uso comum tem o ASCII como subconjunto os 128 caracteres do ASCII satildeo codificados em forma idecircntica em ASCII e nas codificaccedilotildees usuais de Unicode

O que ajuda na compatibilidade software Unicode escrevendo texto que soacute conteacutem caracteres do ASCII produz texto idecircntico ao que seria produzido em ASCII

1589

Strings - codificaccedilotildees para Unicode

No mundo ocidental haacute apenas duas codificaccedilotildees de uso comum

UTF-8

ISO 8859-1 (tambeacutem chamado de Latin 1)

Por isso eacute necessaacuterio saber que codificaccedilatildeo usar ao trabalhar com Unicode

Alguns softwares formatos de arquivo informam a codificaccedilatildeo usada

Outros assumem que uma eacute usada (sem ter sido informada)

Outros tentam adivinhar quando natildeo satildeo informados qual eacute (esp navegadores)

Outros soacute perguntam para o usuaacuterio (esp editores de texto)

Sistemas operacionais oferecem variadas formas de digitar caracteres especiais

Pelos coacutedigos numeacutericos

Por programas seletores de caracteres Alguns seletores de caracteres (ex kcharselect do KDE) permitem fazer buscas pelo

nome ou propriedades

1689

Strings - Onde haacute suporte a Unicode em programaccedilatildeo

Linguagens variam muito

Desconhecem Unicode (soacute usam ASCII) C Fortran

Usam nativamente ASCII (inclusive no coacutedigo-fonte) mas tecircm tipos para strings Unicode e ou funccedilotildees para processar Unicode (em variados graus) C C++ IDL R

Usam nativamente Unicode (inclusive no coacutedigo-fonte) e tecircm bom suporte a strings Unicode Java Python Perl

Muitas vezes (mesmo quando Unicode pode ser usado em coacutedigo-fonte) caracteres Unicode satildeo escritos atraveacutes de ASCII com coacutedigos de escape para coacutedigos Unicode Exs

IDLgt p=plot(testtitle=Z(00C5222B))

C C++ Java Python u2207

ReferecircnciasCharacters vs byteshttpwwwtbrayorgongoingWhen200x20030426UTFThe absolute minimum every software developer absolutely positively must know about Unicode and character sets (no excuses)httpwwwjoelonsoftwarecomarticlesUnicodehtmlUnicode character searchhttpwwwfileformatinfoinfounicodecharsearchhtm

em IDL produz intÅ

produz nabla

1789

Strings - processamento baacutesico

Operaccedilotildees mais fundamentais que costumam ser suportadas em ldquotodasrdquo as linguagens bibliotecas padratildeo (exemplos usando sintaxe de IDL)

Atribuiccedilatildeo de literais

IDLgt a=some

IDLgt helpaA STRING = some

IDLgt printasome

Concatenaccedilatildeo

IDLgt b=a+ string

IDLgt helpbB STRING = some string

1889

Strings - processamento baacutesico

Valor loacutegico

String vazio (null string) eacute falso o resto eacute verdadeiro

IDLgt c=

IDLgt if c then printc is not empty string else printc is null string ()c is null string ()

IDLgt c=a

IDLgt if c then printc is not empty string else printc is null string ()c is not empty string

Espaccedilo natildeo eacute o mesmo que string vazio

IDLgt c=

IDLgt if c then printc is not empty string else printc is null string ()c is not empty string

1989

Strings - processamento baacutesico Comparaccedilotildees

IDLgt helpabA STRING = someB STRING = some string

IDLgt printb eq a 0

IDLgt printb gt a 1

IDLgt c=[ab9Some somesome other string]

IDLgt printc[sort(c)]format=(A) some9Somesomesome other stringsome string

IDLgt printa eq A 0

IDLgt printstrcmp(aAfold_case) 1

Comparaccedilotildees de ldquotamanhordquo (maior menor etc) satildeo comparaccedilotildees pela ordem de codificaccedilatildeo (ldquoalfabeacuteticardquo)

Algumas linguagens permitem definir o ordenamento (como considerar maiuacutesculasminuacuteculas letras com acentos nuacutemeros e siacutembolos) Exs Python C++ Java Perl

2089

Strings - processamento baacutesico Substrings

IDLgt printstrmid(abcdefg32)de

Algumas linguagens nativamente suportam iacutendices para indicar substrings C C++ Fortran Python Ex (Python)

gtgtgt s=abcdegtgtgt print(s[25])cde

Outras permitem que sejam definidos iacutendices por objetos strings

Busca de caracteres ou substrings

IDLgt printstrpos(abcdefgd) 3

IDLgt printstrpos(abcdefgj) -1

IDLgt printstrpos(abcdefgbc) 1

2189

Strings - processamento baacutesico

Outros

IDLgt printstrlen(1234567) 7

IDLgt printstrlen(1234567 ) 8

IDLgt printstrlen( 1234567 ) 9

IDLgt helpstrtrim( 1234567 2)ltExpressiongt STRING = 1234567

IDLgt helpstrtrim( 1234567 1)ltExpressiongt STRING = 1234567

IDLgt helpstrtrim( 1234567 0)ltExpressiongt STRING = 1234567

IDLgt printstrupcase(abcdEF)ABCDEF

IDLgt printstrlowcase(abcdEF)abcdef

Medindo quantos caracteres tem o string inclui espaccedilos em branco

Remoccedilatildeo dos brancos agrave esquerda agrave direita ou dos dois lados

2289

Strings - conversatildeo de outros tipos para strings

Eacute uma das operaccedilotildees mais comuns para gerar textos informativos e nomes escrever arquivos (aquivos texto discutidos adiante) etc

Eacute natildeo trivial jaacute que a conversatildeo pode ser feita de muitas formas diferentes

Para tipos fundamentais sempre haacute uma conversatildeo default tanto criando um string como usando algo tipo print (para strings terminal ou arquivos)

Todo comando tipo print (print printf sprintf string write etc) e toda escrita para arquivos texto eacute uma conversatildeo para string (terminais e arquivos texto soacute conteacutem strings)

2389

Strings - conversatildeo de outros tipos para strings

Exemplos de conversotildees (IDL)

IDLgt print[-109] -1 0 9

IDLgt print1d01B10 10000000 1 100000

IDLgt helpstring(1d01B10)ltExpressiongt STRING = 10000000 1 100000

IDLgt printfunitdblarr(343)

Tipos mais elaborados podem ou natildeo ter uma forma predefinida Com objetos eacute comum ser possiacutevel definir a conversatildeo (stringification) ao criar a classe

IDLgt h=hash(a109[01]18b)

IDLgt printh9 0 1a 100000180000 b

Strings

Coloca strings em um arquivo (adiante)

Strings criados por um meacutetodo da classe hash satildeo uma forma de representar o hash

2489

Strings - conversatildeo de outros tipos para strings

Algumas linguagens (Python IDL) tecircm mais de uma forma default de gerar strings Em Python uma forma eacute executaacutevel a outra eacute mais legiacutevel

In [30] x=arange(12)reshape(43)

In [31] print(x)[[ 0 1 2] [ 3 4 5] [ 6 7 8] [ 9 10 11]]

In [32] xOut[32]array([[ 0 1 2] [ 3 4 5] [ 6 7 8] [ 9 10 11]])

In [33] y=array([[ 0 1 2] [ 3 4 5] [ 6 7 8] [ 9 10 11]])

In [37] print(array_equal(xy))True

String mais legiacutevel

String executaacutevelPode ser usado para criar um objeto equivalente

2589

Strings ndash formataccedilatildeo expliacutecita

A formataccedilatildeo pode ser especificada se a conversatildeo default natildeo eacute adequada para definir a conversatildeo em um novo tipo

Cada linguagem tem sua sintaxe para formataccedilatildeo

Haacute dois estilos semelhantes em vaacuterias linguagens

Ambos os estilos satildeo sintaxes diferentes para a mesma ideacuteia Um coacutedigo especifica o tipo de dado sendo passado (inteiro real etc) e detalhes de como seraacute feito o string (largura do campo diacutegitos decimais alinhamento etc)

2689

Strings ndash formataccedilatildeo expliacutecita

Estilo Fortran

IDL

IDLgt print1d0+1d-9 10000000

IDLgt print1d0+1d-9format=(E1610)10000000010E+00

IDLgt printx=1d0+1d-9format=(A0F1613)X= 10000000010000

Estilo C (ldquoprintfrdquo)

IDL

IDLgt printformat=(x=1610e)1d0+1d-9x=10000000010e+00

Python

In [20] print(x=1610e (1e0+1e-9))x=10000000010e+00

Nenhum formato expliacutecito (default)

2789

Strings - formatos tipo Fortran

(apenas o principal ver documentaccedilatildeo para detalhes)

Ex (IDL)

IDLgt printx=1d0+1d-9format=(A0F1613)X= 10000000010000

Tambeacutem haacute modificadores para especificar alinhamento (-) se deve haver (ou ser suprimido) avanccedilo para a pŕoxima linha posiccedilatildeo dentro do campo etc

Coacutedigo Significado Exemplo(s)

A String (A) (10A)

I Inteiro decimal (I) (10I)(-2I)

B Inteiro binaacuterio (B) (10B)

Z Inteiro hexadecimal (Z) (10Z)

O Inteiro octal (O) (10O)

F Real ponto fixo (F)(F52)

E D Real ponto flutuante (E)(D1610)

G Real ponto fixo ou flutuante de acordo com o valor (G)(G10)

ldquordquo String literal (ldquox=rdquoI10)

X Caracteres em branco (A10XI)

2889

Strings - formatos tipo C (printf)(apenas o principal ver documentaccedilatildeo para detalhes)String com campos a serem substituiacutedos por valores (passados adiante) marcados por coacutedigos com

Ex (Python)In [20] print(x=1610e (1e0+1e-9))x=10000000010e+00

Haacute modificadores para especificar alinhamento como preencher o espaccedilo que sobra (espaccedilos zeros etc) para imprimir o sinal + etc

Coacutedigo Significado (tipo) Exemplo(s)

di Inteiro decimal (int) d 5d +05d

u Inteiro decimal sem sinal (unsigned int) u 7u

fF Real em ponto fixo (double float) f 136f

eE Real em ponto flutuante (double float) e 1610e

gG Real em ponto fixo ou flutuante decidido pelo valor (double float)

g 73G

xX Inteiro sem sinal hexadecimal (unsigned int) x 10X

o Inteiro sem sinal octal (unsigned int) o 5o

s String (string) s 10s

c Caractere (char) c

p Ponteiro - estilo C - (void ) p

literal

2989

Strings - conversatildeo de strings para outros tipos

Para gerar dados a partir de strings datas identificadores pedaccedilos de nomes valores numeacutericos armazenados em strings

Tambeacutem sempre haacute conversotildees default para os tipos baacutesicos onde o intepretador programa faz o possiacutevel para entender o string como um valor daquele tipo

Tipicamente eacute feito por casts (funccedilotildees de conversatildeo) reads (de strings ou arquivos texto (arquivos texto satildeo strings)) construtores de objetos ou implicitamente

3089

Strings - conversatildeo de strings para outros tipos - impliacutecitas

Exs (IDL)

IDLgt helpfix([17 17 171 -17 9 8])ltExpressiongt INT = Array[5]

IDLgt printfix([17 17 171 -17 9 8]) 17 17 17 -17 9

IDLgt printdouble([17 17 171 -17 9 8]) 17000000 17000000 17100000 -17000000 90000000

IDLgt readfunitabcd

IDLgt a=0d0IDLgt b=00IDLgt c=0IDLgt reads171d0 189d0 -9abcIDLgt helpabcA DOUBLE = 17100000B FLOAT = 189000C INT = -9

Converte o conteuacutedo do string para os tipos das variaacuteveis abcd (explicado adiante)

3189

Strings - conversatildeo de strings para outros tipos

Quando o default natildeo eacute suficiente (ou quando escrevendo o conversor em uma classe) costuma ser possiacutevel o fazer com formatos semelhantes aos formatos para gerar strings Exs (IDL)

IDLgt a=0d0IDLgt b=00IDLgt c=0IDLgt reads171d0 something 189d0-9abc READS Input conversion error Unit 0 File ltstdingt Error occurred at $MAIN$ Execution halted at $MAIN$

Natildeo funcionou porque sozinho ele natildeo conseguiu saber o que fazer com o ldquosomethingrdquo Usando um formato especiacutefico

IDLgt reads171d0 something 189d0-9 abcformat=(D6111XD611XI)

IDLgt helpabcA DOUBLE = 17100000B FLOAT = 189000C INT = -9

Exemplos mais complicados adiante (arquivos texto)

Variaacuteveis tecircm que ser definidas para informar para que tipo seraacute feita a conversatildeo default

3289

Strings - processamento natildeo baacutesicoOperaccedilotildees importantes e muito necessaacuterias mas que natildeo satildeo suportadas em todas as linguagens bibliotecas padratildeo

Testes (ex IDL)

IDLgt str=[afitsaFITSafitsaabfitsabcfits]

IDLgt printstrmatch(strfits) 1 0 0 1 1

IDLgt printstrmatch(strfitsfold_case) 1 1 0 1 1

IDLgt printstrmatch(strfitsfold_case) 1 1 1 1 1

IDLgt printstrmatch(strfits) 1 0 0 0 0

IDLgt printstrmatch(strfits) 0 0 0 1 0

3389

Strings - processamento natildeo baacutesico

Operaccedilotildees importantes e muito necessaacuterias mas que natildeo satildeo suportadas em todas as linguagens bibliotecas padratildeo

Separaccedilatildeo de partes (Ex IDL)

IDLgt printstrsplit(2011- 131 -extract)format=(A)2011131

Processamento de nomes de arquivos diretoacuterios (Ex IDL)

IDLgt printfile_dirname(some_directoryanother_directorysome_filetxt)some_directoryanother_directory

IDLgt printfile_basename(some_directoryanother_directorysome_filetxt)some_filetxt

IDLgt printfile_basename(another_directorysome_filetxttxt)+_alteredtxtsome_file_alteredtxt

3489

Strings - processamento natildeo baacutesico

Codificaccedilotildees (Ex Python 3)

gtgtgt s=infinite money infinNeuro sign

gtgtgt print(s)infinite money infineuro

gtgtgt print(ascii(s))infinite money u221eu20ac

gtgtgt print(sencode(utf-8))binfinite money xe2x88x9exe2x82xac

3589

Strings - processamento natildeo baacutesico

Perl eacute a linguagem mais avanccedilada para processamento de strings tem suporte nativo a muitas outras operaccedilotildees a semacircntica da linguagem eacute voltada principalmente para processar strings expressotildees regulares (de vaacuterios tipos) natildeo satildeo strings fazem parte da semacircntica

Ex (sem o objetivo que seja compreensiacutevel apenas para indicar o estilo)

Ler um arquivo contendo campos com nomes separados de valores por ()

temperature 10008name some modelx_dimension 100y_dimension 100z_dimension 50()

Armazenado-o em um mapa O que pode ser feito com apenas

While (ltgt) Loop over input linesPut pre-colon text into $1 post-colon into $2 if (m (S+) (+) ) Use $1 as key $2 as value $file_data$1 = $2

3689

Expressotildees regulares - definiccedilatildeo

Expressotildees regulares (regular expressions regex) satildeo a mais poderosa ferramenta para fazer buscas e separar substrings

Regex satildeo uma linguagem com o uacutenico objetivo de especificar propriedades de strings

Implementadas em graus diferentes em todas as linguagens modernas e modernizadas facilita encontrar uma expressatildeo jaacute pronta pois satildeo quase iguais em qualquer linguagem

Estatildeo na biblioteca padratildeo em IDL Python R Perl

Em C++ e Java em bibliotecas comuns (Boost Jregex)

Para que servem

Uma expressatildeo regular especifica propriedades de strings

O interpretador de expressotildees regulares (regular expression engine) recebe a expressatildeo e o string a analisar e determina se o string corresponde (matches) agrave expressatildeo regular

Em alguns casos o interpretador pode tambeacutem informar que parte(s) do string corresponde(m) a que parte(s) da expressatildeo regular e realizar processamentos com estas partes

3789

Expressotildees regulares ndash exemplos de usos Separar partes de strings

Encontrar linhas em arquivos que tenham nomes valores e comentaacuterios e separar estes pedaccedilos

Escalar com comentaacuterio

SLITPA = 351979 Slit position angle

Array 1D sem comentaacuterio (se extendendo por vaacuterias linhas)

BAND_BIN_CENTER = (03505400358950036629003732200379490 0387900104598)

Escalares em diferentes formatos

Total Mechanical Luminosity 15310E+03resources_usedwalltime=005603

Pedaccedilos de nomes

6063 17836E-20 2456 T FeIX((3Pe)3d(2PE)4p_1Po-3s2_3p6_1Se)

Datas separando ano mecircs dia hora (em vaacuterios formatos diferentes)

DATE-OBS= 2006-12-18 universal date of observationDATE_TIME = 2010-07-19T161032START_TIME = 2006-182T225102850Z

3889

Expressotildees regulares ndash exemplos de usos

Separar partes de strings Separar partes de nomes de arquivos (por significarem algo como identificar o

conteuacutedo)

specdec18s0041fitsscamdec18i0054fits15_7_mts_hmpixselh_mr15sav15_7_mts_hwpixselh_mr15sav16_3_mts_hwpixselb_mr16savreadmodel5l_-1_000010000_10000_r05_030_08196_0100000_005000000_1000eps

Determinar se um string eacute um nuacutemero (inteiro real fixo flutuante)

Encontrar identificadores Exs nomes de cataacutelogos endereccedilos HTTPFTP endereccedilos de email

Separar campos em arquivos sendo lidos onde as linhas natildeo tecircm a mesma formataccedilatildeo algumas linhas com colunas separadas por espaccedilos outras por tabs outras por

siacutembolos ignorando linhas de comentaacuterios e linhas vazias

3989

Expressotildees regulares - usoEx (IDL) encontrar nomes de arquivos com algumas propriedades

IDLgt printfilesformat=(A)CM_1477475933_1_viscubCM_1477476864_1_ircubCM_1477476864_1_irgcubCM_1477476864_1_viscubCM_1477477826_1_ircubCM_1477477826_1_irgcubCM_1477477826_1_viscubmosaic2cub

IDLgt printstregex(files+irgcubboolean) 0 0 1 0 0 1 0 0

A expressatildeo regular eacute +irgcub Especifica uma ou mais ocorrecircncias seguidas (+) de qualquer caractere () seguido de uma ocorrecircncia de irgcub (o ponto vem precedido do caractere de

escape () para ser entendido literalmente como um ponto e natildeo como o seu significado especial (qualquer caractere)

Esta aplicaccedilatildeo do interpretador (stregex) retorna um valor Booleano (verdadeirofalso) para cada elemento do string passado (files) que informa se aquele elemento correspondia agravequela expressatildeo regular

Este eacute um exemplo artificial Seria mais faacutecil ter usado strmatch(filesirgcub)

4089

Expressotildees regulares - uso

Em casos como este tipicamente o resultado de stregex seria usado como filtro para selecionar apenas os elementos do array de strings que satisfazem agravequela expressatildeo regular

IDLgt w=where(stregex(files+irgcubboolean)null)IDLgt printfiles[w]format=(A)CM_1477476864_1_irgcubCM_1477477826_1_irgcub

Ex (IDL) Determinar que strings conteacutem uma data no formato yyyy-mm-dd

IDLgt strs=[201002012010-02-012010-2-1aaaa-mm-ddT2010-02-01J]IDLgt printstregex(strs[0-9]4-[0-9]2-[0-9]2boolean) 0 1 0 0 1

Esta expressatildeo regular especifica quatro repeticcedilotildees (4) de diacutegitos (caracteres na faixa [0-9]) seguido de um (-) seguido de duas repeticcedilotildees (2) de dois diacutegitos ([0-9]) seguido de um (-) seguido de duas repeticcedilotildees (2) de dois diacutegitos ([0-9])

Uma expressatildeo regular apenas um pouco mais elaborada poderia corresponder aos 3 formatos de data no array acima E poderia se impedir que a uacuteltima (com outros caracteres antes e depois da data) seja aceita

4189

Expressotildees regulares - regras - caracteres ldquonormaisrdquo

Uma expressatildeo regular usa caracteres ldquonormaisrdquo e especiais para especificar o que se vai procurar na ordem em que aparecem na expressatildeo

Se um caractere eacute normal (natildeo eacute um dos especiais mostrados adiante) ele especifica uma ocorrecircncia daquele caractere

Ex J eacute uma expressatildeo regular que corresponde a qualquer string onde ocorra J Jaacute JA soacute corresponde a strings que tenham JA dentro

Exs (IDL)

IDLgt strs=[JJJJJJaJAjaJa]

IDLgt printstregex(strsJboolean) 1 1 1 0 1

IDLgt printstregex(strsJAboolean) 0 0 1 0 0

4289

Expressotildees regulares - regras - caracteres especiaisCaracteres especiais tecircm outros significados Para significar literalmente aquele caractere deve ser escapado (escaped) com um

Siacutembolo significado exemplo Corresponde(m) Escape o caractere seguinte deve ser interpretado

literalmente natildeo como especial aa

Qualquer caractere ab ajb aab abb jafbc

+ Uma ou mais repeticcedilotildees do que vem agrave esquerda a+b ab aab bab baabh

() Subexpressatildeo para agrupar termos afetados por um caractere especial (como parecircnteses em notaccedilatildeo matemaacutetica)

(ab)+c abc ababc dabababcg

Zero ou mais repeticcedilotildees dos termos agrave esquerda ab abbaab caaabg

Zero ou uma repeticcedilatildeo dos termos agrave esquerda ab b ab cabd cbd

| Alternaccedilatildeo qualquer um dos dois agrave esquerda a|bc ac bc jacd jbcd

n Exatamente n repeticcedilotildees do termo agrave esquerda a2b aab daaabg

n1n2 De n1 a n2 repeticcedilotildees do termo agrave esquerda a12b ab aab aaab gaaabbd

^ Acircncora (no comeccedilo) nada agrave esquerda ^ab ab abb

$ Acircncora (no fim) nada agrave direita ab$ abaab

[] Conjunto de valores (explicado adiante)

4389

Expressotildees regulares - regras - conjuntos de valores

[] denota um conjunto de valores que pode conter

Uma lista de coisas que devem corresponder Ex [abc] signfica qualquer caractere no conjunto abc Correspondem a esta

expressatildeo abcabha

Uma lista de coisas que natildeo podem corresponder [^abc] significa qualquer coisa que natildeo seja a b ou c Correspondem a esta

expressatildeo d jgs gg

Faixas de valores [0-9] signfica qualquer diacutegito [0-9a-zA-Z] significa qualquer diacutegito ou letra

Classes de valores como algumas faixas e outros conjuntos ocorrem com muita frequumlecircncia haacute nomes

especiais para eles Estes (em IDL) vecircm entre [] ex [[digit] significa o mesmo que [0-9]

4489

Expressotildees regulares - regras - classes de valores

Classe signficado

alnum Caracteres alfanumeacutericos 0-9a-zA-Z

alpha Caracteres alfabeacuteticos a-zA-Z

cntrl Caracteres de controle ASCII (natildeo visiacuteveis coacutedigos 1 a 31 e 127)

digit Diacutegitos (decimais) 0-9

graph Caracteres visiacuteveis ASCII 33 a 126 (natildeo inclui o espaccedilo)

lower Letras minuacutesculas a-z

print Caracteres ldquoimprimiacuteveisrdquo (visiacuteveis e o espaccedilo) ASCII 32 a 126

punct Caracteres de pontuaccedilatildeo $amprsquo()+-lt=gt[]^_lsquo|~

space Os caracteres ldquoem brancordquo (blank) espaccedilo tab tab vertical CR LF (ASCII 32 e 9-13)

upper Letras maiuacutesculas A-Z

xdigit Diacutegitos hexadecimais 0-9A-Fa-f

lt Comeccedilo de palavra (palavra definida como sequumlecircncia de coisas natildeo space)

gt Fim de palavra (palavra definida como sequumlecircncia de coisas natildeo space)

Estas satildeo apenas as principais Algumas implementaccedilotildees tecircm muito mais (em particular nas linguagens que usam Unicode nativamente)

4589

Expressotildees regulares - exemplos

Determinar se strings satildeo nuacutemeros (Ex IDL)

IDLgt str=[9-18 875-812-45913E9-98d7a188d032f5]

Inteiros

IDLgt intexpr=^[-+][0-9]+$

IDLgt printstregex(strintexprboolean) 1 1 0 0 0 0 0 0 0 0

Ponto flutuante

IDLgt fpexpr=^[-+](([0-9][0-9]+)|([0-9]+[0-9]))([eEdD][-+][0-9]+)$

IDLgt printstregex(strfpexprboolean) 1 1 0 1 1 1 1 1 0 0

Sinal opcional

1 ou mais diacutegitos

Sinal opcional

0 ou mais diacutegitos opcionalmente seguidos de um ponto e 1 ou mais diacutegitos

1 ou mais diacutegitos opcionalmente seguidos de um ponto e 0 ou mais diacutegitos

ou Expoente opcional letra do expoente seguida de sinal opcional seguido de um ou mais diacutegitos

4689

Expressotildees regulares ndash extraccedilatildeo

Interpretadores de expressotildees regulares costumam oferecer mais que apenas testar se um string corresponde a uma expressatildeo

Em geral tambeacutem podem retornar que parte(s) do string corresponde(m) agrave expressatildeo

Ex (IDL) Determinar se um string conteacutem uma data incluindo os formatos

IDLgt dates=[2011-01-312011 1 3120110131something done on y2011m1d31 with something]

E extrair a data de dentro do string

IDLgt expr=[0-9]4[0-9]12[0-9]12

(4 diacutegitos)(qualquer separador)(1 a 2 diacutegitos)(qualquer separador)(1 a 2 diacutegitos)

IDLgt printstregex(datesexprextract)format=(A)2011-01-312011 1 31201101312011m1d31

Como agora separar ano mecircs e dia Com uma busca e uma extraccedilatildeo para cada Poderia ser mais eacute mais faacutecil com uma uacutenica expressatildeo regular

4789

Expressotildees regulares - aleacutem de apenas testes

Tambeacutem podem retornar que parte(s) do string correspondem agrave expressatildeo toda e agraves suas subexpressotildees (partes da expressatildeo delimitadas por parecircnteses)

Ex (IDL) Separar pedaccedilos de datas Neste caso para a expressatildeo ficar menor assumindo um formato simples (yyyy-mm-ddThhmmssfff) Mas poderia ser um formato mais livre como no exemplo anterior

IDLgt str=Stuff observed on 2011-01-31T123924983 with some instrumentIDLgt expr=([0-9]4)-([0-9]2)-([0-9]2)T([0-9]2)([0-9]2)([0-9]2[0-9]3)

(quatro diacutegitos)-(2 diacutegitos)-(2 diacutegitos)T(2 diacutegitos)(2 diacutegitos)(2 diacutegitos3 diacutegitos)

IDLgt pieces=stregex(strexprextractsubexpr)IDLgt printpiecesformat=(A)2011-01-31T12392498320110131123924983IDLgt d=julday(pieces[2]pieces[3]pieces[1]pieces[4]pieces[5]pieces[6])IDLgt printdformat=(F166) 2455593027372

Expressatildeo inteiraPrimeira subexpressatildeoSegunda subexpressatildeoTerceira subexpressatildeoQuarta subexpressatildeoQuinta subexpressatildeoSexta subexpressatildeo

4889

Expressotildees regulares - referecircncias httpxkcdcom208

Viacutedeos do Software Carpentry

httpsoftware-carpentryorg4_0regexp

4989

Arquivos

Quase todo programa precisa armazenar dados em arquivos

Podem ser pequenos arquivos de paracircmetros ou enormes arquivos de dados produzidos ou a processar

Apesar do sugerido pela praacutetica comum arquivos texto natildeo satildeo sempre a melhor escolha para armazenar dados - e haacute muitas formas diferentes de os usar

Qual eacute a melhor escolha

Assim como para linguagens ou contecirciners natildeo existe ldquoo melhor formatordquo Cada um tem suas vantagens e desvantagens

Dados diferentes (mesmo se usados pelos mesmos programas) em geral se adequam melhor a formatos diferentes

5089

Arquivos - texto X binaacuterios

Em qualquer formato arquivos satildeo armazenados como diacutegitos binaacuterios

Mas haacute duas formas principais como eles podem ser codificados

Arquivos baseados em texto (text files)

Dados satildeo transformados em caracteres usando alguma formataccedilatildeo (mesmo se impliacutecita) e escritos com alguma codificaccedilatildeo de texto (comumente mas natildeo necessariamente ASCII)

Um arquivo texto eacute um ou mais strings As mesmas conversotildees tecircm que ser feitas depara outros tipos

Arquivos ldquobinaacuteriosrdquo (binary files)

Embora todo arquivo seja binaacuterio este nome costuma ser usado soacute para aqueles em que os dados natildeo estatildeo na forma de texto

Com frequumlecircncia (nem sempre) os dados satildeo gravados de forma idecircntica a como satildeo armazenados na memoacuteria

Muitos formatos usam uma mistura de partes em texto e partes binaacuterias

Um cabeccedilalho (header) de texto que daacute informaccedilotildees (metadados) sobre os dados armazenados na parte binaacuteria que vem depois

O cabeccedilalho conteacutem em especial informaccedilotildees sobre como ler os dados binaacuterios

5189

Arquivos - texto X binaacuterios

Vantagens de arquivos texto

Legiacuteveis por pessoas (human readable)

Podem ser auto-suficientes todo o necessaacuterio para os ler e entender o que conteacutem pode ser obtido olhando o arquivo

Satildeo os menos especiacuteficos a linguagens software normalmente satildeo escritos em ASCII ou Unicode e sempre haacute algum suporte a ler escrever texto em linguagens software

Haacute alguns formatos padratildeo para texto (exs CSV XML) que satildeo suportados em muitas plataformas diferentes

5289

Arquivos - texto X binaacuterios

Vantagens de arquivos binaacuterios

Em geral natildeo haacute conversotildees entre o os dados como armazenados na memoacuteria O que torna o armazenamento mais eficiente e sem alteraccedilotildees nos valores

A maior parte dos formatos padronizados eacute binaacuteria Exs FITS cube CDF NetCDF HDF HDF5 JPEG JPEG2000 TIFF GeoTIFF MPEG etc

Eacute mais comum que haja bibliotecas prontas (ateacute de alto niacutevel) para consulta leitura e gravaccedilatildeo

Os formatos melhor desenhados satildeo autodocumentados (em texto ou binaacuterio) para os ler natildeo eacute necessaacuterio conhecimento preacutevio sobre como os dados foram armazenados

Toda linguagem plataforma costuma ter seu formato binaacuterio mais nativo que costuma ser o mais faacutecil para leitura gravaccedilatildeo Em particular nas de alto niacutevel que tecircm formatos autodocumentados (especialmente

em IDL R Python Java)

Muitos formatos tecircm opccedilatildeo de compressatildeo dos dados

5389

Arquivos - proprietaacuterios X padratildeo

Independente da escolha texto binaacuterio programas devem escolher entre usar um formato proacuteprio ou um formato padronizado

A principal vantagem de formatos proacuteprios eacute que satildeo definidos da forma mais conveniente para a aplicaccedilatildeo que os usa simplificando leitura e gravaccedilatildeo e potencialmente otimizando recursos (acesso ao disco tamanho do arquivo etc)

A principal desvantagem de formatos proacuteprios eacute ser necessaacuterio escrever todo o coacutedigo para os ler gravar

Pode dar mais trabalho que usar um formato geneacuterico que natildeo seja exatamente o que melhor se encaixa na aplicaccedilatildeo

O coacutedigo para processar o formato em geral vai ser menos completo e conveniente de usar que o de um formato bem estabelecido usado por muitos outros em muitos ambientes

Cada novo software que for usar estes arquivos vai precisar compartilhar do mesmo coacutedigo ou precisar de coacutedigo novo (em particular se em outra linguagem) para ler gravar naquele formato

Eacute necessaacuterio documentar o formato e decidir sobre como ele seraacute definido

Se outros jaacute colocaram muito trabalho desenvolvendo bons formatos padratildeo bem suportados em muitos ambientes por que ter o trabalho de reinventar (e reprogramar redocumentar e retestar) a roda

5489

Arquivos - padrotildees comuns em astronomia (exs adiante)

Texto

CSV Comma-separated values - bem suportado por muitos softwares

ldquoColunas fixasrdquo Natildeo eacute um padratildeo bem definido mas eacute praacutetica comum para tabelas (2D)

XML Extensible Markup Language - O padratildeo texto mais flexiacutevel de grande uso em programaccedilatildeo geral para armazenar qualquer coisa com frequumlecircncia de forma hieraacuterquica Bem suportado por linguagens modernas (e modernizadas) e bibliotecas das principais

linguagens gerais Alta complexidade o torna trabalhoso de usar

5589

Arquivos - padrotildees comuns em astronomia (exs adiante)Binaacuterios

FITS Flexible Image Transport System - o mais comum para observaccedilotildees astronocircmicas Conteacutem os dados (em geral arrays 1D 2D ou 3D) e documentaccedilatildeo (nos cabeccedilalhos) sobre a origem e caracteriacutesticas dos dados Tambeacutem usado para armazenar tabelas de dados quaisquer mesmo que natildeo sejam observaccedilotildees (especialmente pelo STSCI) Variam muito em qualidade de documentaccedilatildeo

NetCDF Network Common Data Form - evoluccedilatildeo do CDF autodocumentado eacute comum e bem suportado para vaacuterios arrays de dados

HDF5 Hierarchical Data Format ndash autodocumentado comum e bem suportado permitindo aleacutem de simples arrays estruturas (eacute um formato hieraacuterquico)

Formatos de imagens JPEG JPEG2000 TIFF GeoTIFF etc - voltados para arrays 2D3D de inteiros ou (em alguns casos) reais com ou sem compressatildeo JPEG2000 tem caracteriacutesticas mais avanccediladas como imagens multiresoluccedilatildeo

Formatos vetoriais PS EPS DXF SHP SVG - variados niacuteveis de suporte a armazenamento de vetores e formas em 2D ou 3D

ISIS Cube semelhante em caracteriacutesticas ao FITS mais usado em sensoriamento remoto geociecircncias e ciecircncias planetaacuterias em geral para observaccedilotildees 1D 2D ou 3D

Formatos nativos de linguagens todo o trabalho de leitura e gravaccedilatildeo eacute feito automagicamente pela biblioteca padratildeo em IDL R Python Java

5689

Arquivos texto - newlines

Apesar do que possa parecer arquivos texto natildeo tecircm intrinsecamente vaacuterias linhas Arquivos texto satildeo soacute uma sequumlecircncia 1D de caracteres em alguma codificaccedilatildeo Separaccedilatildeo em linhas (equivalente a interpretar o arquivo como 2D em linhas e colunas) eacute

especificada por convenccedilotildees Natildeo haacute apenas uma convenccedilatildeo para o fim de linhas

A mais primitiva convenccedilatildeo eacute separaccedilatildeo nenhuma estipula-se que linhas tenham um nuacutemero fixo N de caracteres e cabe ao software que lecirc o arquivo entender que uma linha nova ocorre regularmente a cada N caracteres

Eacute a forma menos portaacutevel e mais inconveniente eacute necessaacuterio o conhecimento preacutevio (ou por inspeccedilatildeo do arquivo) de quantos caracteres haacute por linha

A maior parte dos editores de texto natildeo vai saber separar linhas desta forma (por falta deste conhecimento preacutevio) Exemplo (de um FITS real)

SIMPLE = T Fits standard BITPIX = 16 Bits per pixel NAXIS = 0 Number of axes EXTEND = T File may contain extensions

O que com as linhas quebradas nos lugares certos seria

SIMPLE = T Fits standard BITPIX = 16 Bits per pixel NAXIS = 0 Number of axes EXTEND = T File may contain extensions

5789

Arquivos texto - newlines

A forma mais comum de especificar linhas eacute com um marcador do final de linha (newline)

Eacute um caractere especial natildeo normalmente presente no texto que serve para marcar fim de linhas

Mas natildeo haacute soacute um padratildeo de newline Os mais comuns

LF (Line Feed ASCII 10) ndash Unix Linux Mac OS X

CR - (Carriage Return ASCII 13) - Mac OS lt10

CR+LF (CR seguido de LF) - Windows DOS

Eacute o motivo de o Notepad (Windows) natildeo entender as quebras de linha de arquivos escritos com o formato nativo de Linux o arquivo soacute tem LF enquanto o editor espera CR+LF

Alguns sistemas (strings em vaacuterias linguagens por exemplo) usam o coacutedigo de escape n para indicar newline que eacute codificado de acordo com o padratildeo sendo usado

Em geral bibliotecas de leitura e gravaccedilatildeo de arquivos usam (default pelo menos) o newline nativo do sistema em que satildeo usadas

Programas de conversatildeo entre os sistemas satildeo comuns (ex dos2unix)

O Wordpad identifica se for usado soacute LF e quebra as linhas de acordo

5889

Arquivos - texto - CSV

Comma-separated values

O formato mais padronizado para tabelas (arrays 2D) em texto (frequentemente mas natildeo necessariamente ASCII)

Bem suportado por bibliotecas padratildeo de linguagens e outros softwares (Excel Calc Origin Google Docs etc)

Conteacutem Linhas de cabeccedilalho (opcionais mas recomendadas) linhas com qualquer texto geral

descrevendo o arquivo e em geral uma linha de tiacutetulo para as colunas da tabela Uma (apenas uma) tabela onde todas as linhas tecircm o mesmo nuacutemero de colunas

Colunas separadas por viacutergulas (opcionalmente pode ser outro separador) Linhas terminadas por newline (qualquer que seja) Strings delimitados por ldquo ldquo

Ex

NAMECALMPOSFILNAMEECHLPOSDISPPOSTARGNAMEPOSDIRCLASSMJD-OBSITIMECOADDSdec18s00010NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001dec18s00020NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001dec18s00120NIRSPEC-5-AO635800364500itan140NIRSPEC-5-AOp2 TITAN5408763000001dec18s00140NIRSPEC-5-AO626300364500itan140NIRSPEC-5-AOp1 TITAN5408763000001dec18s00151NIRSPEC-5-AO626300364500itan140NIRSPEC-5-AOp1ARC5408764000001dec18s00160NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001

Natildeo eacute necessaacuterio que as colunas tenham largura constante

Cabeccedilalho

5989

Arquivos - texto - CSVHaacute amplo suporte a leitura e gravaccedilatildeo de CSV sem precisar recorrer a procedimentos de baixo niacutevel

Podem ser diretamente importados em Excel Calc Origin Google Docs ou lido facilmente com bibliotecas padratildeo comuns Ex (IDL)

IDLgt c=read_csv(filesearch_scamcsvheader=h)IDLgt printhNAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS

IDLgt helpc Structure ltc8bca508gt 11 tags length=5256 data length=5248 refs=1 FIELD01 STRING Array[41] FIELD02 LONG Array[41] FIELD03 STRING Array[41] FIELD04 DOUBLE Array[41] FIELD05 DOUBLE Array[41] FIELD06 STRING Array[41] FIELD07 STRING Array[41] FIELD08 STRING Array[41] FIELD09 STRING Array[41] FIELD10 DOUBLE Array[41] FIELD11 LONG Array[41]

IDLgt printcfield01[03]dec18s0001 dec18s0002 dec18s0003 dec18s0004

IDLgt printcfield03[03]NIRSPEC-5-AO NIRSPEC-5-AO NIRSPEC-5-AO NIRSPEC-5-AO

6089

Arquivos - texto - CSVEx (IDL) Criaccedilatildeo de um CSV com uma tabela de valores

Criaccedilatildeo de 3 arrays 1D (12 elementos) um para cada coluna

IDLgt x=dindgen(3)IDLgt y=dindgen(4)IDLgt xx=reform(rebin(x34)12)IDLgt yy=reform(rebin(reform(y14)34)12)IDLgt f=xx+yy10IDLgt helpxxyyfXX DOUBLE = Array[12]YY DOUBLE = Array[12]F DOUBLE = Array[12]

Escrita do arquivo

IDLgt write_csvexamplecsvxxyyfheader=[XYX+10Y]

ResultadoXYX+10Y000000000000000000000000100000000000000010000000200000000000000020000000000000001000000010000000100000001000000011000000()

6189

Arquivos - texto - ldquoColunas regularesrdquoFixed column width

Natildeo eacute exatamente um padratildeo Eacute uma praacutetica comum

Armazena uma tabela (array 2D) de forma regular simples de ser interpretada e lida

Costumam ter linha(s) de cabeccedilalho descrevendo o conteuacutedo do arquivo em geral com uma linha para os nomes das colunas

As demais linhas conteacutem os dados sempre ocupando a mesma largura por coluna e escritos no mesmo formato em cada coluna

Costumam ser simples de ler inclusive interativamente (exs Excel Calc Origin read_ascii)

Ex (IDL) Uma simples tabela soacute de nuacutemeros

wavl CH4=33 wavl CH4=25 wavl CH4=10 wavl CH4=08 wavl CH4=05 wavl CH4=026 wavl CH4=02 477330000 0090130 477330000 0091110 477330000 0089250 477330000 0087000 477330000 0087140 477330000 0090080 477330000 0088110 480040000 0090930 480040000 0091930 480040000 0090160 480040000 0087930 480040000 0088110 480040000 0090950 480040000 0089090 482750000 0091710 482750000 0092730 482750000 0091060 482750000 0088850 482750000 0089080 482750000 0091810 482750000 0090060 485450000 0092530 485450000 0093570 485450000 0092000 485450000 0089810 485450000 0090100 485450000 0092730 485450000 0091090

IDLgt a=read_ascii(specs_27s_ntxtdata_start=1header=header)IDLgt printheader wavl CH4=33 wavl CH4=25 wavl CH4=10 wavl CH4=08 wavl CH4=05 wavl CH4=026 wavl CH4=02 IDLgt helpa Structure ltd423c9a8gt 1 tags length=224 data length=224 refs=1 FIELD01 FLOAT Array[14 4]

6289

Arquivos - texto - ldquoColunas regularesrdquoJaacute um arquivo um pouco mais difiacutecil de ler

NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS dec18s0001 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0002 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0003 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 FLAT 5408757812500 460000 5 dec18s0004 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 DARK 5408757812500 460000 5

Por ter colunas de tipos diferentes (strings inteiros reais) natildeo eacute possiacutevel o ler em um simples array Mas eacute faacutecil o colocar em uma estrutura de arrays onde cada campo eacute uma coluna

Especificando interativamente como interpretar as linhasIDLgt templ=ascii_template(filesearch_scamtxt)

Nome do campo (default mostrado)

Tipo do campo (identificado automaticamente)

Posiccedilatildeo (caracter) do comeccedilo (identificada automaticamente)

Linha de exemplo para verificar as colunas

6389

Arquivos - texto - ldquoColunas regularesrdquoDepois de feito o template o arquivo pode ser lido com apenas

IDLgt a=read_ascii(filesearch_scamtxttemplate=templ)IDLgt helpa Structure ltd4ec4608gt 11 tags length=416 data length=416 refs=1 FIELD01 STRING Array[4] FIELD02 LONG Array[4] FIELD03 STRING Array[4] FIELD04 FLOAT Array[4] FIELD05 FLOAT Array[4] FIELD06 STRING Array[4] FIELD07 STRING Array[4] FIELD08 STRING Array[4] FIELD09 FLOAT Array[4] FIELD10 FLOAT Array[4] FIELD11 LONG Array[4]IDLgt printafield01dec18s0001 dec18s0002 dec18s0003 dec18s0004IDLgt printafield04 626300 626300 626300 626300

O template (uma estrutura contendo dados sobre como ler o arquivo) pode ser usado para outros arquivos no mesmo formato No lugar de ter sido criado interativamente poderia ter sido lido de algum arquivo Poderia ter especificado nomes para os campos que seriam mais amigaacuteveis que coias como FIELD11

6489

Arquivos - texto - XML

Extensible Markup Language

Admite grande flexibilidade e por isso pode ter alta complexidade

Valores satildeo colocados dentro de uma estrutura em hieraacuterquica (em uma aacutervore) com os noacutes identificados pelos seus nomes (chaves)

Largamente usado em muitas aacutereas para armazenar conjuntos arbitraacuterios de quaisquer estruturas de dados

A maioria das aplicaccedilotildees usa um formato que eacute um subconjunto do XML especificado por um Schema comumente em um arquivo XML DTD (Document Type Definition)

6589

Arquivos - texto ndash XML ndash exemplos de usos

Armazenamento de dados de aplicaccedilotildees web (comum para exportar importar dados MediaWiki DokuWiki WordPress ADS Lattes etc)

Documentos Office (docx pptx xlsx) OpenOffice (odt opd ods)

Como versotildees de outros formatos FITSML XDF

ldquoScientific Dataset XML NASAs Astronomical Data Center (ADC) sponsors a number of research projects that

use XML for scientific data representation The XML activities at the ADC are sponsored and supported by the NASA Office of Space Science Applied Information Systems Research Program (AISRP)rdquo - httpxmlcoverpagesorgnasa-adchtml

Astronomical Instrument Markup Language (AIML)

SVG ndash Scalable Vector Graphics

Muitas de outras aplicaccedilotildees listadas em httpxmlcoverpagesorgxmlhtmlapplications

6689

Arquivos - texto ndash XML - exemploltxml version=10 gtltDOCTYPE Xdmf SYSTEM Xdmfdtd []gtltXdmf xmlnsxi=httpwwww3org2001XInclude Version=20gt ltDomaingt lt-- Example of Basic Topologies --gt ltInformation Name=Descriptiongt Example of a Polyvertex Topology ltInformationgt ltGrid Name=Polyvertex GridType=Uniformgt ltTopology TopologyType=Polyvertex Dimensions=3 NodesPerElement=3gt ltDataItem Format=XML Dimensions=3 3 NumberType=Floatgt 0 1 2 4 5 6 8 9 10 ltDataItemgt ltTopologygt ltGeometry Type=XYZgt ltDataItem Format=XML Dimensions=4 4 3gt 00 00 00 10 00 00()Que mostra que a interpretaccedilatildeo (parsing) de XML eacute em geral complexa

6789

Arquivos - texto - XML

Haacute muitas bibliotecas de alto niacutevel para fazer o processamento (parsing) e entregar os dados em uma estrutura conveniente

A complexidade em processar XML estaacute em decidir o que fazer com os dados jaacute que os arquivos podem ser muito complexos

As APIs (Application Programming Interfaces) mais comuns para processar XML que satildeo implementadas em muitas linguagens

DOM (Document Object Model) ndash manteacutem todo o conteuacutedo do em uma estrutura de dados (em geral uma aacutervore) em uma variaacutevel (em geral um objeto) Esta pode ser consultada para obter os valores de interesse para os alterar e usada para escrever um arquivo

SAX (Simple API for XML) ndash Interpretador (parser) por objetos O usuaacuterio escreve uma classe herdando da classe SAX provendo os meacutetodos que vatildeo processar os campos agrave medida em que estes satildeo lidos

6889

Arquivos - binaacuterios - FITSFlexible Image Transport System

O formato mais comum para observaccedilotildees astronocircmicas Tambeacutem usado para armazenar quaisquer dados mesmo natildeo relacionados a observaccedilotildees (especialmente tabelas como eacute praacutetica do STSCI)

Conteacutem um (ou mais) cabeccedilalho(s) de texto com metadados (informaccedilotildees sobre os dados como caracteriacutesticas (necessaacuterias para os ler) origem condiccedilotildees em que foram obtidos processamento realizado etc)

SIMPLE = T image conforms to FITS standard BITPIX = 32 bits per data value NAXIS = 2 number of axes NAXIS1 = 1024 NAXIS2 = 1024 BSCALE = 100000 Scaling factor BZERO = 000000 Scaling zero-point TELESCOP= Keck II Telescope SLITNAME= 0041x226 Slit Name SLITPA = 351979 Slit position angle SLITX = 131500 X pixel of the center of the slit LST = 12010446 local apparent sidereal time (()

Depois do cabeccedilalho haacute uma (ou mais) seccedilatildeo(otildees) de dados binaacuterios Costuma(m) ser array(s) 1D (espectros) 2D (imagens) ou 3D (ldquocubos de dadosrdquo)

De inteiros ou reais inteiros satildeo comuns em contagens de instrumentos reais para valores derivados (fluxos intensidades etc)

6989

Arquivos - binaacuterios - FITSNormalmente FITS satildeo lidos escritos por bibliotecas prontas de (relativamente) alto niacutevel usuaacuterio natildeo tem que saber como os dados satildeo armazenados no arquivo nem como os ler escrever Ex (IDL com a biblioteca idlastro)

IDLgt fits_info2dspectrumfits2dspectrumfits has 3 extensionsPrimary header 288 recordsNo dataExtension 1 -- SCI Header 144 records IMAGE ( 1201 1201 )Extension 2 -- ERR Header 72 records IMAGE ( 1201 1201 )Extension 3 -- DQ Header 72 records IMAGE ( 1201 1201 )

IDLgt mydata=readfits(2dspectrumfitsexten_no=1myheader) READFITS Reading FITS extension of type IMAGE READFITS Now reading 1201 by 1201 array

IDLgt extastmyheadermyastIDLgt sz=size(mydatadimensions)IDLgt xy2ad[1sz[0]][1sz[1]]myastcorners_acorners_dIDLgt printcorners_aCorners of the data array from file 2dspectrumfits are at 14487480 33063480

IDLgt printcorners_d -00041264444 00041402222

Obteacutem os dados de coordenadas (WCS) do header

Coloca os dados no array (2D de floats) mydata e o header no array (1D de strings) myheader

Calcula as coordenadas das quinas da imagem atraveacutes do WCS

Provecirc informaccedilotildees sobre o arquivo

7089

Arquivos - binaacuterios - ISIS Cube

Formatos como FITS se adequam muito a ter uma interface de mais alto niacutevel por objetos

Tambeacutem para dados em tabelas FITS muito mais trabalhosos de ler em baixo niacutevel que se adequam muito mais a mapas ou estruturas

Exemplo (de um formato semelhante a FITS ISIS cube)

O objeto ao ser criado lecirc todo o arquivo

cube=pp_editablecube(CM_1553510065_1_ircub)

Meacutetodos fornecem os dados desejados para obter quando necessaacuterio os dados de interesse

Find out the names of the backplanesprintcubegetproperty(backnames)Get the start time of the cubeprintcubegetfromheader(START_TIME)2007-084T100057286Z

Valores no cabeccedilalho podem ser convenientemente fornecidos como um mapa

header=cubeheader_as_hash()printheader[START_TIME]2007-084T100057286Z

7189

Arquivos - binaacuterios ndash ISIS Cube

Os dados satildeo fornecidos como arraysMake a contour plot of the latitudesc=contour(cubegetsuffixbyname(LATITUDE))Get the band with wavelength nearest to 21 (in the units used in the cube)selband=cubegetbandbywavelength(21wavelengths=selwavs)

Interfaces por overload tornam o acesso ainda mais conveniente

selband=cube[21]

selwavs=cube[21]

Retorna um array com a banda de comprimento de onda mais proacuteximo de 21 (microm)

Retorna o comprimento de onda mais proacuteximo de 21 (microm) da banda retornada acima

7289

Arquivos - binaacuterios ndash ISIS Cube Alteraccedilotildees feitas ao conteuacutedo satildeo automaticamente refletidas em todos os

lugares (cabeccedilalho em particular) afetados mantendo o objeto vaacutelido que pode depois ser gravado em um novo arquivo

IDLgt printcubelinescubesamplescubebands 64 64 256

IDLgt helpcubecoreltExpressiongt FLOAT = Array[64 64 256]

IDLgt cubecore=dblarr(100100256)

A linha acima natildeo eacute uma atribuiccedilatildeo eacute uma invocaccedilatildeo de meacutetodo Eacute equivalente acubesetpropertycore=dblarr(100100256)

Eacute o trabalho da funccedilatildeo setproperty decidir se a propriedade passada (core) faz sentido e se fizer fazer todo o trabalho necessaacuterio a esta mudanccedila Para o usuaacuterio eacute tudo automaacutetico e os dados da classe satildeo vaacutelidos o tempo todo

IDLgt helpcubecoreltExpressiongt DOUBLE = Array[100 100 256]

IDLgt printcubelinescubesamplescubebands 100 100 256

IDLgt cubesaveCM_1553510065_1_ir_editedcub

7389

Arquivos - binaacuterios ndash NetCDF e HDF5

Network Common Data Form e Hierarchical Data Format

Os dois uacutenicos formatos bem estabelecidos para dados cientiacuteficos geneacutericos

Armazenam dados como vaacuterias variaacuteveis e seus metadados Para cada variaacutevel haacute (ou pode haver) os metadados

Nome Dimensotildees (do array) Unidades Comentaacuterios

Ambos permitem arrays multidimensionais

Apenas HDF5 permite estruturas (daiacute vem a hierarquia)

Autodocumentados qualquer software que saiba ler um destes formatos lecirc qualquer arquivo sem precisar de conhecimento preacutevio sobre como o arquivo foi gerado

Muito bem suportados em bibliotecas padratildeo e natildeo padratildeo em softwares interativos e visualizadores (inclusive plugins para navegadores)

httpwwwunidataucaredusoftwarenetcdf httpenwikipediaorgwikiHdf5

NetCDF eacute mais simples de usar por natildeo ter hierarquia dando menos trabalho para ler e escrever dados Se hierarquia natildeo eacute necessaacuteria eacute mais conveniente de usar que HDF5

7489

Arquivos - binaacuterios - NetCDF e HDF5Haacute tambeacutem o formato CDL uma versatildeo ASCII do NetCDF A biblioteca padratildeo do NetCDF inclui conversores entre estes formatos

$ ncdump -h refspec_g01_0ncnetcdf refspec_g01_0 dimensions nlay = 51 nwn = 400 nleg = 33 numu = 2 nlev = 52 nphi = 3 ngas = 2 nwnc = 1 scal = 1 v3 = 3 dnl = 1 nk = 1 tdisr = UNLIMITED (0 currently) na = 16

variables float alb(nwn) float z(nlay) float t(nlay) float p(nlay) float wl(nwn) float iof(nwn) float mtau(nwn) float htau(nwn) float hctaus(nwn) float gtau(nwn) float outcos(scal) float phi(nleg) float phic(scal) float umu(numu) float flux(v3 nwn nlev) float mix(nlay ngas) float c(nlay) float psat(nlay) float ga(nwnc) float wlc(nwnc) float inc(scal) int dm(scal) int ord(scal) float fbeam(scal) float wn(nwn) float tautot(nwn nlay) float htaus(nwn nlay) float htaux(nwn nlay) float taug(nwn nlay) float phase(nwn nlay nleg) float ssa(nwn nlay) float uu(nwn nphi nlev numu) float u0u(nwn nlev numu) float tray(nwn nlay) float gtauo(tdisr nwn nlay)

Haacute 14 variaacuteveis usadas como dimensotildees para as 35 variaacuteveis que satildeo arrays

Ex alb(nwn) indica que alb eacute um array 1D de nwn elementos

nwn estaacute armazenado como uma das dimensotildees e eacute 400 portanto alb tem 400 elementos

Parte do conteuacutedo de um arquivo NetCDF em formato CDL (gerado pelo programa ncdump)

7589

Arquivos - binaacuterios - NetCDF e HDF5Conteuacutedo daquele arquivo visualizado com o ncview (acompanha a biblioteca NetCDF padratildeo)

7689

Arquivos - binaacuterios - NetCDF e HDF5O conteuacutedo de todo o arquivo pode ser lido facilmente com as bibliotecas disponiacuteveis e armazenado em contecirciners convenientes Usando um objeto que gera um resultado um pouco mais conveniente

IDLgt h=pp_readncdf(refspec_g01_0nchash)IDLgt printhvar_dims ltObjHeapVar229(HASH)gtvars ltObjHeapVar152(HASH)gtdims ltObjHeapVar118(HASH)gt

IDLgt printh[vars]T 173203 175459 175848 176001 175975 Z 431869 418858 406067 393403 380464 FLUX 300660 145536 0705180 0341669 0165532 PHASE 100000 0779034 0660858 0542052 0449983 TAUTOT0694377 0693420 0693474 0693540 0693636()

IDLgt help(h[vars])[TAUTOT]ltExpressiongt FLOAT = Array[51 400]

IDLgt print(h[var_dims])[TAUTOT]NLAY NWN

IDLgt print(h[dims])[(h[var_dims])[TAUTOT]]NLAY 51NWN 400

7789

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5)

Visualizaccedilatildeo da variaacutevel selecionada

Metadados e alguns valores da variaacutevel selecionada

Variaacutevel a ser criada com o conteuacutedo desta variaacutevel do arquivo

Hierarquia das variaacuteveis do arquivo

7889

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5) Imported variable az

IDLgt helpaz Structure ltd5723f38gt 13 tags length=448 data length=444 refs=1 _NAME STRING az _ICONTYPE STRING binary _TYPE STRING DATASET _FILE STRING INTENSI_test_409OUTh5 _PATH STRING _DATA DOUBLE Array[38] _NDIMENSIONS LONG 1 _DIMENSIONS ULONG64 Array[1] _NELEMENTS ULONG64 38 _DATATYPE STRING H5T_FLOAT _STORAGESIZE ULONG 8 _PRECISION LONG 64 _SIGN STRING

IDLgt printaz_data 00000000 10000000 20000000 30000000 40000000 50000000 60000000 80000000 ()

7989

Arquivos - binaacuterios - imagens

JPEG JPEG200 TIFF GeoTIFF etc

Os formatos comuns de imagens satildeo bem suportados em muacuteltiplas plataformas para uso dentro de programas e interativamente

Alguns formatos tecircm opccedilatildeo de compressatildeo com perda eou sem perda

Armazenam imagens como arrays 2D ou 3D (3D frequumlentemente limitado a 3 ou 4 em uma das dimensotildees uma imagem em 3 ou 4 bandas) de inteiros ou (em alguns formatos) reais

Alguns formatos permitem armazenar metadados para caracterizar as imagens armazenadas

JPEG2000 e GeoTIFF (um subconjunto de TIFF) comuns em astronomia e aacutereas proacuteximas

8089

Arquivos - binaacuterios ndash imagens ndash exemplo (IDL)IDLgt printquery_tiff(issmap_2009tiffinfogeotiff=geo) 1

IDLgt helpinfo Structure ltd4eca4b8gt 18 tags length=144 data length=132 refs=1 CHANNELS LONG 4 DIMENSIONS LONG Array[2] IMAGE_INDEX LONG 0 NUM_IMAGES LONG 1 PIXEL_TYPE INT 1 TYPE STRING TIFF BITS_PER_SAMPLE LONG 8 POSITION FLOAT Array[2] RESOLUTION FLOAT Array[2] UNITS LONG 2 TILE_SIZE LONG Array[2] DESCRIPTION STRING ISS (2009) DATE_TIME STRING 20100218 012436()

IDLgt helpgeo Structure ltd4efa1b8gt 10 tags length=264 data length=262 refs=1 MODELPIXELSCALETAG DOUBLE Array[3] MODELTIEPOINTTAG DOUBLE Array[6 4] GEOGRAPHICTYPEGEOKEY INT 4035 GEOGSEMIMAJORAXISGEOKEY DOUBLE 25750000 GEOGSEMIMINORAXISGEOKEY DOUBLE 25750000()

IDLgt myimage=read_tiff(issmap_2009tiff) Lecirc a imagem para o array myimage

Obteacutem informaccedilotildees sobre o arquivo

8189

Arquivos - binaacuterios ndash formatos nativosLinguagens como IDL R Python Java tecircm seu formato nativo binaacuterio acessado em alto niacutevel Basta mandar salvar ler variaacuteveis no do arquivo a biblioteca padratildeo automagicamente faz todo o trabalho de decidir como gravar ler os dados

Conveniente de usar na proacutepria linguagem Mas raramente existem bibliotecas para ler gravar o formato nativo de uma linguagem a partir de outra Ex (IDL)

IDLgt savefile=2dspectrumsavmydatamyheadercorners_dcorners_averbosecompress SAVE Portable (XDR) compressed SAVERESTORE file SAVE Saved variable MYDATA SAVE Saved variable MYHEADER()

Pode ser lido com apenas (haacute formas mais elaboradas)

IDLgt restore2dspectrumsavverbose RESTORE Portable (XDR) compressed SAVERESTORE file RESTORE Save file written by ltunknowngtltunknowngt Thu Jan 27 191422 2011 RESTORE IDL version 801 (linux x86_64) RESTORE Restored variable MYDATA RESTORE Restored variable MYHEADER()

IDLgt helpmydatamyheadercorners_dcorners_aMYDATA FLOAT = Array[1201 1201]MYHEADER STRING = Array[144]()

8289

Arquivos - processamento em baixo niacutevel

Nem sempre um formato padratildeo eacute a melhor escolha para o problema

Nem sempre haacute escolha (pode-se ter que trabalhar com arquivos que jaacute foram escritos em algum formato proprietaacuterio)

Agraves vezes o formato eacute padratildeo mas natildeo haacute bom suporte a ele disponiacutevel

Em todos estes casos eacute necessaacuterio escrever rotinas em baixo niacutevel que vatildeo ler processar diretamente o conteuacutedo do arquivo

Preferencialmente criando interfaces de alto niacutevel para o programa que vai as usar

8389

Arquivos - processamento em baixo niacutevel - texto

Tomando o exemplo anterior onde as colunas eram de diferentes tipos

NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS dec18s0001 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0002 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0003 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 FLAT 5408757812500 460000 5 dec18s0004 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 DARK 5408757812500 460000 5

A forma mais simples de o ler diretamente eacute definir uma estrutura para receber cada linha e um array destas estruturas para receber todo o arquivo Ex (IDL)

IDLgt record=namecalmpos0filnameechlpos0d0disppos0d0targnameposdirclassmjd_obsitime0d0coadds0IDLgt nlines=file_lines(filesearch_scamtxt)IDLgt mydata=replicate(recordnlines-1)IDLgt header=

Depois de definidas as variaacuteveis que vatildeo receber os dados o arquivo pode ser lido

IDLgt openrunitfilesearch_scamtxtget_lunIDLgt readfunitheaderIDLgt readfunitmydataformat=(A14I8A15F104F104A18A19A15F158F105I15)IDLgt free_lununit

A gravaccedilatildeo de um arquivo texto poderia ser feita de forma semelhante apenas trocando openr por openw (abrir o arquivo para gravaccedilatildeo natildeo leitura) e readf por printf

O arquivo eacute aberto em uma unidade (unit) usada para especificar de onde eacute feita a leitura

Ao final o arquivo eacute fechado

8489

Arquivos - processamento em baixo niacutevel - texto

O que resulta em

IDLgt printheader NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS

IDLgt helpmydataMYDATA STRUCT = -gt ltAnonymousgt Array[4]

IDLgt helpmydata[0] Structure ltd5e38f68gt 11 tags length=136 data length=124 refs=3 NAME STRING dec18s0001 CALMPOS INT 0 FILNAME STRING NIRSPEC-5-AO ECHLPOS DOUBLE 62630000 DISPPOS DOUBLE 36450000 TARGNAME STRING HD85258 POSDIR STRING NIRSPEC-5-AOp1 CLASS STRING STAR MJD_OBS STRING 54087574 ITIME DOUBLE 10000000 COADDS INT 1

Este caso eacute mais complicado que os mais comuns por haver colunas de strings

Se todas fossem de nuacutemeros natildeo teria sido necessaacuterio especificar o formato explicitamente As colunas teriam sido adivinhadas pela biblioteca que lecirc o arquivo Poderia ter sido lido escrito soacute com um array de nuacutemeros sem estruturas

8589

Arquivos - processamento em baixo niacutevel - binaacuterio

Formatos binaacuterios podem ser definidos de qualquer forma O arquivo eacute apenas um conjunto de bytes Cabe ao software saber como os interpretar

Uma escolha comum para que sejam autodocumentados eacute incluir um cabeccedilalho de texto informando as caracteriacutesticas dos dados necessaacuterias para os ler

Ex (IDL) criar um arquivo que armazene um array de doubles com um cabeccedilalho informando as dimensotildees para que o programa que o lecirc saiba como ler os dados

Inventa dados e abre o arquivo

IDLgt data_to_write=dindgen(34)IDLgt openwunitbinary_exampledatget_lun

Escreve as dimensotildees como texto

IDLgt printfunitdimensions of the double array stored belowIDLgt printfunitsize(data_to_writedimensions)

Escreve os dados binaacuterios

IDLgt writeuunitdata_to_write

Fecha o arquivo

IDLgt free_lununit

Escreve em binaacuterio (write unformatted)

8689

Arquivos - processamento em baixo niacutevel - binaacuterio

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

dimensions of the double array stored below 3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

8789

Arquivos - processamento em baixo niacutevel - binaacuterioA leitura deste arquivo eacute igualmente simples

IDLgt header=IDLgt dims=[00]IDLgt openrunitbinary_exampledatget_lun

Lecirc as dimensotildees (armazenadas como texto)

IDLgt readfunitheaderIDLgt readfunitdims

Lecirc a parte binaacuteria depois de saber as dimensotildees

IDLgt data_read=dblarr(dims)IDLgt readuunitdata_read

Fecha o arquivo

IDLgt free_lununit

Verifica que os dados foram gravados e lidos corretamente

IDLgt printarray_equal(data_to_writedata_read) 1

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Lecirc dados binaacuterios (read unformatted)

8889

Sumaacuterio

5 ndash Slides em httpwwwppenteadonetpeapea04_strings_iopdf Strings Expressotildees regulares Arquivos

httpwwwppenteadonetpea

8989

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89

Strings ndash Como codificar Unicode

Haacute vaacuterias formas Nenhuma simples como ASCII porque eacute necessaacuterio um nuacutemero muito maior de pontos de coacutedigo (haacute espaccedilo para 1 114 112 hoje haacute 109 449 alocados)

Apenas usar mais bytes com um nuacutemero constante por caractere exigiria pelo menos 21 bits por caractere (221 eacute 2 097 152)

Seria demais considerando que quase todos os caracteres escritos estatildeo entre os 128 do ASCII

Em quase todo texto 20 de cada 21 bits seriam 0

A maior parte das codificaccedilotildees usa formas mais elaboradas com um nuacutemero variaacutevel de bytes por caractere

Todas as codificaccedilotildees de uso comum tem o ASCII como subconjunto os 128 caracteres do ASCII satildeo codificados em forma idecircntica em ASCII e nas codificaccedilotildees usuais de Unicode

O que ajuda na compatibilidade software Unicode escrevendo texto que soacute conteacutem caracteres do ASCII produz texto idecircntico ao que seria produzido em ASCII

1589

Strings - codificaccedilotildees para Unicode

No mundo ocidental haacute apenas duas codificaccedilotildees de uso comum

UTF-8

ISO 8859-1 (tambeacutem chamado de Latin 1)

Por isso eacute necessaacuterio saber que codificaccedilatildeo usar ao trabalhar com Unicode

Alguns softwares formatos de arquivo informam a codificaccedilatildeo usada

Outros assumem que uma eacute usada (sem ter sido informada)

Outros tentam adivinhar quando natildeo satildeo informados qual eacute (esp navegadores)

Outros soacute perguntam para o usuaacuterio (esp editores de texto)

Sistemas operacionais oferecem variadas formas de digitar caracteres especiais

Pelos coacutedigos numeacutericos

Por programas seletores de caracteres Alguns seletores de caracteres (ex kcharselect do KDE) permitem fazer buscas pelo

nome ou propriedades

1689

Strings - Onde haacute suporte a Unicode em programaccedilatildeo

Linguagens variam muito

Desconhecem Unicode (soacute usam ASCII) C Fortran

Usam nativamente ASCII (inclusive no coacutedigo-fonte) mas tecircm tipos para strings Unicode e ou funccedilotildees para processar Unicode (em variados graus) C C++ IDL R

Usam nativamente Unicode (inclusive no coacutedigo-fonte) e tecircm bom suporte a strings Unicode Java Python Perl

Muitas vezes (mesmo quando Unicode pode ser usado em coacutedigo-fonte) caracteres Unicode satildeo escritos atraveacutes de ASCII com coacutedigos de escape para coacutedigos Unicode Exs

IDLgt p=plot(testtitle=Z(00C5222B))

C C++ Java Python u2207

ReferecircnciasCharacters vs byteshttpwwwtbrayorgongoingWhen200x20030426UTFThe absolute minimum every software developer absolutely positively must know about Unicode and character sets (no excuses)httpwwwjoelonsoftwarecomarticlesUnicodehtmlUnicode character searchhttpwwwfileformatinfoinfounicodecharsearchhtm

em IDL produz intÅ

produz nabla

1789

Strings - processamento baacutesico

Operaccedilotildees mais fundamentais que costumam ser suportadas em ldquotodasrdquo as linguagens bibliotecas padratildeo (exemplos usando sintaxe de IDL)

Atribuiccedilatildeo de literais

IDLgt a=some

IDLgt helpaA STRING = some

IDLgt printasome

Concatenaccedilatildeo

IDLgt b=a+ string

IDLgt helpbB STRING = some string

1889

Strings - processamento baacutesico

Valor loacutegico

String vazio (null string) eacute falso o resto eacute verdadeiro

IDLgt c=

IDLgt if c then printc is not empty string else printc is null string ()c is null string ()

IDLgt c=a

IDLgt if c then printc is not empty string else printc is null string ()c is not empty string

Espaccedilo natildeo eacute o mesmo que string vazio

IDLgt c=

IDLgt if c then printc is not empty string else printc is null string ()c is not empty string

1989

Strings - processamento baacutesico Comparaccedilotildees

IDLgt helpabA STRING = someB STRING = some string

IDLgt printb eq a 0

IDLgt printb gt a 1

IDLgt c=[ab9Some somesome other string]

IDLgt printc[sort(c)]format=(A) some9Somesomesome other stringsome string

IDLgt printa eq A 0

IDLgt printstrcmp(aAfold_case) 1

Comparaccedilotildees de ldquotamanhordquo (maior menor etc) satildeo comparaccedilotildees pela ordem de codificaccedilatildeo (ldquoalfabeacuteticardquo)

Algumas linguagens permitem definir o ordenamento (como considerar maiuacutesculasminuacuteculas letras com acentos nuacutemeros e siacutembolos) Exs Python C++ Java Perl

2089

Strings - processamento baacutesico Substrings

IDLgt printstrmid(abcdefg32)de

Algumas linguagens nativamente suportam iacutendices para indicar substrings C C++ Fortran Python Ex (Python)

gtgtgt s=abcdegtgtgt print(s[25])cde

Outras permitem que sejam definidos iacutendices por objetos strings

Busca de caracteres ou substrings

IDLgt printstrpos(abcdefgd) 3

IDLgt printstrpos(abcdefgj) -1

IDLgt printstrpos(abcdefgbc) 1

2189

Strings - processamento baacutesico

Outros

IDLgt printstrlen(1234567) 7

IDLgt printstrlen(1234567 ) 8

IDLgt printstrlen( 1234567 ) 9

IDLgt helpstrtrim( 1234567 2)ltExpressiongt STRING = 1234567

IDLgt helpstrtrim( 1234567 1)ltExpressiongt STRING = 1234567

IDLgt helpstrtrim( 1234567 0)ltExpressiongt STRING = 1234567

IDLgt printstrupcase(abcdEF)ABCDEF

IDLgt printstrlowcase(abcdEF)abcdef

Medindo quantos caracteres tem o string inclui espaccedilos em branco

Remoccedilatildeo dos brancos agrave esquerda agrave direita ou dos dois lados

2289

Strings - conversatildeo de outros tipos para strings

Eacute uma das operaccedilotildees mais comuns para gerar textos informativos e nomes escrever arquivos (aquivos texto discutidos adiante) etc

Eacute natildeo trivial jaacute que a conversatildeo pode ser feita de muitas formas diferentes

Para tipos fundamentais sempre haacute uma conversatildeo default tanto criando um string como usando algo tipo print (para strings terminal ou arquivos)

Todo comando tipo print (print printf sprintf string write etc) e toda escrita para arquivos texto eacute uma conversatildeo para string (terminais e arquivos texto soacute conteacutem strings)

2389

Strings - conversatildeo de outros tipos para strings

Exemplos de conversotildees (IDL)

IDLgt print[-109] -1 0 9

IDLgt print1d01B10 10000000 1 100000

IDLgt helpstring(1d01B10)ltExpressiongt STRING = 10000000 1 100000

IDLgt printfunitdblarr(343)

Tipos mais elaborados podem ou natildeo ter uma forma predefinida Com objetos eacute comum ser possiacutevel definir a conversatildeo (stringification) ao criar a classe

IDLgt h=hash(a109[01]18b)

IDLgt printh9 0 1a 100000180000 b

Strings

Coloca strings em um arquivo (adiante)

Strings criados por um meacutetodo da classe hash satildeo uma forma de representar o hash

2489

Strings - conversatildeo de outros tipos para strings

Algumas linguagens (Python IDL) tecircm mais de uma forma default de gerar strings Em Python uma forma eacute executaacutevel a outra eacute mais legiacutevel

In [30] x=arange(12)reshape(43)

In [31] print(x)[[ 0 1 2] [ 3 4 5] [ 6 7 8] [ 9 10 11]]

In [32] xOut[32]array([[ 0 1 2] [ 3 4 5] [ 6 7 8] [ 9 10 11]])

In [33] y=array([[ 0 1 2] [ 3 4 5] [ 6 7 8] [ 9 10 11]])

In [37] print(array_equal(xy))True

String mais legiacutevel

String executaacutevelPode ser usado para criar um objeto equivalente

2589

Strings ndash formataccedilatildeo expliacutecita

A formataccedilatildeo pode ser especificada se a conversatildeo default natildeo eacute adequada para definir a conversatildeo em um novo tipo

Cada linguagem tem sua sintaxe para formataccedilatildeo

Haacute dois estilos semelhantes em vaacuterias linguagens

Ambos os estilos satildeo sintaxes diferentes para a mesma ideacuteia Um coacutedigo especifica o tipo de dado sendo passado (inteiro real etc) e detalhes de como seraacute feito o string (largura do campo diacutegitos decimais alinhamento etc)

2689

Strings ndash formataccedilatildeo expliacutecita

Estilo Fortran

IDL

IDLgt print1d0+1d-9 10000000

IDLgt print1d0+1d-9format=(E1610)10000000010E+00

IDLgt printx=1d0+1d-9format=(A0F1613)X= 10000000010000

Estilo C (ldquoprintfrdquo)

IDL

IDLgt printformat=(x=1610e)1d0+1d-9x=10000000010e+00

Python

In [20] print(x=1610e (1e0+1e-9))x=10000000010e+00

Nenhum formato expliacutecito (default)

2789

Strings - formatos tipo Fortran

(apenas o principal ver documentaccedilatildeo para detalhes)

Ex (IDL)

IDLgt printx=1d0+1d-9format=(A0F1613)X= 10000000010000

Tambeacutem haacute modificadores para especificar alinhamento (-) se deve haver (ou ser suprimido) avanccedilo para a pŕoxima linha posiccedilatildeo dentro do campo etc

Coacutedigo Significado Exemplo(s)

A String (A) (10A)

I Inteiro decimal (I) (10I)(-2I)

B Inteiro binaacuterio (B) (10B)

Z Inteiro hexadecimal (Z) (10Z)

O Inteiro octal (O) (10O)

F Real ponto fixo (F)(F52)

E D Real ponto flutuante (E)(D1610)

G Real ponto fixo ou flutuante de acordo com o valor (G)(G10)

ldquordquo String literal (ldquox=rdquoI10)

X Caracteres em branco (A10XI)

2889

Strings - formatos tipo C (printf)(apenas o principal ver documentaccedilatildeo para detalhes)String com campos a serem substituiacutedos por valores (passados adiante) marcados por coacutedigos com

Ex (Python)In [20] print(x=1610e (1e0+1e-9))x=10000000010e+00

Haacute modificadores para especificar alinhamento como preencher o espaccedilo que sobra (espaccedilos zeros etc) para imprimir o sinal + etc

Coacutedigo Significado (tipo) Exemplo(s)

di Inteiro decimal (int) d 5d +05d

u Inteiro decimal sem sinal (unsigned int) u 7u

fF Real em ponto fixo (double float) f 136f

eE Real em ponto flutuante (double float) e 1610e

gG Real em ponto fixo ou flutuante decidido pelo valor (double float)

g 73G

xX Inteiro sem sinal hexadecimal (unsigned int) x 10X

o Inteiro sem sinal octal (unsigned int) o 5o

s String (string) s 10s

c Caractere (char) c

p Ponteiro - estilo C - (void ) p

literal

2989

Strings - conversatildeo de strings para outros tipos

Para gerar dados a partir de strings datas identificadores pedaccedilos de nomes valores numeacutericos armazenados em strings

Tambeacutem sempre haacute conversotildees default para os tipos baacutesicos onde o intepretador programa faz o possiacutevel para entender o string como um valor daquele tipo

Tipicamente eacute feito por casts (funccedilotildees de conversatildeo) reads (de strings ou arquivos texto (arquivos texto satildeo strings)) construtores de objetos ou implicitamente

3089

Strings - conversatildeo de strings para outros tipos - impliacutecitas

Exs (IDL)

IDLgt helpfix([17 17 171 -17 9 8])ltExpressiongt INT = Array[5]

IDLgt printfix([17 17 171 -17 9 8]) 17 17 17 -17 9

IDLgt printdouble([17 17 171 -17 9 8]) 17000000 17000000 17100000 -17000000 90000000

IDLgt readfunitabcd

IDLgt a=0d0IDLgt b=00IDLgt c=0IDLgt reads171d0 189d0 -9abcIDLgt helpabcA DOUBLE = 17100000B FLOAT = 189000C INT = -9

Converte o conteuacutedo do string para os tipos das variaacuteveis abcd (explicado adiante)

3189

Strings - conversatildeo de strings para outros tipos

Quando o default natildeo eacute suficiente (ou quando escrevendo o conversor em uma classe) costuma ser possiacutevel o fazer com formatos semelhantes aos formatos para gerar strings Exs (IDL)

IDLgt a=0d0IDLgt b=00IDLgt c=0IDLgt reads171d0 something 189d0-9abc READS Input conversion error Unit 0 File ltstdingt Error occurred at $MAIN$ Execution halted at $MAIN$

Natildeo funcionou porque sozinho ele natildeo conseguiu saber o que fazer com o ldquosomethingrdquo Usando um formato especiacutefico

IDLgt reads171d0 something 189d0-9 abcformat=(D6111XD611XI)

IDLgt helpabcA DOUBLE = 17100000B FLOAT = 189000C INT = -9

Exemplos mais complicados adiante (arquivos texto)

Variaacuteveis tecircm que ser definidas para informar para que tipo seraacute feita a conversatildeo default

3289

Strings - processamento natildeo baacutesicoOperaccedilotildees importantes e muito necessaacuterias mas que natildeo satildeo suportadas em todas as linguagens bibliotecas padratildeo

Testes (ex IDL)

IDLgt str=[afitsaFITSafitsaabfitsabcfits]

IDLgt printstrmatch(strfits) 1 0 0 1 1

IDLgt printstrmatch(strfitsfold_case) 1 1 0 1 1

IDLgt printstrmatch(strfitsfold_case) 1 1 1 1 1

IDLgt printstrmatch(strfits) 1 0 0 0 0

IDLgt printstrmatch(strfits) 0 0 0 1 0

3389

Strings - processamento natildeo baacutesico

Operaccedilotildees importantes e muito necessaacuterias mas que natildeo satildeo suportadas em todas as linguagens bibliotecas padratildeo

Separaccedilatildeo de partes (Ex IDL)

IDLgt printstrsplit(2011- 131 -extract)format=(A)2011131

Processamento de nomes de arquivos diretoacuterios (Ex IDL)

IDLgt printfile_dirname(some_directoryanother_directorysome_filetxt)some_directoryanother_directory

IDLgt printfile_basename(some_directoryanother_directorysome_filetxt)some_filetxt

IDLgt printfile_basename(another_directorysome_filetxttxt)+_alteredtxtsome_file_alteredtxt

3489

Strings - processamento natildeo baacutesico

Codificaccedilotildees (Ex Python 3)

gtgtgt s=infinite money infinNeuro sign

gtgtgt print(s)infinite money infineuro

gtgtgt print(ascii(s))infinite money u221eu20ac

gtgtgt print(sencode(utf-8))binfinite money xe2x88x9exe2x82xac

3589

Strings - processamento natildeo baacutesico

Perl eacute a linguagem mais avanccedilada para processamento de strings tem suporte nativo a muitas outras operaccedilotildees a semacircntica da linguagem eacute voltada principalmente para processar strings expressotildees regulares (de vaacuterios tipos) natildeo satildeo strings fazem parte da semacircntica

Ex (sem o objetivo que seja compreensiacutevel apenas para indicar o estilo)

Ler um arquivo contendo campos com nomes separados de valores por ()

temperature 10008name some modelx_dimension 100y_dimension 100z_dimension 50()

Armazenado-o em um mapa O que pode ser feito com apenas

While (ltgt) Loop over input linesPut pre-colon text into $1 post-colon into $2 if (m (S+) (+) ) Use $1 as key $2 as value $file_data$1 = $2

3689

Expressotildees regulares - definiccedilatildeo

Expressotildees regulares (regular expressions regex) satildeo a mais poderosa ferramenta para fazer buscas e separar substrings

Regex satildeo uma linguagem com o uacutenico objetivo de especificar propriedades de strings

Implementadas em graus diferentes em todas as linguagens modernas e modernizadas facilita encontrar uma expressatildeo jaacute pronta pois satildeo quase iguais em qualquer linguagem

Estatildeo na biblioteca padratildeo em IDL Python R Perl

Em C++ e Java em bibliotecas comuns (Boost Jregex)

Para que servem

Uma expressatildeo regular especifica propriedades de strings

O interpretador de expressotildees regulares (regular expression engine) recebe a expressatildeo e o string a analisar e determina se o string corresponde (matches) agrave expressatildeo regular

Em alguns casos o interpretador pode tambeacutem informar que parte(s) do string corresponde(m) a que parte(s) da expressatildeo regular e realizar processamentos com estas partes

3789

Expressotildees regulares ndash exemplos de usos Separar partes de strings

Encontrar linhas em arquivos que tenham nomes valores e comentaacuterios e separar estes pedaccedilos

Escalar com comentaacuterio

SLITPA = 351979 Slit position angle

Array 1D sem comentaacuterio (se extendendo por vaacuterias linhas)

BAND_BIN_CENTER = (03505400358950036629003732200379490 0387900104598)

Escalares em diferentes formatos

Total Mechanical Luminosity 15310E+03resources_usedwalltime=005603

Pedaccedilos de nomes

6063 17836E-20 2456 T FeIX((3Pe)3d(2PE)4p_1Po-3s2_3p6_1Se)

Datas separando ano mecircs dia hora (em vaacuterios formatos diferentes)

DATE-OBS= 2006-12-18 universal date of observationDATE_TIME = 2010-07-19T161032START_TIME = 2006-182T225102850Z

3889

Expressotildees regulares ndash exemplos de usos

Separar partes de strings Separar partes de nomes de arquivos (por significarem algo como identificar o

conteuacutedo)

specdec18s0041fitsscamdec18i0054fits15_7_mts_hmpixselh_mr15sav15_7_mts_hwpixselh_mr15sav16_3_mts_hwpixselb_mr16savreadmodel5l_-1_000010000_10000_r05_030_08196_0100000_005000000_1000eps

Determinar se um string eacute um nuacutemero (inteiro real fixo flutuante)

Encontrar identificadores Exs nomes de cataacutelogos endereccedilos HTTPFTP endereccedilos de email

Separar campos em arquivos sendo lidos onde as linhas natildeo tecircm a mesma formataccedilatildeo algumas linhas com colunas separadas por espaccedilos outras por tabs outras por

siacutembolos ignorando linhas de comentaacuterios e linhas vazias

3989

Expressotildees regulares - usoEx (IDL) encontrar nomes de arquivos com algumas propriedades

IDLgt printfilesformat=(A)CM_1477475933_1_viscubCM_1477476864_1_ircubCM_1477476864_1_irgcubCM_1477476864_1_viscubCM_1477477826_1_ircubCM_1477477826_1_irgcubCM_1477477826_1_viscubmosaic2cub

IDLgt printstregex(files+irgcubboolean) 0 0 1 0 0 1 0 0

A expressatildeo regular eacute +irgcub Especifica uma ou mais ocorrecircncias seguidas (+) de qualquer caractere () seguido de uma ocorrecircncia de irgcub (o ponto vem precedido do caractere de

escape () para ser entendido literalmente como um ponto e natildeo como o seu significado especial (qualquer caractere)

Esta aplicaccedilatildeo do interpretador (stregex) retorna um valor Booleano (verdadeirofalso) para cada elemento do string passado (files) que informa se aquele elemento correspondia agravequela expressatildeo regular

Este eacute um exemplo artificial Seria mais faacutecil ter usado strmatch(filesirgcub)

4089

Expressotildees regulares - uso

Em casos como este tipicamente o resultado de stregex seria usado como filtro para selecionar apenas os elementos do array de strings que satisfazem agravequela expressatildeo regular

IDLgt w=where(stregex(files+irgcubboolean)null)IDLgt printfiles[w]format=(A)CM_1477476864_1_irgcubCM_1477477826_1_irgcub

Ex (IDL) Determinar que strings conteacutem uma data no formato yyyy-mm-dd

IDLgt strs=[201002012010-02-012010-2-1aaaa-mm-ddT2010-02-01J]IDLgt printstregex(strs[0-9]4-[0-9]2-[0-9]2boolean) 0 1 0 0 1

Esta expressatildeo regular especifica quatro repeticcedilotildees (4) de diacutegitos (caracteres na faixa [0-9]) seguido de um (-) seguido de duas repeticcedilotildees (2) de dois diacutegitos ([0-9]) seguido de um (-) seguido de duas repeticcedilotildees (2) de dois diacutegitos ([0-9])

Uma expressatildeo regular apenas um pouco mais elaborada poderia corresponder aos 3 formatos de data no array acima E poderia se impedir que a uacuteltima (com outros caracteres antes e depois da data) seja aceita

4189

Expressotildees regulares - regras - caracteres ldquonormaisrdquo

Uma expressatildeo regular usa caracteres ldquonormaisrdquo e especiais para especificar o que se vai procurar na ordem em que aparecem na expressatildeo

Se um caractere eacute normal (natildeo eacute um dos especiais mostrados adiante) ele especifica uma ocorrecircncia daquele caractere

Ex J eacute uma expressatildeo regular que corresponde a qualquer string onde ocorra J Jaacute JA soacute corresponde a strings que tenham JA dentro

Exs (IDL)

IDLgt strs=[JJJJJJaJAjaJa]

IDLgt printstregex(strsJboolean) 1 1 1 0 1

IDLgt printstregex(strsJAboolean) 0 0 1 0 0

4289

Expressotildees regulares - regras - caracteres especiaisCaracteres especiais tecircm outros significados Para significar literalmente aquele caractere deve ser escapado (escaped) com um

Siacutembolo significado exemplo Corresponde(m) Escape o caractere seguinte deve ser interpretado

literalmente natildeo como especial aa

Qualquer caractere ab ajb aab abb jafbc

+ Uma ou mais repeticcedilotildees do que vem agrave esquerda a+b ab aab bab baabh

() Subexpressatildeo para agrupar termos afetados por um caractere especial (como parecircnteses em notaccedilatildeo matemaacutetica)

(ab)+c abc ababc dabababcg

Zero ou mais repeticcedilotildees dos termos agrave esquerda ab abbaab caaabg

Zero ou uma repeticcedilatildeo dos termos agrave esquerda ab b ab cabd cbd

| Alternaccedilatildeo qualquer um dos dois agrave esquerda a|bc ac bc jacd jbcd

n Exatamente n repeticcedilotildees do termo agrave esquerda a2b aab daaabg

n1n2 De n1 a n2 repeticcedilotildees do termo agrave esquerda a12b ab aab aaab gaaabbd

^ Acircncora (no comeccedilo) nada agrave esquerda ^ab ab abb

$ Acircncora (no fim) nada agrave direita ab$ abaab

[] Conjunto de valores (explicado adiante)

4389

Expressotildees regulares - regras - conjuntos de valores

[] denota um conjunto de valores que pode conter

Uma lista de coisas que devem corresponder Ex [abc] signfica qualquer caractere no conjunto abc Correspondem a esta

expressatildeo abcabha

Uma lista de coisas que natildeo podem corresponder [^abc] significa qualquer coisa que natildeo seja a b ou c Correspondem a esta

expressatildeo d jgs gg

Faixas de valores [0-9] signfica qualquer diacutegito [0-9a-zA-Z] significa qualquer diacutegito ou letra

Classes de valores como algumas faixas e outros conjuntos ocorrem com muita frequumlecircncia haacute nomes

especiais para eles Estes (em IDL) vecircm entre [] ex [[digit] significa o mesmo que [0-9]

4489

Expressotildees regulares - regras - classes de valores

Classe signficado

alnum Caracteres alfanumeacutericos 0-9a-zA-Z

alpha Caracteres alfabeacuteticos a-zA-Z

cntrl Caracteres de controle ASCII (natildeo visiacuteveis coacutedigos 1 a 31 e 127)

digit Diacutegitos (decimais) 0-9

graph Caracteres visiacuteveis ASCII 33 a 126 (natildeo inclui o espaccedilo)

lower Letras minuacutesculas a-z

print Caracteres ldquoimprimiacuteveisrdquo (visiacuteveis e o espaccedilo) ASCII 32 a 126

punct Caracteres de pontuaccedilatildeo $amprsquo()+-lt=gt[]^_lsquo|~

space Os caracteres ldquoem brancordquo (blank) espaccedilo tab tab vertical CR LF (ASCII 32 e 9-13)

upper Letras maiuacutesculas A-Z

xdigit Diacutegitos hexadecimais 0-9A-Fa-f

lt Comeccedilo de palavra (palavra definida como sequumlecircncia de coisas natildeo space)

gt Fim de palavra (palavra definida como sequumlecircncia de coisas natildeo space)

Estas satildeo apenas as principais Algumas implementaccedilotildees tecircm muito mais (em particular nas linguagens que usam Unicode nativamente)

4589

Expressotildees regulares - exemplos

Determinar se strings satildeo nuacutemeros (Ex IDL)

IDLgt str=[9-18 875-812-45913E9-98d7a188d032f5]

Inteiros

IDLgt intexpr=^[-+][0-9]+$

IDLgt printstregex(strintexprboolean) 1 1 0 0 0 0 0 0 0 0

Ponto flutuante

IDLgt fpexpr=^[-+](([0-9][0-9]+)|([0-9]+[0-9]))([eEdD][-+][0-9]+)$

IDLgt printstregex(strfpexprboolean) 1 1 0 1 1 1 1 1 0 0

Sinal opcional

1 ou mais diacutegitos

Sinal opcional

0 ou mais diacutegitos opcionalmente seguidos de um ponto e 1 ou mais diacutegitos

1 ou mais diacutegitos opcionalmente seguidos de um ponto e 0 ou mais diacutegitos

ou Expoente opcional letra do expoente seguida de sinal opcional seguido de um ou mais diacutegitos

4689

Expressotildees regulares ndash extraccedilatildeo

Interpretadores de expressotildees regulares costumam oferecer mais que apenas testar se um string corresponde a uma expressatildeo

Em geral tambeacutem podem retornar que parte(s) do string corresponde(m) agrave expressatildeo

Ex (IDL) Determinar se um string conteacutem uma data incluindo os formatos

IDLgt dates=[2011-01-312011 1 3120110131something done on y2011m1d31 with something]

E extrair a data de dentro do string

IDLgt expr=[0-9]4[0-9]12[0-9]12

(4 diacutegitos)(qualquer separador)(1 a 2 diacutegitos)(qualquer separador)(1 a 2 diacutegitos)

IDLgt printstregex(datesexprextract)format=(A)2011-01-312011 1 31201101312011m1d31

Como agora separar ano mecircs e dia Com uma busca e uma extraccedilatildeo para cada Poderia ser mais eacute mais faacutecil com uma uacutenica expressatildeo regular

4789

Expressotildees regulares - aleacutem de apenas testes

Tambeacutem podem retornar que parte(s) do string correspondem agrave expressatildeo toda e agraves suas subexpressotildees (partes da expressatildeo delimitadas por parecircnteses)

Ex (IDL) Separar pedaccedilos de datas Neste caso para a expressatildeo ficar menor assumindo um formato simples (yyyy-mm-ddThhmmssfff) Mas poderia ser um formato mais livre como no exemplo anterior

IDLgt str=Stuff observed on 2011-01-31T123924983 with some instrumentIDLgt expr=([0-9]4)-([0-9]2)-([0-9]2)T([0-9]2)([0-9]2)([0-9]2[0-9]3)

(quatro diacutegitos)-(2 diacutegitos)-(2 diacutegitos)T(2 diacutegitos)(2 diacutegitos)(2 diacutegitos3 diacutegitos)

IDLgt pieces=stregex(strexprextractsubexpr)IDLgt printpiecesformat=(A)2011-01-31T12392498320110131123924983IDLgt d=julday(pieces[2]pieces[3]pieces[1]pieces[4]pieces[5]pieces[6])IDLgt printdformat=(F166) 2455593027372

Expressatildeo inteiraPrimeira subexpressatildeoSegunda subexpressatildeoTerceira subexpressatildeoQuarta subexpressatildeoQuinta subexpressatildeoSexta subexpressatildeo

4889

Expressotildees regulares - referecircncias httpxkcdcom208

Viacutedeos do Software Carpentry

httpsoftware-carpentryorg4_0regexp

4989

Arquivos

Quase todo programa precisa armazenar dados em arquivos

Podem ser pequenos arquivos de paracircmetros ou enormes arquivos de dados produzidos ou a processar

Apesar do sugerido pela praacutetica comum arquivos texto natildeo satildeo sempre a melhor escolha para armazenar dados - e haacute muitas formas diferentes de os usar

Qual eacute a melhor escolha

Assim como para linguagens ou contecirciners natildeo existe ldquoo melhor formatordquo Cada um tem suas vantagens e desvantagens

Dados diferentes (mesmo se usados pelos mesmos programas) em geral se adequam melhor a formatos diferentes

5089

Arquivos - texto X binaacuterios

Em qualquer formato arquivos satildeo armazenados como diacutegitos binaacuterios

Mas haacute duas formas principais como eles podem ser codificados

Arquivos baseados em texto (text files)

Dados satildeo transformados em caracteres usando alguma formataccedilatildeo (mesmo se impliacutecita) e escritos com alguma codificaccedilatildeo de texto (comumente mas natildeo necessariamente ASCII)

Um arquivo texto eacute um ou mais strings As mesmas conversotildees tecircm que ser feitas depara outros tipos

Arquivos ldquobinaacuteriosrdquo (binary files)

Embora todo arquivo seja binaacuterio este nome costuma ser usado soacute para aqueles em que os dados natildeo estatildeo na forma de texto

Com frequumlecircncia (nem sempre) os dados satildeo gravados de forma idecircntica a como satildeo armazenados na memoacuteria

Muitos formatos usam uma mistura de partes em texto e partes binaacuterias

Um cabeccedilalho (header) de texto que daacute informaccedilotildees (metadados) sobre os dados armazenados na parte binaacuteria que vem depois

O cabeccedilalho conteacutem em especial informaccedilotildees sobre como ler os dados binaacuterios

5189

Arquivos - texto X binaacuterios

Vantagens de arquivos texto

Legiacuteveis por pessoas (human readable)

Podem ser auto-suficientes todo o necessaacuterio para os ler e entender o que conteacutem pode ser obtido olhando o arquivo

Satildeo os menos especiacuteficos a linguagens software normalmente satildeo escritos em ASCII ou Unicode e sempre haacute algum suporte a ler escrever texto em linguagens software

Haacute alguns formatos padratildeo para texto (exs CSV XML) que satildeo suportados em muitas plataformas diferentes

5289

Arquivos - texto X binaacuterios

Vantagens de arquivos binaacuterios

Em geral natildeo haacute conversotildees entre o os dados como armazenados na memoacuteria O que torna o armazenamento mais eficiente e sem alteraccedilotildees nos valores

A maior parte dos formatos padronizados eacute binaacuteria Exs FITS cube CDF NetCDF HDF HDF5 JPEG JPEG2000 TIFF GeoTIFF MPEG etc

Eacute mais comum que haja bibliotecas prontas (ateacute de alto niacutevel) para consulta leitura e gravaccedilatildeo

Os formatos melhor desenhados satildeo autodocumentados (em texto ou binaacuterio) para os ler natildeo eacute necessaacuterio conhecimento preacutevio sobre como os dados foram armazenados

Toda linguagem plataforma costuma ter seu formato binaacuterio mais nativo que costuma ser o mais faacutecil para leitura gravaccedilatildeo Em particular nas de alto niacutevel que tecircm formatos autodocumentados (especialmente

em IDL R Python Java)

Muitos formatos tecircm opccedilatildeo de compressatildeo dos dados

5389

Arquivos - proprietaacuterios X padratildeo

Independente da escolha texto binaacuterio programas devem escolher entre usar um formato proacuteprio ou um formato padronizado

A principal vantagem de formatos proacuteprios eacute que satildeo definidos da forma mais conveniente para a aplicaccedilatildeo que os usa simplificando leitura e gravaccedilatildeo e potencialmente otimizando recursos (acesso ao disco tamanho do arquivo etc)

A principal desvantagem de formatos proacuteprios eacute ser necessaacuterio escrever todo o coacutedigo para os ler gravar

Pode dar mais trabalho que usar um formato geneacuterico que natildeo seja exatamente o que melhor se encaixa na aplicaccedilatildeo

O coacutedigo para processar o formato em geral vai ser menos completo e conveniente de usar que o de um formato bem estabelecido usado por muitos outros em muitos ambientes

Cada novo software que for usar estes arquivos vai precisar compartilhar do mesmo coacutedigo ou precisar de coacutedigo novo (em particular se em outra linguagem) para ler gravar naquele formato

Eacute necessaacuterio documentar o formato e decidir sobre como ele seraacute definido

Se outros jaacute colocaram muito trabalho desenvolvendo bons formatos padratildeo bem suportados em muitos ambientes por que ter o trabalho de reinventar (e reprogramar redocumentar e retestar) a roda

5489

Arquivos - padrotildees comuns em astronomia (exs adiante)

Texto

CSV Comma-separated values - bem suportado por muitos softwares

ldquoColunas fixasrdquo Natildeo eacute um padratildeo bem definido mas eacute praacutetica comum para tabelas (2D)

XML Extensible Markup Language - O padratildeo texto mais flexiacutevel de grande uso em programaccedilatildeo geral para armazenar qualquer coisa com frequumlecircncia de forma hieraacuterquica Bem suportado por linguagens modernas (e modernizadas) e bibliotecas das principais

linguagens gerais Alta complexidade o torna trabalhoso de usar

5589

Arquivos - padrotildees comuns em astronomia (exs adiante)Binaacuterios

FITS Flexible Image Transport System - o mais comum para observaccedilotildees astronocircmicas Conteacutem os dados (em geral arrays 1D 2D ou 3D) e documentaccedilatildeo (nos cabeccedilalhos) sobre a origem e caracteriacutesticas dos dados Tambeacutem usado para armazenar tabelas de dados quaisquer mesmo que natildeo sejam observaccedilotildees (especialmente pelo STSCI) Variam muito em qualidade de documentaccedilatildeo

NetCDF Network Common Data Form - evoluccedilatildeo do CDF autodocumentado eacute comum e bem suportado para vaacuterios arrays de dados

HDF5 Hierarchical Data Format ndash autodocumentado comum e bem suportado permitindo aleacutem de simples arrays estruturas (eacute um formato hieraacuterquico)

Formatos de imagens JPEG JPEG2000 TIFF GeoTIFF etc - voltados para arrays 2D3D de inteiros ou (em alguns casos) reais com ou sem compressatildeo JPEG2000 tem caracteriacutesticas mais avanccediladas como imagens multiresoluccedilatildeo

Formatos vetoriais PS EPS DXF SHP SVG - variados niacuteveis de suporte a armazenamento de vetores e formas em 2D ou 3D

ISIS Cube semelhante em caracteriacutesticas ao FITS mais usado em sensoriamento remoto geociecircncias e ciecircncias planetaacuterias em geral para observaccedilotildees 1D 2D ou 3D

Formatos nativos de linguagens todo o trabalho de leitura e gravaccedilatildeo eacute feito automagicamente pela biblioteca padratildeo em IDL R Python Java

5689

Arquivos texto - newlines

Apesar do que possa parecer arquivos texto natildeo tecircm intrinsecamente vaacuterias linhas Arquivos texto satildeo soacute uma sequumlecircncia 1D de caracteres em alguma codificaccedilatildeo Separaccedilatildeo em linhas (equivalente a interpretar o arquivo como 2D em linhas e colunas) eacute

especificada por convenccedilotildees Natildeo haacute apenas uma convenccedilatildeo para o fim de linhas

A mais primitiva convenccedilatildeo eacute separaccedilatildeo nenhuma estipula-se que linhas tenham um nuacutemero fixo N de caracteres e cabe ao software que lecirc o arquivo entender que uma linha nova ocorre regularmente a cada N caracteres

Eacute a forma menos portaacutevel e mais inconveniente eacute necessaacuterio o conhecimento preacutevio (ou por inspeccedilatildeo do arquivo) de quantos caracteres haacute por linha

A maior parte dos editores de texto natildeo vai saber separar linhas desta forma (por falta deste conhecimento preacutevio) Exemplo (de um FITS real)

SIMPLE = T Fits standard BITPIX = 16 Bits per pixel NAXIS = 0 Number of axes EXTEND = T File may contain extensions

O que com as linhas quebradas nos lugares certos seria

SIMPLE = T Fits standard BITPIX = 16 Bits per pixel NAXIS = 0 Number of axes EXTEND = T File may contain extensions

5789

Arquivos texto - newlines

A forma mais comum de especificar linhas eacute com um marcador do final de linha (newline)

Eacute um caractere especial natildeo normalmente presente no texto que serve para marcar fim de linhas

Mas natildeo haacute soacute um padratildeo de newline Os mais comuns

LF (Line Feed ASCII 10) ndash Unix Linux Mac OS X

CR - (Carriage Return ASCII 13) - Mac OS lt10

CR+LF (CR seguido de LF) - Windows DOS

Eacute o motivo de o Notepad (Windows) natildeo entender as quebras de linha de arquivos escritos com o formato nativo de Linux o arquivo soacute tem LF enquanto o editor espera CR+LF

Alguns sistemas (strings em vaacuterias linguagens por exemplo) usam o coacutedigo de escape n para indicar newline que eacute codificado de acordo com o padratildeo sendo usado

Em geral bibliotecas de leitura e gravaccedilatildeo de arquivos usam (default pelo menos) o newline nativo do sistema em que satildeo usadas

Programas de conversatildeo entre os sistemas satildeo comuns (ex dos2unix)

O Wordpad identifica se for usado soacute LF e quebra as linhas de acordo

5889

Arquivos - texto - CSV

Comma-separated values

O formato mais padronizado para tabelas (arrays 2D) em texto (frequentemente mas natildeo necessariamente ASCII)

Bem suportado por bibliotecas padratildeo de linguagens e outros softwares (Excel Calc Origin Google Docs etc)

Conteacutem Linhas de cabeccedilalho (opcionais mas recomendadas) linhas com qualquer texto geral

descrevendo o arquivo e em geral uma linha de tiacutetulo para as colunas da tabela Uma (apenas uma) tabela onde todas as linhas tecircm o mesmo nuacutemero de colunas

Colunas separadas por viacutergulas (opcionalmente pode ser outro separador) Linhas terminadas por newline (qualquer que seja) Strings delimitados por ldquo ldquo

Ex

NAMECALMPOSFILNAMEECHLPOSDISPPOSTARGNAMEPOSDIRCLASSMJD-OBSITIMECOADDSdec18s00010NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001dec18s00020NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001dec18s00120NIRSPEC-5-AO635800364500itan140NIRSPEC-5-AOp2 TITAN5408763000001dec18s00140NIRSPEC-5-AO626300364500itan140NIRSPEC-5-AOp1 TITAN5408763000001dec18s00151NIRSPEC-5-AO626300364500itan140NIRSPEC-5-AOp1ARC5408764000001dec18s00160NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001

Natildeo eacute necessaacuterio que as colunas tenham largura constante

Cabeccedilalho

5989

Arquivos - texto - CSVHaacute amplo suporte a leitura e gravaccedilatildeo de CSV sem precisar recorrer a procedimentos de baixo niacutevel

Podem ser diretamente importados em Excel Calc Origin Google Docs ou lido facilmente com bibliotecas padratildeo comuns Ex (IDL)

IDLgt c=read_csv(filesearch_scamcsvheader=h)IDLgt printhNAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS

IDLgt helpc Structure ltc8bca508gt 11 tags length=5256 data length=5248 refs=1 FIELD01 STRING Array[41] FIELD02 LONG Array[41] FIELD03 STRING Array[41] FIELD04 DOUBLE Array[41] FIELD05 DOUBLE Array[41] FIELD06 STRING Array[41] FIELD07 STRING Array[41] FIELD08 STRING Array[41] FIELD09 STRING Array[41] FIELD10 DOUBLE Array[41] FIELD11 LONG Array[41]

IDLgt printcfield01[03]dec18s0001 dec18s0002 dec18s0003 dec18s0004

IDLgt printcfield03[03]NIRSPEC-5-AO NIRSPEC-5-AO NIRSPEC-5-AO NIRSPEC-5-AO

6089

Arquivos - texto - CSVEx (IDL) Criaccedilatildeo de um CSV com uma tabela de valores

Criaccedilatildeo de 3 arrays 1D (12 elementos) um para cada coluna

IDLgt x=dindgen(3)IDLgt y=dindgen(4)IDLgt xx=reform(rebin(x34)12)IDLgt yy=reform(rebin(reform(y14)34)12)IDLgt f=xx+yy10IDLgt helpxxyyfXX DOUBLE = Array[12]YY DOUBLE = Array[12]F DOUBLE = Array[12]

Escrita do arquivo

IDLgt write_csvexamplecsvxxyyfheader=[XYX+10Y]

ResultadoXYX+10Y000000000000000000000000100000000000000010000000200000000000000020000000000000001000000010000000100000001000000011000000()

6189

Arquivos - texto - ldquoColunas regularesrdquoFixed column width

Natildeo eacute exatamente um padratildeo Eacute uma praacutetica comum

Armazena uma tabela (array 2D) de forma regular simples de ser interpretada e lida

Costumam ter linha(s) de cabeccedilalho descrevendo o conteuacutedo do arquivo em geral com uma linha para os nomes das colunas

As demais linhas conteacutem os dados sempre ocupando a mesma largura por coluna e escritos no mesmo formato em cada coluna

Costumam ser simples de ler inclusive interativamente (exs Excel Calc Origin read_ascii)

Ex (IDL) Uma simples tabela soacute de nuacutemeros

wavl CH4=33 wavl CH4=25 wavl CH4=10 wavl CH4=08 wavl CH4=05 wavl CH4=026 wavl CH4=02 477330000 0090130 477330000 0091110 477330000 0089250 477330000 0087000 477330000 0087140 477330000 0090080 477330000 0088110 480040000 0090930 480040000 0091930 480040000 0090160 480040000 0087930 480040000 0088110 480040000 0090950 480040000 0089090 482750000 0091710 482750000 0092730 482750000 0091060 482750000 0088850 482750000 0089080 482750000 0091810 482750000 0090060 485450000 0092530 485450000 0093570 485450000 0092000 485450000 0089810 485450000 0090100 485450000 0092730 485450000 0091090

IDLgt a=read_ascii(specs_27s_ntxtdata_start=1header=header)IDLgt printheader wavl CH4=33 wavl CH4=25 wavl CH4=10 wavl CH4=08 wavl CH4=05 wavl CH4=026 wavl CH4=02 IDLgt helpa Structure ltd423c9a8gt 1 tags length=224 data length=224 refs=1 FIELD01 FLOAT Array[14 4]

6289

Arquivos - texto - ldquoColunas regularesrdquoJaacute um arquivo um pouco mais difiacutecil de ler

NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS dec18s0001 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0002 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0003 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 FLAT 5408757812500 460000 5 dec18s0004 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 DARK 5408757812500 460000 5

Por ter colunas de tipos diferentes (strings inteiros reais) natildeo eacute possiacutevel o ler em um simples array Mas eacute faacutecil o colocar em uma estrutura de arrays onde cada campo eacute uma coluna

Especificando interativamente como interpretar as linhasIDLgt templ=ascii_template(filesearch_scamtxt)

Nome do campo (default mostrado)

Tipo do campo (identificado automaticamente)

Posiccedilatildeo (caracter) do comeccedilo (identificada automaticamente)

Linha de exemplo para verificar as colunas

6389

Arquivos - texto - ldquoColunas regularesrdquoDepois de feito o template o arquivo pode ser lido com apenas

IDLgt a=read_ascii(filesearch_scamtxttemplate=templ)IDLgt helpa Structure ltd4ec4608gt 11 tags length=416 data length=416 refs=1 FIELD01 STRING Array[4] FIELD02 LONG Array[4] FIELD03 STRING Array[4] FIELD04 FLOAT Array[4] FIELD05 FLOAT Array[4] FIELD06 STRING Array[4] FIELD07 STRING Array[4] FIELD08 STRING Array[4] FIELD09 FLOAT Array[4] FIELD10 FLOAT Array[4] FIELD11 LONG Array[4]IDLgt printafield01dec18s0001 dec18s0002 dec18s0003 dec18s0004IDLgt printafield04 626300 626300 626300 626300

O template (uma estrutura contendo dados sobre como ler o arquivo) pode ser usado para outros arquivos no mesmo formato No lugar de ter sido criado interativamente poderia ter sido lido de algum arquivo Poderia ter especificado nomes para os campos que seriam mais amigaacuteveis que coias como FIELD11

6489

Arquivos - texto - XML

Extensible Markup Language

Admite grande flexibilidade e por isso pode ter alta complexidade

Valores satildeo colocados dentro de uma estrutura em hieraacuterquica (em uma aacutervore) com os noacutes identificados pelos seus nomes (chaves)

Largamente usado em muitas aacutereas para armazenar conjuntos arbitraacuterios de quaisquer estruturas de dados

A maioria das aplicaccedilotildees usa um formato que eacute um subconjunto do XML especificado por um Schema comumente em um arquivo XML DTD (Document Type Definition)

6589

Arquivos - texto ndash XML ndash exemplos de usos

Armazenamento de dados de aplicaccedilotildees web (comum para exportar importar dados MediaWiki DokuWiki WordPress ADS Lattes etc)

Documentos Office (docx pptx xlsx) OpenOffice (odt opd ods)

Como versotildees de outros formatos FITSML XDF

ldquoScientific Dataset XML NASAs Astronomical Data Center (ADC) sponsors a number of research projects that

use XML for scientific data representation The XML activities at the ADC are sponsored and supported by the NASA Office of Space Science Applied Information Systems Research Program (AISRP)rdquo - httpxmlcoverpagesorgnasa-adchtml

Astronomical Instrument Markup Language (AIML)

SVG ndash Scalable Vector Graphics

Muitas de outras aplicaccedilotildees listadas em httpxmlcoverpagesorgxmlhtmlapplications

6689

Arquivos - texto ndash XML - exemploltxml version=10 gtltDOCTYPE Xdmf SYSTEM Xdmfdtd []gtltXdmf xmlnsxi=httpwwww3org2001XInclude Version=20gt ltDomaingt lt-- Example of Basic Topologies --gt ltInformation Name=Descriptiongt Example of a Polyvertex Topology ltInformationgt ltGrid Name=Polyvertex GridType=Uniformgt ltTopology TopologyType=Polyvertex Dimensions=3 NodesPerElement=3gt ltDataItem Format=XML Dimensions=3 3 NumberType=Floatgt 0 1 2 4 5 6 8 9 10 ltDataItemgt ltTopologygt ltGeometry Type=XYZgt ltDataItem Format=XML Dimensions=4 4 3gt 00 00 00 10 00 00()Que mostra que a interpretaccedilatildeo (parsing) de XML eacute em geral complexa

6789

Arquivos - texto - XML

Haacute muitas bibliotecas de alto niacutevel para fazer o processamento (parsing) e entregar os dados em uma estrutura conveniente

A complexidade em processar XML estaacute em decidir o que fazer com os dados jaacute que os arquivos podem ser muito complexos

As APIs (Application Programming Interfaces) mais comuns para processar XML que satildeo implementadas em muitas linguagens

DOM (Document Object Model) ndash manteacutem todo o conteuacutedo do em uma estrutura de dados (em geral uma aacutervore) em uma variaacutevel (em geral um objeto) Esta pode ser consultada para obter os valores de interesse para os alterar e usada para escrever um arquivo

SAX (Simple API for XML) ndash Interpretador (parser) por objetos O usuaacuterio escreve uma classe herdando da classe SAX provendo os meacutetodos que vatildeo processar os campos agrave medida em que estes satildeo lidos

6889

Arquivos - binaacuterios - FITSFlexible Image Transport System

O formato mais comum para observaccedilotildees astronocircmicas Tambeacutem usado para armazenar quaisquer dados mesmo natildeo relacionados a observaccedilotildees (especialmente tabelas como eacute praacutetica do STSCI)

Conteacutem um (ou mais) cabeccedilalho(s) de texto com metadados (informaccedilotildees sobre os dados como caracteriacutesticas (necessaacuterias para os ler) origem condiccedilotildees em que foram obtidos processamento realizado etc)

SIMPLE = T image conforms to FITS standard BITPIX = 32 bits per data value NAXIS = 2 number of axes NAXIS1 = 1024 NAXIS2 = 1024 BSCALE = 100000 Scaling factor BZERO = 000000 Scaling zero-point TELESCOP= Keck II Telescope SLITNAME= 0041x226 Slit Name SLITPA = 351979 Slit position angle SLITX = 131500 X pixel of the center of the slit LST = 12010446 local apparent sidereal time (()

Depois do cabeccedilalho haacute uma (ou mais) seccedilatildeo(otildees) de dados binaacuterios Costuma(m) ser array(s) 1D (espectros) 2D (imagens) ou 3D (ldquocubos de dadosrdquo)

De inteiros ou reais inteiros satildeo comuns em contagens de instrumentos reais para valores derivados (fluxos intensidades etc)

6989

Arquivos - binaacuterios - FITSNormalmente FITS satildeo lidos escritos por bibliotecas prontas de (relativamente) alto niacutevel usuaacuterio natildeo tem que saber como os dados satildeo armazenados no arquivo nem como os ler escrever Ex (IDL com a biblioteca idlastro)

IDLgt fits_info2dspectrumfits2dspectrumfits has 3 extensionsPrimary header 288 recordsNo dataExtension 1 -- SCI Header 144 records IMAGE ( 1201 1201 )Extension 2 -- ERR Header 72 records IMAGE ( 1201 1201 )Extension 3 -- DQ Header 72 records IMAGE ( 1201 1201 )

IDLgt mydata=readfits(2dspectrumfitsexten_no=1myheader) READFITS Reading FITS extension of type IMAGE READFITS Now reading 1201 by 1201 array

IDLgt extastmyheadermyastIDLgt sz=size(mydatadimensions)IDLgt xy2ad[1sz[0]][1sz[1]]myastcorners_acorners_dIDLgt printcorners_aCorners of the data array from file 2dspectrumfits are at 14487480 33063480

IDLgt printcorners_d -00041264444 00041402222

Obteacutem os dados de coordenadas (WCS) do header

Coloca os dados no array (2D de floats) mydata e o header no array (1D de strings) myheader

Calcula as coordenadas das quinas da imagem atraveacutes do WCS

Provecirc informaccedilotildees sobre o arquivo

7089

Arquivos - binaacuterios - ISIS Cube

Formatos como FITS se adequam muito a ter uma interface de mais alto niacutevel por objetos

Tambeacutem para dados em tabelas FITS muito mais trabalhosos de ler em baixo niacutevel que se adequam muito mais a mapas ou estruturas

Exemplo (de um formato semelhante a FITS ISIS cube)

O objeto ao ser criado lecirc todo o arquivo

cube=pp_editablecube(CM_1553510065_1_ircub)

Meacutetodos fornecem os dados desejados para obter quando necessaacuterio os dados de interesse

Find out the names of the backplanesprintcubegetproperty(backnames)Get the start time of the cubeprintcubegetfromheader(START_TIME)2007-084T100057286Z

Valores no cabeccedilalho podem ser convenientemente fornecidos como um mapa

header=cubeheader_as_hash()printheader[START_TIME]2007-084T100057286Z

7189

Arquivos - binaacuterios ndash ISIS Cube

Os dados satildeo fornecidos como arraysMake a contour plot of the latitudesc=contour(cubegetsuffixbyname(LATITUDE))Get the band with wavelength nearest to 21 (in the units used in the cube)selband=cubegetbandbywavelength(21wavelengths=selwavs)

Interfaces por overload tornam o acesso ainda mais conveniente

selband=cube[21]

selwavs=cube[21]

Retorna um array com a banda de comprimento de onda mais proacuteximo de 21 (microm)

Retorna o comprimento de onda mais proacuteximo de 21 (microm) da banda retornada acima

7289

Arquivos - binaacuterios ndash ISIS Cube Alteraccedilotildees feitas ao conteuacutedo satildeo automaticamente refletidas em todos os

lugares (cabeccedilalho em particular) afetados mantendo o objeto vaacutelido que pode depois ser gravado em um novo arquivo

IDLgt printcubelinescubesamplescubebands 64 64 256

IDLgt helpcubecoreltExpressiongt FLOAT = Array[64 64 256]

IDLgt cubecore=dblarr(100100256)

A linha acima natildeo eacute uma atribuiccedilatildeo eacute uma invocaccedilatildeo de meacutetodo Eacute equivalente acubesetpropertycore=dblarr(100100256)

Eacute o trabalho da funccedilatildeo setproperty decidir se a propriedade passada (core) faz sentido e se fizer fazer todo o trabalho necessaacuterio a esta mudanccedila Para o usuaacuterio eacute tudo automaacutetico e os dados da classe satildeo vaacutelidos o tempo todo

IDLgt helpcubecoreltExpressiongt DOUBLE = Array[100 100 256]

IDLgt printcubelinescubesamplescubebands 100 100 256

IDLgt cubesaveCM_1553510065_1_ir_editedcub

7389

Arquivos - binaacuterios ndash NetCDF e HDF5

Network Common Data Form e Hierarchical Data Format

Os dois uacutenicos formatos bem estabelecidos para dados cientiacuteficos geneacutericos

Armazenam dados como vaacuterias variaacuteveis e seus metadados Para cada variaacutevel haacute (ou pode haver) os metadados

Nome Dimensotildees (do array) Unidades Comentaacuterios

Ambos permitem arrays multidimensionais

Apenas HDF5 permite estruturas (daiacute vem a hierarquia)

Autodocumentados qualquer software que saiba ler um destes formatos lecirc qualquer arquivo sem precisar de conhecimento preacutevio sobre como o arquivo foi gerado

Muito bem suportados em bibliotecas padratildeo e natildeo padratildeo em softwares interativos e visualizadores (inclusive plugins para navegadores)

httpwwwunidataucaredusoftwarenetcdf httpenwikipediaorgwikiHdf5

NetCDF eacute mais simples de usar por natildeo ter hierarquia dando menos trabalho para ler e escrever dados Se hierarquia natildeo eacute necessaacuteria eacute mais conveniente de usar que HDF5

7489

Arquivos - binaacuterios - NetCDF e HDF5Haacute tambeacutem o formato CDL uma versatildeo ASCII do NetCDF A biblioteca padratildeo do NetCDF inclui conversores entre estes formatos

$ ncdump -h refspec_g01_0ncnetcdf refspec_g01_0 dimensions nlay = 51 nwn = 400 nleg = 33 numu = 2 nlev = 52 nphi = 3 ngas = 2 nwnc = 1 scal = 1 v3 = 3 dnl = 1 nk = 1 tdisr = UNLIMITED (0 currently) na = 16

variables float alb(nwn) float z(nlay) float t(nlay) float p(nlay) float wl(nwn) float iof(nwn) float mtau(nwn) float htau(nwn) float hctaus(nwn) float gtau(nwn) float outcos(scal) float phi(nleg) float phic(scal) float umu(numu) float flux(v3 nwn nlev) float mix(nlay ngas) float c(nlay) float psat(nlay) float ga(nwnc) float wlc(nwnc) float inc(scal) int dm(scal) int ord(scal) float fbeam(scal) float wn(nwn) float tautot(nwn nlay) float htaus(nwn nlay) float htaux(nwn nlay) float taug(nwn nlay) float phase(nwn nlay nleg) float ssa(nwn nlay) float uu(nwn nphi nlev numu) float u0u(nwn nlev numu) float tray(nwn nlay) float gtauo(tdisr nwn nlay)

Haacute 14 variaacuteveis usadas como dimensotildees para as 35 variaacuteveis que satildeo arrays

Ex alb(nwn) indica que alb eacute um array 1D de nwn elementos

nwn estaacute armazenado como uma das dimensotildees e eacute 400 portanto alb tem 400 elementos

Parte do conteuacutedo de um arquivo NetCDF em formato CDL (gerado pelo programa ncdump)

7589

Arquivos - binaacuterios - NetCDF e HDF5Conteuacutedo daquele arquivo visualizado com o ncview (acompanha a biblioteca NetCDF padratildeo)

7689

Arquivos - binaacuterios - NetCDF e HDF5O conteuacutedo de todo o arquivo pode ser lido facilmente com as bibliotecas disponiacuteveis e armazenado em contecirciners convenientes Usando um objeto que gera um resultado um pouco mais conveniente

IDLgt h=pp_readncdf(refspec_g01_0nchash)IDLgt printhvar_dims ltObjHeapVar229(HASH)gtvars ltObjHeapVar152(HASH)gtdims ltObjHeapVar118(HASH)gt

IDLgt printh[vars]T 173203 175459 175848 176001 175975 Z 431869 418858 406067 393403 380464 FLUX 300660 145536 0705180 0341669 0165532 PHASE 100000 0779034 0660858 0542052 0449983 TAUTOT0694377 0693420 0693474 0693540 0693636()

IDLgt help(h[vars])[TAUTOT]ltExpressiongt FLOAT = Array[51 400]

IDLgt print(h[var_dims])[TAUTOT]NLAY NWN

IDLgt print(h[dims])[(h[var_dims])[TAUTOT]]NLAY 51NWN 400

7789

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5)

Visualizaccedilatildeo da variaacutevel selecionada

Metadados e alguns valores da variaacutevel selecionada

Variaacutevel a ser criada com o conteuacutedo desta variaacutevel do arquivo

Hierarquia das variaacuteveis do arquivo

7889

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5) Imported variable az

IDLgt helpaz Structure ltd5723f38gt 13 tags length=448 data length=444 refs=1 _NAME STRING az _ICONTYPE STRING binary _TYPE STRING DATASET _FILE STRING INTENSI_test_409OUTh5 _PATH STRING _DATA DOUBLE Array[38] _NDIMENSIONS LONG 1 _DIMENSIONS ULONG64 Array[1] _NELEMENTS ULONG64 38 _DATATYPE STRING H5T_FLOAT _STORAGESIZE ULONG 8 _PRECISION LONG 64 _SIGN STRING

IDLgt printaz_data 00000000 10000000 20000000 30000000 40000000 50000000 60000000 80000000 ()

7989

Arquivos - binaacuterios - imagens

JPEG JPEG200 TIFF GeoTIFF etc

Os formatos comuns de imagens satildeo bem suportados em muacuteltiplas plataformas para uso dentro de programas e interativamente

Alguns formatos tecircm opccedilatildeo de compressatildeo com perda eou sem perda

Armazenam imagens como arrays 2D ou 3D (3D frequumlentemente limitado a 3 ou 4 em uma das dimensotildees uma imagem em 3 ou 4 bandas) de inteiros ou (em alguns formatos) reais

Alguns formatos permitem armazenar metadados para caracterizar as imagens armazenadas

JPEG2000 e GeoTIFF (um subconjunto de TIFF) comuns em astronomia e aacutereas proacuteximas

8089

Arquivos - binaacuterios ndash imagens ndash exemplo (IDL)IDLgt printquery_tiff(issmap_2009tiffinfogeotiff=geo) 1

IDLgt helpinfo Structure ltd4eca4b8gt 18 tags length=144 data length=132 refs=1 CHANNELS LONG 4 DIMENSIONS LONG Array[2] IMAGE_INDEX LONG 0 NUM_IMAGES LONG 1 PIXEL_TYPE INT 1 TYPE STRING TIFF BITS_PER_SAMPLE LONG 8 POSITION FLOAT Array[2] RESOLUTION FLOAT Array[2] UNITS LONG 2 TILE_SIZE LONG Array[2] DESCRIPTION STRING ISS (2009) DATE_TIME STRING 20100218 012436()

IDLgt helpgeo Structure ltd4efa1b8gt 10 tags length=264 data length=262 refs=1 MODELPIXELSCALETAG DOUBLE Array[3] MODELTIEPOINTTAG DOUBLE Array[6 4] GEOGRAPHICTYPEGEOKEY INT 4035 GEOGSEMIMAJORAXISGEOKEY DOUBLE 25750000 GEOGSEMIMINORAXISGEOKEY DOUBLE 25750000()

IDLgt myimage=read_tiff(issmap_2009tiff) Lecirc a imagem para o array myimage

Obteacutem informaccedilotildees sobre o arquivo

8189

Arquivos - binaacuterios ndash formatos nativosLinguagens como IDL R Python Java tecircm seu formato nativo binaacuterio acessado em alto niacutevel Basta mandar salvar ler variaacuteveis no do arquivo a biblioteca padratildeo automagicamente faz todo o trabalho de decidir como gravar ler os dados

Conveniente de usar na proacutepria linguagem Mas raramente existem bibliotecas para ler gravar o formato nativo de uma linguagem a partir de outra Ex (IDL)

IDLgt savefile=2dspectrumsavmydatamyheadercorners_dcorners_averbosecompress SAVE Portable (XDR) compressed SAVERESTORE file SAVE Saved variable MYDATA SAVE Saved variable MYHEADER()

Pode ser lido com apenas (haacute formas mais elaboradas)

IDLgt restore2dspectrumsavverbose RESTORE Portable (XDR) compressed SAVERESTORE file RESTORE Save file written by ltunknowngtltunknowngt Thu Jan 27 191422 2011 RESTORE IDL version 801 (linux x86_64) RESTORE Restored variable MYDATA RESTORE Restored variable MYHEADER()

IDLgt helpmydatamyheadercorners_dcorners_aMYDATA FLOAT = Array[1201 1201]MYHEADER STRING = Array[144]()

8289

Arquivos - processamento em baixo niacutevel

Nem sempre um formato padratildeo eacute a melhor escolha para o problema

Nem sempre haacute escolha (pode-se ter que trabalhar com arquivos que jaacute foram escritos em algum formato proprietaacuterio)

Agraves vezes o formato eacute padratildeo mas natildeo haacute bom suporte a ele disponiacutevel

Em todos estes casos eacute necessaacuterio escrever rotinas em baixo niacutevel que vatildeo ler processar diretamente o conteuacutedo do arquivo

Preferencialmente criando interfaces de alto niacutevel para o programa que vai as usar

8389

Arquivos - processamento em baixo niacutevel - texto

Tomando o exemplo anterior onde as colunas eram de diferentes tipos

NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS dec18s0001 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0002 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0003 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 FLAT 5408757812500 460000 5 dec18s0004 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 DARK 5408757812500 460000 5

A forma mais simples de o ler diretamente eacute definir uma estrutura para receber cada linha e um array destas estruturas para receber todo o arquivo Ex (IDL)

IDLgt record=namecalmpos0filnameechlpos0d0disppos0d0targnameposdirclassmjd_obsitime0d0coadds0IDLgt nlines=file_lines(filesearch_scamtxt)IDLgt mydata=replicate(recordnlines-1)IDLgt header=

Depois de definidas as variaacuteveis que vatildeo receber os dados o arquivo pode ser lido

IDLgt openrunitfilesearch_scamtxtget_lunIDLgt readfunitheaderIDLgt readfunitmydataformat=(A14I8A15F104F104A18A19A15F158F105I15)IDLgt free_lununit

A gravaccedilatildeo de um arquivo texto poderia ser feita de forma semelhante apenas trocando openr por openw (abrir o arquivo para gravaccedilatildeo natildeo leitura) e readf por printf

O arquivo eacute aberto em uma unidade (unit) usada para especificar de onde eacute feita a leitura

Ao final o arquivo eacute fechado

8489

Arquivos - processamento em baixo niacutevel - texto

O que resulta em

IDLgt printheader NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS

IDLgt helpmydataMYDATA STRUCT = -gt ltAnonymousgt Array[4]

IDLgt helpmydata[0] Structure ltd5e38f68gt 11 tags length=136 data length=124 refs=3 NAME STRING dec18s0001 CALMPOS INT 0 FILNAME STRING NIRSPEC-5-AO ECHLPOS DOUBLE 62630000 DISPPOS DOUBLE 36450000 TARGNAME STRING HD85258 POSDIR STRING NIRSPEC-5-AOp1 CLASS STRING STAR MJD_OBS STRING 54087574 ITIME DOUBLE 10000000 COADDS INT 1

Este caso eacute mais complicado que os mais comuns por haver colunas de strings

Se todas fossem de nuacutemeros natildeo teria sido necessaacuterio especificar o formato explicitamente As colunas teriam sido adivinhadas pela biblioteca que lecirc o arquivo Poderia ter sido lido escrito soacute com um array de nuacutemeros sem estruturas

8589

Arquivos - processamento em baixo niacutevel - binaacuterio

Formatos binaacuterios podem ser definidos de qualquer forma O arquivo eacute apenas um conjunto de bytes Cabe ao software saber como os interpretar

Uma escolha comum para que sejam autodocumentados eacute incluir um cabeccedilalho de texto informando as caracteriacutesticas dos dados necessaacuterias para os ler

Ex (IDL) criar um arquivo que armazene um array de doubles com um cabeccedilalho informando as dimensotildees para que o programa que o lecirc saiba como ler os dados

Inventa dados e abre o arquivo

IDLgt data_to_write=dindgen(34)IDLgt openwunitbinary_exampledatget_lun

Escreve as dimensotildees como texto

IDLgt printfunitdimensions of the double array stored belowIDLgt printfunitsize(data_to_writedimensions)

Escreve os dados binaacuterios

IDLgt writeuunitdata_to_write

Fecha o arquivo

IDLgt free_lununit

Escreve em binaacuterio (write unformatted)

8689

Arquivos - processamento em baixo niacutevel - binaacuterio

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

dimensions of the double array stored below 3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

8789

Arquivos - processamento em baixo niacutevel - binaacuterioA leitura deste arquivo eacute igualmente simples

IDLgt header=IDLgt dims=[00]IDLgt openrunitbinary_exampledatget_lun

Lecirc as dimensotildees (armazenadas como texto)

IDLgt readfunitheaderIDLgt readfunitdims

Lecirc a parte binaacuteria depois de saber as dimensotildees

IDLgt data_read=dblarr(dims)IDLgt readuunitdata_read

Fecha o arquivo

IDLgt free_lununit

Verifica que os dados foram gravados e lidos corretamente

IDLgt printarray_equal(data_to_writedata_read) 1

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Lecirc dados binaacuterios (read unformatted)

8889

Sumaacuterio

5 ndash Slides em httpwwwppenteadonetpeapea04_strings_iopdf Strings Expressotildees regulares Arquivos

httpwwwppenteadonetpea

8989

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89

Strings - codificaccedilotildees para Unicode

No mundo ocidental haacute apenas duas codificaccedilotildees de uso comum

UTF-8

ISO 8859-1 (tambeacutem chamado de Latin 1)

Por isso eacute necessaacuterio saber que codificaccedilatildeo usar ao trabalhar com Unicode

Alguns softwares formatos de arquivo informam a codificaccedilatildeo usada

Outros assumem que uma eacute usada (sem ter sido informada)

Outros tentam adivinhar quando natildeo satildeo informados qual eacute (esp navegadores)

Outros soacute perguntam para o usuaacuterio (esp editores de texto)

Sistemas operacionais oferecem variadas formas de digitar caracteres especiais

Pelos coacutedigos numeacutericos

Por programas seletores de caracteres Alguns seletores de caracteres (ex kcharselect do KDE) permitem fazer buscas pelo

nome ou propriedades

1689

Strings - Onde haacute suporte a Unicode em programaccedilatildeo

Linguagens variam muito

Desconhecem Unicode (soacute usam ASCII) C Fortran

Usam nativamente ASCII (inclusive no coacutedigo-fonte) mas tecircm tipos para strings Unicode e ou funccedilotildees para processar Unicode (em variados graus) C C++ IDL R

Usam nativamente Unicode (inclusive no coacutedigo-fonte) e tecircm bom suporte a strings Unicode Java Python Perl

Muitas vezes (mesmo quando Unicode pode ser usado em coacutedigo-fonte) caracteres Unicode satildeo escritos atraveacutes de ASCII com coacutedigos de escape para coacutedigos Unicode Exs

IDLgt p=plot(testtitle=Z(00C5222B))

C C++ Java Python u2207

ReferecircnciasCharacters vs byteshttpwwwtbrayorgongoingWhen200x20030426UTFThe absolute minimum every software developer absolutely positively must know about Unicode and character sets (no excuses)httpwwwjoelonsoftwarecomarticlesUnicodehtmlUnicode character searchhttpwwwfileformatinfoinfounicodecharsearchhtm

em IDL produz intÅ

produz nabla

1789

Strings - processamento baacutesico

Operaccedilotildees mais fundamentais que costumam ser suportadas em ldquotodasrdquo as linguagens bibliotecas padratildeo (exemplos usando sintaxe de IDL)

Atribuiccedilatildeo de literais

IDLgt a=some

IDLgt helpaA STRING = some

IDLgt printasome

Concatenaccedilatildeo

IDLgt b=a+ string

IDLgt helpbB STRING = some string

1889

Strings - processamento baacutesico

Valor loacutegico

String vazio (null string) eacute falso o resto eacute verdadeiro

IDLgt c=

IDLgt if c then printc is not empty string else printc is null string ()c is null string ()

IDLgt c=a

IDLgt if c then printc is not empty string else printc is null string ()c is not empty string

Espaccedilo natildeo eacute o mesmo que string vazio

IDLgt c=

IDLgt if c then printc is not empty string else printc is null string ()c is not empty string

1989

Strings - processamento baacutesico Comparaccedilotildees

IDLgt helpabA STRING = someB STRING = some string

IDLgt printb eq a 0

IDLgt printb gt a 1

IDLgt c=[ab9Some somesome other string]

IDLgt printc[sort(c)]format=(A) some9Somesomesome other stringsome string

IDLgt printa eq A 0

IDLgt printstrcmp(aAfold_case) 1

Comparaccedilotildees de ldquotamanhordquo (maior menor etc) satildeo comparaccedilotildees pela ordem de codificaccedilatildeo (ldquoalfabeacuteticardquo)

Algumas linguagens permitem definir o ordenamento (como considerar maiuacutesculasminuacuteculas letras com acentos nuacutemeros e siacutembolos) Exs Python C++ Java Perl

2089

Strings - processamento baacutesico Substrings

IDLgt printstrmid(abcdefg32)de

Algumas linguagens nativamente suportam iacutendices para indicar substrings C C++ Fortran Python Ex (Python)

gtgtgt s=abcdegtgtgt print(s[25])cde

Outras permitem que sejam definidos iacutendices por objetos strings

Busca de caracteres ou substrings

IDLgt printstrpos(abcdefgd) 3

IDLgt printstrpos(abcdefgj) -1

IDLgt printstrpos(abcdefgbc) 1

2189

Strings - processamento baacutesico

Outros

IDLgt printstrlen(1234567) 7

IDLgt printstrlen(1234567 ) 8

IDLgt printstrlen( 1234567 ) 9

IDLgt helpstrtrim( 1234567 2)ltExpressiongt STRING = 1234567

IDLgt helpstrtrim( 1234567 1)ltExpressiongt STRING = 1234567

IDLgt helpstrtrim( 1234567 0)ltExpressiongt STRING = 1234567

IDLgt printstrupcase(abcdEF)ABCDEF

IDLgt printstrlowcase(abcdEF)abcdef

Medindo quantos caracteres tem o string inclui espaccedilos em branco

Remoccedilatildeo dos brancos agrave esquerda agrave direita ou dos dois lados

2289

Strings - conversatildeo de outros tipos para strings

Eacute uma das operaccedilotildees mais comuns para gerar textos informativos e nomes escrever arquivos (aquivos texto discutidos adiante) etc

Eacute natildeo trivial jaacute que a conversatildeo pode ser feita de muitas formas diferentes

Para tipos fundamentais sempre haacute uma conversatildeo default tanto criando um string como usando algo tipo print (para strings terminal ou arquivos)

Todo comando tipo print (print printf sprintf string write etc) e toda escrita para arquivos texto eacute uma conversatildeo para string (terminais e arquivos texto soacute conteacutem strings)

2389

Strings - conversatildeo de outros tipos para strings

Exemplos de conversotildees (IDL)

IDLgt print[-109] -1 0 9

IDLgt print1d01B10 10000000 1 100000

IDLgt helpstring(1d01B10)ltExpressiongt STRING = 10000000 1 100000

IDLgt printfunitdblarr(343)

Tipos mais elaborados podem ou natildeo ter uma forma predefinida Com objetos eacute comum ser possiacutevel definir a conversatildeo (stringification) ao criar a classe

IDLgt h=hash(a109[01]18b)

IDLgt printh9 0 1a 100000180000 b

Strings

Coloca strings em um arquivo (adiante)

Strings criados por um meacutetodo da classe hash satildeo uma forma de representar o hash

2489

Strings - conversatildeo de outros tipos para strings

Algumas linguagens (Python IDL) tecircm mais de uma forma default de gerar strings Em Python uma forma eacute executaacutevel a outra eacute mais legiacutevel

In [30] x=arange(12)reshape(43)

In [31] print(x)[[ 0 1 2] [ 3 4 5] [ 6 7 8] [ 9 10 11]]

In [32] xOut[32]array([[ 0 1 2] [ 3 4 5] [ 6 7 8] [ 9 10 11]])

In [33] y=array([[ 0 1 2] [ 3 4 5] [ 6 7 8] [ 9 10 11]])

In [37] print(array_equal(xy))True

String mais legiacutevel

String executaacutevelPode ser usado para criar um objeto equivalente

2589

Strings ndash formataccedilatildeo expliacutecita

A formataccedilatildeo pode ser especificada se a conversatildeo default natildeo eacute adequada para definir a conversatildeo em um novo tipo

Cada linguagem tem sua sintaxe para formataccedilatildeo

Haacute dois estilos semelhantes em vaacuterias linguagens

Ambos os estilos satildeo sintaxes diferentes para a mesma ideacuteia Um coacutedigo especifica o tipo de dado sendo passado (inteiro real etc) e detalhes de como seraacute feito o string (largura do campo diacutegitos decimais alinhamento etc)

2689

Strings ndash formataccedilatildeo expliacutecita

Estilo Fortran

IDL

IDLgt print1d0+1d-9 10000000

IDLgt print1d0+1d-9format=(E1610)10000000010E+00

IDLgt printx=1d0+1d-9format=(A0F1613)X= 10000000010000

Estilo C (ldquoprintfrdquo)

IDL

IDLgt printformat=(x=1610e)1d0+1d-9x=10000000010e+00

Python

In [20] print(x=1610e (1e0+1e-9))x=10000000010e+00

Nenhum formato expliacutecito (default)

2789

Strings - formatos tipo Fortran

(apenas o principal ver documentaccedilatildeo para detalhes)

Ex (IDL)

IDLgt printx=1d0+1d-9format=(A0F1613)X= 10000000010000

Tambeacutem haacute modificadores para especificar alinhamento (-) se deve haver (ou ser suprimido) avanccedilo para a pŕoxima linha posiccedilatildeo dentro do campo etc

Coacutedigo Significado Exemplo(s)

A String (A) (10A)

I Inteiro decimal (I) (10I)(-2I)

B Inteiro binaacuterio (B) (10B)

Z Inteiro hexadecimal (Z) (10Z)

O Inteiro octal (O) (10O)

F Real ponto fixo (F)(F52)

E D Real ponto flutuante (E)(D1610)

G Real ponto fixo ou flutuante de acordo com o valor (G)(G10)

ldquordquo String literal (ldquox=rdquoI10)

X Caracteres em branco (A10XI)

2889

Strings - formatos tipo C (printf)(apenas o principal ver documentaccedilatildeo para detalhes)String com campos a serem substituiacutedos por valores (passados adiante) marcados por coacutedigos com

Ex (Python)In [20] print(x=1610e (1e0+1e-9))x=10000000010e+00

Haacute modificadores para especificar alinhamento como preencher o espaccedilo que sobra (espaccedilos zeros etc) para imprimir o sinal + etc

Coacutedigo Significado (tipo) Exemplo(s)

di Inteiro decimal (int) d 5d +05d

u Inteiro decimal sem sinal (unsigned int) u 7u

fF Real em ponto fixo (double float) f 136f

eE Real em ponto flutuante (double float) e 1610e

gG Real em ponto fixo ou flutuante decidido pelo valor (double float)

g 73G

xX Inteiro sem sinal hexadecimal (unsigned int) x 10X

o Inteiro sem sinal octal (unsigned int) o 5o

s String (string) s 10s

c Caractere (char) c

p Ponteiro - estilo C - (void ) p

literal

2989

Strings - conversatildeo de strings para outros tipos

Para gerar dados a partir de strings datas identificadores pedaccedilos de nomes valores numeacutericos armazenados em strings

Tambeacutem sempre haacute conversotildees default para os tipos baacutesicos onde o intepretador programa faz o possiacutevel para entender o string como um valor daquele tipo

Tipicamente eacute feito por casts (funccedilotildees de conversatildeo) reads (de strings ou arquivos texto (arquivos texto satildeo strings)) construtores de objetos ou implicitamente

3089

Strings - conversatildeo de strings para outros tipos - impliacutecitas

Exs (IDL)

IDLgt helpfix([17 17 171 -17 9 8])ltExpressiongt INT = Array[5]

IDLgt printfix([17 17 171 -17 9 8]) 17 17 17 -17 9

IDLgt printdouble([17 17 171 -17 9 8]) 17000000 17000000 17100000 -17000000 90000000

IDLgt readfunitabcd

IDLgt a=0d0IDLgt b=00IDLgt c=0IDLgt reads171d0 189d0 -9abcIDLgt helpabcA DOUBLE = 17100000B FLOAT = 189000C INT = -9

Converte o conteuacutedo do string para os tipos das variaacuteveis abcd (explicado adiante)

3189

Strings - conversatildeo de strings para outros tipos

Quando o default natildeo eacute suficiente (ou quando escrevendo o conversor em uma classe) costuma ser possiacutevel o fazer com formatos semelhantes aos formatos para gerar strings Exs (IDL)

IDLgt a=0d0IDLgt b=00IDLgt c=0IDLgt reads171d0 something 189d0-9abc READS Input conversion error Unit 0 File ltstdingt Error occurred at $MAIN$ Execution halted at $MAIN$

Natildeo funcionou porque sozinho ele natildeo conseguiu saber o que fazer com o ldquosomethingrdquo Usando um formato especiacutefico

IDLgt reads171d0 something 189d0-9 abcformat=(D6111XD611XI)

IDLgt helpabcA DOUBLE = 17100000B FLOAT = 189000C INT = -9

Exemplos mais complicados adiante (arquivos texto)

Variaacuteveis tecircm que ser definidas para informar para que tipo seraacute feita a conversatildeo default

3289

Strings - processamento natildeo baacutesicoOperaccedilotildees importantes e muito necessaacuterias mas que natildeo satildeo suportadas em todas as linguagens bibliotecas padratildeo

Testes (ex IDL)

IDLgt str=[afitsaFITSafitsaabfitsabcfits]

IDLgt printstrmatch(strfits) 1 0 0 1 1

IDLgt printstrmatch(strfitsfold_case) 1 1 0 1 1

IDLgt printstrmatch(strfitsfold_case) 1 1 1 1 1

IDLgt printstrmatch(strfits) 1 0 0 0 0

IDLgt printstrmatch(strfits) 0 0 0 1 0

3389

Strings - processamento natildeo baacutesico

Operaccedilotildees importantes e muito necessaacuterias mas que natildeo satildeo suportadas em todas as linguagens bibliotecas padratildeo

Separaccedilatildeo de partes (Ex IDL)

IDLgt printstrsplit(2011- 131 -extract)format=(A)2011131

Processamento de nomes de arquivos diretoacuterios (Ex IDL)

IDLgt printfile_dirname(some_directoryanother_directorysome_filetxt)some_directoryanother_directory

IDLgt printfile_basename(some_directoryanother_directorysome_filetxt)some_filetxt

IDLgt printfile_basename(another_directorysome_filetxttxt)+_alteredtxtsome_file_alteredtxt

3489

Strings - processamento natildeo baacutesico

Codificaccedilotildees (Ex Python 3)

gtgtgt s=infinite money infinNeuro sign

gtgtgt print(s)infinite money infineuro

gtgtgt print(ascii(s))infinite money u221eu20ac

gtgtgt print(sencode(utf-8))binfinite money xe2x88x9exe2x82xac

3589

Strings - processamento natildeo baacutesico

Perl eacute a linguagem mais avanccedilada para processamento de strings tem suporte nativo a muitas outras operaccedilotildees a semacircntica da linguagem eacute voltada principalmente para processar strings expressotildees regulares (de vaacuterios tipos) natildeo satildeo strings fazem parte da semacircntica

Ex (sem o objetivo que seja compreensiacutevel apenas para indicar o estilo)

Ler um arquivo contendo campos com nomes separados de valores por ()

temperature 10008name some modelx_dimension 100y_dimension 100z_dimension 50()

Armazenado-o em um mapa O que pode ser feito com apenas

While (ltgt) Loop over input linesPut pre-colon text into $1 post-colon into $2 if (m (S+) (+) ) Use $1 as key $2 as value $file_data$1 = $2

3689

Expressotildees regulares - definiccedilatildeo

Expressotildees regulares (regular expressions regex) satildeo a mais poderosa ferramenta para fazer buscas e separar substrings

Regex satildeo uma linguagem com o uacutenico objetivo de especificar propriedades de strings

Implementadas em graus diferentes em todas as linguagens modernas e modernizadas facilita encontrar uma expressatildeo jaacute pronta pois satildeo quase iguais em qualquer linguagem

Estatildeo na biblioteca padratildeo em IDL Python R Perl

Em C++ e Java em bibliotecas comuns (Boost Jregex)

Para que servem

Uma expressatildeo regular especifica propriedades de strings

O interpretador de expressotildees regulares (regular expression engine) recebe a expressatildeo e o string a analisar e determina se o string corresponde (matches) agrave expressatildeo regular

Em alguns casos o interpretador pode tambeacutem informar que parte(s) do string corresponde(m) a que parte(s) da expressatildeo regular e realizar processamentos com estas partes

3789

Expressotildees regulares ndash exemplos de usos Separar partes de strings

Encontrar linhas em arquivos que tenham nomes valores e comentaacuterios e separar estes pedaccedilos

Escalar com comentaacuterio

SLITPA = 351979 Slit position angle

Array 1D sem comentaacuterio (se extendendo por vaacuterias linhas)

BAND_BIN_CENTER = (03505400358950036629003732200379490 0387900104598)

Escalares em diferentes formatos

Total Mechanical Luminosity 15310E+03resources_usedwalltime=005603

Pedaccedilos de nomes

6063 17836E-20 2456 T FeIX((3Pe)3d(2PE)4p_1Po-3s2_3p6_1Se)

Datas separando ano mecircs dia hora (em vaacuterios formatos diferentes)

DATE-OBS= 2006-12-18 universal date of observationDATE_TIME = 2010-07-19T161032START_TIME = 2006-182T225102850Z

3889

Expressotildees regulares ndash exemplos de usos

Separar partes de strings Separar partes de nomes de arquivos (por significarem algo como identificar o

conteuacutedo)

specdec18s0041fitsscamdec18i0054fits15_7_mts_hmpixselh_mr15sav15_7_mts_hwpixselh_mr15sav16_3_mts_hwpixselb_mr16savreadmodel5l_-1_000010000_10000_r05_030_08196_0100000_005000000_1000eps

Determinar se um string eacute um nuacutemero (inteiro real fixo flutuante)

Encontrar identificadores Exs nomes de cataacutelogos endereccedilos HTTPFTP endereccedilos de email

Separar campos em arquivos sendo lidos onde as linhas natildeo tecircm a mesma formataccedilatildeo algumas linhas com colunas separadas por espaccedilos outras por tabs outras por

siacutembolos ignorando linhas de comentaacuterios e linhas vazias

3989

Expressotildees regulares - usoEx (IDL) encontrar nomes de arquivos com algumas propriedades

IDLgt printfilesformat=(A)CM_1477475933_1_viscubCM_1477476864_1_ircubCM_1477476864_1_irgcubCM_1477476864_1_viscubCM_1477477826_1_ircubCM_1477477826_1_irgcubCM_1477477826_1_viscubmosaic2cub

IDLgt printstregex(files+irgcubboolean) 0 0 1 0 0 1 0 0

A expressatildeo regular eacute +irgcub Especifica uma ou mais ocorrecircncias seguidas (+) de qualquer caractere () seguido de uma ocorrecircncia de irgcub (o ponto vem precedido do caractere de

escape () para ser entendido literalmente como um ponto e natildeo como o seu significado especial (qualquer caractere)

Esta aplicaccedilatildeo do interpretador (stregex) retorna um valor Booleano (verdadeirofalso) para cada elemento do string passado (files) que informa se aquele elemento correspondia agravequela expressatildeo regular

Este eacute um exemplo artificial Seria mais faacutecil ter usado strmatch(filesirgcub)

4089

Expressotildees regulares - uso

Em casos como este tipicamente o resultado de stregex seria usado como filtro para selecionar apenas os elementos do array de strings que satisfazem agravequela expressatildeo regular

IDLgt w=where(stregex(files+irgcubboolean)null)IDLgt printfiles[w]format=(A)CM_1477476864_1_irgcubCM_1477477826_1_irgcub

Ex (IDL) Determinar que strings conteacutem uma data no formato yyyy-mm-dd

IDLgt strs=[201002012010-02-012010-2-1aaaa-mm-ddT2010-02-01J]IDLgt printstregex(strs[0-9]4-[0-9]2-[0-9]2boolean) 0 1 0 0 1

Esta expressatildeo regular especifica quatro repeticcedilotildees (4) de diacutegitos (caracteres na faixa [0-9]) seguido de um (-) seguido de duas repeticcedilotildees (2) de dois diacutegitos ([0-9]) seguido de um (-) seguido de duas repeticcedilotildees (2) de dois diacutegitos ([0-9])

Uma expressatildeo regular apenas um pouco mais elaborada poderia corresponder aos 3 formatos de data no array acima E poderia se impedir que a uacuteltima (com outros caracteres antes e depois da data) seja aceita

4189

Expressotildees regulares - regras - caracteres ldquonormaisrdquo

Uma expressatildeo regular usa caracteres ldquonormaisrdquo e especiais para especificar o que se vai procurar na ordem em que aparecem na expressatildeo

Se um caractere eacute normal (natildeo eacute um dos especiais mostrados adiante) ele especifica uma ocorrecircncia daquele caractere

Ex J eacute uma expressatildeo regular que corresponde a qualquer string onde ocorra J Jaacute JA soacute corresponde a strings que tenham JA dentro

Exs (IDL)

IDLgt strs=[JJJJJJaJAjaJa]

IDLgt printstregex(strsJboolean) 1 1 1 0 1

IDLgt printstregex(strsJAboolean) 0 0 1 0 0

4289

Expressotildees regulares - regras - caracteres especiaisCaracteres especiais tecircm outros significados Para significar literalmente aquele caractere deve ser escapado (escaped) com um

Siacutembolo significado exemplo Corresponde(m) Escape o caractere seguinte deve ser interpretado

literalmente natildeo como especial aa

Qualquer caractere ab ajb aab abb jafbc

+ Uma ou mais repeticcedilotildees do que vem agrave esquerda a+b ab aab bab baabh

() Subexpressatildeo para agrupar termos afetados por um caractere especial (como parecircnteses em notaccedilatildeo matemaacutetica)

(ab)+c abc ababc dabababcg

Zero ou mais repeticcedilotildees dos termos agrave esquerda ab abbaab caaabg

Zero ou uma repeticcedilatildeo dos termos agrave esquerda ab b ab cabd cbd

| Alternaccedilatildeo qualquer um dos dois agrave esquerda a|bc ac bc jacd jbcd

n Exatamente n repeticcedilotildees do termo agrave esquerda a2b aab daaabg

n1n2 De n1 a n2 repeticcedilotildees do termo agrave esquerda a12b ab aab aaab gaaabbd

^ Acircncora (no comeccedilo) nada agrave esquerda ^ab ab abb

$ Acircncora (no fim) nada agrave direita ab$ abaab

[] Conjunto de valores (explicado adiante)

4389

Expressotildees regulares - regras - conjuntos de valores

[] denota um conjunto de valores que pode conter

Uma lista de coisas que devem corresponder Ex [abc] signfica qualquer caractere no conjunto abc Correspondem a esta

expressatildeo abcabha

Uma lista de coisas que natildeo podem corresponder [^abc] significa qualquer coisa que natildeo seja a b ou c Correspondem a esta

expressatildeo d jgs gg

Faixas de valores [0-9] signfica qualquer diacutegito [0-9a-zA-Z] significa qualquer diacutegito ou letra

Classes de valores como algumas faixas e outros conjuntos ocorrem com muita frequumlecircncia haacute nomes

especiais para eles Estes (em IDL) vecircm entre [] ex [[digit] significa o mesmo que [0-9]

4489

Expressotildees regulares - regras - classes de valores

Classe signficado

alnum Caracteres alfanumeacutericos 0-9a-zA-Z

alpha Caracteres alfabeacuteticos a-zA-Z

cntrl Caracteres de controle ASCII (natildeo visiacuteveis coacutedigos 1 a 31 e 127)

digit Diacutegitos (decimais) 0-9

graph Caracteres visiacuteveis ASCII 33 a 126 (natildeo inclui o espaccedilo)

lower Letras minuacutesculas a-z

print Caracteres ldquoimprimiacuteveisrdquo (visiacuteveis e o espaccedilo) ASCII 32 a 126

punct Caracteres de pontuaccedilatildeo $amprsquo()+-lt=gt[]^_lsquo|~

space Os caracteres ldquoem brancordquo (blank) espaccedilo tab tab vertical CR LF (ASCII 32 e 9-13)

upper Letras maiuacutesculas A-Z

xdigit Diacutegitos hexadecimais 0-9A-Fa-f

lt Comeccedilo de palavra (palavra definida como sequumlecircncia de coisas natildeo space)

gt Fim de palavra (palavra definida como sequumlecircncia de coisas natildeo space)

Estas satildeo apenas as principais Algumas implementaccedilotildees tecircm muito mais (em particular nas linguagens que usam Unicode nativamente)

4589

Expressotildees regulares - exemplos

Determinar se strings satildeo nuacutemeros (Ex IDL)

IDLgt str=[9-18 875-812-45913E9-98d7a188d032f5]

Inteiros

IDLgt intexpr=^[-+][0-9]+$

IDLgt printstregex(strintexprboolean) 1 1 0 0 0 0 0 0 0 0

Ponto flutuante

IDLgt fpexpr=^[-+](([0-9][0-9]+)|([0-9]+[0-9]))([eEdD][-+][0-9]+)$

IDLgt printstregex(strfpexprboolean) 1 1 0 1 1 1 1 1 0 0

Sinal opcional

1 ou mais diacutegitos

Sinal opcional

0 ou mais diacutegitos opcionalmente seguidos de um ponto e 1 ou mais diacutegitos

1 ou mais diacutegitos opcionalmente seguidos de um ponto e 0 ou mais diacutegitos

ou Expoente opcional letra do expoente seguida de sinal opcional seguido de um ou mais diacutegitos

4689

Expressotildees regulares ndash extraccedilatildeo

Interpretadores de expressotildees regulares costumam oferecer mais que apenas testar se um string corresponde a uma expressatildeo

Em geral tambeacutem podem retornar que parte(s) do string corresponde(m) agrave expressatildeo

Ex (IDL) Determinar se um string conteacutem uma data incluindo os formatos

IDLgt dates=[2011-01-312011 1 3120110131something done on y2011m1d31 with something]

E extrair a data de dentro do string

IDLgt expr=[0-9]4[0-9]12[0-9]12

(4 diacutegitos)(qualquer separador)(1 a 2 diacutegitos)(qualquer separador)(1 a 2 diacutegitos)

IDLgt printstregex(datesexprextract)format=(A)2011-01-312011 1 31201101312011m1d31

Como agora separar ano mecircs e dia Com uma busca e uma extraccedilatildeo para cada Poderia ser mais eacute mais faacutecil com uma uacutenica expressatildeo regular

4789

Expressotildees regulares - aleacutem de apenas testes

Tambeacutem podem retornar que parte(s) do string correspondem agrave expressatildeo toda e agraves suas subexpressotildees (partes da expressatildeo delimitadas por parecircnteses)

Ex (IDL) Separar pedaccedilos de datas Neste caso para a expressatildeo ficar menor assumindo um formato simples (yyyy-mm-ddThhmmssfff) Mas poderia ser um formato mais livre como no exemplo anterior

IDLgt str=Stuff observed on 2011-01-31T123924983 with some instrumentIDLgt expr=([0-9]4)-([0-9]2)-([0-9]2)T([0-9]2)([0-9]2)([0-9]2[0-9]3)

(quatro diacutegitos)-(2 diacutegitos)-(2 diacutegitos)T(2 diacutegitos)(2 diacutegitos)(2 diacutegitos3 diacutegitos)

IDLgt pieces=stregex(strexprextractsubexpr)IDLgt printpiecesformat=(A)2011-01-31T12392498320110131123924983IDLgt d=julday(pieces[2]pieces[3]pieces[1]pieces[4]pieces[5]pieces[6])IDLgt printdformat=(F166) 2455593027372

Expressatildeo inteiraPrimeira subexpressatildeoSegunda subexpressatildeoTerceira subexpressatildeoQuarta subexpressatildeoQuinta subexpressatildeoSexta subexpressatildeo

4889

Expressotildees regulares - referecircncias httpxkcdcom208

Viacutedeos do Software Carpentry

httpsoftware-carpentryorg4_0regexp

4989

Arquivos

Quase todo programa precisa armazenar dados em arquivos

Podem ser pequenos arquivos de paracircmetros ou enormes arquivos de dados produzidos ou a processar

Apesar do sugerido pela praacutetica comum arquivos texto natildeo satildeo sempre a melhor escolha para armazenar dados - e haacute muitas formas diferentes de os usar

Qual eacute a melhor escolha

Assim como para linguagens ou contecirciners natildeo existe ldquoo melhor formatordquo Cada um tem suas vantagens e desvantagens

Dados diferentes (mesmo se usados pelos mesmos programas) em geral se adequam melhor a formatos diferentes

5089

Arquivos - texto X binaacuterios

Em qualquer formato arquivos satildeo armazenados como diacutegitos binaacuterios

Mas haacute duas formas principais como eles podem ser codificados

Arquivos baseados em texto (text files)

Dados satildeo transformados em caracteres usando alguma formataccedilatildeo (mesmo se impliacutecita) e escritos com alguma codificaccedilatildeo de texto (comumente mas natildeo necessariamente ASCII)

Um arquivo texto eacute um ou mais strings As mesmas conversotildees tecircm que ser feitas depara outros tipos

Arquivos ldquobinaacuteriosrdquo (binary files)

Embora todo arquivo seja binaacuterio este nome costuma ser usado soacute para aqueles em que os dados natildeo estatildeo na forma de texto

Com frequumlecircncia (nem sempre) os dados satildeo gravados de forma idecircntica a como satildeo armazenados na memoacuteria

Muitos formatos usam uma mistura de partes em texto e partes binaacuterias

Um cabeccedilalho (header) de texto que daacute informaccedilotildees (metadados) sobre os dados armazenados na parte binaacuteria que vem depois

O cabeccedilalho conteacutem em especial informaccedilotildees sobre como ler os dados binaacuterios

5189

Arquivos - texto X binaacuterios

Vantagens de arquivos texto

Legiacuteveis por pessoas (human readable)

Podem ser auto-suficientes todo o necessaacuterio para os ler e entender o que conteacutem pode ser obtido olhando o arquivo

Satildeo os menos especiacuteficos a linguagens software normalmente satildeo escritos em ASCII ou Unicode e sempre haacute algum suporte a ler escrever texto em linguagens software

Haacute alguns formatos padratildeo para texto (exs CSV XML) que satildeo suportados em muitas plataformas diferentes

5289

Arquivos - texto X binaacuterios

Vantagens de arquivos binaacuterios

Em geral natildeo haacute conversotildees entre o os dados como armazenados na memoacuteria O que torna o armazenamento mais eficiente e sem alteraccedilotildees nos valores

A maior parte dos formatos padronizados eacute binaacuteria Exs FITS cube CDF NetCDF HDF HDF5 JPEG JPEG2000 TIFF GeoTIFF MPEG etc

Eacute mais comum que haja bibliotecas prontas (ateacute de alto niacutevel) para consulta leitura e gravaccedilatildeo

Os formatos melhor desenhados satildeo autodocumentados (em texto ou binaacuterio) para os ler natildeo eacute necessaacuterio conhecimento preacutevio sobre como os dados foram armazenados

Toda linguagem plataforma costuma ter seu formato binaacuterio mais nativo que costuma ser o mais faacutecil para leitura gravaccedilatildeo Em particular nas de alto niacutevel que tecircm formatos autodocumentados (especialmente

em IDL R Python Java)

Muitos formatos tecircm opccedilatildeo de compressatildeo dos dados

5389

Arquivos - proprietaacuterios X padratildeo

Independente da escolha texto binaacuterio programas devem escolher entre usar um formato proacuteprio ou um formato padronizado

A principal vantagem de formatos proacuteprios eacute que satildeo definidos da forma mais conveniente para a aplicaccedilatildeo que os usa simplificando leitura e gravaccedilatildeo e potencialmente otimizando recursos (acesso ao disco tamanho do arquivo etc)

A principal desvantagem de formatos proacuteprios eacute ser necessaacuterio escrever todo o coacutedigo para os ler gravar

Pode dar mais trabalho que usar um formato geneacuterico que natildeo seja exatamente o que melhor se encaixa na aplicaccedilatildeo

O coacutedigo para processar o formato em geral vai ser menos completo e conveniente de usar que o de um formato bem estabelecido usado por muitos outros em muitos ambientes

Cada novo software que for usar estes arquivos vai precisar compartilhar do mesmo coacutedigo ou precisar de coacutedigo novo (em particular se em outra linguagem) para ler gravar naquele formato

Eacute necessaacuterio documentar o formato e decidir sobre como ele seraacute definido

Se outros jaacute colocaram muito trabalho desenvolvendo bons formatos padratildeo bem suportados em muitos ambientes por que ter o trabalho de reinventar (e reprogramar redocumentar e retestar) a roda

5489

Arquivos - padrotildees comuns em astronomia (exs adiante)

Texto

CSV Comma-separated values - bem suportado por muitos softwares

ldquoColunas fixasrdquo Natildeo eacute um padratildeo bem definido mas eacute praacutetica comum para tabelas (2D)

XML Extensible Markup Language - O padratildeo texto mais flexiacutevel de grande uso em programaccedilatildeo geral para armazenar qualquer coisa com frequumlecircncia de forma hieraacuterquica Bem suportado por linguagens modernas (e modernizadas) e bibliotecas das principais

linguagens gerais Alta complexidade o torna trabalhoso de usar

5589

Arquivos - padrotildees comuns em astronomia (exs adiante)Binaacuterios

FITS Flexible Image Transport System - o mais comum para observaccedilotildees astronocircmicas Conteacutem os dados (em geral arrays 1D 2D ou 3D) e documentaccedilatildeo (nos cabeccedilalhos) sobre a origem e caracteriacutesticas dos dados Tambeacutem usado para armazenar tabelas de dados quaisquer mesmo que natildeo sejam observaccedilotildees (especialmente pelo STSCI) Variam muito em qualidade de documentaccedilatildeo

NetCDF Network Common Data Form - evoluccedilatildeo do CDF autodocumentado eacute comum e bem suportado para vaacuterios arrays de dados

HDF5 Hierarchical Data Format ndash autodocumentado comum e bem suportado permitindo aleacutem de simples arrays estruturas (eacute um formato hieraacuterquico)

Formatos de imagens JPEG JPEG2000 TIFF GeoTIFF etc - voltados para arrays 2D3D de inteiros ou (em alguns casos) reais com ou sem compressatildeo JPEG2000 tem caracteriacutesticas mais avanccediladas como imagens multiresoluccedilatildeo

Formatos vetoriais PS EPS DXF SHP SVG - variados niacuteveis de suporte a armazenamento de vetores e formas em 2D ou 3D

ISIS Cube semelhante em caracteriacutesticas ao FITS mais usado em sensoriamento remoto geociecircncias e ciecircncias planetaacuterias em geral para observaccedilotildees 1D 2D ou 3D

Formatos nativos de linguagens todo o trabalho de leitura e gravaccedilatildeo eacute feito automagicamente pela biblioteca padratildeo em IDL R Python Java

5689

Arquivos texto - newlines

Apesar do que possa parecer arquivos texto natildeo tecircm intrinsecamente vaacuterias linhas Arquivos texto satildeo soacute uma sequumlecircncia 1D de caracteres em alguma codificaccedilatildeo Separaccedilatildeo em linhas (equivalente a interpretar o arquivo como 2D em linhas e colunas) eacute

especificada por convenccedilotildees Natildeo haacute apenas uma convenccedilatildeo para o fim de linhas

A mais primitiva convenccedilatildeo eacute separaccedilatildeo nenhuma estipula-se que linhas tenham um nuacutemero fixo N de caracteres e cabe ao software que lecirc o arquivo entender que uma linha nova ocorre regularmente a cada N caracteres

Eacute a forma menos portaacutevel e mais inconveniente eacute necessaacuterio o conhecimento preacutevio (ou por inspeccedilatildeo do arquivo) de quantos caracteres haacute por linha

A maior parte dos editores de texto natildeo vai saber separar linhas desta forma (por falta deste conhecimento preacutevio) Exemplo (de um FITS real)

SIMPLE = T Fits standard BITPIX = 16 Bits per pixel NAXIS = 0 Number of axes EXTEND = T File may contain extensions

O que com as linhas quebradas nos lugares certos seria

SIMPLE = T Fits standard BITPIX = 16 Bits per pixel NAXIS = 0 Number of axes EXTEND = T File may contain extensions

5789

Arquivos texto - newlines

A forma mais comum de especificar linhas eacute com um marcador do final de linha (newline)

Eacute um caractere especial natildeo normalmente presente no texto que serve para marcar fim de linhas

Mas natildeo haacute soacute um padratildeo de newline Os mais comuns

LF (Line Feed ASCII 10) ndash Unix Linux Mac OS X

CR - (Carriage Return ASCII 13) - Mac OS lt10

CR+LF (CR seguido de LF) - Windows DOS

Eacute o motivo de o Notepad (Windows) natildeo entender as quebras de linha de arquivos escritos com o formato nativo de Linux o arquivo soacute tem LF enquanto o editor espera CR+LF

Alguns sistemas (strings em vaacuterias linguagens por exemplo) usam o coacutedigo de escape n para indicar newline que eacute codificado de acordo com o padratildeo sendo usado

Em geral bibliotecas de leitura e gravaccedilatildeo de arquivos usam (default pelo menos) o newline nativo do sistema em que satildeo usadas

Programas de conversatildeo entre os sistemas satildeo comuns (ex dos2unix)

O Wordpad identifica se for usado soacute LF e quebra as linhas de acordo

5889

Arquivos - texto - CSV

Comma-separated values

O formato mais padronizado para tabelas (arrays 2D) em texto (frequentemente mas natildeo necessariamente ASCII)

Bem suportado por bibliotecas padratildeo de linguagens e outros softwares (Excel Calc Origin Google Docs etc)

Conteacutem Linhas de cabeccedilalho (opcionais mas recomendadas) linhas com qualquer texto geral

descrevendo o arquivo e em geral uma linha de tiacutetulo para as colunas da tabela Uma (apenas uma) tabela onde todas as linhas tecircm o mesmo nuacutemero de colunas

Colunas separadas por viacutergulas (opcionalmente pode ser outro separador) Linhas terminadas por newline (qualquer que seja) Strings delimitados por ldquo ldquo

Ex

NAMECALMPOSFILNAMEECHLPOSDISPPOSTARGNAMEPOSDIRCLASSMJD-OBSITIMECOADDSdec18s00010NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001dec18s00020NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001dec18s00120NIRSPEC-5-AO635800364500itan140NIRSPEC-5-AOp2 TITAN5408763000001dec18s00140NIRSPEC-5-AO626300364500itan140NIRSPEC-5-AOp1 TITAN5408763000001dec18s00151NIRSPEC-5-AO626300364500itan140NIRSPEC-5-AOp1ARC5408764000001dec18s00160NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001

Natildeo eacute necessaacuterio que as colunas tenham largura constante

Cabeccedilalho

5989

Arquivos - texto - CSVHaacute amplo suporte a leitura e gravaccedilatildeo de CSV sem precisar recorrer a procedimentos de baixo niacutevel

Podem ser diretamente importados em Excel Calc Origin Google Docs ou lido facilmente com bibliotecas padratildeo comuns Ex (IDL)

IDLgt c=read_csv(filesearch_scamcsvheader=h)IDLgt printhNAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS

IDLgt helpc Structure ltc8bca508gt 11 tags length=5256 data length=5248 refs=1 FIELD01 STRING Array[41] FIELD02 LONG Array[41] FIELD03 STRING Array[41] FIELD04 DOUBLE Array[41] FIELD05 DOUBLE Array[41] FIELD06 STRING Array[41] FIELD07 STRING Array[41] FIELD08 STRING Array[41] FIELD09 STRING Array[41] FIELD10 DOUBLE Array[41] FIELD11 LONG Array[41]

IDLgt printcfield01[03]dec18s0001 dec18s0002 dec18s0003 dec18s0004

IDLgt printcfield03[03]NIRSPEC-5-AO NIRSPEC-5-AO NIRSPEC-5-AO NIRSPEC-5-AO

6089

Arquivos - texto - CSVEx (IDL) Criaccedilatildeo de um CSV com uma tabela de valores

Criaccedilatildeo de 3 arrays 1D (12 elementos) um para cada coluna

IDLgt x=dindgen(3)IDLgt y=dindgen(4)IDLgt xx=reform(rebin(x34)12)IDLgt yy=reform(rebin(reform(y14)34)12)IDLgt f=xx+yy10IDLgt helpxxyyfXX DOUBLE = Array[12]YY DOUBLE = Array[12]F DOUBLE = Array[12]

Escrita do arquivo

IDLgt write_csvexamplecsvxxyyfheader=[XYX+10Y]

ResultadoXYX+10Y000000000000000000000000100000000000000010000000200000000000000020000000000000001000000010000000100000001000000011000000()

6189

Arquivos - texto - ldquoColunas regularesrdquoFixed column width

Natildeo eacute exatamente um padratildeo Eacute uma praacutetica comum

Armazena uma tabela (array 2D) de forma regular simples de ser interpretada e lida

Costumam ter linha(s) de cabeccedilalho descrevendo o conteuacutedo do arquivo em geral com uma linha para os nomes das colunas

As demais linhas conteacutem os dados sempre ocupando a mesma largura por coluna e escritos no mesmo formato em cada coluna

Costumam ser simples de ler inclusive interativamente (exs Excel Calc Origin read_ascii)

Ex (IDL) Uma simples tabela soacute de nuacutemeros

wavl CH4=33 wavl CH4=25 wavl CH4=10 wavl CH4=08 wavl CH4=05 wavl CH4=026 wavl CH4=02 477330000 0090130 477330000 0091110 477330000 0089250 477330000 0087000 477330000 0087140 477330000 0090080 477330000 0088110 480040000 0090930 480040000 0091930 480040000 0090160 480040000 0087930 480040000 0088110 480040000 0090950 480040000 0089090 482750000 0091710 482750000 0092730 482750000 0091060 482750000 0088850 482750000 0089080 482750000 0091810 482750000 0090060 485450000 0092530 485450000 0093570 485450000 0092000 485450000 0089810 485450000 0090100 485450000 0092730 485450000 0091090

IDLgt a=read_ascii(specs_27s_ntxtdata_start=1header=header)IDLgt printheader wavl CH4=33 wavl CH4=25 wavl CH4=10 wavl CH4=08 wavl CH4=05 wavl CH4=026 wavl CH4=02 IDLgt helpa Structure ltd423c9a8gt 1 tags length=224 data length=224 refs=1 FIELD01 FLOAT Array[14 4]

6289

Arquivos - texto - ldquoColunas regularesrdquoJaacute um arquivo um pouco mais difiacutecil de ler

NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS dec18s0001 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0002 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0003 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 FLAT 5408757812500 460000 5 dec18s0004 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 DARK 5408757812500 460000 5

Por ter colunas de tipos diferentes (strings inteiros reais) natildeo eacute possiacutevel o ler em um simples array Mas eacute faacutecil o colocar em uma estrutura de arrays onde cada campo eacute uma coluna

Especificando interativamente como interpretar as linhasIDLgt templ=ascii_template(filesearch_scamtxt)

Nome do campo (default mostrado)

Tipo do campo (identificado automaticamente)

Posiccedilatildeo (caracter) do comeccedilo (identificada automaticamente)

Linha de exemplo para verificar as colunas

6389

Arquivos - texto - ldquoColunas regularesrdquoDepois de feito o template o arquivo pode ser lido com apenas

IDLgt a=read_ascii(filesearch_scamtxttemplate=templ)IDLgt helpa Structure ltd4ec4608gt 11 tags length=416 data length=416 refs=1 FIELD01 STRING Array[4] FIELD02 LONG Array[4] FIELD03 STRING Array[4] FIELD04 FLOAT Array[4] FIELD05 FLOAT Array[4] FIELD06 STRING Array[4] FIELD07 STRING Array[4] FIELD08 STRING Array[4] FIELD09 FLOAT Array[4] FIELD10 FLOAT Array[4] FIELD11 LONG Array[4]IDLgt printafield01dec18s0001 dec18s0002 dec18s0003 dec18s0004IDLgt printafield04 626300 626300 626300 626300

O template (uma estrutura contendo dados sobre como ler o arquivo) pode ser usado para outros arquivos no mesmo formato No lugar de ter sido criado interativamente poderia ter sido lido de algum arquivo Poderia ter especificado nomes para os campos que seriam mais amigaacuteveis que coias como FIELD11

6489

Arquivos - texto - XML

Extensible Markup Language

Admite grande flexibilidade e por isso pode ter alta complexidade

Valores satildeo colocados dentro de uma estrutura em hieraacuterquica (em uma aacutervore) com os noacutes identificados pelos seus nomes (chaves)

Largamente usado em muitas aacutereas para armazenar conjuntos arbitraacuterios de quaisquer estruturas de dados

A maioria das aplicaccedilotildees usa um formato que eacute um subconjunto do XML especificado por um Schema comumente em um arquivo XML DTD (Document Type Definition)

6589

Arquivos - texto ndash XML ndash exemplos de usos

Armazenamento de dados de aplicaccedilotildees web (comum para exportar importar dados MediaWiki DokuWiki WordPress ADS Lattes etc)

Documentos Office (docx pptx xlsx) OpenOffice (odt opd ods)

Como versotildees de outros formatos FITSML XDF

ldquoScientific Dataset XML NASAs Astronomical Data Center (ADC) sponsors a number of research projects that

use XML for scientific data representation The XML activities at the ADC are sponsored and supported by the NASA Office of Space Science Applied Information Systems Research Program (AISRP)rdquo - httpxmlcoverpagesorgnasa-adchtml

Astronomical Instrument Markup Language (AIML)

SVG ndash Scalable Vector Graphics

Muitas de outras aplicaccedilotildees listadas em httpxmlcoverpagesorgxmlhtmlapplications

6689

Arquivos - texto ndash XML - exemploltxml version=10 gtltDOCTYPE Xdmf SYSTEM Xdmfdtd []gtltXdmf xmlnsxi=httpwwww3org2001XInclude Version=20gt ltDomaingt lt-- Example of Basic Topologies --gt ltInformation Name=Descriptiongt Example of a Polyvertex Topology ltInformationgt ltGrid Name=Polyvertex GridType=Uniformgt ltTopology TopologyType=Polyvertex Dimensions=3 NodesPerElement=3gt ltDataItem Format=XML Dimensions=3 3 NumberType=Floatgt 0 1 2 4 5 6 8 9 10 ltDataItemgt ltTopologygt ltGeometry Type=XYZgt ltDataItem Format=XML Dimensions=4 4 3gt 00 00 00 10 00 00()Que mostra que a interpretaccedilatildeo (parsing) de XML eacute em geral complexa

6789

Arquivos - texto - XML

Haacute muitas bibliotecas de alto niacutevel para fazer o processamento (parsing) e entregar os dados em uma estrutura conveniente

A complexidade em processar XML estaacute em decidir o que fazer com os dados jaacute que os arquivos podem ser muito complexos

As APIs (Application Programming Interfaces) mais comuns para processar XML que satildeo implementadas em muitas linguagens

DOM (Document Object Model) ndash manteacutem todo o conteuacutedo do em uma estrutura de dados (em geral uma aacutervore) em uma variaacutevel (em geral um objeto) Esta pode ser consultada para obter os valores de interesse para os alterar e usada para escrever um arquivo

SAX (Simple API for XML) ndash Interpretador (parser) por objetos O usuaacuterio escreve uma classe herdando da classe SAX provendo os meacutetodos que vatildeo processar os campos agrave medida em que estes satildeo lidos

6889

Arquivos - binaacuterios - FITSFlexible Image Transport System

O formato mais comum para observaccedilotildees astronocircmicas Tambeacutem usado para armazenar quaisquer dados mesmo natildeo relacionados a observaccedilotildees (especialmente tabelas como eacute praacutetica do STSCI)

Conteacutem um (ou mais) cabeccedilalho(s) de texto com metadados (informaccedilotildees sobre os dados como caracteriacutesticas (necessaacuterias para os ler) origem condiccedilotildees em que foram obtidos processamento realizado etc)

SIMPLE = T image conforms to FITS standard BITPIX = 32 bits per data value NAXIS = 2 number of axes NAXIS1 = 1024 NAXIS2 = 1024 BSCALE = 100000 Scaling factor BZERO = 000000 Scaling zero-point TELESCOP= Keck II Telescope SLITNAME= 0041x226 Slit Name SLITPA = 351979 Slit position angle SLITX = 131500 X pixel of the center of the slit LST = 12010446 local apparent sidereal time (()

Depois do cabeccedilalho haacute uma (ou mais) seccedilatildeo(otildees) de dados binaacuterios Costuma(m) ser array(s) 1D (espectros) 2D (imagens) ou 3D (ldquocubos de dadosrdquo)

De inteiros ou reais inteiros satildeo comuns em contagens de instrumentos reais para valores derivados (fluxos intensidades etc)

6989

Arquivos - binaacuterios - FITSNormalmente FITS satildeo lidos escritos por bibliotecas prontas de (relativamente) alto niacutevel usuaacuterio natildeo tem que saber como os dados satildeo armazenados no arquivo nem como os ler escrever Ex (IDL com a biblioteca idlastro)

IDLgt fits_info2dspectrumfits2dspectrumfits has 3 extensionsPrimary header 288 recordsNo dataExtension 1 -- SCI Header 144 records IMAGE ( 1201 1201 )Extension 2 -- ERR Header 72 records IMAGE ( 1201 1201 )Extension 3 -- DQ Header 72 records IMAGE ( 1201 1201 )

IDLgt mydata=readfits(2dspectrumfitsexten_no=1myheader) READFITS Reading FITS extension of type IMAGE READFITS Now reading 1201 by 1201 array

IDLgt extastmyheadermyastIDLgt sz=size(mydatadimensions)IDLgt xy2ad[1sz[0]][1sz[1]]myastcorners_acorners_dIDLgt printcorners_aCorners of the data array from file 2dspectrumfits are at 14487480 33063480

IDLgt printcorners_d -00041264444 00041402222

Obteacutem os dados de coordenadas (WCS) do header

Coloca os dados no array (2D de floats) mydata e o header no array (1D de strings) myheader

Calcula as coordenadas das quinas da imagem atraveacutes do WCS

Provecirc informaccedilotildees sobre o arquivo

7089

Arquivos - binaacuterios - ISIS Cube

Formatos como FITS se adequam muito a ter uma interface de mais alto niacutevel por objetos

Tambeacutem para dados em tabelas FITS muito mais trabalhosos de ler em baixo niacutevel que se adequam muito mais a mapas ou estruturas

Exemplo (de um formato semelhante a FITS ISIS cube)

O objeto ao ser criado lecirc todo o arquivo

cube=pp_editablecube(CM_1553510065_1_ircub)

Meacutetodos fornecem os dados desejados para obter quando necessaacuterio os dados de interesse

Find out the names of the backplanesprintcubegetproperty(backnames)Get the start time of the cubeprintcubegetfromheader(START_TIME)2007-084T100057286Z

Valores no cabeccedilalho podem ser convenientemente fornecidos como um mapa

header=cubeheader_as_hash()printheader[START_TIME]2007-084T100057286Z

7189

Arquivos - binaacuterios ndash ISIS Cube

Os dados satildeo fornecidos como arraysMake a contour plot of the latitudesc=contour(cubegetsuffixbyname(LATITUDE))Get the band with wavelength nearest to 21 (in the units used in the cube)selband=cubegetbandbywavelength(21wavelengths=selwavs)

Interfaces por overload tornam o acesso ainda mais conveniente

selband=cube[21]

selwavs=cube[21]

Retorna um array com a banda de comprimento de onda mais proacuteximo de 21 (microm)

Retorna o comprimento de onda mais proacuteximo de 21 (microm) da banda retornada acima

7289

Arquivos - binaacuterios ndash ISIS Cube Alteraccedilotildees feitas ao conteuacutedo satildeo automaticamente refletidas em todos os

lugares (cabeccedilalho em particular) afetados mantendo o objeto vaacutelido que pode depois ser gravado em um novo arquivo

IDLgt printcubelinescubesamplescubebands 64 64 256

IDLgt helpcubecoreltExpressiongt FLOAT = Array[64 64 256]

IDLgt cubecore=dblarr(100100256)

A linha acima natildeo eacute uma atribuiccedilatildeo eacute uma invocaccedilatildeo de meacutetodo Eacute equivalente acubesetpropertycore=dblarr(100100256)

Eacute o trabalho da funccedilatildeo setproperty decidir se a propriedade passada (core) faz sentido e se fizer fazer todo o trabalho necessaacuterio a esta mudanccedila Para o usuaacuterio eacute tudo automaacutetico e os dados da classe satildeo vaacutelidos o tempo todo

IDLgt helpcubecoreltExpressiongt DOUBLE = Array[100 100 256]

IDLgt printcubelinescubesamplescubebands 100 100 256

IDLgt cubesaveCM_1553510065_1_ir_editedcub

7389

Arquivos - binaacuterios ndash NetCDF e HDF5

Network Common Data Form e Hierarchical Data Format

Os dois uacutenicos formatos bem estabelecidos para dados cientiacuteficos geneacutericos

Armazenam dados como vaacuterias variaacuteveis e seus metadados Para cada variaacutevel haacute (ou pode haver) os metadados

Nome Dimensotildees (do array) Unidades Comentaacuterios

Ambos permitem arrays multidimensionais

Apenas HDF5 permite estruturas (daiacute vem a hierarquia)

Autodocumentados qualquer software que saiba ler um destes formatos lecirc qualquer arquivo sem precisar de conhecimento preacutevio sobre como o arquivo foi gerado

Muito bem suportados em bibliotecas padratildeo e natildeo padratildeo em softwares interativos e visualizadores (inclusive plugins para navegadores)

httpwwwunidataucaredusoftwarenetcdf httpenwikipediaorgwikiHdf5

NetCDF eacute mais simples de usar por natildeo ter hierarquia dando menos trabalho para ler e escrever dados Se hierarquia natildeo eacute necessaacuteria eacute mais conveniente de usar que HDF5

7489

Arquivos - binaacuterios - NetCDF e HDF5Haacute tambeacutem o formato CDL uma versatildeo ASCII do NetCDF A biblioteca padratildeo do NetCDF inclui conversores entre estes formatos

$ ncdump -h refspec_g01_0ncnetcdf refspec_g01_0 dimensions nlay = 51 nwn = 400 nleg = 33 numu = 2 nlev = 52 nphi = 3 ngas = 2 nwnc = 1 scal = 1 v3 = 3 dnl = 1 nk = 1 tdisr = UNLIMITED (0 currently) na = 16

variables float alb(nwn) float z(nlay) float t(nlay) float p(nlay) float wl(nwn) float iof(nwn) float mtau(nwn) float htau(nwn) float hctaus(nwn) float gtau(nwn) float outcos(scal) float phi(nleg) float phic(scal) float umu(numu) float flux(v3 nwn nlev) float mix(nlay ngas) float c(nlay) float psat(nlay) float ga(nwnc) float wlc(nwnc) float inc(scal) int dm(scal) int ord(scal) float fbeam(scal) float wn(nwn) float tautot(nwn nlay) float htaus(nwn nlay) float htaux(nwn nlay) float taug(nwn nlay) float phase(nwn nlay nleg) float ssa(nwn nlay) float uu(nwn nphi nlev numu) float u0u(nwn nlev numu) float tray(nwn nlay) float gtauo(tdisr nwn nlay)

Haacute 14 variaacuteveis usadas como dimensotildees para as 35 variaacuteveis que satildeo arrays

Ex alb(nwn) indica que alb eacute um array 1D de nwn elementos

nwn estaacute armazenado como uma das dimensotildees e eacute 400 portanto alb tem 400 elementos

Parte do conteuacutedo de um arquivo NetCDF em formato CDL (gerado pelo programa ncdump)

7589

Arquivos - binaacuterios - NetCDF e HDF5Conteuacutedo daquele arquivo visualizado com o ncview (acompanha a biblioteca NetCDF padratildeo)

7689

Arquivos - binaacuterios - NetCDF e HDF5O conteuacutedo de todo o arquivo pode ser lido facilmente com as bibliotecas disponiacuteveis e armazenado em contecirciners convenientes Usando um objeto que gera um resultado um pouco mais conveniente

IDLgt h=pp_readncdf(refspec_g01_0nchash)IDLgt printhvar_dims ltObjHeapVar229(HASH)gtvars ltObjHeapVar152(HASH)gtdims ltObjHeapVar118(HASH)gt

IDLgt printh[vars]T 173203 175459 175848 176001 175975 Z 431869 418858 406067 393403 380464 FLUX 300660 145536 0705180 0341669 0165532 PHASE 100000 0779034 0660858 0542052 0449983 TAUTOT0694377 0693420 0693474 0693540 0693636()

IDLgt help(h[vars])[TAUTOT]ltExpressiongt FLOAT = Array[51 400]

IDLgt print(h[var_dims])[TAUTOT]NLAY NWN

IDLgt print(h[dims])[(h[var_dims])[TAUTOT]]NLAY 51NWN 400

7789

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5)

Visualizaccedilatildeo da variaacutevel selecionada

Metadados e alguns valores da variaacutevel selecionada

Variaacutevel a ser criada com o conteuacutedo desta variaacutevel do arquivo

Hierarquia das variaacuteveis do arquivo

7889

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5) Imported variable az

IDLgt helpaz Structure ltd5723f38gt 13 tags length=448 data length=444 refs=1 _NAME STRING az _ICONTYPE STRING binary _TYPE STRING DATASET _FILE STRING INTENSI_test_409OUTh5 _PATH STRING _DATA DOUBLE Array[38] _NDIMENSIONS LONG 1 _DIMENSIONS ULONG64 Array[1] _NELEMENTS ULONG64 38 _DATATYPE STRING H5T_FLOAT _STORAGESIZE ULONG 8 _PRECISION LONG 64 _SIGN STRING

IDLgt printaz_data 00000000 10000000 20000000 30000000 40000000 50000000 60000000 80000000 ()

7989

Arquivos - binaacuterios - imagens

JPEG JPEG200 TIFF GeoTIFF etc

Os formatos comuns de imagens satildeo bem suportados em muacuteltiplas plataformas para uso dentro de programas e interativamente

Alguns formatos tecircm opccedilatildeo de compressatildeo com perda eou sem perda

Armazenam imagens como arrays 2D ou 3D (3D frequumlentemente limitado a 3 ou 4 em uma das dimensotildees uma imagem em 3 ou 4 bandas) de inteiros ou (em alguns formatos) reais

Alguns formatos permitem armazenar metadados para caracterizar as imagens armazenadas

JPEG2000 e GeoTIFF (um subconjunto de TIFF) comuns em astronomia e aacutereas proacuteximas

8089

Arquivos - binaacuterios ndash imagens ndash exemplo (IDL)IDLgt printquery_tiff(issmap_2009tiffinfogeotiff=geo) 1

IDLgt helpinfo Structure ltd4eca4b8gt 18 tags length=144 data length=132 refs=1 CHANNELS LONG 4 DIMENSIONS LONG Array[2] IMAGE_INDEX LONG 0 NUM_IMAGES LONG 1 PIXEL_TYPE INT 1 TYPE STRING TIFF BITS_PER_SAMPLE LONG 8 POSITION FLOAT Array[2] RESOLUTION FLOAT Array[2] UNITS LONG 2 TILE_SIZE LONG Array[2] DESCRIPTION STRING ISS (2009) DATE_TIME STRING 20100218 012436()

IDLgt helpgeo Structure ltd4efa1b8gt 10 tags length=264 data length=262 refs=1 MODELPIXELSCALETAG DOUBLE Array[3] MODELTIEPOINTTAG DOUBLE Array[6 4] GEOGRAPHICTYPEGEOKEY INT 4035 GEOGSEMIMAJORAXISGEOKEY DOUBLE 25750000 GEOGSEMIMINORAXISGEOKEY DOUBLE 25750000()

IDLgt myimage=read_tiff(issmap_2009tiff) Lecirc a imagem para o array myimage

Obteacutem informaccedilotildees sobre o arquivo

8189

Arquivos - binaacuterios ndash formatos nativosLinguagens como IDL R Python Java tecircm seu formato nativo binaacuterio acessado em alto niacutevel Basta mandar salvar ler variaacuteveis no do arquivo a biblioteca padratildeo automagicamente faz todo o trabalho de decidir como gravar ler os dados

Conveniente de usar na proacutepria linguagem Mas raramente existem bibliotecas para ler gravar o formato nativo de uma linguagem a partir de outra Ex (IDL)

IDLgt savefile=2dspectrumsavmydatamyheadercorners_dcorners_averbosecompress SAVE Portable (XDR) compressed SAVERESTORE file SAVE Saved variable MYDATA SAVE Saved variable MYHEADER()

Pode ser lido com apenas (haacute formas mais elaboradas)

IDLgt restore2dspectrumsavverbose RESTORE Portable (XDR) compressed SAVERESTORE file RESTORE Save file written by ltunknowngtltunknowngt Thu Jan 27 191422 2011 RESTORE IDL version 801 (linux x86_64) RESTORE Restored variable MYDATA RESTORE Restored variable MYHEADER()

IDLgt helpmydatamyheadercorners_dcorners_aMYDATA FLOAT = Array[1201 1201]MYHEADER STRING = Array[144]()

8289

Arquivos - processamento em baixo niacutevel

Nem sempre um formato padratildeo eacute a melhor escolha para o problema

Nem sempre haacute escolha (pode-se ter que trabalhar com arquivos que jaacute foram escritos em algum formato proprietaacuterio)

Agraves vezes o formato eacute padratildeo mas natildeo haacute bom suporte a ele disponiacutevel

Em todos estes casos eacute necessaacuterio escrever rotinas em baixo niacutevel que vatildeo ler processar diretamente o conteuacutedo do arquivo

Preferencialmente criando interfaces de alto niacutevel para o programa que vai as usar

8389

Arquivos - processamento em baixo niacutevel - texto

Tomando o exemplo anterior onde as colunas eram de diferentes tipos

NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS dec18s0001 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0002 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0003 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 FLAT 5408757812500 460000 5 dec18s0004 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 DARK 5408757812500 460000 5

A forma mais simples de o ler diretamente eacute definir uma estrutura para receber cada linha e um array destas estruturas para receber todo o arquivo Ex (IDL)

IDLgt record=namecalmpos0filnameechlpos0d0disppos0d0targnameposdirclassmjd_obsitime0d0coadds0IDLgt nlines=file_lines(filesearch_scamtxt)IDLgt mydata=replicate(recordnlines-1)IDLgt header=

Depois de definidas as variaacuteveis que vatildeo receber os dados o arquivo pode ser lido

IDLgt openrunitfilesearch_scamtxtget_lunIDLgt readfunitheaderIDLgt readfunitmydataformat=(A14I8A15F104F104A18A19A15F158F105I15)IDLgt free_lununit

A gravaccedilatildeo de um arquivo texto poderia ser feita de forma semelhante apenas trocando openr por openw (abrir o arquivo para gravaccedilatildeo natildeo leitura) e readf por printf

O arquivo eacute aberto em uma unidade (unit) usada para especificar de onde eacute feita a leitura

Ao final o arquivo eacute fechado

8489

Arquivos - processamento em baixo niacutevel - texto

O que resulta em

IDLgt printheader NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS

IDLgt helpmydataMYDATA STRUCT = -gt ltAnonymousgt Array[4]

IDLgt helpmydata[0] Structure ltd5e38f68gt 11 tags length=136 data length=124 refs=3 NAME STRING dec18s0001 CALMPOS INT 0 FILNAME STRING NIRSPEC-5-AO ECHLPOS DOUBLE 62630000 DISPPOS DOUBLE 36450000 TARGNAME STRING HD85258 POSDIR STRING NIRSPEC-5-AOp1 CLASS STRING STAR MJD_OBS STRING 54087574 ITIME DOUBLE 10000000 COADDS INT 1

Este caso eacute mais complicado que os mais comuns por haver colunas de strings

Se todas fossem de nuacutemeros natildeo teria sido necessaacuterio especificar o formato explicitamente As colunas teriam sido adivinhadas pela biblioteca que lecirc o arquivo Poderia ter sido lido escrito soacute com um array de nuacutemeros sem estruturas

8589

Arquivos - processamento em baixo niacutevel - binaacuterio

Formatos binaacuterios podem ser definidos de qualquer forma O arquivo eacute apenas um conjunto de bytes Cabe ao software saber como os interpretar

Uma escolha comum para que sejam autodocumentados eacute incluir um cabeccedilalho de texto informando as caracteriacutesticas dos dados necessaacuterias para os ler

Ex (IDL) criar um arquivo que armazene um array de doubles com um cabeccedilalho informando as dimensotildees para que o programa que o lecirc saiba como ler os dados

Inventa dados e abre o arquivo

IDLgt data_to_write=dindgen(34)IDLgt openwunitbinary_exampledatget_lun

Escreve as dimensotildees como texto

IDLgt printfunitdimensions of the double array stored belowIDLgt printfunitsize(data_to_writedimensions)

Escreve os dados binaacuterios

IDLgt writeuunitdata_to_write

Fecha o arquivo

IDLgt free_lununit

Escreve em binaacuterio (write unformatted)

8689

Arquivos - processamento em baixo niacutevel - binaacuterio

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

dimensions of the double array stored below 3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

8789

Arquivos - processamento em baixo niacutevel - binaacuterioA leitura deste arquivo eacute igualmente simples

IDLgt header=IDLgt dims=[00]IDLgt openrunitbinary_exampledatget_lun

Lecirc as dimensotildees (armazenadas como texto)

IDLgt readfunitheaderIDLgt readfunitdims

Lecirc a parte binaacuteria depois de saber as dimensotildees

IDLgt data_read=dblarr(dims)IDLgt readuunitdata_read

Fecha o arquivo

IDLgt free_lununit

Verifica que os dados foram gravados e lidos corretamente

IDLgt printarray_equal(data_to_writedata_read) 1

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Lecirc dados binaacuterios (read unformatted)

8889

Sumaacuterio

5 ndash Slides em httpwwwppenteadonetpeapea04_strings_iopdf Strings Expressotildees regulares Arquivos

httpwwwppenteadonetpea

8989

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89

Strings - Onde haacute suporte a Unicode em programaccedilatildeo

Linguagens variam muito

Desconhecem Unicode (soacute usam ASCII) C Fortran

Usam nativamente ASCII (inclusive no coacutedigo-fonte) mas tecircm tipos para strings Unicode e ou funccedilotildees para processar Unicode (em variados graus) C C++ IDL R

Usam nativamente Unicode (inclusive no coacutedigo-fonte) e tecircm bom suporte a strings Unicode Java Python Perl

Muitas vezes (mesmo quando Unicode pode ser usado em coacutedigo-fonte) caracteres Unicode satildeo escritos atraveacutes de ASCII com coacutedigos de escape para coacutedigos Unicode Exs

IDLgt p=plot(testtitle=Z(00C5222B))

C C++ Java Python u2207

ReferecircnciasCharacters vs byteshttpwwwtbrayorgongoingWhen200x20030426UTFThe absolute minimum every software developer absolutely positively must know about Unicode and character sets (no excuses)httpwwwjoelonsoftwarecomarticlesUnicodehtmlUnicode character searchhttpwwwfileformatinfoinfounicodecharsearchhtm

em IDL produz intÅ

produz nabla

1789

Strings - processamento baacutesico

Operaccedilotildees mais fundamentais que costumam ser suportadas em ldquotodasrdquo as linguagens bibliotecas padratildeo (exemplos usando sintaxe de IDL)

Atribuiccedilatildeo de literais

IDLgt a=some

IDLgt helpaA STRING = some

IDLgt printasome

Concatenaccedilatildeo

IDLgt b=a+ string

IDLgt helpbB STRING = some string

1889

Strings - processamento baacutesico

Valor loacutegico

String vazio (null string) eacute falso o resto eacute verdadeiro

IDLgt c=

IDLgt if c then printc is not empty string else printc is null string ()c is null string ()

IDLgt c=a

IDLgt if c then printc is not empty string else printc is null string ()c is not empty string

Espaccedilo natildeo eacute o mesmo que string vazio

IDLgt c=

IDLgt if c then printc is not empty string else printc is null string ()c is not empty string

1989

Strings - processamento baacutesico Comparaccedilotildees

IDLgt helpabA STRING = someB STRING = some string

IDLgt printb eq a 0

IDLgt printb gt a 1

IDLgt c=[ab9Some somesome other string]

IDLgt printc[sort(c)]format=(A) some9Somesomesome other stringsome string

IDLgt printa eq A 0

IDLgt printstrcmp(aAfold_case) 1

Comparaccedilotildees de ldquotamanhordquo (maior menor etc) satildeo comparaccedilotildees pela ordem de codificaccedilatildeo (ldquoalfabeacuteticardquo)

Algumas linguagens permitem definir o ordenamento (como considerar maiuacutesculasminuacuteculas letras com acentos nuacutemeros e siacutembolos) Exs Python C++ Java Perl

2089

Strings - processamento baacutesico Substrings

IDLgt printstrmid(abcdefg32)de

Algumas linguagens nativamente suportam iacutendices para indicar substrings C C++ Fortran Python Ex (Python)

gtgtgt s=abcdegtgtgt print(s[25])cde

Outras permitem que sejam definidos iacutendices por objetos strings

Busca de caracteres ou substrings

IDLgt printstrpos(abcdefgd) 3

IDLgt printstrpos(abcdefgj) -1

IDLgt printstrpos(abcdefgbc) 1

2189

Strings - processamento baacutesico

Outros

IDLgt printstrlen(1234567) 7

IDLgt printstrlen(1234567 ) 8

IDLgt printstrlen( 1234567 ) 9

IDLgt helpstrtrim( 1234567 2)ltExpressiongt STRING = 1234567

IDLgt helpstrtrim( 1234567 1)ltExpressiongt STRING = 1234567

IDLgt helpstrtrim( 1234567 0)ltExpressiongt STRING = 1234567

IDLgt printstrupcase(abcdEF)ABCDEF

IDLgt printstrlowcase(abcdEF)abcdef

Medindo quantos caracteres tem o string inclui espaccedilos em branco

Remoccedilatildeo dos brancos agrave esquerda agrave direita ou dos dois lados

2289

Strings - conversatildeo de outros tipos para strings

Eacute uma das operaccedilotildees mais comuns para gerar textos informativos e nomes escrever arquivos (aquivos texto discutidos adiante) etc

Eacute natildeo trivial jaacute que a conversatildeo pode ser feita de muitas formas diferentes

Para tipos fundamentais sempre haacute uma conversatildeo default tanto criando um string como usando algo tipo print (para strings terminal ou arquivos)

Todo comando tipo print (print printf sprintf string write etc) e toda escrita para arquivos texto eacute uma conversatildeo para string (terminais e arquivos texto soacute conteacutem strings)

2389

Strings - conversatildeo de outros tipos para strings

Exemplos de conversotildees (IDL)

IDLgt print[-109] -1 0 9

IDLgt print1d01B10 10000000 1 100000

IDLgt helpstring(1d01B10)ltExpressiongt STRING = 10000000 1 100000

IDLgt printfunitdblarr(343)

Tipos mais elaborados podem ou natildeo ter uma forma predefinida Com objetos eacute comum ser possiacutevel definir a conversatildeo (stringification) ao criar a classe

IDLgt h=hash(a109[01]18b)

IDLgt printh9 0 1a 100000180000 b

Strings

Coloca strings em um arquivo (adiante)

Strings criados por um meacutetodo da classe hash satildeo uma forma de representar o hash

2489

Strings - conversatildeo de outros tipos para strings

Algumas linguagens (Python IDL) tecircm mais de uma forma default de gerar strings Em Python uma forma eacute executaacutevel a outra eacute mais legiacutevel

In [30] x=arange(12)reshape(43)

In [31] print(x)[[ 0 1 2] [ 3 4 5] [ 6 7 8] [ 9 10 11]]

In [32] xOut[32]array([[ 0 1 2] [ 3 4 5] [ 6 7 8] [ 9 10 11]])

In [33] y=array([[ 0 1 2] [ 3 4 5] [ 6 7 8] [ 9 10 11]])

In [37] print(array_equal(xy))True

String mais legiacutevel

String executaacutevelPode ser usado para criar um objeto equivalente

2589

Strings ndash formataccedilatildeo expliacutecita

A formataccedilatildeo pode ser especificada se a conversatildeo default natildeo eacute adequada para definir a conversatildeo em um novo tipo

Cada linguagem tem sua sintaxe para formataccedilatildeo

Haacute dois estilos semelhantes em vaacuterias linguagens

Ambos os estilos satildeo sintaxes diferentes para a mesma ideacuteia Um coacutedigo especifica o tipo de dado sendo passado (inteiro real etc) e detalhes de como seraacute feito o string (largura do campo diacutegitos decimais alinhamento etc)

2689

Strings ndash formataccedilatildeo expliacutecita

Estilo Fortran

IDL

IDLgt print1d0+1d-9 10000000

IDLgt print1d0+1d-9format=(E1610)10000000010E+00

IDLgt printx=1d0+1d-9format=(A0F1613)X= 10000000010000

Estilo C (ldquoprintfrdquo)

IDL

IDLgt printformat=(x=1610e)1d0+1d-9x=10000000010e+00

Python

In [20] print(x=1610e (1e0+1e-9))x=10000000010e+00

Nenhum formato expliacutecito (default)

2789

Strings - formatos tipo Fortran

(apenas o principal ver documentaccedilatildeo para detalhes)

Ex (IDL)

IDLgt printx=1d0+1d-9format=(A0F1613)X= 10000000010000

Tambeacutem haacute modificadores para especificar alinhamento (-) se deve haver (ou ser suprimido) avanccedilo para a pŕoxima linha posiccedilatildeo dentro do campo etc

Coacutedigo Significado Exemplo(s)

A String (A) (10A)

I Inteiro decimal (I) (10I)(-2I)

B Inteiro binaacuterio (B) (10B)

Z Inteiro hexadecimal (Z) (10Z)

O Inteiro octal (O) (10O)

F Real ponto fixo (F)(F52)

E D Real ponto flutuante (E)(D1610)

G Real ponto fixo ou flutuante de acordo com o valor (G)(G10)

ldquordquo String literal (ldquox=rdquoI10)

X Caracteres em branco (A10XI)

2889

Strings - formatos tipo C (printf)(apenas o principal ver documentaccedilatildeo para detalhes)String com campos a serem substituiacutedos por valores (passados adiante) marcados por coacutedigos com

Ex (Python)In [20] print(x=1610e (1e0+1e-9))x=10000000010e+00

Haacute modificadores para especificar alinhamento como preencher o espaccedilo que sobra (espaccedilos zeros etc) para imprimir o sinal + etc

Coacutedigo Significado (tipo) Exemplo(s)

di Inteiro decimal (int) d 5d +05d

u Inteiro decimal sem sinal (unsigned int) u 7u

fF Real em ponto fixo (double float) f 136f

eE Real em ponto flutuante (double float) e 1610e

gG Real em ponto fixo ou flutuante decidido pelo valor (double float)

g 73G

xX Inteiro sem sinal hexadecimal (unsigned int) x 10X

o Inteiro sem sinal octal (unsigned int) o 5o

s String (string) s 10s

c Caractere (char) c

p Ponteiro - estilo C - (void ) p

literal

2989

Strings - conversatildeo de strings para outros tipos

Para gerar dados a partir de strings datas identificadores pedaccedilos de nomes valores numeacutericos armazenados em strings

Tambeacutem sempre haacute conversotildees default para os tipos baacutesicos onde o intepretador programa faz o possiacutevel para entender o string como um valor daquele tipo

Tipicamente eacute feito por casts (funccedilotildees de conversatildeo) reads (de strings ou arquivos texto (arquivos texto satildeo strings)) construtores de objetos ou implicitamente

3089

Strings - conversatildeo de strings para outros tipos - impliacutecitas

Exs (IDL)

IDLgt helpfix([17 17 171 -17 9 8])ltExpressiongt INT = Array[5]

IDLgt printfix([17 17 171 -17 9 8]) 17 17 17 -17 9

IDLgt printdouble([17 17 171 -17 9 8]) 17000000 17000000 17100000 -17000000 90000000

IDLgt readfunitabcd

IDLgt a=0d0IDLgt b=00IDLgt c=0IDLgt reads171d0 189d0 -9abcIDLgt helpabcA DOUBLE = 17100000B FLOAT = 189000C INT = -9

Converte o conteuacutedo do string para os tipos das variaacuteveis abcd (explicado adiante)

3189

Strings - conversatildeo de strings para outros tipos

Quando o default natildeo eacute suficiente (ou quando escrevendo o conversor em uma classe) costuma ser possiacutevel o fazer com formatos semelhantes aos formatos para gerar strings Exs (IDL)

IDLgt a=0d0IDLgt b=00IDLgt c=0IDLgt reads171d0 something 189d0-9abc READS Input conversion error Unit 0 File ltstdingt Error occurred at $MAIN$ Execution halted at $MAIN$

Natildeo funcionou porque sozinho ele natildeo conseguiu saber o que fazer com o ldquosomethingrdquo Usando um formato especiacutefico

IDLgt reads171d0 something 189d0-9 abcformat=(D6111XD611XI)

IDLgt helpabcA DOUBLE = 17100000B FLOAT = 189000C INT = -9

Exemplos mais complicados adiante (arquivos texto)

Variaacuteveis tecircm que ser definidas para informar para que tipo seraacute feita a conversatildeo default

3289

Strings - processamento natildeo baacutesicoOperaccedilotildees importantes e muito necessaacuterias mas que natildeo satildeo suportadas em todas as linguagens bibliotecas padratildeo

Testes (ex IDL)

IDLgt str=[afitsaFITSafitsaabfitsabcfits]

IDLgt printstrmatch(strfits) 1 0 0 1 1

IDLgt printstrmatch(strfitsfold_case) 1 1 0 1 1

IDLgt printstrmatch(strfitsfold_case) 1 1 1 1 1

IDLgt printstrmatch(strfits) 1 0 0 0 0

IDLgt printstrmatch(strfits) 0 0 0 1 0

3389

Strings - processamento natildeo baacutesico

Operaccedilotildees importantes e muito necessaacuterias mas que natildeo satildeo suportadas em todas as linguagens bibliotecas padratildeo

Separaccedilatildeo de partes (Ex IDL)

IDLgt printstrsplit(2011- 131 -extract)format=(A)2011131

Processamento de nomes de arquivos diretoacuterios (Ex IDL)

IDLgt printfile_dirname(some_directoryanother_directorysome_filetxt)some_directoryanother_directory

IDLgt printfile_basename(some_directoryanother_directorysome_filetxt)some_filetxt

IDLgt printfile_basename(another_directorysome_filetxttxt)+_alteredtxtsome_file_alteredtxt

3489

Strings - processamento natildeo baacutesico

Codificaccedilotildees (Ex Python 3)

gtgtgt s=infinite money infinNeuro sign

gtgtgt print(s)infinite money infineuro

gtgtgt print(ascii(s))infinite money u221eu20ac

gtgtgt print(sencode(utf-8))binfinite money xe2x88x9exe2x82xac

3589

Strings - processamento natildeo baacutesico

Perl eacute a linguagem mais avanccedilada para processamento de strings tem suporte nativo a muitas outras operaccedilotildees a semacircntica da linguagem eacute voltada principalmente para processar strings expressotildees regulares (de vaacuterios tipos) natildeo satildeo strings fazem parte da semacircntica

Ex (sem o objetivo que seja compreensiacutevel apenas para indicar o estilo)

Ler um arquivo contendo campos com nomes separados de valores por ()

temperature 10008name some modelx_dimension 100y_dimension 100z_dimension 50()

Armazenado-o em um mapa O que pode ser feito com apenas

While (ltgt) Loop over input linesPut pre-colon text into $1 post-colon into $2 if (m (S+) (+) ) Use $1 as key $2 as value $file_data$1 = $2

3689

Expressotildees regulares - definiccedilatildeo

Expressotildees regulares (regular expressions regex) satildeo a mais poderosa ferramenta para fazer buscas e separar substrings

Regex satildeo uma linguagem com o uacutenico objetivo de especificar propriedades de strings

Implementadas em graus diferentes em todas as linguagens modernas e modernizadas facilita encontrar uma expressatildeo jaacute pronta pois satildeo quase iguais em qualquer linguagem

Estatildeo na biblioteca padratildeo em IDL Python R Perl

Em C++ e Java em bibliotecas comuns (Boost Jregex)

Para que servem

Uma expressatildeo regular especifica propriedades de strings

O interpretador de expressotildees regulares (regular expression engine) recebe a expressatildeo e o string a analisar e determina se o string corresponde (matches) agrave expressatildeo regular

Em alguns casos o interpretador pode tambeacutem informar que parte(s) do string corresponde(m) a que parte(s) da expressatildeo regular e realizar processamentos com estas partes

3789

Expressotildees regulares ndash exemplos de usos Separar partes de strings

Encontrar linhas em arquivos que tenham nomes valores e comentaacuterios e separar estes pedaccedilos

Escalar com comentaacuterio

SLITPA = 351979 Slit position angle

Array 1D sem comentaacuterio (se extendendo por vaacuterias linhas)

BAND_BIN_CENTER = (03505400358950036629003732200379490 0387900104598)

Escalares em diferentes formatos

Total Mechanical Luminosity 15310E+03resources_usedwalltime=005603

Pedaccedilos de nomes

6063 17836E-20 2456 T FeIX((3Pe)3d(2PE)4p_1Po-3s2_3p6_1Se)

Datas separando ano mecircs dia hora (em vaacuterios formatos diferentes)

DATE-OBS= 2006-12-18 universal date of observationDATE_TIME = 2010-07-19T161032START_TIME = 2006-182T225102850Z

3889

Expressotildees regulares ndash exemplos de usos

Separar partes de strings Separar partes de nomes de arquivos (por significarem algo como identificar o

conteuacutedo)

specdec18s0041fitsscamdec18i0054fits15_7_mts_hmpixselh_mr15sav15_7_mts_hwpixselh_mr15sav16_3_mts_hwpixselb_mr16savreadmodel5l_-1_000010000_10000_r05_030_08196_0100000_005000000_1000eps

Determinar se um string eacute um nuacutemero (inteiro real fixo flutuante)

Encontrar identificadores Exs nomes de cataacutelogos endereccedilos HTTPFTP endereccedilos de email

Separar campos em arquivos sendo lidos onde as linhas natildeo tecircm a mesma formataccedilatildeo algumas linhas com colunas separadas por espaccedilos outras por tabs outras por

siacutembolos ignorando linhas de comentaacuterios e linhas vazias

3989

Expressotildees regulares - usoEx (IDL) encontrar nomes de arquivos com algumas propriedades

IDLgt printfilesformat=(A)CM_1477475933_1_viscubCM_1477476864_1_ircubCM_1477476864_1_irgcubCM_1477476864_1_viscubCM_1477477826_1_ircubCM_1477477826_1_irgcubCM_1477477826_1_viscubmosaic2cub

IDLgt printstregex(files+irgcubboolean) 0 0 1 0 0 1 0 0

A expressatildeo regular eacute +irgcub Especifica uma ou mais ocorrecircncias seguidas (+) de qualquer caractere () seguido de uma ocorrecircncia de irgcub (o ponto vem precedido do caractere de

escape () para ser entendido literalmente como um ponto e natildeo como o seu significado especial (qualquer caractere)

Esta aplicaccedilatildeo do interpretador (stregex) retorna um valor Booleano (verdadeirofalso) para cada elemento do string passado (files) que informa se aquele elemento correspondia agravequela expressatildeo regular

Este eacute um exemplo artificial Seria mais faacutecil ter usado strmatch(filesirgcub)

4089

Expressotildees regulares - uso

Em casos como este tipicamente o resultado de stregex seria usado como filtro para selecionar apenas os elementos do array de strings que satisfazem agravequela expressatildeo regular

IDLgt w=where(stregex(files+irgcubboolean)null)IDLgt printfiles[w]format=(A)CM_1477476864_1_irgcubCM_1477477826_1_irgcub

Ex (IDL) Determinar que strings conteacutem uma data no formato yyyy-mm-dd

IDLgt strs=[201002012010-02-012010-2-1aaaa-mm-ddT2010-02-01J]IDLgt printstregex(strs[0-9]4-[0-9]2-[0-9]2boolean) 0 1 0 0 1

Esta expressatildeo regular especifica quatro repeticcedilotildees (4) de diacutegitos (caracteres na faixa [0-9]) seguido de um (-) seguido de duas repeticcedilotildees (2) de dois diacutegitos ([0-9]) seguido de um (-) seguido de duas repeticcedilotildees (2) de dois diacutegitos ([0-9])

Uma expressatildeo regular apenas um pouco mais elaborada poderia corresponder aos 3 formatos de data no array acima E poderia se impedir que a uacuteltima (com outros caracteres antes e depois da data) seja aceita

4189

Expressotildees regulares - regras - caracteres ldquonormaisrdquo

Uma expressatildeo regular usa caracteres ldquonormaisrdquo e especiais para especificar o que se vai procurar na ordem em que aparecem na expressatildeo

Se um caractere eacute normal (natildeo eacute um dos especiais mostrados adiante) ele especifica uma ocorrecircncia daquele caractere

Ex J eacute uma expressatildeo regular que corresponde a qualquer string onde ocorra J Jaacute JA soacute corresponde a strings que tenham JA dentro

Exs (IDL)

IDLgt strs=[JJJJJJaJAjaJa]

IDLgt printstregex(strsJboolean) 1 1 1 0 1

IDLgt printstregex(strsJAboolean) 0 0 1 0 0

4289

Expressotildees regulares - regras - caracteres especiaisCaracteres especiais tecircm outros significados Para significar literalmente aquele caractere deve ser escapado (escaped) com um

Siacutembolo significado exemplo Corresponde(m) Escape o caractere seguinte deve ser interpretado

literalmente natildeo como especial aa

Qualquer caractere ab ajb aab abb jafbc

+ Uma ou mais repeticcedilotildees do que vem agrave esquerda a+b ab aab bab baabh

() Subexpressatildeo para agrupar termos afetados por um caractere especial (como parecircnteses em notaccedilatildeo matemaacutetica)

(ab)+c abc ababc dabababcg

Zero ou mais repeticcedilotildees dos termos agrave esquerda ab abbaab caaabg

Zero ou uma repeticcedilatildeo dos termos agrave esquerda ab b ab cabd cbd

| Alternaccedilatildeo qualquer um dos dois agrave esquerda a|bc ac bc jacd jbcd

n Exatamente n repeticcedilotildees do termo agrave esquerda a2b aab daaabg

n1n2 De n1 a n2 repeticcedilotildees do termo agrave esquerda a12b ab aab aaab gaaabbd

^ Acircncora (no comeccedilo) nada agrave esquerda ^ab ab abb

$ Acircncora (no fim) nada agrave direita ab$ abaab

[] Conjunto de valores (explicado adiante)

4389

Expressotildees regulares - regras - conjuntos de valores

[] denota um conjunto de valores que pode conter

Uma lista de coisas que devem corresponder Ex [abc] signfica qualquer caractere no conjunto abc Correspondem a esta

expressatildeo abcabha

Uma lista de coisas que natildeo podem corresponder [^abc] significa qualquer coisa que natildeo seja a b ou c Correspondem a esta

expressatildeo d jgs gg

Faixas de valores [0-9] signfica qualquer diacutegito [0-9a-zA-Z] significa qualquer diacutegito ou letra

Classes de valores como algumas faixas e outros conjuntos ocorrem com muita frequumlecircncia haacute nomes

especiais para eles Estes (em IDL) vecircm entre [] ex [[digit] significa o mesmo que [0-9]

4489

Expressotildees regulares - regras - classes de valores

Classe signficado

alnum Caracteres alfanumeacutericos 0-9a-zA-Z

alpha Caracteres alfabeacuteticos a-zA-Z

cntrl Caracteres de controle ASCII (natildeo visiacuteveis coacutedigos 1 a 31 e 127)

digit Diacutegitos (decimais) 0-9

graph Caracteres visiacuteveis ASCII 33 a 126 (natildeo inclui o espaccedilo)

lower Letras minuacutesculas a-z

print Caracteres ldquoimprimiacuteveisrdquo (visiacuteveis e o espaccedilo) ASCII 32 a 126

punct Caracteres de pontuaccedilatildeo $amprsquo()+-lt=gt[]^_lsquo|~

space Os caracteres ldquoem brancordquo (blank) espaccedilo tab tab vertical CR LF (ASCII 32 e 9-13)

upper Letras maiuacutesculas A-Z

xdigit Diacutegitos hexadecimais 0-9A-Fa-f

lt Comeccedilo de palavra (palavra definida como sequumlecircncia de coisas natildeo space)

gt Fim de palavra (palavra definida como sequumlecircncia de coisas natildeo space)

Estas satildeo apenas as principais Algumas implementaccedilotildees tecircm muito mais (em particular nas linguagens que usam Unicode nativamente)

4589

Expressotildees regulares - exemplos

Determinar se strings satildeo nuacutemeros (Ex IDL)

IDLgt str=[9-18 875-812-45913E9-98d7a188d032f5]

Inteiros

IDLgt intexpr=^[-+][0-9]+$

IDLgt printstregex(strintexprboolean) 1 1 0 0 0 0 0 0 0 0

Ponto flutuante

IDLgt fpexpr=^[-+](([0-9][0-9]+)|([0-9]+[0-9]))([eEdD][-+][0-9]+)$

IDLgt printstregex(strfpexprboolean) 1 1 0 1 1 1 1 1 0 0

Sinal opcional

1 ou mais diacutegitos

Sinal opcional

0 ou mais diacutegitos opcionalmente seguidos de um ponto e 1 ou mais diacutegitos

1 ou mais diacutegitos opcionalmente seguidos de um ponto e 0 ou mais diacutegitos

ou Expoente opcional letra do expoente seguida de sinal opcional seguido de um ou mais diacutegitos

4689

Expressotildees regulares ndash extraccedilatildeo

Interpretadores de expressotildees regulares costumam oferecer mais que apenas testar se um string corresponde a uma expressatildeo

Em geral tambeacutem podem retornar que parte(s) do string corresponde(m) agrave expressatildeo

Ex (IDL) Determinar se um string conteacutem uma data incluindo os formatos

IDLgt dates=[2011-01-312011 1 3120110131something done on y2011m1d31 with something]

E extrair a data de dentro do string

IDLgt expr=[0-9]4[0-9]12[0-9]12

(4 diacutegitos)(qualquer separador)(1 a 2 diacutegitos)(qualquer separador)(1 a 2 diacutegitos)

IDLgt printstregex(datesexprextract)format=(A)2011-01-312011 1 31201101312011m1d31

Como agora separar ano mecircs e dia Com uma busca e uma extraccedilatildeo para cada Poderia ser mais eacute mais faacutecil com uma uacutenica expressatildeo regular

4789

Expressotildees regulares - aleacutem de apenas testes

Tambeacutem podem retornar que parte(s) do string correspondem agrave expressatildeo toda e agraves suas subexpressotildees (partes da expressatildeo delimitadas por parecircnteses)

Ex (IDL) Separar pedaccedilos de datas Neste caso para a expressatildeo ficar menor assumindo um formato simples (yyyy-mm-ddThhmmssfff) Mas poderia ser um formato mais livre como no exemplo anterior

IDLgt str=Stuff observed on 2011-01-31T123924983 with some instrumentIDLgt expr=([0-9]4)-([0-9]2)-([0-9]2)T([0-9]2)([0-9]2)([0-9]2[0-9]3)

(quatro diacutegitos)-(2 diacutegitos)-(2 diacutegitos)T(2 diacutegitos)(2 diacutegitos)(2 diacutegitos3 diacutegitos)

IDLgt pieces=stregex(strexprextractsubexpr)IDLgt printpiecesformat=(A)2011-01-31T12392498320110131123924983IDLgt d=julday(pieces[2]pieces[3]pieces[1]pieces[4]pieces[5]pieces[6])IDLgt printdformat=(F166) 2455593027372

Expressatildeo inteiraPrimeira subexpressatildeoSegunda subexpressatildeoTerceira subexpressatildeoQuarta subexpressatildeoQuinta subexpressatildeoSexta subexpressatildeo

4889

Expressotildees regulares - referecircncias httpxkcdcom208

Viacutedeos do Software Carpentry

httpsoftware-carpentryorg4_0regexp

4989

Arquivos

Quase todo programa precisa armazenar dados em arquivos

Podem ser pequenos arquivos de paracircmetros ou enormes arquivos de dados produzidos ou a processar

Apesar do sugerido pela praacutetica comum arquivos texto natildeo satildeo sempre a melhor escolha para armazenar dados - e haacute muitas formas diferentes de os usar

Qual eacute a melhor escolha

Assim como para linguagens ou contecirciners natildeo existe ldquoo melhor formatordquo Cada um tem suas vantagens e desvantagens

Dados diferentes (mesmo se usados pelos mesmos programas) em geral se adequam melhor a formatos diferentes

5089

Arquivos - texto X binaacuterios

Em qualquer formato arquivos satildeo armazenados como diacutegitos binaacuterios

Mas haacute duas formas principais como eles podem ser codificados

Arquivos baseados em texto (text files)

Dados satildeo transformados em caracteres usando alguma formataccedilatildeo (mesmo se impliacutecita) e escritos com alguma codificaccedilatildeo de texto (comumente mas natildeo necessariamente ASCII)

Um arquivo texto eacute um ou mais strings As mesmas conversotildees tecircm que ser feitas depara outros tipos

Arquivos ldquobinaacuteriosrdquo (binary files)

Embora todo arquivo seja binaacuterio este nome costuma ser usado soacute para aqueles em que os dados natildeo estatildeo na forma de texto

Com frequumlecircncia (nem sempre) os dados satildeo gravados de forma idecircntica a como satildeo armazenados na memoacuteria

Muitos formatos usam uma mistura de partes em texto e partes binaacuterias

Um cabeccedilalho (header) de texto que daacute informaccedilotildees (metadados) sobre os dados armazenados na parte binaacuteria que vem depois

O cabeccedilalho conteacutem em especial informaccedilotildees sobre como ler os dados binaacuterios

5189

Arquivos - texto X binaacuterios

Vantagens de arquivos texto

Legiacuteveis por pessoas (human readable)

Podem ser auto-suficientes todo o necessaacuterio para os ler e entender o que conteacutem pode ser obtido olhando o arquivo

Satildeo os menos especiacuteficos a linguagens software normalmente satildeo escritos em ASCII ou Unicode e sempre haacute algum suporte a ler escrever texto em linguagens software

Haacute alguns formatos padratildeo para texto (exs CSV XML) que satildeo suportados em muitas plataformas diferentes

5289

Arquivos - texto X binaacuterios

Vantagens de arquivos binaacuterios

Em geral natildeo haacute conversotildees entre o os dados como armazenados na memoacuteria O que torna o armazenamento mais eficiente e sem alteraccedilotildees nos valores

A maior parte dos formatos padronizados eacute binaacuteria Exs FITS cube CDF NetCDF HDF HDF5 JPEG JPEG2000 TIFF GeoTIFF MPEG etc

Eacute mais comum que haja bibliotecas prontas (ateacute de alto niacutevel) para consulta leitura e gravaccedilatildeo

Os formatos melhor desenhados satildeo autodocumentados (em texto ou binaacuterio) para os ler natildeo eacute necessaacuterio conhecimento preacutevio sobre como os dados foram armazenados

Toda linguagem plataforma costuma ter seu formato binaacuterio mais nativo que costuma ser o mais faacutecil para leitura gravaccedilatildeo Em particular nas de alto niacutevel que tecircm formatos autodocumentados (especialmente

em IDL R Python Java)

Muitos formatos tecircm opccedilatildeo de compressatildeo dos dados

5389

Arquivos - proprietaacuterios X padratildeo

Independente da escolha texto binaacuterio programas devem escolher entre usar um formato proacuteprio ou um formato padronizado

A principal vantagem de formatos proacuteprios eacute que satildeo definidos da forma mais conveniente para a aplicaccedilatildeo que os usa simplificando leitura e gravaccedilatildeo e potencialmente otimizando recursos (acesso ao disco tamanho do arquivo etc)

A principal desvantagem de formatos proacuteprios eacute ser necessaacuterio escrever todo o coacutedigo para os ler gravar

Pode dar mais trabalho que usar um formato geneacuterico que natildeo seja exatamente o que melhor se encaixa na aplicaccedilatildeo

O coacutedigo para processar o formato em geral vai ser menos completo e conveniente de usar que o de um formato bem estabelecido usado por muitos outros em muitos ambientes

Cada novo software que for usar estes arquivos vai precisar compartilhar do mesmo coacutedigo ou precisar de coacutedigo novo (em particular se em outra linguagem) para ler gravar naquele formato

Eacute necessaacuterio documentar o formato e decidir sobre como ele seraacute definido

Se outros jaacute colocaram muito trabalho desenvolvendo bons formatos padratildeo bem suportados em muitos ambientes por que ter o trabalho de reinventar (e reprogramar redocumentar e retestar) a roda

5489

Arquivos - padrotildees comuns em astronomia (exs adiante)

Texto

CSV Comma-separated values - bem suportado por muitos softwares

ldquoColunas fixasrdquo Natildeo eacute um padratildeo bem definido mas eacute praacutetica comum para tabelas (2D)

XML Extensible Markup Language - O padratildeo texto mais flexiacutevel de grande uso em programaccedilatildeo geral para armazenar qualquer coisa com frequumlecircncia de forma hieraacuterquica Bem suportado por linguagens modernas (e modernizadas) e bibliotecas das principais

linguagens gerais Alta complexidade o torna trabalhoso de usar

5589

Arquivos - padrotildees comuns em astronomia (exs adiante)Binaacuterios

FITS Flexible Image Transport System - o mais comum para observaccedilotildees astronocircmicas Conteacutem os dados (em geral arrays 1D 2D ou 3D) e documentaccedilatildeo (nos cabeccedilalhos) sobre a origem e caracteriacutesticas dos dados Tambeacutem usado para armazenar tabelas de dados quaisquer mesmo que natildeo sejam observaccedilotildees (especialmente pelo STSCI) Variam muito em qualidade de documentaccedilatildeo

NetCDF Network Common Data Form - evoluccedilatildeo do CDF autodocumentado eacute comum e bem suportado para vaacuterios arrays de dados

HDF5 Hierarchical Data Format ndash autodocumentado comum e bem suportado permitindo aleacutem de simples arrays estruturas (eacute um formato hieraacuterquico)

Formatos de imagens JPEG JPEG2000 TIFF GeoTIFF etc - voltados para arrays 2D3D de inteiros ou (em alguns casos) reais com ou sem compressatildeo JPEG2000 tem caracteriacutesticas mais avanccediladas como imagens multiresoluccedilatildeo

Formatos vetoriais PS EPS DXF SHP SVG - variados niacuteveis de suporte a armazenamento de vetores e formas em 2D ou 3D

ISIS Cube semelhante em caracteriacutesticas ao FITS mais usado em sensoriamento remoto geociecircncias e ciecircncias planetaacuterias em geral para observaccedilotildees 1D 2D ou 3D

Formatos nativos de linguagens todo o trabalho de leitura e gravaccedilatildeo eacute feito automagicamente pela biblioteca padratildeo em IDL R Python Java

5689

Arquivos texto - newlines

Apesar do que possa parecer arquivos texto natildeo tecircm intrinsecamente vaacuterias linhas Arquivos texto satildeo soacute uma sequumlecircncia 1D de caracteres em alguma codificaccedilatildeo Separaccedilatildeo em linhas (equivalente a interpretar o arquivo como 2D em linhas e colunas) eacute

especificada por convenccedilotildees Natildeo haacute apenas uma convenccedilatildeo para o fim de linhas

A mais primitiva convenccedilatildeo eacute separaccedilatildeo nenhuma estipula-se que linhas tenham um nuacutemero fixo N de caracteres e cabe ao software que lecirc o arquivo entender que uma linha nova ocorre regularmente a cada N caracteres

Eacute a forma menos portaacutevel e mais inconveniente eacute necessaacuterio o conhecimento preacutevio (ou por inspeccedilatildeo do arquivo) de quantos caracteres haacute por linha

A maior parte dos editores de texto natildeo vai saber separar linhas desta forma (por falta deste conhecimento preacutevio) Exemplo (de um FITS real)

SIMPLE = T Fits standard BITPIX = 16 Bits per pixel NAXIS = 0 Number of axes EXTEND = T File may contain extensions

O que com as linhas quebradas nos lugares certos seria

SIMPLE = T Fits standard BITPIX = 16 Bits per pixel NAXIS = 0 Number of axes EXTEND = T File may contain extensions

5789

Arquivos texto - newlines

A forma mais comum de especificar linhas eacute com um marcador do final de linha (newline)

Eacute um caractere especial natildeo normalmente presente no texto que serve para marcar fim de linhas

Mas natildeo haacute soacute um padratildeo de newline Os mais comuns

LF (Line Feed ASCII 10) ndash Unix Linux Mac OS X

CR - (Carriage Return ASCII 13) - Mac OS lt10

CR+LF (CR seguido de LF) - Windows DOS

Eacute o motivo de o Notepad (Windows) natildeo entender as quebras de linha de arquivos escritos com o formato nativo de Linux o arquivo soacute tem LF enquanto o editor espera CR+LF

Alguns sistemas (strings em vaacuterias linguagens por exemplo) usam o coacutedigo de escape n para indicar newline que eacute codificado de acordo com o padratildeo sendo usado

Em geral bibliotecas de leitura e gravaccedilatildeo de arquivos usam (default pelo menos) o newline nativo do sistema em que satildeo usadas

Programas de conversatildeo entre os sistemas satildeo comuns (ex dos2unix)

O Wordpad identifica se for usado soacute LF e quebra as linhas de acordo

5889

Arquivos - texto - CSV

Comma-separated values

O formato mais padronizado para tabelas (arrays 2D) em texto (frequentemente mas natildeo necessariamente ASCII)

Bem suportado por bibliotecas padratildeo de linguagens e outros softwares (Excel Calc Origin Google Docs etc)

Conteacutem Linhas de cabeccedilalho (opcionais mas recomendadas) linhas com qualquer texto geral

descrevendo o arquivo e em geral uma linha de tiacutetulo para as colunas da tabela Uma (apenas uma) tabela onde todas as linhas tecircm o mesmo nuacutemero de colunas

Colunas separadas por viacutergulas (opcionalmente pode ser outro separador) Linhas terminadas por newline (qualquer que seja) Strings delimitados por ldquo ldquo

Ex

NAMECALMPOSFILNAMEECHLPOSDISPPOSTARGNAMEPOSDIRCLASSMJD-OBSITIMECOADDSdec18s00010NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001dec18s00020NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001dec18s00120NIRSPEC-5-AO635800364500itan140NIRSPEC-5-AOp2 TITAN5408763000001dec18s00140NIRSPEC-5-AO626300364500itan140NIRSPEC-5-AOp1 TITAN5408763000001dec18s00151NIRSPEC-5-AO626300364500itan140NIRSPEC-5-AOp1ARC5408764000001dec18s00160NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001

Natildeo eacute necessaacuterio que as colunas tenham largura constante

Cabeccedilalho

5989

Arquivos - texto - CSVHaacute amplo suporte a leitura e gravaccedilatildeo de CSV sem precisar recorrer a procedimentos de baixo niacutevel

Podem ser diretamente importados em Excel Calc Origin Google Docs ou lido facilmente com bibliotecas padratildeo comuns Ex (IDL)

IDLgt c=read_csv(filesearch_scamcsvheader=h)IDLgt printhNAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS

IDLgt helpc Structure ltc8bca508gt 11 tags length=5256 data length=5248 refs=1 FIELD01 STRING Array[41] FIELD02 LONG Array[41] FIELD03 STRING Array[41] FIELD04 DOUBLE Array[41] FIELD05 DOUBLE Array[41] FIELD06 STRING Array[41] FIELD07 STRING Array[41] FIELD08 STRING Array[41] FIELD09 STRING Array[41] FIELD10 DOUBLE Array[41] FIELD11 LONG Array[41]

IDLgt printcfield01[03]dec18s0001 dec18s0002 dec18s0003 dec18s0004

IDLgt printcfield03[03]NIRSPEC-5-AO NIRSPEC-5-AO NIRSPEC-5-AO NIRSPEC-5-AO

6089

Arquivos - texto - CSVEx (IDL) Criaccedilatildeo de um CSV com uma tabela de valores

Criaccedilatildeo de 3 arrays 1D (12 elementos) um para cada coluna

IDLgt x=dindgen(3)IDLgt y=dindgen(4)IDLgt xx=reform(rebin(x34)12)IDLgt yy=reform(rebin(reform(y14)34)12)IDLgt f=xx+yy10IDLgt helpxxyyfXX DOUBLE = Array[12]YY DOUBLE = Array[12]F DOUBLE = Array[12]

Escrita do arquivo

IDLgt write_csvexamplecsvxxyyfheader=[XYX+10Y]

ResultadoXYX+10Y000000000000000000000000100000000000000010000000200000000000000020000000000000001000000010000000100000001000000011000000()

6189

Arquivos - texto - ldquoColunas regularesrdquoFixed column width

Natildeo eacute exatamente um padratildeo Eacute uma praacutetica comum

Armazena uma tabela (array 2D) de forma regular simples de ser interpretada e lida

Costumam ter linha(s) de cabeccedilalho descrevendo o conteuacutedo do arquivo em geral com uma linha para os nomes das colunas

As demais linhas conteacutem os dados sempre ocupando a mesma largura por coluna e escritos no mesmo formato em cada coluna

Costumam ser simples de ler inclusive interativamente (exs Excel Calc Origin read_ascii)

Ex (IDL) Uma simples tabela soacute de nuacutemeros

wavl CH4=33 wavl CH4=25 wavl CH4=10 wavl CH4=08 wavl CH4=05 wavl CH4=026 wavl CH4=02 477330000 0090130 477330000 0091110 477330000 0089250 477330000 0087000 477330000 0087140 477330000 0090080 477330000 0088110 480040000 0090930 480040000 0091930 480040000 0090160 480040000 0087930 480040000 0088110 480040000 0090950 480040000 0089090 482750000 0091710 482750000 0092730 482750000 0091060 482750000 0088850 482750000 0089080 482750000 0091810 482750000 0090060 485450000 0092530 485450000 0093570 485450000 0092000 485450000 0089810 485450000 0090100 485450000 0092730 485450000 0091090

IDLgt a=read_ascii(specs_27s_ntxtdata_start=1header=header)IDLgt printheader wavl CH4=33 wavl CH4=25 wavl CH4=10 wavl CH4=08 wavl CH4=05 wavl CH4=026 wavl CH4=02 IDLgt helpa Structure ltd423c9a8gt 1 tags length=224 data length=224 refs=1 FIELD01 FLOAT Array[14 4]

6289

Arquivos - texto - ldquoColunas regularesrdquoJaacute um arquivo um pouco mais difiacutecil de ler

NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS dec18s0001 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0002 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0003 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 FLAT 5408757812500 460000 5 dec18s0004 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 DARK 5408757812500 460000 5

Por ter colunas de tipos diferentes (strings inteiros reais) natildeo eacute possiacutevel o ler em um simples array Mas eacute faacutecil o colocar em uma estrutura de arrays onde cada campo eacute uma coluna

Especificando interativamente como interpretar as linhasIDLgt templ=ascii_template(filesearch_scamtxt)

Nome do campo (default mostrado)

Tipo do campo (identificado automaticamente)

Posiccedilatildeo (caracter) do comeccedilo (identificada automaticamente)

Linha de exemplo para verificar as colunas

6389

Arquivos - texto - ldquoColunas regularesrdquoDepois de feito o template o arquivo pode ser lido com apenas

IDLgt a=read_ascii(filesearch_scamtxttemplate=templ)IDLgt helpa Structure ltd4ec4608gt 11 tags length=416 data length=416 refs=1 FIELD01 STRING Array[4] FIELD02 LONG Array[4] FIELD03 STRING Array[4] FIELD04 FLOAT Array[4] FIELD05 FLOAT Array[4] FIELD06 STRING Array[4] FIELD07 STRING Array[4] FIELD08 STRING Array[4] FIELD09 FLOAT Array[4] FIELD10 FLOAT Array[4] FIELD11 LONG Array[4]IDLgt printafield01dec18s0001 dec18s0002 dec18s0003 dec18s0004IDLgt printafield04 626300 626300 626300 626300

O template (uma estrutura contendo dados sobre como ler o arquivo) pode ser usado para outros arquivos no mesmo formato No lugar de ter sido criado interativamente poderia ter sido lido de algum arquivo Poderia ter especificado nomes para os campos que seriam mais amigaacuteveis que coias como FIELD11

6489

Arquivos - texto - XML

Extensible Markup Language

Admite grande flexibilidade e por isso pode ter alta complexidade

Valores satildeo colocados dentro de uma estrutura em hieraacuterquica (em uma aacutervore) com os noacutes identificados pelos seus nomes (chaves)

Largamente usado em muitas aacutereas para armazenar conjuntos arbitraacuterios de quaisquer estruturas de dados

A maioria das aplicaccedilotildees usa um formato que eacute um subconjunto do XML especificado por um Schema comumente em um arquivo XML DTD (Document Type Definition)

6589

Arquivos - texto ndash XML ndash exemplos de usos

Armazenamento de dados de aplicaccedilotildees web (comum para exportar importar dados MediaWiki DokuWiki WordPress ADS Lattes etc)

Documentos Office (docx pptx xlsx) OpenOffice (odt opd ods)

Como versotildees de outros formatos FITSML XDF

ldquoScientific Dataset XML NASAs Astronomical Data Center (ADC) sponsors a number of research projects that

use XML for scientific data representation The XML activities at the ADC are sponsored and supported by the NASA Office of Space Science Applied Information Systems Research Program (AISRP)rdquo - httpxmlcoverpagesorgnasa-adchtml

Astronomical Instrument Markup Language (AIML)

SVG ndash Scalable Vector Graphics

Muitas de outras aplicaccedilotildees listadas em httpxmlcoverpagesorgxmlhtmlapplications

6689

Arquivos - texto ndash XML - exemploltxml version=10 gtltDOCTYPE Xdmf SYSTEM Xdmfdtd []gtltXdmf xmlnsxi=httpwwww3org2001XInclude Version=20gt ltDomaingt lt-- Example of Basic Topologies --gt ltInformation Name=Descriptiongt Example of a Polyvertex Topology ltInformationgt ltGrid Name=Polyvertex GridType=Uniformgt ltTopology TopologyType=Polyvertex Dimensions=3 NodesPerElement=3gt ltDataItem Format=XML Dimensions=3 3 NumberType=Floatgt 0 1 2 4 5 6 8 9 10 ltDataItemgt ltTopologygt ltGeometry Type=XYZgt ltDataItem Format=XML Dimensions=4 4 3gt 00 00 00 10 00 00()Que mostra que a interpretaccedilatildeo (parsing) de XML eacute em geral complexa

6789

Arquivos - texto - XML

Haacute muitas bibliotecas de alto niacutevel para fazer o processamento (parsing) e entregar os dados em uma estrutura conveniente

A complexidade em processar XML estaacute em decidir o que fazer com os dados jaacute que os arquivos podem ser muito complexos

As APIs (Application Programming Interfaces) mais comuns para processar XML que satildeo implementadas em muitas linguagens

DOM (Document Object Model) ndash manteacutem todo o conteuacutedo do em uma estrutura de dados (em geral uma aacutervore) em uma variaacutevel (em geral um objeto) Esta pode ser consultada para obter os valores de interesse para os alterar e usada para escrever um arquivo

SAX (Simple API for XML) ndash Interpretador (parser) por objetos O usuaacuterio escreve uma classe herdando da classe SAX provendo os meacutetodos que vatildeo processar os campos agrave medida em que estes satildeo lidos

6889

Arquivos - binaacuterios - FITSFlexible Image Transport System

O formato mais comum para observaccedilotildees astronocircmicas Tambeacutem usado para armazenar quaisquer dados mesmo natildeo relacionados a observaccedilotildees (especialmente tabelas como eacute praacutetica do STSCI)

Conteacutem um (ou mais) cabeccedilalho(s) de texto com metadados (informaccedilotildees sobre os dados como caracteriacutesticas (necessaacuterias para os ler) origem condiccedilotildees em que foram obtidos processamento realizado etc)

SIMPLE = T image conforms to FITS standard BITPIX = 32 bits per data value NAXIS = 2 number of axes NAXIS1 = 1024 NAXIS2 = 1024 BSCALE = 100000 Scaling factor BZERO = 000000 Scaling zero-point TELESCOP= Keck II Telescope SLITNAME= 0041x226 Slit Name SLITPA = 351979 Slit position angle SLITX = 131500 X pixel of the center of the slit LST = 12010446 local apparent sidereal time (()

Depois do cabeccedilalho haacute uma (ou mais) seccedilatildeo(otildees) de dados binaacuterios Costuma(m) ser array(s) 1D (espectros) 2D (imagens) ou 3D (ldquocubos de dadosrdquo)

De inteiros ou reais inteiros satildeo comuns em contagens de instrumentos reais para valores derivados (fluxos intensidades etc)

6989

Arquivos - binaacuterios - FITSNormalmente FITS satildeo lidos escritos por bibliotecas prontas de (relativamente) alto niacutevel usuaacuterio natildeo tem que saber como os dados satildeo armazenados no arquivo nem como os ler escrever Ex (IDL com a biblioteca idlastro)

IDLgt fits_info2dspectrumfits2dspectrumfits has 3 extensionsPrimary header 288 recordsNo dataExtension 1 -- SCI Header 144 records IMAGE ( 1201 1201 )Extension 2 -- ERR Header 72 records IMAGE ( 1201 1201 )Extension 3 -- DQ Header 72 records IMAGE ( 1201 1201 )

IDLgt mydata=readfits(2dspectrumfitsexten_no=1myheader) READFITS Reading FITS extension of type IMAGE READFITS Now reading 1201 by 1201 array

IDLgt extastmyheadermyastIDLgt sz=size(mydatadimensions)IDLgt xy2ad[1sz[0]][1sz[1]]myastcorners_acorners_dIDLgt printcorners_aCorners of the data array from file 2dspectrumfits are at 14487480 33063480

IDLgt printcorners_d -00041264444 00041402222

Obteacutem os dados de coordenadas (WCS) do header

Coloca os dados no array (2D de floats) mydata e o header no array (1D de strings) myheader

Calcula as coordenadas das quinas da imagem atraveacutes do WCS

Provecirc informaccedilotildees sobre o arquivo

7089

Arquivos - binaacuterios - ISIS Cube

Formatos como FITS se adequam muito a ter uma interface de mais alto niacutevel por objetos

Tambeacutem para dados em tabelas FITS muito mais trabalhosos de ler em baixo niacutevel que se adequam muito mais a mapas ou estruturas

Exemplo (de um formato semelhante a FITS ISIS cube)

O objeto ao ser criado lecirc todo o arquivo

cube=pp_editablecube(CM_1553510065_1_ircub)

Meacutetodos fornecem os dados desejados para obter quando necessaacuterio os dados de interesse

Find out the names of the backplanesprintcubegetproperty(backnames)Get the start time of the cubeprintcubegetfromheader(START_TIME)2007-084T100057286Z

Valores no cabeccedilalho podem ser convenientemente fornecidos como um mapa

header=cubeheader_as_hash()printheader[START_TIME]2007-084T100057286Z

7189

Arquivos - binaacuterios ndash ISIS Cube

Os dados satildeo fornecidos como arraysMake a contour plot of the latitudesc=contour(cubegetsuffixbyname(LATITUDE))Get the band with wavelength nearest to 21 (in the units used in the cube)selband=cubegetbandbywavelength(21wavelengths=selwavs)

Interfaces por overload tornam o acesso ainda mais conveniente

selband=cube[21]

selwavs=cube[21]

Retorna um array com a banda de comprimento de onda mais proacuteximo de 21 (microm)

Retorna o comprimento de onda mais proacuteximo de 21 (microm) da banda retornada acima

7289

Arquivos - binaacuterios ndash ISIS Cube Alteraccedilotildees feitas ao conteuacutedo satildeo automaticamente refletidas em todos os

lugares (cabeccedilalho em particular) afetados mantendo o objeto vaacutelido que pode depois ser gravado em um novo arquivo

IDLgt printcubelinescubesamplescubebands 64 64 256

IDLgt helpcubecoreltExpressiongt FLOAT = Array[64 64 256]

IDLgt cubecore=dblarr(100100256)

A linha acima natildeo eacute uma atribuiccedilatildeo eacute uma invocaccedilatildeo de meacutetodo Eacute equivalente acubesetpropertycore=dblarr(100100256)

Eacute o trabalho da funccedilatildeo setproperty decidir se a propriedade passada (core) faz sentido e se fizer fazer todo o trabalho necessaacuterio a esta mudanccedila Para o usuaacuterio eacute tudo automaacutetico e os dados da classe satildeo vaacutelidos o tempo todo

IDLgt helpcubecoreltExpressiongt DOUBLE = Array[100 100 256]

IDLgt printcubelinescubesamplescubebands 100 100 256

IDLgt cubesaveCM_1553510065_1_ir_editedcub

7389

Arquivos - binaacuterios ndash NetCDF e HDF5

Network Common Data Form e Hierarchical Data Format

Os dois uacutenicos formatos bem estabelecidos para dados cientiacuteficos geneacutericos

Armazenam dados como vaacuterias variaacuteveis e seus metadados Para cada variaacutevel haacute (ou pode haver) os metadados

Nome Dimensotildees (do array) Unidades Comentaacuterios

Ambos permitem arrays multidimensionais

Apenas HDF5 permite estruturas (daiacute vem a hierarquia)

Autodocumentados qualquer software que saiba ler um destes formatos lecirc qualquer arquivo sem precisar de conhecimento preacutevio sobre como o arquivo foi gerado

Muito bem suportados em bibliotecas padratildeo e natildeo padratildeo em softwares interativos e visualizadores (inclusive plugins para navegadores)

httpwwwunidataucaredusoftwarenetcdf httpenwikipediaorgwikiHdf5

NetCDF eacute mais simples de usar por natildeo ter hierarquia dando menos trabalho para ler e escrever dados Se hierarquia natildeo eacute necessaacuteria eacute mais conveniente de usar que HDF5

7489

Arquivos - binaacuterios - NetCDF e HDF5Haacute tambeacutem o formato CDL uma versatildeo ASCII do NetCDF A biblioteca padratildeo do NetCDF inclui conversores entre estes formatos

$ ncdump -h refspec_g01_0ncnetcdf refspec_g01_0 dimensions nlay = 51 nwn = 400 nleg = 33 numu = 2 nlev = 52 nphi = 3 ngas = 2 nwnc = 1 scal = 1 v3 = 3 dnl = 1 nk = 1 tdisr = UNLIMITED (0 currently) na = 16

variables float alb(nwn) float z(nlay) float t(nlay) float p(nlay) float wl(nwn) float iof(nwn) float mtau(nwn) float htau(nwn) float hctaus(nwn) float gtau(nwn) float outcos(scal) float phi(nleg) float phic(scal) float umu(numu) float flux(v3 nwn nlev) float mix(nlay ngas) float c(nlay) float psat(nlay) float ga(nwnc) float wlc(nwnc) float inc(scal) int dm(scal) int ord(scal) float fbeam(scal) float wn(nwn) float tautot(nwn nlay) float htaus(nwn nlay) float htaux(nwn nlay) float taug(nwn nlay) float phase(nwn nlay nleg) float ssa(nwn nlay) float uu(nwn nphi nlev numu) float u0u(nwn nlev numu) float tray(nwn nlay) float gtauo(tdisr nwn nlay)

Haacute 14 variaacuteveis usadas como dimensotildees para as 35 variaacuteveis que satildeo arrays

Ex alb(nwn) indica que alb eacute um array 1D de nwn elementos

nwn estaacute armazenado como uma das dimensotildees e eacute 400 portanto alb tem 400 elementos

Parte do conteuacutedo de um arquivo NetCDF em formato CDL (gerado pelo programa ncdump)

7589

Arquivos - binaacuterios - NetCDF e HDF5Conteuacutedo daquele arquivo visualizado com o ncview (acompanha a biblioteca NetCDF padratildeo)

7689

Arquivos - binaacuterios - NetCDF e HDF5O conteuacutedo de todo o arquivo pode ser lido facilmente com as bibliotecas disponiacuteveis e armazenado em contecirciners convenientes Usando um objeto que gera um resultado um pouco mais conveniente

IDLgt h=pp_readncdf(refspec_g01_0nchash)IDLgt printhvar_dims ltObjHeapVar229(HASH)gtvars ltObjHeapVar152(HASH)gtdims ltObjHeapVar118(HASH)gt

IDLgt printh[vars]T 173203 175459 175848 176001 175975 Z 431869 418858 406067 393403 380464 FLUX 300660 145536 0705180 0341669 0165532 PHASE 100000 0779034 0660858 0542052 0449983 TAUTOT0694377 0693420 0693474 0693540 0693636()

IDLgt help(h[vars])[TAUTOT]ltExpressiongt FLOAT = Array[51 400]

IDLgt print(h[var_dims])[TAUTOT]NLAY NWN

IDLgt print(h[dims])[(h[var_dims])[TAUTOT]]NLAY 51NWN 400

7789

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5)

Visualizaccedilatildeo da variaacutevel selecionada

Metadados e alguns valores da variaacutevel selecionada

Variaacutevel a ser criada com o conteuacutedo desta variaacutevel do arquivo

Hierarquia das variaacuteveis do arquivo

7889

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5) Imported variable az

IDLgt helpaz Structure ltd5723f38gt 13 tags length=448 data length=444 refs=1 _NAME STRING az _ICONTYPE STRING binary _TYPE STRING DATASET _FILE STRING INTENSI_test_409OUTh5 _PATH STRING _DATA DOUBLE Array[38] _NDIMENSIONS LONG 1 _DIMENSIONS ULONG64 Array[1] _NELEMENTS ULONG64 38 _DATATYPE STRING H5T_FLOAT _STORAGESIZE ULONG 8 _PRECISION LONG 64 _SIGN STRING

IDLgt printaz_data 00000000 10000000 20000000 30000000 40000000 50000000 60000000 80000000 ()

7989

Arquivos - binaacuterios - imagens

JPEG JPEG200 TIFF GeoTIFF etc

Os formatos comuns de imagens satildeo bem suportados em muacuteltiplas plataformas para uso dentro de programas e interativamente

Alguns formatos tecircm opccedilatildeo de compressatildeo com perda eou sem perda

Armazenam imagens como arrays 2D ou 3D (3D frequumlentemente limitado a 3 ou 4 em uma das dimensotildees uma imagem em 3 ou 4 bandas) de inteiros ou (em alguns formatos) reais

Alguns formatos permitem armazenar metadados para caracterizar as imagens armazenadas

JPEG2000 e GeoTIFF (um subconjunto de TIFF) comuns em astronomia e aacutereas proacuteximas

8089

Arquivos - binaacuterios ndash imagens ndash exemplo (IDL)IDLgt printquery_tiff(issmap_2009tiffinfogeotiff=geo) 1

IDLgt helpinfo Structure ltd4eca4b8gt 18 tags length=144 data length=132 refs=1 CHANNELS LONG 4 DIMENSIONS LONG Array[2] IMAGE_INDEX LONG 0 NUM_IMAGES LONG 1 PIXEL_TYPE INT 1 TYPE STRING TIFF BITS_PER_SAMPLE LONG 8 POSITION FLOAT Array[2] RESOLUTION FLOAT Array[2] UNITS LONG 2 TILE_SIZE LONG Array[2] DESCRIPTION STRING ISS (2009) DATE_TIME STRING 20100218 012436()

IDLgt helpgeo Structure ltd4efa1b8gt 10 tags length=264 data length=262 refs=1 MODELPIXELSCALETAG DOUBLE Array[3] MODELTIEPOINTTAG DOUBLE Array[6 4] GEOGRAPHICTYPEGEOKEY INT 4035 GEOGSEMIMAJORAXISGEOKEY DOUBLE 25750000 GEOGSEMIMINORAXISGEOKEY DOUBLE 25750000()

IDLgt myimage=read_tiff(issmap_2009tiff) Lecirc a imagem para o array myimage

Obteacutem informaccedilotildees sobre o arquivo

8189

Arquivos - binaacuterios ndash formatos nativosLinguagens como IDL R Python Java tecircm seu formato nativo binaacuterio acessado em alto niacutevel Basta mandar salvar ler variaacuteveis no do arquivo a biblioteca padratildeo automagicamente faz todo o trabalho de decidir como gravar ler os dados

Conveniente de usar na proacutepria linguagem Mas raramente existem bibliotecas para ler gravar o formato nativo de uma linguagem a partir de outra Ex (IDL)

IDLgt savefile=2dspectrumsavmydatamyheadercorners_dcorners_averbosecompress SAVE Portable (XDR) compressed SAVERESTORE file SAVE Saved variable MYDATA SAVE Saved variable MYHEADER()

Pode ser lido com apenas (haacute formas mais elaboradas)

IDLgt restore2dspectrumsavverbose RESTORE Portable (XDR) compressed SAVERESTORE file RESTORE Save file written by ltunknowngtltunknowngt Thu Jan 27 191422 2011 RESTORE IDL version 801 (linux x86_64) RESTORE Restored variable MYDATA RESTORE Restored variable MYHEADER()

IDLgt helpmydatamyheadercorners_dcorners_aMYDATA FLOAT = Array[1201 1201]MYHEADER STRING = Array[144]()

8289

Arquivos - processamento em baixo niacutevel

Nem sempre um formato padratildeo eacute a melhor escolha para o problema

Nem sempre haacute escolha (pode-se ter que trabalhar com arquivos que jaacute foram escritos em algum formato proprietaacuterio)

Agraves vezes o formato eacute padratildeo mas natildeo haacute bom suporte a ele disponiacutevel

Em todos estes casos eacute necessaacuterio escrever rotinas em baixo niacutevel que vatildeo ler processar diretamente o conteuacutedo do arquivo

Preferencialmente criando interfaces de alto niacutevel para o programa que vai as usar

8389

Arquivos - processamento em baixo niacutevel - texto

Tomando o exemplo anterior onde as colunas eram de diferentes tipos

NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS dec18s0001 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0002 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0003 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 FLAT 5408757812500 460000 5 dec18s0004 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 DARK 5408757812500 460000 5

A forma mais simples de o ler diretamente eacute definir uma estrutura para receber cada linha e um array destas estruturas para receber todo o arquivo Ex (IDL)

IDLgt record=namecalmpos0filnameechlpos0d0disppos0d0targnameposdirclassmjd_obsitime0d0coadds0IDLgt nlines=file_lines(filesearch_scamtxt)IDLgt mydata=replicate(recordnlines-1)IDLgt header=

Depois de definidas as variaacuteveis que vatildeo receber os dados o arquivo pode ser lido

IDLgt openrunitfilesearch_scamtxtget_lunIDLgt readfunitheaderIDLgt readfunitmydataformat=(A14I8A15F104F104A18A19A15F158F105I15)IDLgt free_lununit

A gravaccedilatildeo de um arquivo texto poderia ser feita de forma semelhante apenas trocando openr por openw (abrir o arquivo para gravaccedilatildeo natildeo leitura) e readf por printf

O arquivo eacute aberto em uma unidade (unit) usada para especificar de onde eacute feita a leitura

Ao final o arquivo eacute fechado

8489

Arquivos - processamento em baixo niacutevel - texto

O que resulta em

IDLgt printheader NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS

IDLgt helpmydataMYDATA STRUCT = -gt ltAnonymousgt Array[4]

IDLgt helpmydata[0] Structure ltd5e38f68gt 11 tags length=136 data length=124 refs=3 NAME STRING dec18s0001 CALMPOS INT 0 FILNAME STRING NIRSPEC-5-AO ECHLPOS DOUBLE 62630000 DISPPOS DOUBLE 36450000 TARGNAME STRING HD85258 POSDIR STRING NIRSPEC-5-AOp1 CLASS STRING STAR MJD_OBS STRING 54087574 ITIME DOUBLE 10000000 COADDS INT 1

Este caso eacute mais complicado que os mais comuns por haver colunas de strings

Se todas fossem de nuacutemeros natildeo teria sido necessaacuterio especificar o formato explicitamente As colunas teriam sido adivinhadas pela biblioteca que lecirc o arquivo Poderia ter sido lido escrito soacute com um array de nuacutemeros sem estruturas

8589

Arquivos - processamento em baixo niacutevel - binaacuterio

Formatos binaacuterios podem ser definidos de qualquer forma O arquivo eacute apenas um conjunto de bytes Cabe ao software saber como os interpretar

Uma escolha comum para que sejam autodocumentados eacute incluir um cabeccedilalho de texto informando as caracteriacutesticas dos dados necessaacuterias para os ler

Ex (IDL) criar um arquivo que armazene um array de doubles com um cabeccedilalho informando as dimensotildees para que o programa que o lecirc saiba como ler os dados

Inventa dados e abre o arquivo

IDLgt data_to_write=dindgen(34)IDLgt openwunitbinary_exampledatget_lun

Escreve as dimensotildees como texto

IDLgt printfunitdimensions of the double array stored belowIDLgt printfunitsize(data_to_writedimensions)

Escreve os dados binaacuterios

IDLgt writeuunitdata_to_write

Fecha o arquivo

IDLgt free_lununit

Escreve em binaacuterio (write unformatted)

8689

Arquivos - processamento em baixo niacutevel - binaacuterio

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

dimensions of the double array stored below 3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

8789

Arquivos - processamento em baixo niacutevel - binaacuterioA leitura deste arquivo eacute igualmente simples

IDLgt header=IDLgt dims=[00]IDLgt openrunitbinary_exampledatget_lun

Lecirc as dimensotildees (armazenadas como texto)

IDLgt readfunitheaderIDLgt readfunitdims

Lecirc a parte binaacuteria depois de saber as dimensotildees

IDLgt data_read=dblarr(dims)IDLgt readuunitdata_read

Fecha o arquivo

IDLgt free_lununit

Verifica que os dados foram gravados e lidos corretamente

IDLgt printarray_equal(data_to_writedata_read) 1

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Lecirc dados binaacuterios (read unformatted)

8889

Sumaacuterio

5 ndash Slides em httpwwwppenteadonetpeapea04_strings_iopdf Strings Expressotildees regulares Arquivos

httpwwwppenteadonetpea

8989

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89

Strings - processamento baacutesico

Operaccedilotildees mais fundamentais que costumam ser suportadas em ldquotodasrdquo as linguagens bibliotecas padratildeo (exemplos usando sintaxe de IDL)

Atribuiccedilatildeo de literais

IDLgt a=some

IDLgt helpaA STRING = some

IDLgt printasome

Concatenaccedilatildeo

IDLgt b=a+ string

IDLgt helpbB STRING = some string

1889

Strings - processamento baacutesico

Valor loacutegico

String vazio (null string) eacute falso o resto eacute verdadeiro

IDLgt c=

IDLgt if c then printc is not empty string else printc is null string ()c is null string ()

IDLgt c=a

IDLgt if c then printc is not empty string else printc is null string ()c is not empty string

Espaccedilo natildeo eacute o mesmo que string vazio

IDLgt c=

IDLgt if c then printc is not empty string else printc is null string ()c is not empty string

1989

Strings - processamento baacutesico Comparaccedilotildees

IDLgt helpabA STRING = someB STRING = some string

IDLgt printb eq a 0

IDLgt printb gt a 1

IDLgt c=[ab9Some somesome other string]

IDLgt printc[sort(c)]format=(A) some9Somesomesome other stringsome string

IDLgt printa eq A 0

IDLgt printstrcmp(aAfold_case) 1

Comparaccedilotildees de ldquotamanhordquo (maior menor etc) satildeo comparaccedilotildees pela ordem de codificaccedilatildeo (ldquoalfabeacuteticardquo)

Algumas linguagens permitem definir o ordenamento (como considerar maiuacutesculasminuacuteculas letras com acentos nuacutemeros e siacutembolos) Exs Python C++ Java Perl

2089

Strings - processamento baacutesico Substrings

IDLgt printstrmid(abcdefg32)de

Algumas linguagens nativamente suportam iacutendices para indicar substrings C C++ Fortran Python Ex (Python)

gtgtgt s=abcdegtgtgt print(s[25])cde

Outras permitem que sejam definidos iacutendices por objetos strings

Busca de caracteres ou substrings

IDLgt printstrpos(abcdefgd) 3

IDLgt printstrpos(abcdefgj) -1

IDLgt printstrpos(abcdefgbc) 1

2189

Strings - processamento baacutesico

Outros

IDLgt printstrlen(1234567) 7

IDLgt printstrlen(1234567 ) 8

IDLgt printstrlen( 1234567 ) 9

IDLgt helpstrtrim( 1234567 2)ltExpressiongt STRING = 1234567

IDLgt helpstrtrim( 1234567 1)ltExpressiongt STRING = 1234567

IDLgt helpstrtrim( 1234567 0)ltExpressiongt STRING = 1234567

IDLgt printstrupcase(abcdEF)ABCDEF

IDLgt printstrlowcase(abcdEF)abcdef

Medindo quantos caracteres tem o string inclui espaccedilos em branco

Remoccedilatildeo dos brancos agrave esquerda agrave direita ou dos dois lados

2289

Strings - conversatildeo de outros tipos para strings

Eacute uma das operaccedilotildees mais comuns para gerar textos informativos e nomes escrever arquivos (aquivos texto discutidos adiante) etc

Eacute natildeo trivial jaacute que a conversatildeo pode ser feita de muitas formas diferentes

Para tipos fundamentais sempre haacute uma conversatildeo default tanto criando um string como usando algo tipo print (para strings terminal ou arquivos)

Todo comando tipo print (print printf sprintf string write etc) e toda escrita para arquivos texto eacute uma conversatildeo para string (terminais e arquivos texto soacute conteacutem strings)

2389

Strings - conversatildeo de outros tipos para strings

Exemplos de conversotildees (IDL)

IDLgt print[-109] -1 0 9

IDLgt print1d01B10 10000000 1 100000

IDLgt helpstring(1d01B10)ltExpressiongt STRING = 10000000 1 100000

IDLgt printfunitdblarr(343)

Tipos mais elaborados podem ou natildeo ter uma forma predefinida Com objetos eacute comum ser possiacutevel definir a conversatildeo (stringification) ao criar a classe

IDLgt h=hash(a109[01]18b)

IDLgt printh9 0 1a 100000180000 b

Strings

Coloca strings em um arquivo (adiante)

Strings criados por um meacutetodo da classe hash satildeo uma forma de representar o hash

2489

Strings - conversatildeo de outros tipos para strings

Algumas linguagens (Python IDL) tecircm mais de uma forma default de gerar strings Em Python uma forma eacute executaacutevel a outra eacute mais legiacutevel

In [30] x=arange(12)reshape(43)

In [31] print(x)[[ 0 1 2] [ 3 4 5] [ 6 7 8] [ 9 10 11]]

In [32] xOut[32]array([[ 0 1 2] [ 3 4 5] [ 6 7 8] [ 9 10 11]])

In [33] y=array([[ 0 1 2] [ 3 4 5] [ 6 7 8] [ 9 10 11]])

In [37] print(array_equal(xy))True

String mais legiacutevel

String executaacutevelPode ser usado para criar um objeto equivalente

2589

Strings ndash formataccedilatildeo expliacutecita

A formataccedilatildeo pode ser especificada se a conversatildeo default natildeo eacute adequada para definir a conversatildeo em um novo tipo

Cada linguagem tem sua sintaxe para formataccedilatildeo

Haacute dois estilos semelhantes em vaacuterias linguagens

Ambos os estilos satildeo sintaxes diferentes para a mesma ideacuteia Um coacutedigo especifica o tipo de dado sendo passado (inteiro real etc) e detalhes de como seraacute feito o string (largura do campo diacutegitos decimais alinhamento etc)

2689

Strings ndash formataccedilatildeo expliacutecita

Estilo Fortran

IDL

IDLgt print1d0+1d-9 10000000

IDLgt print1d0+1d-9format=(E1610)10000000010E+00

IDLgt printx=1d0+1d-9format=(A0F1613)X= 10000000010000

Estilo C (ldquoprintfrdquo)

IDL

IDLgt printformat=(x=1610e)1d0+1d-9x=10000000010e+00

Python

In [20] print(x=1610e (1e0+1e-9))x=10000000010e+00

Nenhum formato expliacutecito (default)

2789

Strings - formatos tipo Fortran

(apenas o principal ver documentaccedilatildeo para detalhes)

Ex (IDL)

IDLgt printx=1d0+1d-9format=(A0F1613)X= 10000000010000

Tambeacutem haacute modificadores para especificar alinhamento (-) se deve haver (ou ser suprimido) avanccedilo para a pŕoxima linha posiccedilatildeo dentro do campo etc

Coacutedigo Significado Exemplo(s)

A String (A) (10A)

I Inteiro decimal (I) (10I)(-2I)

B Inteiro binaacuterio (B) (10B)

Z Inteiro hexadecimal (Z) (10Z)

O Inteiro octal (O) (10O)

F Real ponto fixo (F)(F52)

E D Real ponto flutuante (E)(D1610)

G Real ponto fixo ou flutuante de acordo com o valor (G)(G10)

ldquordquo String literal (ldquox=rdquoI10)

X Caracteres em branco (A10XI)

2889

Strings - formatos tipo C (printf)(apenas o principal ver documentaccedilatildeo para detalhes)String com campos a serem substituiacutedos por valores (passados adiante) marcados por coacutedigos com

Ex (Python)In [20] print(x=1610e (1e0+1e-9))x=10000000010e+00

Haacute modificadores para especificar alinhamento como preencher o espaccedilo que sobra (espaccedilos zeros etc) para imprimir o sinal + etc

Coacutedigo Significado (tipo) Exemplo(s)

di Inteiro decimal (int) d 5d +05d

u Inteiro decimal sem sinal (unsigned int) u 7u

fF Real em ponto fixo (double float) f 136f

eE Real em ponto flutuante (double float) e 1610e

gG Real em ponto fixo ou flutuante decidido pelo valor (double float)

g 73G

xX Inteiro sem sinal hexadecimal (unsigned int) x 10X

o Inteiro sem sinal octal (unsigned int) o 5o

s String (string) s 10s

c Caractere (char) c

p Ponteiro - estilo C - (void ) p

literal

2989

Strings - conversatildeo de strings para outros tipos

Para gerar dados a partir de strings datas identificadores pedaccedilos de nomes valores numeacutericos armazenados em strings

Tambeacutem sempre haacute conversotildees default para os tipos baacutesicos onde o intepretador programa faz o possiacutevel para entender o string como um valor daquele tipo

Tipicamente eacute feito por casts (funccedilotildees de conversatildeo) reads (de strings ou arquivos texto (arquivos texto satildeo strings)) construtores de objetos ou implicitamente

3089

Strings - conversatildeo de strings para outros tipos - impliacutecitas

Exs (IDL)

IDLgt helpfix([17 17 171 -17 9 8])ltExpressiongt INT = Array[5]

IDLgt printfix([17 17 171 -17 9 8]) 17 17 17 -17 9

IDLgt printdouble([17 17 171 -17 9 8]) 17000000 17000000 17100000 -17000000 90000000

IDLgt readfunitabcd

IDLgt a=0d0IDLgt b=00IDLgt c=0IDLgt reads171d0 189d0 -9abcIDLgt helpabcA DOUBLE = 17100000B FLOAT = 189000C INT = -9

Converte o conteuacutedo do string para os tipos das variaacuteveis abcd (explicado adiante)

3189

Strings - conversatildeo de strings para outros tipos

Quando o default natildeo eacute suficiente (ou quando escrevendo o conversor em uma classe) costuma ser possiacutevel o fazer com formatos semelhantes aos formatos para gerar strings Exs (IDL)

IDLgt a=0d0IDLgt b=00IDLgt c=0IDLgt reads171d0 something 189d0-9abc READS Input conversion error Unit 0 File ltstdingt Error occurred at $MAIN$ Execution halted at $MAIN$

Natildeo funcionou porque sozinho ele natildeo conseguiu saber o que fazer com o ldquosomethingrdquo Usando um formato especiacutefico

IDLgt reads171d0 something 189d0-9 abcformat=(D6111XD611XI)

IDLgt helpabcA DOUBLE = 17100000B FLOAT = 189000C INT = -9

Exemplos mais complicados adiante (arquivos texto)

Variaacuteveis tecircm que ser definidas para informar para que tipo seraacute feita a conversatildeo default

3289

Strings - processamento natildeo baacutesicoOperaccedilotildees importantes e muito necessaacuterias mas que natildeo satildeo suportadas em todas as linguagens bibliotecas padratildeo

Testes (ex IDL)

IDLgt str=[afitsaFITSafitsaabfitsabcfits]

IDLgt printstrmatch(strfits) 1 0 0 1 1

IDLgt printstrmatch(strfitsfold_case) 1 1 0 1 1

IDLgt printstrmatch(strfitsfold_case) 1 1 1 1 1

IDLgt printstrmatch(strfits) 1 0 0 0 0

IDLgt printstrmatch(strfits) 0 0 0 1 0

3389

Strings - processamento natildeo baacutesico

Operaccedilotildees importantes e muito necessaacuterias mas que natildeo satildeo suportadas em todas as linguagens bibliotecas padratildeo

Separaccedilatildeo de partes (Ex IDL)

IDLgt printstrsplit(2011- 131 -extract)format=(A)2011131

Processamento de nomes de arquivos diretoacuterios (Ex IDL)

IDLgt printfile_dirname(some_directoryanother_directorysome_filetxt)some_directoryanother_directory

IDLgt printfile_basename(some_directoryanother_directorysome_filetxt)some_filetxt

IDLgt printfile_basename(another_directorysome_filetxttxt)+_alteredtxtsome_file_alteredtxt

3489

Strings - processamento natildeo baacutesico

Codificaccedilotildees (Ex Python 3)

gtgtgt s=infinite money infinNeuro sign

gtgtgt print(s)infinite money infineuro

gtgtgt print(ascii(s))infinite money u221eu20ac

gtgtgt print(sencode(utf-8))binfinite money xe2x88x9exe2x82xac

3589

Strings - processamento natildeo baacutesico

Perl eacute a linguagem mais avanccedilada para processamento de strings tem suporte nativo a muitas outras operaccedilotildees a semacircntica da linguagem eacute voltada principalmente para processar strings expressotildees regulares (de vaacuterios tipos) natildeo satildeo strings fazem parte da semacircntica

Ex (sem o objetivo que seja compreensiacutevel apenas para indicar o estilo)

Ler um arquivo contendo campos com nomes separados de valores por ()

temperature 10008name some modelx_dimension 100y_dimension 100z_dimension 50()

Armazenado-o em um mapa O que pode ser feito com apenas

While (ltgt) Loop over input linesPut pre-colon text into $1 post-colon into $2 if (m (S+) (+) ) Use $1 as key $2 as value $file_data$1 = $2

3689

Expressotildees regulares - definiccedilatildeo

Expressotildees regulares (regular expressions regex) satildeo a mais poderosa ferramenta para fazer buscas e separar substrings

Regex satildeo uma linguagem com o uacutenico objetivo de especificar propriedades de strings

Implementadas em graus diferentes em todas as linguagens modernas e modernizadas facilita encontrar uma expressatildeo jaacute pronta pois satildeo quase iguais em qualquer linguagem

Estatildeo na biblioteca padratildeo em IDL Python R Perl

Em C++ e Java em bibliotecas comuns (Boost Jregex)

Para que servem

Uma expressatildeo regular especifica propriedades de strings

O interpretador de expressotildees regulares (regular expression engine) recebe a expressatildeo e o string a analisar e determina se o string corresponde (matches) agrave expressatildeo regular

Em alguns casos o interpretador pode tambeacutem informar que parte(s) do string corresponde(m) a que parte(s) da expressatildeo regular e realizar processamentos com estas partes

3789

Expressotildees regulares ndash exemplos de usos Separar partes de strings

Encontrar linhas em arquivos que tenham nomes valores e comentaacuterios e separar estes pedaccedilos

Escalar com comentaacuterio

SLITPA = 351979 Slit position angle

Array 1D sem comentaacuterio (se extendendo por vaacuterias linhas)

BAND_BIN_CENTER = (03505400358950036629003732200379490 0387900104598)

Escalares em diferentes formatos

Total Mechanical Luminosity 15310E+03resources_usedwalltime=005603

Pedaccedilos de nomes

6063 17836E-20 2456 T FeIX((3Pe)3d(2PE)4p_1Po-3s2_3p6_1Se)

Datas separando ano mecircs dia hora (em vaacuterios formatos diferentes)

DATE-OBS= 2006-12-18 universal date of observationDATE_TIME = 2010-07-19T161032START_TIME = 2006-182T225102850Z

3889

Expressotildees regulares ndash exemplos de usos

Separar partes de strings Separar partes de nomes de arquivos (por significarem algo como identificar o

conteuacutedo)

specdec18s0041fitsscamdec18i0054fits15_7_mts_hmpixselh_mr15sav15_7_mts_hwpixselh_mr15sav16_3_mts_hwpixselb_mr16savreadmodel5l_-1_000010000_10000_r05_030_08196_0100000_005000000_1000eps

Determinar se um string eacute um nuacutemero (inteiro real fixo flutuante)

Encontrar identificadores Exs nomes de cataacutelogos endereccedilos HTTPFTP endereccedilos de email

Separar campos em arquivos sendo lidos onde as linhas natildeo tecircm a mesma formataccedilatildeo algumas linhas com colunas separadas por espaccedilos outras por tabs outras por

siacutembolos ignorando linhas de comentaacuterios e linhas vazias

3989

Expressotildees regulares - usoEx (IDL) encontrar nomes de arquivos com algumas propriedades

IDLgt printfilesformat=(A)CM_1477475933_1_viscubCM_1477476864_1_ircubCM_1477476864_1_irgcubCM_1477476864_1_viscubCM_1477477826_1_ircubCM_1477477826_1_irgcubCM_1477477826_1_viscubmosaic2cub

IDLgt printstregex(files+irgcubboolean) 0 0 1 0 0 1 0 0

A expressatildeo regular eacute +irgcub Especifica uma ou mais ocorrecircncias seguidas (+) de qualquer caractere () seguido de uma ocorrecircncia de irgcub (o ponto vem precedido do caractere de

escape () para ser entendido literalmente como um ponto e natildeo como o seu significado especial (qualquer caractere)

Esta aplicaccedilatildeo do interpretador (stregex) retorna um valor Booleano (verdadeirofalso) para cada elemento do string passado (files) que informa se aquele elemento correspondia agravequela expressatildeo regular

Este eacute um exemplo artificial Seria mais faacutecil ter usado strmatch(filesirgcub)

4089

Expressotildees regulares - uso

Em casos como este tipicamente o resultado de stregex seria usado como filtro para selecionar apenas os elementos do array de strings que satisfazem agravequela expressatildeo regular

IDLgt w=where(stregex(files+irgcubboolean)null)IDLgt printfiles[w]format=(A)CM_1477476864_1_irgcubCM_1477477826_1_irgcub

Ex (IDL) Determinar que strings conteacutem uma data no formato yyyy-mm-dd

IDLgt strs=[201002012010-02-012010-2-1aaaa-mm-ddT2010-02-01J]IDLgt printstregex(strs[0-9]4-[0-9]2-[0-9]2boolean) 0 1 0 0 1

Esta expressatildeo regular especifica quatro repeticcedilotildees (4) de diacutegitos (caracteres na faixa [0-9]) seguido de um (-) seguido de duas repeticcedilotildees (2) de dois diacutegitos ([0-9]) seguido de um (-) seguido de duas repeticcedilotildees (2) de dois diacutegitos ([0-9])

Uma expressatildeo regular apenas um pouco mais elaborada poderia corresponder aos 3 formatos de data no array acima E poderia se impedir que a uacuteltima (com outros caracteres antes e depois da data) seja aceita

4189

Expressotildees regulares - regras - caracteres ldquonormaisrdquo

Uma expressatildeo regular usa caracteres ldquonormaisrdquo e especiais para especificar o que se vai procurar na ordem em que aparecem na expressatildeo

Se um caractere eacute normal (natildeo eacute um dos especiais mostrados adiante) ele especifica uma ocorrecircncia daquele caractere

Ex J eacute uma expressatildeo regular que corresponde a qualquer string onde ocorra J Jaacute JA soacute corresponde a strings que tenham JA dentro

Exs (IDL)

IDLgt strs=[JJJJJJaJAjaJa]

IDLgt printstregex(strsJboolean) 1 1 1 0 1

IDLgt printstregex(strsJAboolean) 0 0 1 0 0

4289

Expressotildees regulares - regras - caracteres especiaisCaracteres especiais tecircm outros significados Para significar literalmente aquele caractere deve ser escapado (escaped) com um

Siacutembolo significado exemplo Corresponde(m) Escape o caractere seguinte deve ser interpretado

literalmente natildeo como especial aa

Qualquer caractere ab ajb aab abb jafbc

+ Uma ou mais repeticcedilotildees do que vem agrave esquerda a+b ab aab bab baabh

() Subexpressatildeo para agrupar termos afetados por um caractere especial (como parecircnteses em notaccedilatildeo matemaacutetica)

(ab)+c abc ababc dabababcg

Zero ou mais repeticcedilotildees dos termos agrave esquerda ab abbaab caaabg

Zero ou uma repeticcedilatildeo dos termos agrave esquerda ab b ab cabd cbd

| Alternaccedilatildeo qualquer um dos dois agrave esquerda a|bc ac bc jacd jbcd

n Exatamente n repeticcedilotildees do termo agrave esquerda a2b aab daaabg

n1n2 De n1 a n2 repeticcedilotildees do termo agrave esquerda a12b ab aab aaab gaaabbd

^ Acircncora (no comeccedilo) nada agrave esquerda ^ab ab abb

$ Acircncora (no fim) nada agrave direita ab$ abaab

[] Conjunto de valores (explicado adiante)

4389

Expressotildees regulares - regras - conjuntos de valores

[] denota um conjunto de valores que pode conter

Uma lista de coisas que devem corresponder Ex [abc] signfica qualquer caractere no conjunto abc Correspondem a esta

expressatildeo abcabha

Uma lista de coisas que natildeo podem corresponder [^abc] significa qualquer coisa que natildeo seja a b ou c Correspondem a esta

expressatildeo d jgs gg

Faixas de valores [0-9] signfica qualquer diacutegito [0-9a-zA-Z] significa qualquer diacutegito ou letra

Classes de valores como algumas faixas e outros conjuntos ocorrem com muita frequumlecircncia haacute nomes

especiais para eles Estes (em IDL) vecircm entre [] ex [[digit] significa o mesmo que [0-9]

4489

Expressotildees regulares - regras - classes de valores

Classe signficado

alnum Caracteres alfanumeacutericos 0-9a-zA-Z

alpha Caracteres alfabeacuteticos a-zA-Z

cntrl Caracteres de controle ASCII (natildeo visiacuteveis coacutedigos 1 a 31 e 127)

digit Diacutegitos (decimais) 0-9

graph Caracteres visiacuteveis ASCII 33 a 126 (natildeo inclui o espaccedilo)

lower Letras minuacutesculas a-z

print Caracteres ldquoimprimiacuteveisrdquo (visiacuteveis e o espaccedilo) ASCII 32 a 126

punct Caracteres de pontuaccedilatildeo $amprsquo()+-lt=gt[]^_lsquo|~

space Os caracteres ldquoem brancordquo (blank) espaccedilo tab tab vertical CR LF (ASCII 32 e 9-13)

upper Letras maiuacutesculas A-Z

xdigit Diacutegitos hexadecimais 0-9A-Fa-f

lt Comeccedilo de palavra (palavra definida como sequumlecircncia de coisas natildeo space)

gt Fim de palavra (palavra definida como sequumlecircncia de coisas natildeo space)

Estas satildeo apenas as principais Algumas implementaccedilotildees tecircm muito mais (em particular nas linguagens que usam Unicode nativamente)

4589

Expressotildees regulares - exemplos

Determinar se strings satildeo nuacutemeros (Ex IDL)

IDLgt str=[9-18 875-812-45913E9-98d7a188d032f5]

Inteiros

IDLgt intexpr=^[-+][0-9]+$

IDLgt printstregex(strintexprboolean) 1 1 0 0 0 0 0 0 0 0

Ponto flutuante

IDLgt fpexpr=^[-+](([0-9][0-9]+)|([0-9]+[0-9]))([eEdD][-+][0-9]+)$

IDLgt printstregex(strfpexprboolean) 1 1 0 1 1 1 1 1 0 0

Sinal opcional

1 ou mais diacutegitos

Sinal opcional

0 ou mais diacutegitos opcionalmente seguidos de um ponto e 1 ou mais diacutegitos

1 ou mais diacutegitos opcionalmente seguidos de um ponto e 0 ou mais diacutegitos

ou Expoente opcional letra do expoente seguida de sinal opcional seguido de um ou mais diacutegitos

4689

Expressotildees regulares ndash extraccedilatildeo

Interpretadores de expressotildees regulares costumam oferecer mais que apenas testar se um string corresponde a uma expressatildeo

Em geral tambeacutem podem retornar que parte(s) do string corresponde(m) agrave expressatildeo

Ex (IDL) Determinar se um string conteacutem uma data incluindo os formatos

IDLgt dates=[2011-01-312011 1 3120110131something done on y2011m1d31 with something]

E extrair a data de dentro do string

IDLgt expr=[0-9]4[0-9]12[0-9]12

(4 diacutegitos)(qualquer separador)(1 a 2 diacutegitos)(qualquer separador)(1 a 2 diacutegitos)

IDLgt printstregex(datesexprextract)format=(A)2011-01-312011 1 31201101312011m1d31

Como agora separar ano mecircs e dia Com uma busca e uma extraccedilatildeo para cada Poderia ser mais eacute mais faacutecil com uma uacutenica expressatildeo regular

4789

Expressotildees regulares - aleacutem de apenas testes

Tambeacutem podem retornar que parte(s) do string correspondem agrave expressatildeo toda e agraves suas subexpressotildees (partes da expressatildeo delimitadas por parecircnteses)

Ex (IDL) Separar pedaccedilos de datas Neste caso para a expressatildeo ficar menor assumindo um formato simples (yyyy-mm-ddThhmmssfff) Mas poderia ser um formato mais livre como no exemplo anterior

IDLgt str=Stuff observed on 2011-01-31T123924983 with some instrumentIDLgt expr=([0-9]4)-([0-9]2)-([0-9]2)T([0-9]2)([0-9]2)([0-9]2[0-9]3)

(quatro diacutegitos)-(2 diacutegitos)-(2 diacutegitos)T(2 diacutegitos)(2 diacutegitos)(2 diacutegitos3 diacutegitos)

IDLgt pieces=stregex(strexprextractsubexpr)IDLgt printpiecesformat=(A)2011-01-31T12392498320110131123924983IDLgt d=julday(pieces[2]pieces[3]pieces[1]pieces[4]pieces[5]pieces[6])IDLgt printdformat=(F166) 2455593027372

Expressatildeo inteiraPrimeira subexpressatildeoSegunda subexpressatildeoTerceira subexpressatildeoQuarta subexpressatildeoQuinta subexpressatildeoSexta subexpressatildeo

4889

Expressotildees regulares - referecircncias httpxkcdcom208

Viacutedeos do Software Carpentry

httpsoftware-carpentryorg4_0regexp

4989

Arquivos

Quase todo programa precisa armazenar dados em arquivos

Podem ser pequenos arquivos de paracircmetros ou enormes arquivos de dados produzidos ou a processar

Apesar do sugerido pela praacutetica comum arquivos texto natildeo satildeo sempre a melhor escolha para armazenar dados - e haacute muitas formas diferentes de os usar

Qual eacute a melhor escolha

Assim como para linguagens ou contecirciners natildeo existe ldquoo melhor formatordquo Cada um tem suas vantagens e desvantagens

Dados diferentes (mesmo se usados pelos mesmos programas) em geral se adequam melhor a formatos diferentes

5089

Arquivos - texto X binaacuterios

Em qualquer formato arquivos satildeo armazenados como diacutegitos binaacuterios

Mas haacute duas formas principais como eles podem ser codificados

Arquivos baseados em texto (text files)

Dados satildeo transformados em caracteres usando alguma formataccedilatildeo (mesmo se impliacutecita) e escritos com alguma codificaccedilatildeo de texto (comumente mas natildeo necessariamente ASCII)

Um arquivo texto eacute um ou mais strings As mesmas conversotildees tecircm que ser feitas depara outros tipos

Arquivos ldquobinaacuteriosrdquo (binary files)

Embora todo arquivo seja binaacuterio este nome costuma ser usado soacute para aqueles em que os dados natildeo estatildeo na forma de texto

Com frequumlecircncia (nem sempre) os dados satildeo gravados de forma idecircntica a como satildeo armazenados na memoacuteria

Muitos formatos usam uma mistura de partes em texto e partes binaacuterias

Um cabeccedilalho (header) de texto que daacute informaccedilotildees (metadados) sobre os dados armazenados na parte binaacuteria que vem depois

O cabeccedilalho conteacutem em especial informaccedilotildees sobre como ler os dados binaacuterios

5189

Arquivos - texto X binaacuterios

Vantagens de arquivos texto

Legiacuteveis por pessoas (human readable)

Podem ser auto-suficientes todo o necessaacuterio para os ler e entender o que conteacutem pode ser obtido olhando o arquivo

Satildeo os menos especiacuteficos a linguagens software normalmente satildeo escritos em ASCII ou Unicode e sempre haacute algum suporte a ler escrever texto em linguagens software

Haacute alguns formatos padratildeo para texto (exs CSV XML) que satildeo suportados em muitas plataformas diferentes

5289

Arquivos - texto X binaacuterios

Vantagens de arquivos binaacuterios

Em geral natildeo haacute conversotildees entre o os dados como armazenados na memoacuteria O que torna o armazenamento mais eficiente e sem alteraccedilotildees nos valores

A maior parte dos formatos padronizados eacute binaacuteria Exs FITS cube CDF NetCDF HDF HDF5 JPEG JPEG2000 TIFF GeoTIFF MPEG etc

Eacute mais comum que haja bibliotecas prontas (ateacute de alto niacutevel) para consulta leitura e gravaccedilatildeo

Os formatos melhor desenhados satildeo autodocumentados (em texto ou binaacuterio) para os ler natildeo eacute necessaacuterio conhecimento preacutevio sobre como os dados foram armazenados

Toda linguagem plataforma costuma ter seu formato binaacuterio mais nativo que costuma ser o mais faacutecil para leitura gravaccedilatildeo Em particular nas de alto niacutevel que tecircm formatos autodocumentados (especialmente

em IDL R Python Java)

Muitos formatos tecircm opccedilatildeo de compressatildeo dos dados

5389

Arquivos - proprietaacuterios X padratildeo

Independente da escolha texto binaacuterio programas devem escolher entre usar um formato proacuteprio ou um formato padronizado

A principal vantagem de formatos proacuteprios eacute que satildeo definidos da forma mais conveniente para a aplicaccedilatildeo que os usa simplificando leitura e gravaccedilatildeo e potencialmente otimizando recursos (acesso ao disco tamanho do arquivo etc)

A principal desvantagem de formatos proacuteprios eacute ser necessaacuterio escrever todo o coacutedigo para os ler gravar

Pode dar mais trabalho que usar um formato geneacuterico que natildeo seja exatamente o que melhor se encaixa na aplicaccedilatildeo

O coacutedigo para processar o formato em geral vai ser menos completo e conveniente de usar que o de um formato bem estabelecido usado por muitos outros em muitos ambientes

Cada novo software que for usar estes arquivos vai precisar compartilhar do mesmo coacutedigo ou precisar de coacutedigo novo (em particular se em outra linguagem) para ler gravar naquele formato

Eacute necessaacuterio documentar o formato e decidir sobre como ele seraacute definido

Se outros jaacute colocaram muito trabalho desenvolvendo bons formatos padratildeo bem suportados em muitos ambientes por que ter o trabalho de reinventar (e reprogramar redocumentar e retestar) a roda

5489

Arquivos - padrotildees comuns em astronomia (exs adiante)

Texto

CSV Comma-separated values - bem suportado por muitos softwares

ldquoColunas fixasrdquo Natildeo eacute um padratildeo bem definido mas eacute praacutetica comum para tabelas (2D)

XML Extensible Markup Language - O padratildeo texto mais flexiacutevel de grande uso em programaccedilatildeo geral para armazenar qualquer coisa com frequumlecircncia de forma hieraacuterquica Bem suportado por linguagens modernas (e modernizadas) e bibliotecas das principais

linguagens gerais Alta complexidade o torna trabalhoso de usar

5589

Arquivos - padrotildees comuns em astronomia (exs adiante)Binaacuterios

FITS Flexible Image Transport System - o mais comum para observaccedilotildees astronocircmicas Conteacutem os dados (em geral arrays 1D 2D ou 3D) e documentaccedilatildeo (nos cabeccedilalhos) sobre a origem e caracteriacutesticas dos dados Tambeacutem usado para armazenar tabelas de dados quaisquer mesmo que natildeo sejam observaccedilotildees (especialmente pelo STSCI) Variam muito em qualidade de documentaccedilatildeo

NetCDF Network Common Data Form - evoluccedilatildeo do CDF autodocumentado eacute comum e bem suportado para vaacuterios arrays de dados

HDF5 Hierarchical Data Format ndash autodocumentado comum e bem suportado permitindo aleacutem de simples arrays estruturas (eacute um formato hieraacuterquico)

Formatos de imagens JPEG JPEG2000 TIFF GeoTIFF etc - voltados para arrays 2D3D de inteiros ou (em alguns casos) reais com ou sem compressatildeo JPEG2000 tem caracteriacutesticas mais avanccediladas como imagens multiresoluccedilatildeo

Formatos vetoriais PS EPS DXF SHP SVG - variados niacuteveis de suporte a armazenamento de vetores e formas em 2D ou 3D

ISIS Cube semelhante em caracteriacutesticas ao FITS mais usado em sensoriamento remoto geociecircncias e ciecircncias planetaacuterias em geral para observaccedilotildees 1D 2D ou 3D

Formatos nativos de linguagens todo o trabalho de leitura e gravaccedilatildeo eacute feito automagicamente pela biblioteca padratildeo em IDL R Python Java

5689

Arquivos texto - newlines

Apesar do que possa parecer arquivos texto natildeo tecircm intrinsecamente vaacuterias linhas Arquivos texto satildeo soacute uma sequumlecircncia 1D de caracteres em alguma codificaccedilatildeo Separaccedilatildeo em linhas (equivalente a interpretar o arquivo como 2D em linhas e colunas) eacute

especificada por convenccedilotildees Natildeo haacute apenas uma convenccedilatildeo para o fim de linhas

A mais primitiva convenccedilatildeo eacute separaccedilatildeo nenhuma estipula-se que linhas tenham um nuacutemero fixo N de caracteres e cabe ao software que lecirc o arquivo entender que uma linha nova ocorre regularmente a cada N caracteres

Eacute a forma menos portaacutevel e mais inconveniente eacute necessaacuterio o conhecimento preacutevio (ou por inspeccedilatildeo do arquivo) de quantos caracteres haacute por linha

A maior parte dos editores de texto natildeo vai saber separar linhas desta forma (por falta deste conhecimento preacutevio) Exemplo (de um FITS real)

SIMPLE = T Fits standard BITPIX = 16 Bits per pixel NAXIS = 0 Number of axes EXTEND = T File may contain extensions

O que com as linhas quebradas nos lugares certos seria

SIMPLE = T Fits standard BITPIX = 16 Bits per pixel NAXIS = 0 Number of axes EXTEND = T File may contain extensions

5789

Arquivos texto - newlines

A forma mais comum de especificar linhas eacute com um marcador do final de linha (newline)

Eacute um caractere especial natildeo normalmente presente no texto que serve para marcar fim de linhas

Mas natildeo haacute soacute um padratildeo de newline Os mais comuns

LF (Line Feed ASCII 10) ndash Unix Linux Mac OS X

CR - (Carriage Return ASCII 13) - Mac OS lt10

CR+LF (CR seguido de LF) - Windows DOS

Eacute o motivo de o Notepad (Windows) natildeo entender as quebras de linha de arquivos escritos com o formato nativo de Linux o arquivo soacute tem LF enquanto o editor espera CR+LF

Alguns sistemas (strings em vaacuterias linguagens por exemplo) usam o coacutedigo de escape n para indicar newline que eacute codificado de acordo com o padratildeo sendo usado

Em geral bibliotecas de leitura e gravaccedilatildeo de arquivos usam (default pelo menos) o newline nativo do sistema em que satildeo usadas

Programas de conversatildeo entre os sistemas satildeo comuns (ex dos2unix)

O Wordpad identifica se for usado soacute LF e quebra as linhas de acordo

5889

Arquivos - texto - CSV

Comma-separated values

O formato mais padronizado para tabelas (arrays 2D) em texto (frequentemente mas natildeo necessariamente ASCII)

Bem suportado por bibliotecas padratildeo de linguagens e outros softwares (Excel Calc Origin Google Docs etc)

Conteacutem Linhas de cabeccedilalho (opcionais mas recomendadas) linhas com qualquer texto geral

descrevendo o arquivo e em geral uma linha de tiacutetulo para as colunas da tabela Uma (apenas uma) tabela onde todas as linhas tecircm o mesmo nuacutemero de colunas

Colunas separadas por viacutergulas (opcionalmente pode ser outro separador) Linhas terminadas por newline (qualquer que seja) Strings delimitados por ldquo ldquo

Ex

NAMECALMPOSFILNAMEECHLPOSDISPPOSTARGNAMEPOSDIRCLASSMJD-OBSITIMECOADDSdec18s00010NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001dec18s00020NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001dec18s00120NIRSPEC-5-AO635800364500itan140NIRSPEC-5-AOp2 TITAN5408763000001dec18s00140NIRSPEC-5-AO626300364500itan140NIRSPEC-5-AOp1 TITAN5408763000001dec18s00151NIRSPEC-5-AO626300364500itan140NIRSPEC-5-AOp1ARC5408764000001dec18s00160NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001

Natildeo eacute necessaacuterio que as colunas tenham largura constante

Cabeccedilalho

5989

Arquivos - texto - CSVHaacute amplo suporte a leitura e gravaccedilatildeo de CSV sem precisar recorrer a procedimentos de baixo niacutevel

Podem ser diretamente importados em Excel Calc Origin Google Docs ou lido facilmente com bibliotecas padratildeo comuns Ex (IDL)

IDLgt c=read_csv(filesearch_scamcsvheader=h)IDLgt printhNAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS

IDLgt helpc Structure ltc8bca508gt 11 tags length=5256 data length=5248 refs=1 FIELD01 STRING Array[41] FIELD02 LONG Array[41] FIELD03 STRING Array[41] FIELD04 DOUBLE Array[41] FIELD05 DOUBLE Array[41] FIELD06 STRING Array[41] FIELD07 STRING Array[41] FIELD08 STRING Array[41] FIELD09 STRING Array[41] FIELD10 DOUBLE Array[41] FIELD11 LONG Array[41]

IDLgt printcfield01[03]dec18s0001 dec18s0002 dec18s0003 dec18s0004

IDLgt printcfield03[03]NIRSPEC-5-AO NIRSPEC-5-AO NIRSPEC-5-AO NIRSPEC-5-AO

6089

Arquivos - texto - CSVEx (IDL) Criaccedilatildeo de um CSV com uma tabela de valores

Criaccedilatildeo de 3 arrays 1D (12 elementos) um para cada coluna

IDLgt x=dindgen(3)IDLgt y=dindgen(4)IDLgt xx=reform(rebin(x34)12)IDLgt yy=reform(rebin(reform(y14)34)12)IDLgt f=xx+yy10IDLgt helpxxyyfXX DOUBLE = Array[12]YY DOUBLE = Array[12]F DOUBLE = Array[12]

Escrita do arquivo

IDLgt write_csvexamplecsvxxyyfheader=[XYX+10Y]

ResultadoXYX+10Y000000000000000000000000100000000000000010000000200000000000000020000000000000001000000010000000100000001000000011000000()

6189

Arquivos - texto - ldquoColunas regularesrdquoFixed column width

Natildeo eacute exatamente um padratildeo Eacute uma praacutetica comum

Armazena uma tabela (array 2D) de forma regular simples de ser interpretada e lida

Costumam ter linha(s) de cabeccedilalho descrevendo o conteuacutedo do arquivo em geral com uma linha para os nomes das colunas

As demais linhas conteacutem os dados sempre ocupando a mesma largura por coluna e escritos no mesmo formato em cada coluna

Costumam ser simples de ler inclusive interativamente (exs Excel Calc Origin read_ascii)

Ex (IDL) Uma simples tabela soacute de nuacutemeros

wavl CH4=33 wavl CH4=25 wavl CH4=10 wavl CH4=08 wavl CH4=05 wavl CH4=026 wavl CH4=02 477330000 0090130 477330000 0091110 477330000 0089250 477330000 0087000 477330000 0087140 477330000 0090080 477330000 0088110 480040000 0090930 480040000 0091930 480040000 0090160 480040000 0087930 480040000 0088110 480040000 0090950 480040000 0089090 482750000 0091710 482750000 0092730 482750000 0091060 482750000 0088850 482750000 0089080 482750000 0091810 482750000 0090060 485450000 0092530 485450000 0093570 485450000 0092000 485450000 0089810 485450000 0090100 485450000 0092730 485450000 0091090

IDLgt a=read_ascii(specs_27s_ntxtdata_start=1header=header)IDLgt printheader wavl CH4=33 wavl CH4=25 wavl CH4=10 wavl CH4=08 wavl CH4=05 wavl CH4=026 wavl CH4=02 IDLgt helpa Structure ltd423c9a8gt 1 tags length=224 data length=224 refs=1 FIELD01 FLOAT Array[14 4]

6289

Arquivos - texto - ldquoColunas regularesrdquoJaacute um arquivo um pouco mais difiacutecil de ler

NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS dec18s0001 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0002 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0003 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 FLAT 5408757812500 460000 5 dec18s0004 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 DARK 5408757812500 460000 5

Por ter colunas de tipos diferentes (strings inteiros reais) natildeo eacute possiacutevel o ler em um simples array Mas eacute faacutecil o colocar em uma estrutura de arrays onde cada campo eacute uma coluna

Especificando interativamente como interpretar as linhasIDLgt templ=ascii_template(filesearch_scamtxt)

Nome do campo (default mostrado)

Tipo do campo (identificado automaticamente)

Posiccedilatildeo (caracter) do comeccedilo (identificada automaticamente)

Linha de exemplo para verificar as colunas

6389

Arquivos - texto - ldquoColunas regularesrdquoDepois de feito o template o arquivo pode ser lido com apenas

IDLgt a=read_ascii(filesearch_scamtxttemplate=templ)IDLgt helpa Structure ltd4ec4608gt 11 tags length=416 data length=416 refs=1 FIELD01 STRING Array[4] FIELD02 LONG Array[4] FIELD03 STRING Array[4] FIELD04 FLOAT Array[4] FIELD05 FLOAT Array[4] FIELD06 STRING Array[4] FIELD07 STRING Array[4] FIELD08 STRING Array[4] FIELD09 FLOAT Array[4] FIELD10 FLOAT Array[4] FIELD11 LONG Array[4]IDLgt printafield01dec18s0001 dec18s0002 dec18s0003 dec18s0004IDLgt printafield04 626300 626300 626300 626300

O template (uma estrutura contendo dados sobre como ler o arquivo) pode ser usado para outros arquivos no mesmo formato No lugar de ter sido criado interativamente poderia ter sido lido de algum arquivo Poderia ter especificado nomes para os campos que seriam mais amigaacuteveis que coias como FIELD11

6489

Arquivos - texto - XML

Extensible Markup Language

Admite grande flexibilidade e por isso pode ter alta complexidade

Valores satildeo colocados dentro de uma estrutura em hieraacuterquica (em uma aacutervore) com os noacutes identificados pelos seus nomes (chaves)

Largamente usado em muitas aacutereas para armazenar conjuntos arbitraacuterios de quaisquer estruturas de dados

A maioria das aplicaccedilotildees usa um formato que eacute um subconjunto do XML especificado por um Schema comumente em um arquivo XML DTD (Document Type Definition)

6589

Arquivos - texto ndash XML ndash exemplos de usos

Armazenamento de dados de aplicaccedilotildees web (comum para exportar importar dados MediaWiki DokuWiki WordPress ADS Lattes etc)

Documentos Office (docx pptx xlsx) OpenOffice (odt opd ods)

Como versotildees de outros formatos FITSML XDF

ldquoScientific Dataset XML NASAs Astronomical Data Center (ADC) sponsors a number of research projects that

use XML for scientific data representation The XML activities at the ADC are sponsored and supported by the NASA Office of Space Science Applied Information Systems Research Program (AISRP)rdquo - httpxmlcoverpagesorgnasa-adchtml

Astronomical Instrument Markup Language (AIML)

SVG ndash Scalable Vector Graphics

Muitas de outras aplicaccedilotildees listadas em httpxmlcoverpagesorgxmlhtmlapplications

6689

Arquivos - texto ndash XML - exemploltxml version=10 gtltDOCTYPE Xdmf SYSTEM Xdmfdtd []gtltXdmf xmlnsxi=httpwwww3org2001XInclude Version=20gt ltDomaingt lt-- Example of Basic Topologies --gt ltInformation Name=Descriptiongt Example of a Polyvertex Topology ltInformationgt ltGrid Name=Polyvertex GridType=Uniformgt ltTopology TopologyType=Polyvertex Dimensions=3 NodesPerElement=3gt ltDataItem Format=XML Dimensions=3 3 NumberType=Floatgt 0 1 2 4 5 6 8 9 10 ltDataItemgt ltTopologygt ltGeometry Type=XYZgt ltDataItem Format=XML Dimensions=4 4 3gt 00 00 00 10 00 00()Que mostra que a interpretaccedilatildeo (parsing) de XML eacute em geral complexa

6789

Arquivos - texto - XML

Haacute muitas bibliotecas de alto niacutevel para fazer o processamento (parsing) e entregar os dados em uma estrutura conveniente

A complexidade em processar XML estaacute em decidir o que fazer com os dados jaacute que os arquivos podem ser muito complexos

As APIs (Application Programming Interfaces) mais comuns para processar XML que satildeo implementadas em muitas linguagens

DOM (Document Object Model) ndash manteacutem todo o conteuacutedo do em uma estrutura de dados (em geral uma aacutervore) em uma variaacutevel (em geral um objeto) Esta pode ser consultada para obter os valores de interesse para os alterar e usada para escrever um arquivo

SAX (Simple API for XML) ndash Interpretador (parser) por objetos O usuaacuterio escreve uma classe herdando da classe SAX provendo os meacutetodos que vatildeo processar os campos agrave medida em que estes satildeo lidos

6889

Arquivos - binaacuterios - FITSFlexible Image Transport System

O formato mais comum para observaccedilotildees astronocircmicas Tambeacutem usado para armazenar quaisquer dados mesmo natildeo relacionados a observaccedilotildees (especialmente tabelas como eacute praacutetica do STSCI)

Conteacutem um (ou mais) cabeccedilalho(s) de texto com metadados (informaccedilotildees sobre os dados como caracteriacutesticas (necessaacuterias para os ler) origem condiccedilotildees em que foram obtidos processamento realizado etc)

SIMPLE = T image conforms to FITS standard BITPIX = 32 bits per data value NAXIS = 2 number of axes NAXIS1 = 1024 NAXIS2 = 1024 BSCALE = 100000 Scaling factor BZERO = 000000 Scaling zero-point TELESCOP= Keck II Telescope SLITNAME= 0041x226 Slit Name SLITPA = 351979 Slit position angle SLITX = 131500 X pixel of the center of the slit LST = 12010446 local apparent sidereal time (()

Depois do cabeccedilalho haacute uma (ou mais) seccedilatildeo(otildees) de dados binaacuterios Costuma(m) ser array(s) 1D (espectros) 2D (imagens) ou 3D (ldquocubos de dadosrdquo)

De inteiros ou reais inteiros satildeo comuns em contagens de instrumentos reais para valores derivados (fluxos intensidades etc)

6989

Arquivos - binaacuterios - FITSNormalmente FITS satildeo lidos escritos por bibliotecas prontas de (relativamente) alto niacutevel usuaacuterio natildeo tem que saber como os dados satildeo armazenados no arquivo nem como os ler escrever Ex (IDL com a biblioteca idlastro)

IDLgt fits_info2dspectrumfits2dspectrumfits has 3 extensionsPrimary header 288 recordsNo dataExtension 1 -- SCI Header 144 records IMAGE ( 1201 1201 )Extension 2 -- ERR Header 72 records IMAGE ( 1201 1201 )Extension 3 -- DQ Header 72 records IMAGE ( 1201 1201 )

IDLgt mydata=readfits(2dspectrumfitsexten_no=1myheader) READFITS Reading FITS extension of type IMAGE READFITS Now reading 1201 by 1201 array

IDLgt extastmyheadermyastIDLgt sz=size(mydatadimensions)IDLgt xy2ad[1sz[0]][1sz[1]]myastcorners_acorners_dIDLgt printcorners_aCorners of the data array from file 2dspectrumfits are at 14487480 33063480

IDLgt printcorners_d -00041264444 00041402222

Obteacutem os dados de coordenadas (WCS) do header

Coloca os dados no array (2D de floats) mydata e o header no array (1D de strings) myheader

Calcula as coordenadas das quinas da imagem atraveacutes do WCS

Provecirc informaccedilotildees sobre o arquivo

7089

Arquivos - binaacuterios - ISIS Cube

Formatos como FITS se adequam muito a ter uma interface de mais alto niacutevel por objetos

Tambeacutem para dados em tabelas FITS muito mais trabalhosos de ler em baixo niacutevel que se adequam muito mais a mapas ou estruturas

Exemplo (de um formato semelhante a FITS ISIS cube)

O objeto ao ser criado lecirc todo o arquivo

cube=pp_editablecube(CM_1553510065_1_ircub)

Meacutetodos fornecem os dados desejados para obter quando necessaacuterio os dados de interesse

Find out the names of the backplanesprintcubegetproperty(backnames)Get the start time of the cubeprintcubegetfromheader(START_TIME)2007-084T100057286Z

Valores no cabeccedilalho podem ser convenientemente fornecidos como um mapa

header=cubeheader_as_hash()printheader[START_TIME]2007-084T100057286Z

7189

Arquivos - binaacuterios ndash ISIS Cube

Os dados satildeo fornecidos como arraysMake a contour plot of the latitudesc=contour(cubegetsuffixbyname(LATITUDE))Get the band with wavelength nearest to 21 (in the units used in the cube)selband=cubegetbandbywavelength(21wavelengths=selwavs)

Interfaces por overload tornam o acesso ainda mais conveniente

selband=cube[21]

selwavs=cube[21]

Retorna um array com a banda de comprimento de onda mais proacuteximo de 21 (microm)

Retorna o comprimento de onda mais proacuteximo de 21 (microm) da banda retornada acima

7289

Arquivos - binaacuterios ndash ISIS Cube Alteraccedilotildees feitas ao conteuacutedo satildeo automaticamente refletidas em todos os

lugares (cabeccedilalho em particular) afetados mantendo o objeto vaacutelido que pode depois ser gravado em um novo arquivo

IDLgt printcubelinescubesamplescubebands 64 64 256

IDLgt helpcubecoreltExpressiongt FLOAT = Array[64 64 256]

IDLgt cubecore=dblarr(100100256)

A linha acima natildeo eacute uma atribuiccedilatildeo eacute uma invocaccedilatildeo de meacutetodo Eacute equivalente acubesetpropertycore=dblarr(100100256)

Eacute o trabalho da funccedilatildeo setproperty decidir se a propriedade passada (core) faz sentido e se fizer fazer todo o trabalho necessaacuterio a esta mudanccedila Para o usuaacuterio eacute tudo automaacutetico e os dados da classe satildeo vaacutelidos o tempo todo

IDLgt helpcubecoreltExpressiongt DOUBLE = Array[100 100 256]

IDLgt printcubelinescubesamplescubebands 100 100 256

IDLgt cubesaveCM_1553510065_1_ir_editedcub

7389

Arquivos - binaacuterios ndash NetCDF e HDF5

Network Common Data Form e Hierarchical Data Format

Os dois uacutenicos formatos bem estabelecidos para dados cientiacuteficos geneacutericos

Armazenam dados como vaacuterias variaacuteveis e seus metadados Para cada variaacutevel haacute (ou pode haver) os metadados

Nome Dimensotildees (do array) Unidades Comentaacuterios

Ambos permitem arrays multidimensionais

Apenas HDF5 permite estruturas (daiacute vem a hierarquia)

Autodocumentados qualquer software que saiba ler um destes formatos lecirc qualquer arquivo sem precisar de conhecimento preacutevio sobre como o arquivo foi gerado

Muito bem suportados em bibliotecas padratildeo e natildeo padratildeo em softwares interativos e visualizadores (inclusive plugins para navegadores)

httpwwwunidataucaredusoftwarenetcdf httpenwikipediaorgwikiHdf5

NetCDF eacute mais simples de usar por natildeo ter hierarquia dando menos trabalho para ler e escrever dados Se hierarquia natildeo eacute necessaacuteria eacute mais conveniente de usar que HDF5

7489

Arquivos - binaacuterios - NetCDF e HDF5Haacute tambeacutem o formato CDL uma versatildeo ASCII do NetCDF A biblioteca padratildeo do NetCDF inclui conversores entre estes formatos

$ ncdump -h refspec_g01_0ncnetcdf refspec_g01_0 dimensions nlay = 51 nwn = 400 nleg = 33 numu = 2 nlev = 52 nphi = 3 ngas = 2 nwnc = 1 scal = 1 v3 = 3 dnl = 1 nk = 1 tdisr = UNLIMITED (0 currently) na = 16

variables float alb(nwn) float z(nlay) float t(nlay) float p(nlay) float wl(nwn) float iof(nwn) float mtau(nwn) float htau(nwn) float hctaus(nwn) float gtau(nwn) float outcos(scal) float phi(nleg) float phic(scal) float umu(numu) float flux(v3 nwn nlev) float mix(nlay ngas) float c(nlay) float psat(nlay) float ga(nwnc) float wlc(nwnc) float inc(scal) int dm(scal) int ord(scal) float fbeam(scal) float wn(nwn) float tautot(nwn nlay) float htaus(nwn nlay) float htaux(nwn nlay) float taug(nwn nlay) float phase(nwn nlay nleg) float ssa(nwn nlay) float uu(nwn nphi nlev numu) float u0u(nwn nlev numu) float tray(nwn nlay) float gtauo(tdisr nwn nlay)

Haacute 14 variaacuteveis usadas como dimensotildees para as 35 variaacuteveis que satildeo arrays

Ex alb(nwn) indica que alb eacute um array 1D de nwn elementos

nwn estaacute armazenado como uma das dimensotildees e eacute 400 portanto alb tem 400 elementos

Parte do conteuacutedo de um arquivo NetCDF em formato CDL (gerado pelo programa ncdump)

7589

Arquivos - binaacuterios - NetCDF e HDF5Conteuacutedo daquele arquivo visualizado com o ncview (acompanha a biblioteca NetCDF padratildeo)

7689

Arquivos - binaacuterios - NetCDF e HDF5O conteuacutedo de todo o arquivo pode ser lido facilmente com as bibliotecas disponiacuteveis e armazenado em contecirciners convenientes Usando um objeto que gera um resultado um pouco mais conveniente

IDLgt h=pp_readncdf(refspec_g01_0nchash)IDLgt printhvar_dims ltObjHeapVar229(HASH)gtvars ltObjHeapVar152(HASH)gtdims ltObjHeapVar118(HASH)gt

IDLgt printh[vars]T 173203 175459 175848 176001 175975 Z 431869 418858 406067 393403 380464 FLUX 300660 145536 0705180 0341669 0165532 PHASE 100000 0779034 0660858 0542052 0449983 TAUTOT0694377 0693420 0693474 0693540 0693636()

IDLgt help(h[vars])[TAUTOT]ltExpressiongt FLOAT = Array[51 400]

IDLgt print(h[var_dims])[TAUTOT]NLAY NWN

IDLgt print(h[dims])[(h[var_dims])[TAUTOT]]NLAY 51NWN 400

7789

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5)

Visualizaccedilatildeo da variaacutevel selecionada

Metadados e alguns valores da variaacutevel selecionada

Variaacutevel a ser criada com o conteuacutedo desta variaacutevel do arquivo

Hierarquia das variaacuteveis do arquivo

7889

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5) Imported variable az

IDLgt helpaz Structure ltd5723f38gt 13 tags length=448 data length=444 refs=1 _NAME STRING az _ICONTYPE STRING binary _TYPE STRING DATASET _FILE STRING INTENSI_test_409OUTh5 _PATH STRING _DATA DOUBLE Array[38] _NDIMENSIONS LONG 1 _DIMENSIONS ULONG64 Array[1] _NELEMENTS ULONG64 38 _DATATYPE STRING H5T_FLOAT _STORAGESIZE ULONG 8 _PRECISION LONG 64 _SIGN STRING

IDLgt printaz_data 00000000 10000000 20000000 30000000 40000000 50000000 60000000 80000000 ()

7989

Arquivos - binaacuterios - imagens

JPEG JPEG200 TIFF GeoTIFF etc

Os formatos comuns de imagens satildeo bem suportados em muacuteltiplas plataformas para uso dentro de programas e interativamente

Alguns formatos tecircm opccedilatildeo de compressatildeo com perda eou sem perda

Armazenam imagens como arrays 2D ou 3D (3D frequumlentemente limitado a 3 ou 4 em uma das dimensotildees uma imagem em 3 ou 4 bandas) de inteiros ou (em alguns formatos) reais

Alguns formatos permitem armazenar metadados para caracterizar as imagens armazenadas

JPEG2000 e GeoTIFF (um subconjunto de TIFF) comuns em astronomia e aacutereas proacuteximas

8089

Arquivos - binaacuterios ndash imagens ndash exemplo (IDL)IDLgt printquery_tiff(issmap_2009tiffinfogeotiff=geo) 1

IDLgt helpinfo Structure ltd4eca4b8gt 18 tags length=144 data length=132 refs=1 CHANNELS LONG 4 DIMENSIONS LONG Array[2] IMAGE_INDEX LONG 0 NUM_IMAGES LONG 1 PIXEL_TYPE INT 1 TYPE STRING TIFF BITS_PER_SAMPLE LONG 8 POSITION FLOAT Array[2] RESOLUTION FLOAT Array[2] UNITS LONG 2 TILE_SIZE LONG Array[2] DESCRIPTION STRING ISS (2009) DATE_TIME STRING 20100218 012436()

IDLgt helpgeo Structure ltd4efa1b8gt 10 tags length=264 data length=262 refs=1 MODELPIXELSCALETAG DOUBLE Array[3] MODELTIEPOINTTAG DOUBLE Array[6 4] GEOGRAPHICTYPEGEOKEY INT 4035 GEOGSEMIMAJORAXISGEOKEY DOUBLE 25750000 GEOGSEMIMINORAXISGEOKEY DOUBLE 25750000()

IDLgt myimage=read_tiff(issmap_2009tiff) Lecirc a imagem para o array myimage

Obteacutem informaccedilotildees sobre o arquivo

8189

Arquivos - binaacuterios ndash formatos nativosLinguagens como IDL R Python Java tecircm seu formato nativo binaacuterio acessado em alto niacutevel Basta mandar salvar ler variaacuteveis no do arquivo a biblioteca padratildeo automagicamente faz todo o trabalho de decidir como gravar ler os dados

Conveniente de usar na proacutepria linguagem Mas raramente existem bibliotecas para ler gravar o formato nativo de uma linguagem a partir de outra Ex (IDL)

IDLgt savefile=2dspectrumsavmydatamyheadercorners_dcorners_averbosecompress SAVE Portable (XDR) compressed SAVERESTORE file SAVE Saved variable MYDATA SAVE Saved variable MYHEADER()

Pode ser lido com apenas (haacute formas mais elaboradas)

IDLgt restore2dspectrumsavverbose RESTORE Portable (XDR) compressed SAVERESTORE file RESTORE Save file written by ltunknowngtltunknowngt Thu Jan 27 191422 2011 RESTORE IDL version 801 (linux x86_64) RESTORE Restored variable MYDATA RESTORE Restored variable MYHEADER()

IDLgt helpmydatamyheadercorners_dcorners_aMYDATA FLOAT = Array[1201 1201]MYHEADER STRING = Array[144]()

8289

Arquivos - processamento em baixo niacutevel

Nem sempre um formato padratildeo eacute a melhor escolha para o problema

Nem sempre haacute escolha (pode-se ter que trabalhar com arquivos que jaacute foram escritos em algum formato proprietaacuterio)

Agraves vezes o formato eacute padratildeo mas natildeo haacute bom suporte a ele disponiacutevel

Em todos estes casos eacute necessaacuterio escrever rotinas em baixo niacutevel que vatildeo ler processar diretamente o conteuacutedo do arquivo

Preferencialmente criando interfaces de alto niacutevel para o programa que vai as usar

8389

Arquivos - processamento em baixo niacutevel - texto

Tomando o exemplo anterior onde as colunas eram de diferentes tipos

NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS dec18s0001 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0002 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0003 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 FLAT 5408757812500 460000 5 dec18s0004 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 DARK 5408757812500 460000 5

A forma mais simples de o ler diretamente eacute definir uma estrutura para receber cada linha e um array destas estruturas para receber todo o arquivo Ex (IDL)

IDLgt record=namecalmpos0filnameechlpos0d0disppos0d0targnameposdirclassmjd_obsitime0d0coadds0IDLgt nlines=file_lines(filesearch_scamtxt)IDLgt mydata=replicate(recordnlines-1)IDLgt header=

Depois de definidas as variaacuteveis que vatildeo receber os dados o arquivo pode ser lido

IDLgt openrunitfilesearch_scamtxtget_lunIDLgt readfunitheaderIDLgt readfunitmydataformat=(A14I8A15F104F104A18A19A15F158F105I15)IDLgt free_lununit

A gravaccedilatildeo de um arquivo texto poderia ser feita de forma semelhante apenas trocando openr por openw (abrir o arquivo para gravaccedilatildeo natildeo leitura) e readf por printf

O arquivo eacute aberto em uma unidade (unit) usada para especificar de onde eacute feita a leitura

Ao final o arquivo eacute fechado

8489

Arquivos - processamento em baixo niacutevel - texto

O que resulta em

IDLgt printheader NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS

IDLgt helpmydataMYDATA STRUCT = -gt ltAnonymousgt Array[4]

IDLgt helpmydata[0] Structure ltd5e38f68gt 11 tags length=136 data length=124 refs=3 NAME STRING dec18s0001 CALMPOS INT 0 FILNAME STRING NIRSPEC-5-AO ECHLPOS DOUBLE 62630000 DISPPOS DOUBLE 36450000 TARGNAME STRING HD85258 POSDIR STRING NIRSPEC-5-AOp1 CLASS STRING STAR MJD_OBS STRING 54087574 ITIME DOUBLE 10000000 COADDS INT 1

Este caso eacute mais complicado que os mais comuns por haver colunas de strings

Se todas fossem de nuacutemeros natildeo teria sido necessaacuterio especificar o formato explicitamente As colunas teriam sido adivinhadas pela biblioteca que lecirc o arquivo Poderia ter sido lido escrito soacute com um array de nuacutemeros sem estruturas

8589

Arquivos - processamento em baixo niacutevel - binaacuterio

Formatos binaacuterios podem ser definidos de qualquer forma O arquivo eacute apenas um conjunto de bytes Cabe ao software saber como os interpretar

Uma escolha comum para que sejam autodocumentados eacute incluir um cabeccedilalho de texto informando as caracteriacutesticas dos dados necessaacuterias para os ler

Ex (IDL) criar um arquivo que armazene um array de doubles com um cabeccedilalho informando as dimensotildees para que o programa que o lecirc saiba como ler os dados

Inventa dados e abre o arquivo

IDLgt data_to_write=dindgen(34)IDLgt openwunitbinary_exampledatget_lun

Escreve as dimensotildees como texto

IDLgt printfunitdimensions of the double array stored belowIDLgt printfunitsize(data_to_writedimensions)

Escreve os dados binaacuterios

IDLgt writeuunitdata_to_write

Fecha o arquivo

IDLgt free_lununit

Escreve em binaacuterio (write unformatted)

8689

Arquivos - processamento em baixo niacutevel - binaacuterio

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

dimensions of the double array stored below 3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

8789

Arquivos - processamento em baixo niacutevel - binaacuterioA leitura deste arquivo eacute igualmente simples

IDLgt header=IDLgt dims=[00]IDLgt openrunitbinary_exampledatget_lun

Lecirc as dimensotildees (armazenadas como texto)

IDLgt readfunitheaderIDLgt readfunitdims

Lecirc a parte binaacuteria depois de saber as dimensotildees

IDLgt data_read=dblarr(dims)IDLgt readuunitdata_read

Fecha o arquivo

IDLgt free_lununit

Verifica que os dados foram gravados e lidos corretamente

IDLgt printarray_equal(data_to_writedata_read) 1

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Lecirc dados binaacuterios (read unformatted)

8889

Sumaacuterio

5 ndash Slides em httpwwwppenteadonetpeapea04_strings_iopdf Strings Expressotildees regulares Arquivos

httpwwwppenteadonetpea

8989

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89

Strings - processamento baacutesico

Valor loacutegico

String vazio (null string) eacute falso o resto eacute verdadeiro

IDLgt c=

IDLgt if c then printc is not empty string else printc is null string ()c is null string ()

IDLgt c=a

IDLgt if c then printc is not empty string else printc is null string ()c is not empty string

Espaccedilo natildeo eacute o mesmo que string vazio

IDLgt c=

IDLgt if c then printc is not empty string else printc is null string ()c is not empty string

1989

Strings - processamento baacutesico Comparaccedilotildees

IDLgt helpabA STRING = someB STRING = some string

IDLgt printb eq a 0

IDLgt printb gt a 1

IDLgt c=[ab9Some somesome other string]

IDLgt printc[sort(c)]format=(A) some9Somesomesome other stringsome string

IDLgt printa eq A 0

IDLgt printstrcmp(aAfold_case) 1

Comparaccedilotildees de ldquotamanhordquo (maior menor etc) satildeo comparaccedilotildees pela ordem de codificaccedilatildeo (ldquoalfabeacuteticardquo)

Algumas linguagens permitem definir o ordenamento (como considerar maiuacutesculasminuacuteculas letras com acentos nuacutemeros e siacutembolos) Exs Python C++ Java Perl

2089

Strings - processamento baacutesico Substrings

IDLgt printstrmid(abcdefg32)de

Algumas linguagens nativamente suportam iacutendices para indicar substrings C C++ Fortran Python Ex (Python)

gtgtgt s=abcdegtgtgt print(s[25])cde

Outras permitem que sejam definidos iacutendices por objetos strings

Busca de caracteres ou substrings

IDLgt printstrpos(abcdefgd) 3

IDLgt printstrpos(abcdefgj) -1

IDLgt printstrpos(abcdefgbc) 1

2189

Strings - processamento baacutesico

Outros

IDLgt printstrlen(1234567) 7

IDLgt printstrlen(1234567 ) 8

IDLgt printstrlen( 1234567 ) 9

IDLgt helpstrtrim( 1234567 2)ltExpressiongt STRING = 1234567

IDLgt helpstrtrim( 1234567 1)ltExpressiongt STRING = 1234567

IDLgt helpstrtrim( 1234567 0)ltExpressiongt STRING = 1234567

IDLgt printstrupcase(abcdEF)ABCDEF

IDLgt printstrlowcase(abcdEF)abcdef

Medindo quantos caracteres tem o string inclui espaccedilos em branco

Remoccedilatildeo dos brancos agrave esquerda agrave direita ou dos dois lados

2289

Strings - conversatildeo de outros tipos para strings

Eacute uma das operaccedilotildees mais comuns para gerar textos informativos e nomes escrever arquivos (aquivos texto discutidos adiante) etc

Eacute natildeo trivial jaacute que a conversatildeo pode ser feita de muitas formas diferentes

Para tipos fundamentais sempre haacute uma conversatildeo default tanto criando um string como usando algo tipo print (para strings terminal ou arquivos)

Todo comando tipo print (print printf sprintf string write etc) e toda escrita para arquivos texto eacute uma conversatildeo para string (terminais e arquivos texto soacute conteacutem strings)

2389

Strings - conversatildeo de outros tipos para strings

Exemplos de conversotildees (IDL)

IDLgt print[-109] -1 0 9

IDLgt print1d01B10 10000000 1 100000

IDLgt helpstring(1d01B10)ltExpressiongt STRING = 10000000 1 100000

IDLgt printfunitdblarr(343)

Tipos mais elaborados podem ou natildeo ter uma forma predefinida Com objetos eacute comum ser possiacutevel definir a conversatildeo (stringification) ao criar a classe

IDLgt h=hash(a109[01]18b)

IDLgt printh9 0 1a 100000180000 b

Strings

Coloca strings em um arquivo (adiante)

Strings criados por um meacutetodo da classe hash satildeo uma forma de representar o hash

2489

Strings - conversatildeo de outros tipos para strings

Algumas linguagens (Python IDL) tecircm mais de uma forma default de gerar strings Em Python uma forma eacute executaacutevel a outra eacute mais legiacutevel

In [30] x=arange(12)reshape(43)

In [31] print(x)[[ 0 1 2] [ 3 4 5] [ 6 7 8] [ 9 10 11]]

In [32] xOut[32]array([[ 0 1 2] [ 3 4 5] [ 6 7 8] [ 9 10 11]])

In [33] y=array([[ 0 1 2] [ 3 4 5] [ 6 7 8] [ 9 10 11]])

In [37] print(array_equal(xy))True

String mais legiacutevel

String executaacutevelPode ser usado para criar um objeto equivalente

2589

Strings ndash formataccedilatildeo expliacutecita

A formataccedilatildeo pode ser especificada se a conversatildeo default natildeo eacute adequada para definir a conversatildeo em um novo tipo

Cada linguagem tem sua sintaxe para formataccedilatildeo

Haacute dois estilos semelhantes em vaacuterias linguagens

Ambos os estilos satildeo sintaxes diferentes para a mesma ideacuteia Um coacutedigo especifica o tipo de dado sendo passado (inteiro real etc) e detalhes de como seraacute feito o string (largura do campo diacutegitos decimais alinhamento etc)

2689

Strings ndash formataccedilatildeo expliacutecita

Estilo Fortran

IDL

IDLgt print1d0+1d-9 10000000

IDLgt print1d0+1d-9format=(E1610)10000000010E+00

IDLgt printx=1d0+1d-9format=(A0F1613)X= 10000000010000

Estilo C (ldquoprintfrdquo)

IDL

IDLgt printformat=(x=1610e)1d0+1d-9x=10000000010e+00

Python

In [20] print(x=1610e (1e0+1e-9))x=10000000010e+00

Nenhum formato expliacutecito (default)

2789

Strings - formatos tipo Fortran

(apenas o principal ver documentaccedilatildeo para detalhes)

Ex (IDL)

IDLgt printx=1d0+1d-9format=(A0F1613)X= 10000000010000

Tambeacutem haacute modificadores para especificar alinhamento (-) se deve haver (ou ser suprimido) avanccedilo para a pŕoxima linha posiccedilatildeo dentro do campo etc

Coacutedigo Significado Exemplo(s)

A String (A) (10A)

I Inteiro decimal (I) (10I)(-2I)

B Inteiro binaacuterio (B) (10B)

Z Inteiro hexadecimal (Z) (10Z)

O Inteiro octal (O) (10O)

F Real ponto fixo (F)(F52)

E D Real ponto flutuante (E)(D1610)

G Real ponto fixo ou flutuante de acordo com o valor (G)(G10)

ldquordquo String literal (ldquox=rdquoI10)

X Caracteres em branco (A10XI)

2889

Strings - formatos tipo C (printf)(apenas o principal ver documentaccedilatildeo para detalhes)String com campos a serem substituiacutedos por valores (passados adiante) marcados por coacutedigos com

Ex (Python)In [20] print(x=1610e (1e0+1e-9))x=10000000010e+00

Haacute modificadores para especificar alinhamento como preencher o espaccedilo que sobra (espaccedilos zeros etc) para imprimir o sinal + etc

Coacutedigo Significado (tipo) Exemplo(s)

di Inteiro decimal (int) d 5d +05d

u Inteiro decimal sem sinal (unsigned int) u 7u

fF Real em ponto fixo (double float) f 136f

eE Real em ponto flutuante (double float) e 1610e

gG Real em ponto fixo ou flutuante decidido pelo valor (double float)

g 73G

xX Inteiro sem sinal hexadecimal (unsigned int) x 10X

o Inteiro sem sinal octal (unsigned int) o 5o

s String (string) s 10s

c Caractere (char) c

p Ponteiro - estilo C - (void ) p

literal

2989

Strings - conversatildeo de strings para outros tipos

Para gerar dados a partir de strings datas identificadores pedaccedilos de nomes valores numeacutericos armazenados em strings

Tambeacutem sempre haacute conversotildees default para os tipos baacutesicos onde o intepretador programa faz o possiacutevel para entender o string como um valor daquele tipo

Tipicamente eacute feito por casts (funccedilotildees de conversatildeo) reads (de strings ou arquivos texto (arquivos texto satildeo strings)) construtores de objetos ou implicitamente

3089

Strings - conversatildeo de strings para outros tipos - impliacutecitas

Exs (IDL)

IDLgt helpfix([17 17 171 -17 9 8])ltExpressiongt INT = Array[5]

IDLgt printfix([17 17 171 -17 9 8]) 17 17 17 -17 9

IDLgt printdouble([17 17 171 -17 9 8]) 17000000 17000000 17100000 -17000000 90000000

IDLgt readfunitabcd

IDLgt a=0d0IDLgt b=00IDLgt c=0IDLgt reads171d0 189d0 -9abcIDLgt helpabcA DOUBLE = 17100000B FLOAT = 189000C INT = -9

Converte o conteuacutedo do string para os tipos das variaacuteveis abcd (explicado adiante)

3189

Strings - conversatildeo de strings para outros tipos

Quando o default natildeo eacute suficiente (ou quando escrevendo o conversor em uma classe) costuma ser possiacutevel o fazer com formatos semelhantes aos formatos para gerar strings Exs (IDL)

IDLgt a=0d0IDLgt b=00IDLgt c=0IDLgt reads171d0 something 189d0-9abc READS Input conversion error Unit 0 File ltstdingt Error occurred at $MAIN$ Execution halted at $MAIN$

Natildeo funcionou porque sozinho ele natildeo conseguiu saber o que fazer com o ldquosomethingrdquo Usando um formato especiacutefico

IDLgt reads171d0 something 189d0-9 abcformat=(D6111XD611XI)

IDLgt helpabcA DOUBLE = 17100000B FLOAT = 189000C INT = -9

Exemplos mais complicados adiante (arquivos texto)

Variaacuteveis tecircm que ser definidas para informar para que tipo seraacute feita a conversatildeo default

3289

Strings - processamento natildeo baacutesicoOperaccedilotildees importantes e muito necessaacuterias mas que natildeo satildeo suportadas em todas as linguagens bibliotecas padratildeo

Testes (ex IDL)

IDLgt str=[afitsaFITSafitsaabfitsabcfits]

IDLgt printstrmatch(strfits) 1 0 0 1 1

IDLgt printstrmatch(strfitsfold_case) 1 1 0 1 1

IDLgt printstrmatch(strfitsfold_case) 1 1 1 1 1

IDLgt printstrmatch(strfits) 1 0 0 0 0

IDLgt printstrmatch(strfits) 0 0 0 1 0

3389

Strings - processamento natildeo baacutesico

Operaccedilotildees importantes e muito necessaacuterias mas que natildeo satildeo suportadas em todas as linguagens bibliotecas padratildeo

Separaccedilatildeo de partes (Ex IDL)

IDLgt printstrsplit(2011- 131 -extract)format=(A)2011131

Processamento de nomes de arquivos diretoacuterios (Ex IDL)

IDLgt printfile_dirname(some_directoryanother_directorysome_filetxt)some_directoryanother_directory

IDLgt printfile_basename(some_directoryanother_directorysome_filetxt)some_filetxt

IDLgt printfile_basename(another_directorysome_filetxttxt)+_alteredtxtsome_file_alteredtxt

3489

Strings - processamento natildeo baacutesico

Codificaccedilotildees (Ex Python 3)

gtgtgt s=infinite money infinNeuro sign

gtgtgt print(s)infinite money infineuro

gtgtgt print(ascii(s))infinite money u221eu20ac

gtgtgt print(sencode(utf-8))binfinite money xe2x88x9exe2x82xac

3589

Strings - processamento natildeo baacutesico

Perl eacute a linguagem mais avanccedilada para processamento de strings tem suporte nativo a muitas outras operaccedilotildees a semacircntica da linguagem eacute voltada principalmente para processar strings expressotildees regulares (de vaacuterios tipos) natildeo satildeo strings fazem parte da semacircntica

Ex (sem o objetivo que seja compreensiacutevel apenas para indicar o estilo)

Ler um arquivo contendo campos com nomes separados de valores por ()

temperature 10008name some modelx_dimension 100y_dimension 100z_dimension 50()

Armazenado-o em um mapa O que pode ser feito com apenas

While (ltgt) Loop over input linesPut pre-colon text into $1 post-colon into $2 if (m (S+) (+) ) Use $1 as key $2 as value $file_data$1 = $2

3689

Expressotildees regulares - definiccedilatildeo

Expressotildees regulares (regular expressions regex) satildeo a mais poderosa ferramenta para fazer buscas e separar substrings

Regex satildeo uma linguagem com o uacutenico objetivo de especificar propriedades de strings

Implementadas em graus diferentes em todas as linguagens modernas e modernizadas facilita encontrar uma expressatildeo jaacute pronta pois satildeo quase iguais em qualquer linguagem

Estatildeo na biblioteca padratildeo em IDL Python R Perl

Em C++ e Java em bibliotecas comuns (Boost Jregex)

Para que servem

Uma expressatildeo regular especifica propriedades de strings

O interpretador de expressotildees regulares (regular expression engine) recebe a expressatildeo e o string a analisar e determina se o string corresponde (matches) agrave expressatildeo regular

Em alguns casos o interpretador pode tambeacutem informar que parte(s) do string corresponde(m) a que parte(s) da expressatildeo regular e realizar processamentos com estas partes

3789

Expressotildees regulares ndash exemplos de usos Separar partes de strings

Encontrar linhas em arquivos que tenham nomes valores e comentaacuterios e separar estes pedaccedilos

Escalar com comentaacuterio

SLITPA = 351979 Slit position angle

Array 1D sem comentaacuterio (se extendendo por vaacuterias linhas)

BAND_BIN_CENTER = (03505400358950036629003732200379490 0387900104598)

Escalares em diferentes formatos

Total Mechanical Luminosity 15310E+03resources_usedwalltime=005603

Pedaccedilos de nomes

6063 17836E-20 2456 T FeIX((3Pe)3d(2PE)4p_1Po-3s2_3p6_1Se)

Datas separando ano mecircs dia hora (em vaacuterios formatos diferentes)

DATE-OBS= 2006-12-18 universal date of observationDATE_TIME = 2010-07-19T161032START_TIME = 2006-182T225102850Z

3889

Expressotildees regulares ndash exemplos de usos

Separar partes de strings Separar partes de nomes de arquivos (por significarem algo como identificar o

conteuacutedo)

specdec18s0041fitsscamdec18i0054fits15_7_mts_hmpixselh_mr15sav15_7_mts_hwpixselh_mr15sav16_3_mts_hwpixselb_mr16savreadmodel5l_-1_000010000_10000_r05_030_08196_0100000_005000000_1000eps

Determinar se um string eacute um nuacutemero (inteiro real fixo flutuante)

Encontrar identificadores Exs nomes de cataacutelogos endereccedilos HTTPFTP endereccedilos de email

Separar campos em arquivos sendo lidos onde as linhas natildeo tecircm a mesma formataccedilatildeo algumas linhas com colunas separadas por espaccedilos outras por tabs outras por

siacutembolos ignorando linhas de comentaacuterios e linhas vazias

3989

Expressotildees regulares - usoEx (IDL) encontrar nomes de arquivos com algumas propriedades

IDLgt printfilesformat=(A)CM_1477475933_1_viscubCM_1477476864_1_ircubCM_1477476864_1_irgcubCM_1477476864_1_viscubCM_1477477826_1_ircubCM_1477477826_1_irgcubCM_1477477826_1_viscubmosaic2cub

IDLgt printstregex(files+irgcubboolean) 0 0 1 0 0 1 0 0

A expressatildeo regular eacute +irgcub Especifica uma ou mais ocorrecircncias seguidas (+) de qualquer caractere () seguido de uma ocorrecircncia de irgcub (o ponto vem precedido do caractere de

escape () para ser entendido literalmente como um ponto e natildeo como o seu significado especial (qualquer caractere)

Esta aplicaccedilatildeo do interpretador (stregex) retorna um valor Booleano (verdadeirofalso) para cada elemento do string passado (files) que informa se aquele elemento correspondia agravequela expressatildeo regular

Este eacute um exemplo artificial Seria mais faacutecil ter usado strmatch(filesirgcub)

4089

Expressotildees regulares - uso

Em casos como este tipicamente o resultado de stregex seria usado como filtro para selecionar apenas os elementos do array de strings que satisfazem agravequela expressatildeo regular

IDLgt w=where(stregex(files+irgcubboolean)null)IDLgt printfiles[w]format=(A)CM_1477476864_1_irgcubCM_1477477826_1_irgcub

Ex (IDL) Determinar que strings conteacutem uma data no formato yyyy-mm-dd

IDLgt strs=[201002012010-02-012010-2-1aaaa-mm-ddT2010-02-01J]IDLgt printstregex(strs[0-9]4-[0-9]2-[0-9]2boolean) 0 1 0 0 1

Esta expressatildeo regular especifica quatro repeticcedilotildees (4) de diacutegitos (caracteres na faixa [0-9]) seguido de um (-) seguido de duas repeticcedilotildees (2) de dois diacutegitos ([0-9]) seguido de um (-) seguido de duas repeticcedilotildees (2) de dois diacutegitos ([0-9])

Uma expressatildeo regular apenas um pouco mais elaborada poderia corresponder aos 3 formatos de data no array acima E poderia se impedir que a uacuteltima (com outros caracteres antes e depois da data) seja aceita

4189

Expressotildees regulares - regras - caracteres ldquonormaisrdquo

Uma expressatildeo regular usa caracteres ldquonormaisrdquo e especiais para especificar o que se vai procurar na ordem em que aparecem na expressatildeo

Se um caractere eacute normal (natildeo eacute um dos especiais mostrados adiante) ele especifica uma ocorrecircncia daquele caractere

Ex J eacute uma expressatildeo regular que corresponde a qualquer string onde ocorra J Jaacute JA soacute corresponde a strings que tenham JA dentro

Exs (IDL)

IDLgt strs=[JJJJJJaJAjaJa]

IDLgt printstregex(strsJboolean) 1 1 1 0 1

IDLgt printstregex(strsJAboolean) 0 0 1 0 0

4289

Expressotildees regulares - regras - caracteres especiaisCaracteres especiais tecircm outros significados Para significar literalmente aquele caractere deve ser escapado (escaped) com um

Siacutembolo significado exemplo Corresponde(m) Escape o caractere seguinte deve ser interpretado

literalmente natildeo como especial aa

Qualquer caractere ab ajb aab abb jafbc

+ Uma ou mais repeticcedilotildees do que vem agrave esquerda a+b ab aab bab baabh

() Subexpressatildeo para agrupar termos afetados por um caractere especial (como parecircnteses em notaccedilatildeo matemaacutetica)

(ab)+c abc ababc dabababcg

Zero ou mais repeticcedilotildees dos termos agrave esquerda ab abbaab caaabg

Zero ou uma repeticcedilatildeo dos termos agrave esquerda ab b ab cabd cbd

| Alternaccedilatildeo qualquer um dos dois agrave esquerda a|bc ac bc jacd jbcd

n Exatamente n repeticcedilotildees do termo agrave esquerda a2b aab daaabg

n1n2 De n1 a n2 repeticcedilotildees do termo agrave esquerda a12b ab aab aaab gaaabbd

^ Acircncora (no comeccedilo) nada agrave esquerda ^ab ab abb

$ Acircncora (no fim) nada agrave direita ab$ abaab

[] Conjunto de valores (explicado adiante)

4389

Expressotildees regulares - regras - conjuntos de valores

[] denota um conjunto de valores que pode conter

Uma lista de coisas que devem corresponder Ex [abc] signfica qualquer caractere no conjunto abc Correspondem a esta

expressatildeo abcabha

Uma lista de coisas que natildeo podem corresponder [^abc] significa qualquer coisa que natildeo seja a b ou c Correspondem a esta

expressatildeo d jgs gg

Faixas de valores [0-9] signfica qualquer diacutegito [0-9a-zA-Z] significa qualquer diacutegito ou letra

Classes de valores como algumas faixas e outros conjuntos ocorrem com muita frequumlecircncia haacute nomes

especiais para eles Estes (em IDL) vecircm entre [] ex [[digit] significa o mesmo que [0-9]

4489

Expressotildees regulares - regras - classes de valores

Classe signficado

alnum Caracteres alfanumeacutericos 0-9a-zA-Z

alpha Caracteres alfabeacuteticos a-zA-Z

cntrl Caracteres de controle ASCII (natildeo visiacuteveis coacutedigos 1 a 31 e 127)

digit Diacutegitos (decimais) 0-9

graph Caracteres visiacuteveis ASCII 33 a 126 (natildeo inclui o espaccedilo)

lower Letras minuacutesculas a-z

print Caracteres ldquoimprimiacuteveisrdquo (visiacuteveis e o espaccedilo) ASCII 32 a 126

punct Caracteres de pontuaccedilatildeo $amprsquo()+-lt=gt[]^_lsquo|~

space Os caracteres ldquoem brancordquo (blank) espaccedilo tab tab vertical CR LF (ASCII 32 e 9-13)

upper Letras maiuacutesculas A-Z

xdigit Diacutegitos hexadecimais 0-9A-Fa-f

lt Comeccedilo de palavra (palavra definida como sequumlecircncia de coisas natildeo space)

gt Fim de palavra (palavra definida como sequumlecircncia de coisas natildeo space)

Estas satildeo apenas as principais Algumas implementaccedilotildees tecircm muito mais (em particular nas linguagens que usam Unicode nativamente)

4589

Expressotildees regulares - exemplos

Determinar se strings satildeo nuacutemeros (Ex IDL)

IDLgt str=[9-18 875-812-45913E9-98d7a188d032f5]

Inteiros

IDLgt intexpr=^[-+][0-9]+$

IDLgt printstregex(strintexprboolean) 1 1 0 0 0 0 0 0 0 0

Ponto flutuante

IDLgt fpexpr=^[-+](([0-9][0-9]+)|([0-9]+[0-9]))([eEdD][-+][0-9]+)$

IDLgt printstregex(strfpexprboolean) 1 1 0 1 1 1 1 1 0 0

Sinal opcional

1 ou mais diacutegitos

Sinal opcional

0 ou mais diacutegitos opcionalmente seguidos de um ponto e 1 ou mais diacutegitos

1 ou mais diacutegitos opcionalmente seguidos de um ponto e 0 ou mais diacutegitos

ou Expoente opcional letra do expoente seguida de sinal opcional seguido de um ou mais diacutegitos

4689

Expressotildees regulares ndash extraccedilatildeo

Interpretadores de expressotildees regulares costumam oferecer mais que apenas testar se um string corresponde a uma expressatildeo

Em geral tambeacutem podem retornar que parte(s) do string corresponde(m) agrave expressatildeo

Ex (IDL) Determinar se um string conteacutem uma data incluindo os formatos

IDLgt dates=[2011-01-312011 1 3120110131something done on y2011m1d31 with something]

E extrair a data de dentro do string

IDLgt expr=[0-9]4[0-9]12[0-9]12

(4 diacutegitos)(qualquer separador)(1 a 2 diacutegitos)(qualquer separador)(1 a 2 diacutegitos)

IDLgt printstregex(datesexprextract)format=(A)2011-01-312011 1 31201101312011m1d31

Como agora separar ano mecircs e dia Com uma busca e uma extraccedilatildeo para cada Poderia ser mais eacute mais faacutecil com uma uacutenica expressatildeo regular

4789

Expressotildees regulares - aleacutem de apenas testes

Tambeacutem podem retornar que parte(s) do string correspondem agrave expressatildeo toda e agraves suas subexpressotildees (partes da expressatildeo delimitadas por parecircnteses)

Ex (IDL) Separar pedaccedilos de datas Neste caso para a expressatildeo ficar menor assumindo um formato simples (yyyy-mm-ddThhmmssfff) Mas poderia ser um formato mais livre como no exemplo anterior

IDLgt str=Stuff observed on 2011-01-31T123924983 with some instrumentIDLgt expr=([0-9]4)-([0-9]2)-([0-9]2)T([0-9]2)([0-9]2)([0-9]2[0-9]3)

(quatro diacutegitos)-(2 diacutegitos)-(2 diacutegitos)T(2 diacutegitos)(2 diacutegitos)(2 diacutegitos3 diacutegitos)

IDLgt pieces=stregex(strexprextractsubexpr)IDLgt printpiecesformat=(A)2011-01-31T12392498320110131123924983IDLgt d=julday(pieces[2]pieces[3]pieces[1]pieces[4]pieces[5]pieces[6])IDLgt printdformat=(F166) 2455593027372

Expressatildeo inteiraPrimeira subexpressatildeoSegunda subexpressatildeoTerceira subexpressatildeoQuarta subexpressatildeoQuinta subexpressatildeoSexta subexpressatildeo

4889

Expressotildees regulares - referecircncias httpxkcdcom208

Viacutedeos do Software Carpentry

httpsoftware-carpentryorg4_0regexp

4989

Arquivos

Quase todo programa precisa armazenar dados em arquivos

Podem ser pequenos arquivos de paracircmetros ou enormes arquivos de dados produzidos ou a processar

Apesar do sugerido pela praacutetica comum arquivos texto natildeo satildeo sempre a melhor escolha para armazenar dados - e haacute muitas formas diferentes de os usar

Qual eacute a melhor escolha

Assim como para linguagens ou contecirciners natildeo existe ldquoo melhor formatordquo Cada um tem suas vantagens e desvantagens

Dados diferentes (mesmo se usados pelos mesmos programas) em geral se adequam melhor a formatos diferentes

5089

Arquivos - texto X binaacuterios

Em qualquer formato arquivos satildeo armazenados como diacutegitos binaacuterios

Mas haacute duas formas principais como eles podem ser codificados

Arquivos baseados em texto (text files)

Dados satildeo transformados em caracteres usando alguma formataccedilatildeo (mesmo se impliacutecita) e escritos com alguma codificaccedilatildeo de texto (comumente mas natildeo necessariamente ASCII)

Um arquivo texto eacute um ou mais strings As mesmas conversotildees tecircm que ser feitas depara outros tipos

Arquivos ldquobinaacuteriosrdquo (binary files)

Embora todo arquivo seja binaacuterio este nome costuma ser usado soacute para aqueles em que os dados natildeo estatildeo na forma de texto

Com frequumlecircncia (nem sempre) os dados satildeo gravados de forma idecircntica a como satildeo armazenados na memoacuteria

Muitos formatos usam uma mistura de partes em texto e partes binaacuterias

Um cabeccedilalho (header) de texto que daacute informaccedilotildees (metadados) sobre os dados armazenados na parte binaacuteria que vem depois

O cabeccedilalho conteacutem em especial informaccedilotildees sobre como ler os dados binaacuterios

5189

Arquivos - texto X binaacuterios

Vantagens de arquivos texto

Legiacuteveis por pessoas (human readable)

Podem ser auto-suficientes todo o necessaacuterio para os ler e entender o que conteacutem pode ser obtido olhando o arquivo

Satildeo os menos especiacuteficos a linguagens software normalmente satildeo escritos em ASCII ou Unicode e sempre haacute algum suporte a ler escrever texto em linguagens software

Haacute alguns formatos padratildeo para texto (exs CSV XML) que satildeo suportados em muitas plataformas diferentes

5289

Arquivos - texto X binaacuterios

Vantagens de arquivos binaacuterios

Em geral natildeo haacute conversotildees entre o os dados como armazenados na memoacuteria O que torna o armazenamento mais eficiente e sem alteraccedilotildees nos valores

A maior parte dos formatos padronizados eacute binaacuteria Exs FITS cube CDF NetCDF HDF HDF5 JPEG JPEG2000 TIFF GeoTIFF MPEG etc

Eacute mais comum que haja bibliotecas prontas (ateacute de alto niacutevel) para consulta leitura e gravaccedilatildeo

Os formatos melhor desenhados satildeo autodocumentados (em texto ou binaacuterio) para os ler natildeo eacute necessaacuterio conhecimento preacutevio sobre como os dados foram armazenados

Toda linguagem plataforma costuma ter seu formato binaacuterio mais nativo que costuma ser o mais faacutecil para leitura gravaccedilatildeo Em particular nas de alto niacutevel que tecircm formatos autodocumentados (especialmente

em IDL R Python Java)

Muitos formatos tecircm opccedilatildeo de compressatildeo dos dados

5389

Arquivos - proprietaacuterios X padratildeo

Independente da escolha texto binaacuterio programas devem escolher entre usar um formato proacuteprio ou um formato padronizado

A principal vantagem de formatos proacuteprios eacute que satildeo definidos da forma mais conveniente para a aplicaccedilatildeo que os usa simplificando leitura e gravaccedilatildeo e potencialmente otimizando recursos (acesso ao disco tamanho do arquivo etc)

A principal desvantagem de formatos proacuteprios eacute ser necessaacuterio escrever todo o coacutedigo para os ler gravar

Pode dar mais trabalho que usar um formato geneacuterico que natildeo seja exatamente o que melhor se encaixa na aplicaccedilatildeo

O coacutedigo para processar o formato em geral vai ser menos completo e conveniente de usar que o de um formato bem estabelecido usado por muitos outros em muitos ambientes

Cada novo software que for usar estes arquivos vai precisar compartilhar do mesmo coacutedigo ou precisar de coacutedigo novo (em particular se em outra linguagem) para ler gravar naquele formato

Eacute necessaacuterio documentar o formato e decidir sobre como ele seraacute definido

Se outros jaacute colocaram muito trabalho desenvolvendo bons formatos padratildeo bem suportados em muitos ambientes por que ter o trabalho de reinventar (e reprogramar redocumentar e retestar) a roda

5489

Arquivos - padrotildees comuns em astronomia (exs adiante)

Texto

CSV Comma-separated values - bem suportado por muitos softwares

ldquoColunas fixasrdquo Natildeo eacute um padratildeo bem definido mas eacute praacutetica comum para tabelas (2D)

XML Extensible Markup Language - O padratildeo texto mais flexiacutevel de grande uso em programaccedilatildeo geral para armazenar qualquer coisa com frequumlecircncia de forma hieraacuterquica Bem suportado por linguagens modernas (e modernizadas) e bibliotecas das principais

linguagens gerais Alta complexidade o torna trabalhoso de usar

5589

Arquivos - padrotildees comuns em astronomia (exs adiante)Binaacuterios

FITS Flexible Image Transport System - o mais comum para observaccedilotildees astronocircmicas Conteacutem os dados (em geral arrays 1D 2D ou 3D) e documentaccedilatildeo (nos cabeccedilalhos) sobre a origem e caracteriacutesticas dos dados Tambeacutem usado para armazenar tabelas de dados quaisquer mesmo que natildeo sejam observaccedilotildees (especialmente pelo STSCI) Variam muito em qualidade de documentaccedilatildeo

NetCDF Network Common Data Form - evoluccedilatildeo do CDF autodocumentado eacute comum e bem suportado para vaacuterios arrays de dados

HDF5 Hierarchical Data Format ndash autodocumentado comum e bem suportado permitindo aleacutem de simples arrays estruturas (eacute um formato hieraacuterquico)

Formatos de imagens JPEG JPEG2000 TIFF GeoTIFF etc - voltados para arrays 2D3D de inteiros ou (em alguns casos) reais com ou sem compressatildeo JPEG2000 tem caracteriacutesticas mais avanccediladas como imagens multiresoluccedilatildeo

Formatos vetoriais PS EPS DXF SHP SVG - variados niacuteveis de suporte a armazenamento de vetores e formas em 2D ou 3D

ISIS Cube semelhante em caracteriacutesticas ao FITS mais usado em sensoriamento remoto geociecircncias e ciecircncias planetaacuterias em geral para observaccedilotildees 1D 2D ou 3D

Formatos nativos de linguagens todo o trabalho de leitura e gravaccedilatildeo eacute feito automagicamente pela biblioteca padratildeo em IDL R Python Java

5689

Arquivos texto - newlines

Apesar do que possa parecer arquivos texto natildeo tecircm intrinsecamente vaacuterias linhas Arquivos texto satildeo soacute uma sequumlecircncia 1D de caracteres em alguma codificaccedilatildeo Separaccedilatildeo em linhas (equivalente a interpretar o arquivo como 2D em linhas e colunas) eacute

especificada por convenccedilotildees Natildeo haacute apenas uma convenccedilatildeo para o fim de linhas

A mais primitiva convenccedilatildeo eacute separaccedilatildeo nenhuma estipula-se que linhas tenham um nuacutemero fixo N de caracteres e cabe ao software que lecirc o arquivo entender que uma linha nova ocorre regularmente a cada N caracteres

Eacute a forma menos portaacutevel e mais inconveniente eacute necessaacuterio o conhecimento preacutevio (ou por inspeccedilatildeo do arquivo) de quantos caracteres haacute por linha

A maior parte dos editores de texto natildeo vai saber separar linhas desta forma (por falta deste conhecimento preacutevio) Exemplo (de um FITS real)

SIMPLE = T Fits standard BITPIX = 16 Bits per pixel NAXIS = 0 Number of axes EXTEND = T File may contain extensions

O que com as linhas quebradas nos lugares certos seria

SIMPLE = T Fits standard BITPIX = 16 Bits per pixel NAXIS = 0 Number of axes EXTEND = T File may contain extensions

5789

Arquivos texto - newlines

A forma mais comum de especificar linhas eacute com um marcador do final de linha (newline)

Eacute um caractere especial natildeo normalmente presente no texto que serve para marcar fim de linhas

Mas natildeo haacute soacute um padratildeo de newline Os mais comuns

LF (Line Feed ASCII 10) ndash Unix Linux Mac OS X

CR - (Carriage Return ASCII 13) - Mac OS lt10

CR+LF (CR seguido de LF) - Windows DOS

Eacute o motivo de o Notepad (Windows) natildeo entender as quebras de linha de arquivos escritos com o formato nativo de Linux o arquivo soacute tem LF enquanto o editor espera CR+LF

Alguns sistemas (strings em vaacuterias linguagens por exemplo) usam o coacutedigo de escape n para indicar newline que eacute codificado de acordo com o padratildeo sendo usado

Em geral bibliotecas de leitura e gravaccedilatildeo de arquivos usam (default pelo menos) o newline nativo do sistema em que satildeo usadas

Programas de conversatildeo entre os sistemas satildeo comuns (ex dos2unix)

O Wordpad identifica se for usado soacute LF e quebra as linhas de acordo

5889

Arquivos - texto - CSV

Comma-separated values

O formato mais padronizado para tabelas (arrays 2D) em texto (frequentemente mas natildeo necessariamente ASCII)

Bem suportado por bibliotecas padratildeo de linguagens e outros softwares (Excel Calc Origin Google Docs etc)

Conteacutem Linhas de cabeccedilalho (opcionais mas recomendadas) linhas com qualquer texto geral

descrevendo o arquivo e em geral uma linha de tiacutetulo para as colunas da tabela Uma (apenas uma) tabela onde todas as linhas tecircm o mesmo nuacutemero de colunas

Colunas separadas por viacutergulas (opcionalmente pode ser outro separador) Linhas terminadas por newline (qualquer que seja) Strings delimitados por ldquo ldquo

Ex

NAMECALMPOSFILNAMEECHLPOSDISPPOSTARGNAMEPOSDIRCLASSMJD-OBSITIMECOADDSdec18s00010NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001dec18s00020NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001dec18s00120NIRSPEC-5-AO635800364500itan140NIRSPEC-5-AOp2 TITAN5408763000001dec18s00140NIRSPEC-5-AO626300364500itan140NIRSPEC-5-AOp1 TITAN5408763000001dec18s00151NIRSPEC-5-AO626300364500itan140NIRSPEC-5-AOp1ARC5408764000001dec18s00160NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001

Natildeo eacute necessaacuterio que as colunas tenham largura constante

Cabeccedilalho

5989

Arquivos - texto - CSVHaacute amplo suporte a leitura e gravaccedilatildeo de CSV sem precisar recorrer a procedimentos de baixo niacutevel

Podem ser diretamente importados em Excel Calc Origin Google Docs ou lido facilmente com bibliotecas padratildeo comuns Ex (IDL)

IDLgt c=read_csv(filesearch_scamcsvheader=h)IDLgt printhNAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS

IDLgt helpc Structure ltc8bca508gt 11 tags length=5256 data length=5248 refs=1 FIELD01 STRING Array[41] FIELD02 LONG Array[41] FIELD03 STRING Array[41] FIELD04 DOUBLE Array[41] FIELD05 DOUBLE Array[41] FIELD06 STRING Array[41] FIELD07 STRING Array[41] FIELD08 STRING Array[41] FIELD09 STRING Array[41] FIELD10 DOUBLE Array[41] FIELD11 LONG Array[41]

IDLgt printcfield01[03]dec18s0001 dec18s0002 dec18s0003 dec18s0004

IDLgt printcfield03[03]NIRSPEC-5-AO NIRSPEC-5-AO NIRSPEC-5-AO NIRSPEC-5-AO

6089

Arquivos - texto - CSVEx (IDL) Criaccedilatildeo de um CSV com uma tabela de valores

Criaccedilatildeo de 3 arrays 1D (12 elementos) um para cada coluna

IDLgt x=dindgen(3)IDLgt y=dindgen(4)IDLgt xx=reform(rebin(x34)12)IDLgt yy=reform(rebin(reform(y14)34)12)IDLgt f=xx+yy10IDLgt helpxxyyfXX DOUBLE = Array[12]YY DOUBLE = Array[12]F DOUBLE = Array[12]

Escrita do arquivo

IDLgt write_csvexamplecsvxxyyfheader=[XYX+10Y]

ResultadoXYX+10Y000000000000000000000000100000000000000010000000200000000000000020000000000000001000000010000000100000001000000011000000()

6189

Arquivos - texto - ldquoColunas regularesrdquoFixed column width

Natildeo eacute exatamente um padratildeo Eacute uma praacutetica comum

Armazena uma tabela (array 2D) de forma regular simples de ser interpretada e lida

Costumam ter linha(s) de cabeccedilalho descrevendo o conteuacutedo do arquivo em geral com uma linha para os nomes das colunas

As demais linhas conteacutem os dados sempre ocupando a mesma largura por coluna e escritos no mesmo formato em cada coluna

Costumam ser simples de ler inclusive interativamente (exs Excel Calc Origin read_ascii)

Ex (IDL) Uma simples tabela soacute de nuacutemeros

wavl CH4=33 wavl CH4=25 wavl CH4=10 wavl CH4=08 wavl CH4=05 wavl CH4=026 wavl CH4=02 477330000 0090130 477330000 0091110 477330000 0089250 477330000 0087000 477330000 0087140 477330000 0090080 477330000 0088110 480040000 0090930 480040000 0091930 480040000 0090160 480040000 0087930 480040000 0088110 480040000 0090950 480040000 0089090 482750000 0091710 482750000 0092730 482750000 0091060 482750000 0088850 482750000 0089080 482750000 0091810 482750000 0090060 485450000 0092530 485450000 0093570 485450000 0092000 485450000 0089810 485450000 0090100 485450000 0092730 485450000 0091090

IDLgt a=read_ascii(specs_27s_ntxtdata_start=1header=header)IDLgt printheader wavl CH4=33 wavl CH4=25 wavl CH4=10 wavl CH4=08 wavl CH4=05 wavl CH4=026 wavl CH4=02 IDLgt helpa Structure ltd423c9a8gt 1 tags length=224 data length=224 refs=1 FIELD01 FLOAT Array[14 4]

6289

Arquivos - texto - ldquoColunas regularesrdquoJaacute um arquivo um pouco mais difiacutecil de ler

NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS dec18s0001 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0002 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0003 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 FLAT 5408757812500 460000 5 dec18s0004 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 DARK 5408757812500 460000 5

Por ter colunas de tipos diferentes (strings inteiros reais) natildeo eacute possiacutevel o ler em um simples array Mas eacute faacutecil o colocar em uma estrutura de arrays onde cada campo eacute uma coluna

Especificando interativamente como interpretar as linhasIDLgt templ=ascii_template(filesearch_scamtxt)

Nome do campo (default mostrado)

Tipo do campo (identificado automaticamente)

Posiccedilatildeo (caracter) do comeccedilo (identificada automaticamente)

Linha de exemplo para verificar as colunas

6389

Arquivos - texto - ldquoColunas regularesrdquoDepois de feito o template o arquivo pode ser lido com apenas

IDLgt a=read_ascii(filesearch_scamtxttemplate=templ)IDLgt helpa Structure ltd4ec4608gt 11 tags length=416 data length=416 refs=1 FIELD01 STRING Array[4] FIELD02 LONG Array[4] FIELD03 STRING Array[4] FIELD04 FLOAT Array[4] FIELD05 FLOAT Array[4] FIELD06 STRING Array[4] FIELD07 STRING Array[4] FIELD08 STRING Array[4] FIELD09 FLOAT Array[4] FIELD10 FLOAT Array[4] FIELD11 LONG Array[4]IDLgt printafield01dec18s0001 dec18s0002 dec18s0003 dec18s0004IDLgt printafield04 626300 626300 626300 626300

O template (uma estrutura contendo dados sobre como ler o arquivo) pode ser usado para outros arquivos no mesmo formato No lugar de ter sido criado interativamente poderia ter sido lido de algum arquivo Poderia ter especificado nomes para os campos que seriam mais amigaacuteveis que coias como FIELD11

6489

Arquivos - texto - XML

Extensible Markup Language

Admite grande flexibilidade e por isso pode ter alta complexidade

Valores satildeo colocados dentro de uma estrutura em hieraacuterquica (em uma aacutervore) com os noacutes identificados pelos seus nomes (chaves)

Largamente usado em muitas aacutereas para armazenar conjuntos arbitraacuterios de quaisquer estruturas de dados

A maioria das aplicaccedilotildees usa um formato que eacute um subconjunto do XML especificado por um Schema comumente em um arquivo XML DTD (Document Type Definition)

6589

Arquivos - texto ndash XML ndash exemplos de usos

Armazenamento de dados de aplicaccedilotildees web (comum para exportar importar dados MediaWiki DokuWiki WordPress ADS Lattes etc)

Documentos Office (docx pptx xlsx) OpenOffice (odt opd ods)

Como versotildees de outros formatos FITSML XDF

ldquoScientific Dataset XML NASAs Astronomical Data Center (ADC) sponsors a number of research projects that

use XML for scientific data representation The XML activities at the ADC are sponsored and supported by the NASA Office of Space Science Applied Information Systems Research Program (AISRP)rdquo - httpxmlcoverpagesorgnasa-adchtml

Astronomical Instrument Markup Language (AIML)

SVG ndash Scalable Vector Graphics

Muitas de outras aplicaccedilotildees listadas em httpxmlcoverpagesorgxmlhtmlapplications

6689

Arquivos - texto ndash XML - exemploltxml version=10 gtltDOCTYPE Xdmf SYSTEM Xdmfdtd []gtltXdmf xmlnsxi=httpwwww3org2001XInclude Version=20gt ltDomaingt lt-- Example of Basic Topologies --gt ltInformation Name=Descriptiongt Example of a Polyvertex Topology ltInformationgt ltGrid Name=Polyvertex GridType=Uniformgt ltTopology TopologyType=Polyvertex Dimensions=3 NodesPerElement=3gt ltDataItem Format=XML Dimensions=3 3 NumberType=Floatgt 0 1 2 4 5 6 8 9 10 ltDataItemgt ltTopologygt ltGeometry Type=XYZgt ltDataItem Format=XML Dimensions=4 4 3gt 00 00 00 10 00 00()Que mostra que a interpretaccedilatildeo (parsing) de XML eacute em geral complexa

6789

Arquivos - texto - XML

Haacute muitas bibliotecas de alto niacutevel para fazer o processamento (parsing) e entregar os dados em uma estrutura conveniente

A complexidade em processar XML estaacute em decidir o que fazer com os dados jaacute que os arquivos podem ser muito complexos

As APIs (Application Programming Interfaces) mais comuns para processar XML que satildeo implementadas em muitas linguagens

DOM (Document Object Model) ndash manteacutem todo o conteuacutedo do em uma estrutura de dados (em geral uma aacutervore) em uma variaacutevel (em geral um objeto) Esta pode ser consultada para obter os valores de interesse para os alterar e usada para escrever um arquivo

SAX (Simple API for XML) ndash Interpretador (parser) por objetos O usuaacuterio escreve uma classe herdando da classe SAX provendo os meacutetodos que vatildeo processar os campos agrave medida em que estes satildeo lidos

6889

Arquivos - binaacuterios - FITSFlexible Image Transport System

O formato mais comum para observaccedilotildees astronocircmicas Tambeacutem usado para armazenar quaisquer dados mesmo natildeo relacionados a observaccedilotildees (especialmente tabelas como eacute praacutetica do STSCI)

Conteacutem um (ou mais) cabeccedilalho(s) de texto com metadados (informaccedilotildees sobre os dados como caracteriacutesticas (necessaacuterias para os ler) origem condiccedilotildees em que foram obtidos processamento realizado etc)

SIMPLE = T image conforms to FITS standard BITPIX = 32 bits per data value NAXIS = 2 number of axes NAXIS1 = 1024 NAXIS2 = 1024 BSCALE = 100000 Scaling factor BZERO = 000000 Scaling zero-point TELESCOP= Keck II Telescope SLITNAME= 0041x226 Slit Name SLITPA = 351979 Slit position angle SLITX = 131500 X pixel of the center of the slit LST = 12010446 local apparent sidereal time (()

Depois do cabeccedilalho haacute uma (ou mais) seccedilatildeo(otildees) de dados binaacuterios Costuma(m) ser array(s) 1D (espectros) 2D (imagens) ou 3D (ldquocubos de dadosrdquo)

De inteiros ou reais inteiros satildeo comuns em contagens de instrumentos reais para valores derivados (fluxos intensidades etc)

6989

Arquivos - binaacuterios - FITSNormalmente FITS satildeo lidos escritos por bibliotecas prontas de (relativamente) alto niacutevel usuaacuterio natildeo tem que saber como os dados satildeo armazenados no arquivo nem como os ler escrever Ex (IDL com a biblioteca idlastro)

IDLgt fits_info2dspectrumfits2dspectrumfits has 3 extensionsPrimary header 288 recordsNo dataExtension 1 -- SCI Header 144 records IMAGE ( 1201 1201 )Extension 2 -- ERR Header 72 records IMAGE ( 1201 1201 )Extension 3 -- DQ Header 72 records IMAGE ( 1201 1201 )

IDLgt mydata=readfits(2dspectrumfitsexten_no=1myheader) READFITS Reading FITS extension of type IMAGE READFITS Now reading 1201 by 1201 array

IDLgt extastmyheadermyastIDLgt sz=size(mydatadimensions)IDLgt xy2ad[1sz[0]][1sz[1]]myastcorners_acorners_dIDLgt printcorners_aCorners of the data array from file 2dspectrumfits are at 14487480 33063480

IDLgt printcorners_d -00041264444 00041402222

Obteacutem os dados de coordenadas (WCS) do header

Coloca os dados no array (2D de floats) mydata e o header no array (1D de strings) myheader

Calcula as coordenadas das quinas da imagem atraveacutes do WCS

Provecirc informaccedilotildees sobre o arquivo

7089

Arquivos - binaacuterios - ISIS Cube

Formatos como FITS se adequam muito a ter uma interface de mais alto niacutevel por objetos

Tambeacutem para dados em tabelas FITS muito mais trabalhosos de ler em baixo niacutevel que se adequam muito mais a mapas ou estruturas

Exemplo (de um formato semelhante a FITS ISIS cube)

O objeto ao ser criado lecirc todo o arquivo

cube=pp_editablecube(CM_1553510065_1_ircub)

Meacutetodos fornecem os dados desejados para obter quando necessaacuterio os dados de interesse

Find out the names of the backplanesprintcubegetproperty(backnames)Get the start time of the cubeprintcubegetfromheader(START_TIME)2007-084T100057286Z

Valores no cabeccedilalho podem ser convenientemente fornecidos como um mapa

header=cubeheader_as_hash()printheader[START_TIME]2007-084T100057286Z

7189

Arquivos - binaacuterios ndash ISIS Cube

Os dados satildeo fornecidos como arraysMake a contour plot of the latitudesc=contour(cubegetsuffixbyname(LATITUDE))Get the band with wavelength nearest to 21 (in the units used in the cube)selband=cubegetbandbywavelength(21wavelengths=selwavs)

Interfaces por overload tornam o acesso ainda mais conveniente

selband=cube[21]

selwavs=cube[21]

Retorna um array com a banda de comprimento de onda mais proacuteximo de 21 (microm)

Retorna o comprimento de onda mais proacuteximo de 21 (microm) da banda retornada acima

7289

Arquivos - binaacuterios ndash ISIS Cube Alteraccedilotildees feitas ao conteuacutedo satildeo automaticamente refletidas em todos os

lugares (cabeccedilalho em particular) afetados mantendo o objeto vaacutelido que pode depois ser gravado em um novo arquivo

IDLgt printcubelinescubesamplescubebands 64 64 256

IDLgt helpcubecoreltExpressiongt FLOAT = Array[64 64 256]

IDLgt cubecore=dblarr(100100256)

A linha acima natildeo eacute uma atribuiccedilatildeo eacute uma invocaccedilatildeo de meacutetodo Eacute equivalente acubesetpropertycore=dblarr(100100256)

Eacute o trabalho da funccedilatildeo setproperty decidir se a propriedade passada (core) faz sentido e se fizer fazer todo o trabalho necessaacuterio a esta mudanccedila Para o usuaacuterio eacute tudo automaacutetico e os dados da classe satildeo vaacutelidos o tempo todo

IDLgt helpcubecoreltExpressiongt DOUBLE = Array[100 100 256]

IDLgt printcubelinescubesamplescubebands 100 100 256

IDLgt cubesaveCM_1553510065_1_ir_editedcub

7389

Arquivos - binaacuterios ndash NetCDF e HDF5

Network Common Data Form e Hierarchical Data Format

Os dois uacutenicos formatos bem estabelecidos para dados cientiacuteficos geneacutericos

Armazenam dados como vaacuterias variaacuteveis e seus metadados Para cada variaacutevel haacute (ou pode haver) os metadados

Nome Dimensotildees (do array) Unidades Comentaacuterios

Ambos permitem arrays multidimensionais

Apenas HDF5 permite estruturas (daiacute vem a hierarquia)

Autodocumentados qualquer software que saiba ler um destes formatos lecirc qualquer arquivo sem precisar de conhecimento preacutevio sobre como o arquivo foi gerado

Muito bem suportados em bibliotecas padratildeo e natildeo padratildeo em softwares interativos e visualizadores (inclusive plugins para navegadores)

httpwwwunidataucaredusoftwarenetcdf httpenwikipediaorgwikiHdf5

NetCDF eacute mais simples de usar por natildeo ter hierarquia dando menos trabalho para ler e escrever dados Se hierarquia natildeo eacute necessaacuteria eacute mais conveniente de usar que HDF5

7489

Arquivos - binaacuterios - NetCDF e HDF5Haacute tambeacutem o formato CDL uma versatildeo ASCII do NetCDF A biblioteca padratildeo do NetCDF inclui conversores entre estes formatos

$ ncdump -h refspec_g01_0ncnetcdf refspec_g01_0 dimensions nlay = 51 nwn = 400 nleg = 33 numu = 2 nlev = 52 nphi = 3 ngas = 2 nwnc = 1 scal = 1 v3 = 3 dnl = 1 nk = 1 tdisr = UNLIMITED (0 currently) na = 16

variables float alb(nwn) float z(nlay) float t(nlay) float p(nlay) float wl(nwn) float iof(nwn) float mtau(nwn) float htau(nwn) float hctaus(nwn) float gtau(nwn) float outcos(scal) float phi(nleg) float phic(scal) float umu(numu) float flux(v3 nwn nlev) float mix(nlay ngas) float c(nlay) float psat(nlay) float ga(nwnc) float wlc(nwnc) float inc(scal) int dm(scal) int ord(scal) float fbeam(scal) float wn(nwn) float tautot(nwn nlay) float htaus(nwn nlay) float htaux(nwn nlay) float taug(nwn nlay) float phase(nwn nlay nleg) float ssa(nwn nlay) float uu(nwn nphi nlev numu) float u0u(nwn nlev numu) float tray(nwn nlay) float gtauo(tdisr nwn nlay)

Haacute 14 variaacuteveis usadas como dimensotildees para as 35 variaacuteveis que satildeo arrays

Ex alb(nwn) indica que alb eacute um array 1D de nwn elementos

nwn estaacute armazenado como uma das dimensotildees e eacute 400 portanto alb tem 400 elementos

Parte do conteuacutedo de um arquivo NetCDF em formato CDL (gerado pelo programa ncdump)

7589

Arquivos - binaacuterios - NetCDF e HDF5Conteuacutedo daquele arquivo visualizado com o ncview (acompanha a biblioteca NetCDF padratildeo)

7689

Arquivos - binaacuterios - NetCDF e HDF5O conteuacutedo de todo o arquivo pode ser lido facilmente com as bibliotecas disponiacuteveis e armazenado em contecirciners convenientes Usando um objeto que gera um resultado um pouco mais conveniente

IDLgt h=pp_readncdf(refspec_g01_0nchash)IDLgt printhvar_dims ltObjHeapVar229(HASH)gtvars ltObjHeapVar152(HASH)gtdims ltObjHeapVar118(HASH)gt

IDLgt printh[vars]T 173203 175459 175848 176001 175975 Z 431869 418858 406067 393403 380464 FLUX 300660 145536 0705180 0341669 0165532 PHASE 100000 0779034 0660858 0542052 0449983 TAUTOT0694377 0693420 0693474 0693540 0693636()

IDLgt help(h[vars])[TAUTOT]ltExpressiongt FLOAT = Array[51 400]

IDLgt print(h[var_dims])[TAUTOT]NLAY NWN

IDLgt print(h[dims])[(h[var_dims])[TAUTOT]]NLAY 51NWN 400

7789

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5)

Visualizaccedilatildeo da variaacutevel selecionada

Metadados e alguns valores da variaacutevel selecionada

Variaacutevel a ser criada com o conteuacutedo desta variaacutevel do arquivo

Hierarquia das variaacuteveis do arquivo

7889

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5) Imported variable az

IDLgt helpaz Structure ltd5723f38gt 13 tags length=448 data length=444 refs=1 _NAME STRING az _ICONTYPE STRING binary _TYPE STRING DATASET _FILE STRING INTENSI_test_409OUTh5 _PATH STRING _DATA DOUBLE Array[38] _NDIMENSIONS LONG 1 _DIMENSIONS ULONG64 Array[1] _NELEMENTS ULONG64 38 _DATATYPE STRING H5T_FLOAT _STORAGESIZE ULONG 8 _PRECISION LONG 64 _SIGN STRING

IDLgt printaz_data 00000000 10000000 20000000 30000000 40000000 50000000 60000000 80000000 ()

7989

Arquivos - binaacuterios - imagens

JPEG JPEG200 TIFF GeoTIFF etc

Os formatos comuns de imagens satildeo bem suportados em muacuteltiplas plataformas para uso dentro de programas e interativamente

Alguns formatos tecircm opccedilatildeo de compressatildeo com perda eou sem perda

Armazenam imagens como arrays 2D ou 3D (3D frequumlentemente limitado a 3 ou 4 em uma das dimensotildees uma imagem em 3 ou 4 bandas) de inteiros ou (em alguns formatos) reais

Alguns formatos permitem armazenar metadados para caracterizar as imagens armazenadas

JPEG2000 e GeoTIFF (um subconjunto de TIFF) comuns em astronomia e aacutereas proacuteximas

8089

Arquivos - binaacuterios ndash imagens ndash exemplo (IDL)IDLgt printquery_tiff(issmap_2009tiffinfogeotiff=geo) 1

IDLgt helpinfo Structure ltd4eca4b8gt 18 tags length=144 data length=132 refs=1 CHANNELS LONG 4 DIMENSIONS LONG Array[2] IMAGE_INDEX LONG 0 NUM_IMAGES LONG 1 PIXEL_TYPE INT 1 TYPE STRING TIFF BITS_PER_SAMPLE LONG 8 POSITION FLOAT Array[2] RESOLUTION FLOAT Array[2] UNITS LONG 2 TILE_SIZE LONG Array[2] DESCRIPTION STRING ISS (2009) DATE_TIME STRING 20100218 012436()

IDLgt helpgeo Structure ltd4efa1b8gt 10 tags length=264 data length=262 refs=1 MODELPIXELSCALETAG DOUBLE Array[3] MODELTIEPOINTTAG DOUBLE Array[6 4] GEOGRAPHICTYPEGEOKEY INT 4035 GEOGSEMIMAJORAXISGEOKEY DOUBLE 25750000 GEOGSEMIMINORAXISGEOKEY DOUBLE 25750000()

IDLgt myimage=read_tiff(issmap_2009tiff) Lecirc a imagem para o array myimage

Obteacutem informaccedilotildees sobre o arquivo

8189

Arquivos - binaacuterios ndash formatos nativosLinguagens como IDL R Python Java tecircm seu formato nativo binaacuterio acessado em alto niacutevel Basta mandar salvar ler variaacuteveis no do arquivo a biblioteca padratildeo automagicamente faz todo o trabalho de decidir como gravar ler os dados

Conveniente de usar na proacutepria linguagem Mas raramente existem bibliotecas para ler gravar o formato nativo de uma linguagem a partir de outra Ex (IDL)

IDLgt savefile=2dspectrumsavmydatamyheadercorners_dcorners_averbosecompress SAVE Portable (XDR) compressed SAVERESTORE file SAVE Saved variable MYDATA SAVE Saved variable MYHEADER()

Pode ser lido com apenas (haacute formas mais elaboradas)

IDLgt restore2dspectrumsavverbose RESTORE Portable (XDR) compressed SAVERESTORE file RESTORE Save file written by ltunknowngtltunknowngt Thu Jan 27 191422 2011 RESTORE IDL version 801 (linux x86_64) RESTORE Restored variable MYDATA RESTORE Restored variable MYHEADER()

IDLgt helpmydatamyheadercorners_dcorners_aMYDATA FLOAT = Array[1201 1201]MYHEADER STRING = Array[144]()

8289

Arquivos - processamento em baixo niacutevel

Nem sempre um formato padratildeo eacute a melhor escolha para o problema

Nem sempre haacute escolha (pode-se ter que trabalhar com arquivos que jaacute foram escritos em algum formato proprietaacuterio)

Agraves vezes o formato eacute padratildeo mas natildeo haacute bom suporte a ele disponiacutevel

Em todos estes casos eacute necessaacuterio escrever rotinas em baixo niacutevel que vatildeo ler processar diretamente o conteuacutedo do arquivo

Preferencialmente criando interfaces de alto niacutevel para o programa que vai as usar

8389

Arquivos - processamento em baixo niacutevel - texto

Tomando o exemplo anterior onde as colunas eram de diferentes tipos

NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS dec18s0001 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0002 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0003 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 FLAT 5408757812500 460000 5 dec18s0004 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 DARK 5408757812500 460000 5

A forma mais simples de o ler diretamente eacute definir uma estrutura para receber cada linha e um array destas estruturas para receber todo o arquivo Ex (IDL)

IDLgt record=namecalmpos0filnameechlpos0d0disppos0d0targnameposdirclassmjd_obsitime0d0coadds0IDLgt nlines=file_lines(filesearch_scamtxt)IDLgt mydata=replicate(recordnlines-1)IDLgt header=

Depois de definidas as variaacuteveis que vatildeo receber os dados o arquivo pode ser lido

IDLgt openrunitfilesearch_scamtxtget_lunIDLgt readfunitheaderIDLgt readfunitmydataformat=(A14I8A15F104F104A18A19A15F158F105I15)IDLgt free_lununit

A gravaccedilatildeo de um arquivo texto poderia ser feita de forma semelhante apenas trocando openr por openw (abrir o arquivo para gravaccedilatildeo natildeo leitura) e readf por printf

O arquivo eacute aberto em uma unidade (unit) usada para especificar de onde eacute feita a leitura

Ao final o arquivo eacute fechado

8489

Arquivos - processamento em baixo niacutevel - texto

O que resulta em

IDLgt printheader NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS

IDLgt helpmydataMYDATA STRUCT = -gt ltAnonymousgt Array[4]

IDLgt helpmydata[0] Structure ltd5e38f68gt 11 tags length=136 data length=124 refs=3 NAME STRING dec18s0001 CALMPOS INT 0 FILNAME STRING NIRSPEC-5-AO ECHLPOS DOUBLE 62630000 DISPPOS DOUBLE 36450000 TARGNAME STRING HD85258 POSDIR STRING NIRSPEC-5-AOp1 CLASS STRING STAR MJD_OBS STRING 54087574 ITIME DOUBLE 10000000 COADDS INT 1

Este caso eacute mais complicado que os mais comuns por haver colunas de strings

Se todas fossem de nuacutemeros natildeo teria sido necessaacuterio especificar o formato explicitamente As colunas teriam sido adivinhadas pela biblioteca que lecirc o arquivo Poderia ter sido lido escrito soacute com um array de nuacutemeros sem estruturas

8589

Arquivos - processamento em baixo niacutevel - binaacuterio

Formatos binaacuterios podem ser definidos de qualquer forma O arquivo eacute apenas um conjunto de bytes Cabe ao software saber como os interpretar

Uma escolha comum para que sejam autodocumentados eacute incluir um cabeccedilalho de texto informando as caracteriacutesticas dos dados necessaacuterias para os ler

Ex (IDL) criar um arquivo que armazene um array de doubles com um cabeccedilalho informando as dimensotildees para que o programa que o lecirc saiba como ler os dados

Inventa dados e abre o arquivo

IDLgt data_to_write=dindgen(34)IDLgt openwunitbinary_exampledatget_lun

Escreve as dimensotildees como texto

IDLgt printfunitdimensions of the double array stored belowIDLgt printfunitsize(data_to_writedimensions)

Escreve os dados binaacuterios

IDLgt writeuunitdata_to_write

Fecha o arquivo

IDLgt free_lununit

Escreve em binaacuterio (write unformatted)

8689

Arquivos - processamento em baixo niacutevel - binaacuterio

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

dimensions of the double array stored below 3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

8789

Arquivos - processamento em baixo niacutevel - binaacuterioA leitura deste arquivo eacute igualmente simples

IDLgt header=IDLgt dims=[00]IDLgt openrunitbinary_exampledatget_lun

Lecirc as dimensotildees (armazenadas como texto)

IDLgt readfunitheaderIDLgt readfunitdims

Lecirc a parte binaacuteria depois de saber as dimensotildees

IDLgt data_read=dblarr(dims)IDLgt readuunitdata_read

Fecha o arquivo

IDLgt free_lununit

Verifica que os dados foram gravados e lidos corretamente

IDLgt printarray_equal(data_to_writedata_read) 1

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Lecirc dados binaacuterios (read unformatted)

8889

Sumaacuterio

5 ndash Slides em httpwwwppenteadonetpeapea04_strings_iopdf Strings Expressotildees regulares Arquivos

httpwwwppenteadonetpea

8989

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89

Strings - processamento baacutesico Comparaccedilotildees

IDLgt helpabA STRING = someB STRING = some string

IDLgt printb eq a 0

IDLgt printb gt a 1

IDLgt c=[ab9Some somesome other string]

IDLgt printc[sort(c)]format=(A) some9Somesomesome other stringsome string

IDLgt printa eq A 0

IDLgt printstrcmp(aAfold_case) 1

Comparaccedilotildees de ldquotamanhordquo (maior menor etc) satildeo comparaccedilotildees pela ordem de codificaccedilatildeo (ldquoalfabeacuteticardquo)

Algumas linguagens permitem definir o ordenamento (como considerar maiuacutesculasminuacuteculas letras com acentos nuacutemeros e siacutembolos) Exs Python C++ Java Perl

2089

Strings - processamento baacutesico Substrings

IDLgt printstrmid(abcdefg32)de

Algumas linguagens nativamente suportam iacutendices para indicar substrings C C++ Fortran Python Ex (Python)

gtgtgt s=abcdegtgtgt print(s[25])cde

Outras permitem que sejam definidos iacutendices por objetos strings

Busca de caracteres ou substrings

IDLgt printstrpos(abcdefgd) 3

IDLgt printstrpos(abcdefgj) -1

IDLgt printstrpos(abcdefgbc) 1

2189

Strings - processamento baacutesico

Outros

IDLgt printstrlen(1234567) 7

IDLgt printstrlen(1234567 ) 8

IDLgt printstrlen( 1234567 ) 9

IDLgt helpstrtrim( 1234567 2)ltExpressiongt STRING = 1234567

IDLgt helpstrtrim( 1234567 1)ltExpressiongt STRING = 1234567

IDLgt helpstrtrim( 1234567 0)ltExpressiongt STRING = 1234567

IDLgt printstrupcase(abcdEF)ABCDEF

IDLgt printstrlowcase(abcdEF)abcdef

Medindo quantos caracteres tem o string inclui espaccedilos em branco

Remoccedilatildeo dos brancos agrave esquerda agrave direita ou dos dois lados

2289

Strings - conversatildeo de outros tipos para strings

Eacute uma das operaccedilotildees mais comuns para gerar textos informativos e nomes escrever arquivos (aquivos texto discutidos adiante) etc

Eacute natildeo trivial jaacute que a conversatildeo pode ser feita de muitas formas diferentes

Para tipos fundamentais sempre haacute uma conversatildeo default tanto criando um string como usando algo tipo print (para strings terminal ou arquivos)

Todo comando tipo print (print printf sprintf string write etc) e toda escrita para arquivos texto eacute uma conversatildeo para string (terminais e arquivos texto soacute conteacutem strings)

2389

Strings - conversatildeo de outros tipos para strings

Exemplos de conversotildees (IDL)

IDLgt print[-109] -1 0 9

IDLgt print1d01B10 10000000 1 100000

IDLgt helpstring(1d01B10)ltExpressiongt STRING = 10000000 1 100000

IDLgt printfunitdblarr(343)

Tipos mais elaborados podem ou natildeo ter uma forma predefinida Com objetos eacute comum ser possiacutevel definir a conversatildeo (stringification) ao criar a classe

IDLgt h=hash(a109[01]18b)

IDLgt printh9 0 1a 100000180000 b

Strings

Coloca strings em um arquivo (adiante)

Strings criados por um meacutetodo da classe hash satildeo uma forma de representar o hash

2489

Strings - conversatildeo de outros tipos para strings

Algumas linguagens (Python IDL) tecircm mais de uma forma default de gerar strings Em Python uma forma eacute executaacutevel a outra eacute mais legiacutevel

In [30] x=arange(12)reshape(43)

In [31] print(x)[[ 0 1 2] [ 3 4 5] [ 6 7 8] [ 9 10 11]]

In [32] xOut[32]array([[ 0 1 2] [ 3 4 5] [ 6 7 8] [ 9 10 11]])

In [33] y=array([[ 0 1 2] [ 3 4 5] [ 6 7 8] [ 9 10 11]])

In [37] print(array_equal(xy))True

String mais legiacutevel

String executaacutevelPode ser usado para criar um objeto equivalente

2589

Strings ndash formataccedilatildeo expliacutecita

A formataccedilatildeo pode ser especificada se a conversatildeo default natildeo eacute adequada para definir a conversatildeo em um novo tipo

Cada linguagem tem sua sintaxe para formataccedilatildeo

Haacute dois estilos semelhantes em vaacuterias linguagens

Ambos os estilos satildeo sintaxes diferentes para a mesma ideacuteia Um coacutedigo especifica o tipo de dado sendo passado (inteiro real etc) e detalhes de como seraacute feito o string (largura do campo diacutegitos decimais alinhamento etc)

2689

Strings ndash formataccedilatildeo expliacutecita

Estilo Fortran

IDL

IDLgt print1d0+1d-9 10000000

IDLgt print1d0+1d-9format=(E1610)10000000010E+00

IDLgt printx=1d0+1d-9format=(A0F1613)X= 10000000010000

Estilo C (ldquoprintfrdquo)

IDL

IDLgt printformat=(x=1610e)1d0+1d-9x=10000000010e+00

Python

In [20] print(x=1610e (1e0+1e-9))x=10000000010e+00

Nenhum formato expliacutecito (default)

2789

Strings - formatos tipo Fortran

(apenas o principal ver documentaccedilatildeo para detalhes)

Ex (IDL)

IDLgt printx=1d0+1d-9format=(A0F1613)X= 10000000010000

Tambeacutem haacute modificadores para especificar alinhamento (-) se deve haver (ou ser suprimido) avanccedilo para a pŕoxima linha posiccedilatildeo dentro do campo etc

Coacutedigo Significado Exemplo(s)

A String (A) (10A)

I Inteiro decimal (I) (10I)(-2I)

B Inteiro binaacuterio (B) (10B)

Z Inteiro hexadecimal (Z) (10Z)

O Inteiro octal (O) (10O)

F Real ponto fixo (F)(F52)

E D Real ponto flutuante (E)(D1610)

G Real ponto fixo ou flutuante de acordo com o valor (G)(G10)

ldquordquo String literal (ldquox=rdquoI10)

X Caracteres em branco (A10XI)

2889

Strings - formatos tipo C (printf)(apenas o principal ver documentaccedilatildeo para detalhes)String com campos a serem substituiacutedos por valores (passados adiante) marcados por coacutedigos com

Ex (Python)In [20] print(x=1610e (1e0+1e-9))x=10000000010e+00

Haacute modificadores para especificar alinhamento como preencher o espaccedilo que sobra (espaccedilos zeros etc) para imprimir o sinal + etc

Coacutedigo Significado (tipo) Exemplo(s)

di Inteiro decimal (int) d 5d +05d

u Inteiro decimal sem sinal (unsigned int) u 7u

fF Real em ponto fixo (double float) f 136f

eE Real em ponto flutuante (double float) e 1610e

gG Real em ponto fixo ou flutuante decidido pelo valor (double float)

g 73G

xX Inteiro sem sinal hexadecimal (unsigned int) x 10X

o Inteiro sem sinal octal (unsigned int) o 5o

s String (string) s 10s

c Caractere (char) c

p Ponteiro - estilo C - (void ) p

literal

2989

Strings - conversatildeo de strings para outros tipos

Para gerar dados a partir de strings datas identificadores pedaccedilos de nomes valores numeacutericos armazenados em strings

Tambeacutem sempre haacute conversotildees default para os tipos baacutesicos onde o intepretador programa faz o possiacutevel para entender o string como um valor daquele tipo

Tipicamente eacute feito por casts (funccedilotildees de conversatildeo) reads (de strings ou arquivos texto (arquivos texto satildeo strings)) construtores de objetos ou implicitamente

3089

Strings - conversatildeo de strings para outros tipos - impliacutecitas

Exs (IDL)

IDLgt helpfix([17 17 171 -17 9 8])ltExpressiongt INT = Array[5]

IDLgt printfix([17 17 171 -17 9 8]) 17 17 17 -17 9

IDLgt printdouble([17 17 171 -17 9 8]) 17000000 17000000 17100000 -17000000 90000000

IDLgt readfunitabcd

IDLgt a=0d0IDLgt b=00IDLgt c=0IDLgt reads171d0 189d0 -9abcIDLgt helpabcA DOUBLE = 17100000B FLOAT = 189000C INT = -9

Converte o conteuacutedo do string para os tipos das variaacuteveis abcd (explicado adiante)

3189

Strings - conversatildeo de strings para outros tipos

Quando o default natildeo eacute suficiente (ou quando escrevendo o conversor em uma classe) costuma ser possiacutevel o fazer com formatos semelhantes aos formatos para gerar strings Exs (IDL)

IDLgt a=0d0IDLgt b=00IDLgt c=0IDLgt reads171d0 something 189d0-9abc READS Input conversion error Unit 0 File ltstdingt Error occurred at $MAIN$ Execution halted at $MAIN$

Natildeo funcionou porque sozinho ele natildeo conseguiu saber o que fazer com o ldquosomethingrdquo Usando um formato especiacutefico

IDLgt reads171d0 something 189d0-9 abcformat=(D6111XD611XI)

IDLgt helpabcA DOUBLE = 17100000B FLOAT = 189000C INT = -9

Exemplos mais complicados adiante (arquivos texto)

Variaacuteveis tecircm que ser definidas para informar para que tipo seraacute feita a conversatildeo default

3289

Strings - processamento natildeo baacutesicoOperaccedilotildees importantes e muito necessaacuterias mas que natildeo satildeo suportadas em todas as linguagens bibliotecas padratildeo

Testes (ex IDL)

IDLgt str=[afitsaFITSafitsaabfitsabcfits]

IDLgt printstrmatch(strfits) 1 0 0 1 1

IDLgt printstrmatch(strfitsfold_case) 1 1 0 1 1

IDLgt printstrmatch(strfitsfold_case) 1 1 1 1 1

IDLgt printstrmatch(strfits) 1 0 0 0 0

IDLgt printstrmatch(strfits) 0 0 0 1 0

3389

Strings - processamento natildeo baacutesico

Operaccedilotildees importantes e muito necessaacuterias mas que natildeo satildeo suportadas em todas as linguagens bibliotecas padratildeo

Separaccedilatildeo de partes (Ex IDL)

IDLgt printstrsplit(2011- 131 -extract)format=(A)2011131

Processamento de nomes de arquivos diretoacuterios (Ex IDL)

IDLgt printfile_dirname(some_directoryanother_directorysome_filetxt)some_directoryanother_directory

IDLgt printfile_basename(some_directoryanother_directorysome_filetxt)some_filetxt

IDLgt printfile_basename(another_directorysome_filetxttxt)+_alteredtxtsome_file_alteredtxt

3489

Strings - processamento natildeo baacutesico

Codificaccedilotildees (Ex Python 3)

gtgtgt s=infinite money infinNeuro sign

gtgtgt print(s)infinite money infineuro

gtgtgt print(ascii(s))infinite money u221eu20ac

gtgtgt print(sencode(utf-8))binfinite money xe2x88x9exe2x82xac

3589

Strings - processamento natildeo baacutesico

Perl eacute a linguagem mais avanccedilada para processamento de strings tem suporte nativo a muitas outras operaccedilotildees a semacircntica da linguagem eacute voltada principalmente para processar strings expressotildees regulares (de vaacuterios tipos) natildeo satildeo strings fazem parte da semacircntica

Ex (sem o objetivo que seja compreensiacutevel apenas para indicar o estilo)

Ler um arquivo contendo campos com nomes separados de valores por ()

temperature 10008name some modelx_dimension 100y_dimension 100z_dimension 50()

Armazenado-o em um mapa O que pode ser feito com apenas

While (ltgt) Loop over input linesPut pre-colon text into $1 post-colon into $2 if (m (S+) (+) ) Use $1 as key $2 as value $file_data$1 = $2

3689

Expressotildees regulares - definiccedilatildeo

Expressotildees regulares (regular expressions regex) satildeo a mais poderosa ferramenta para fazer buscas e separar substrings

Regex satildeo uma linguagem com o uacutenico objetivo de especificar propriedades de strings

Implementadas em graus diferentes em todas as linguagens modernas e modernizadas facilita encontrar uma expressatildeo jaacute pronta pois satildeo quase iguais em qualquer linguagem

Estatildeo na biblioteca padratildeo em IDL Python R Perl

Em C++ e Java em bibliotecas comuns (Boost Jregex)

Para que servem

Uma expressatildeo regular especifica propriedades de strings

O interpretador de expressotildees regulares (regular expression engine) recebe a expressatildeo e o string a analisar e determina se o string corresponde (matches) agrave expressatildeo regular

Em alguns casos o interpretador pode tambeacutem informar que parte(s) do string corresponde(m) a que parte(s) da expressatildeo regular e realizar processamentos com estas partes

3789

Expressotildees regulares ndash exemplos de usos Separar partes de strings

Encontrar linhas em arquivos que tenham nomes valores e comentaacuterios e separar estes pedaccedilos

Escalar com comentaacuterio

SLITPA = 351979 Slit position angle

Array 1D sem comentaacuterio (se extendendo por vaacuterias linhas)

BAND_BIN_CENTER = (03505400358950036629003732200379490 0387900104598)

Escalares em diferentes formatos

Total Mechanical Luminosity 15310E+03resources_usedwalltime=005603

Pedaccedilos de nomes

6063 17836E-20 2456 T FeIX((3Pe)3d(2PE)4p_1Po-3s2_3p6_1Se)

Datas separando ano mecircs dia hora (em vaacuterios formatos diferentes)

DATE-OBS= 2006-12-18 universal date of observationDATE_TIME = 2010-07-19T161032START_TIME = 2006-182T225102850Z

3889

Expressotildees regulares ndash exemplos de usos

Separar partes de strings Separar partes de nomes de arquivos (por significarem algo como identificar o

conteuacutedo)

specdec18s0041fitsscamdec18i0054fits15_7_mts_hmpixselh_mr15sav15_7_mts_hwpixselh_mr15sav16_3_mts_hwpixselb_mr16savreadmodel5l_-1_000010000_10000_r05_030_08196_0100000_005000000_1000eps

Determinar se um string eacute um nuacutemero (inteiro real fixo flutuante)

Encontrar identificadores Exs nomes de cataacutelogos endereccedilos HTTPFTP endereccedilos de email

Separar campos em arquivos sendo lidos onde as linhas natildeo tecircm a mesma formataccedilatildeo algumas linhas com colunas separadas por espaccedilos outras por tabs outras por

siacutembolos ignorando linhas de comentaacuterios e linhas vazias

3989

Expressotildees regulares - usoEx (IDL) encontrar nomes de arquivos com algumas propriedades

IDLgt printfilesformat=(A)CM_1477475933_1_viscubCM_1477476864_1_ircubCM_1477476864_1_irgcubCM_1477476864_1_viscubCM_1477477826_1_ircubCM_1477477826_1_irgcubCM_1477477826_1_viscubmosaic2cub

IDLgt printstregex(files+irgcubboolean) 0 0 1 0 0 1 0 0

A expressatildeo regular eacute +irgcub Especifica uma ou mais ocorrecircncias seguidas (+) de qualquer caractere () seguido de uma ocorrecircncia de irgcub (o ponto vem precedido do caractere de

escape () para ser entendido literalmente como um ponto e natildeo como o seu significado especial (qualquer caractere)

Esta aplicaccedilatildeo do interpretador (stregex) retorna um valor Booleano (verdadeirofalso) para cada elemento do string passado (files) que informa se aquele elemento correspondia agravequela expressatildeo regular

Este eacute um exemplo artificial Seria mais faacutecil ter usado strmatch(filesirgcub)

4089

Expressotildees regulares - uso

Em casos como este tipicamente o resultado de stregex seria usado como filtro para selecionar apenas os elementos do array de strings que satisfazem agravequela expressatildeo regular

IDLgt w=where(stregex(files+irgcubboolean)null)IDLgt printfiles[w]format=(A)CM_1477476864_1_irgcubCM_1477477826_1_irgcub

Ex (IDL) Determinar que strings conteacutem uma data no formato yyyy-mm-dd

IDLgt strs=[201002012010-02-012010-2-1aaaa-mm-ddT2010-02-01J]IDLgt printstregex(strs[0-9]4-[0-9]2-[0-9]2boolean) 0 1 0 0 1

Esta expressatildeo regular especifica quatro repeticcedilotildees (4) de diacutegitos (caracteres na faixa [0-9]) seguido de um (-) seguido de duas repeticcedilotildees (2) de dois diacutegitos ([0-9]) seguido de um (-) seguido de duas repeticcedilotildees (2) de dois diacutegitos ([0-9])

Uma expressatildeo regular apenas um pouco mais elaborada poderia corresponder aos 3 formatos de data no array acima E poderia se impedir que a uacuteltima (com outros caracteres antes e depois da data) seja aceita

4189

Expressotildees regulares - regras - caracteres ldquonormaisrdquo

Uma expressatildeo regular usa caracteres ldquonormaisrdquo e especiais para especificar o que se vai procurar na ordem em que aparecem na expressatildeo

Se um caractere eacute normal (natildeo eacute um dos especiais mostrados adiante) ele especifica uma ocorrecircncia daquele caractere

Ex J eacute uma expressatildeo regular que corresponde a qualquer string onde ocorra J Jaacute JA soacute corresponde a strings que tenham JA dentro

Exs (IDL)

IDLgt strs=[JJJJJJaJAjaJa]

IDLgt printstregex(strsJboolean) 1 1 1 0 1

IDLgt printstregex(strsJAboolean) 0 0 1 0 0

4289

Expressotildees regulares - regras - caracteres especiaisCaracteres especiais tecircm outros significados Para significar literalmente aquele caractere deve ser escapado (escaped) com um

Siacutembolo significado exemplo Corresponde(m) Escape o caractere seguinte deve ser interpretado

literalmente natildeo como especial aa

Qualquer caractere ab ajb aab abb jafbc

+ Uma ou mais repeticcedilotildees do que vem agrave esquerda a+b ab aab bab baabh

() Subexpressatildeo para agrupar termos afetados por um caractere especial (como parecircnteses em notaccedilatildeo matemaacutetica)

(ab)+c abc ababc dabababcg

Zero ou mais repeticcedilotildees dos termos agrave esquerda ab abbaab caaabg

Zero ou uma repeticcedilatildeo dos termos agrave esquerda ab b ab cabd cbd

| Alternaccedilatildeo qualquer um dos dois agrave esquerda a|bc ac bc jacd jbcd

n Exatamente n repeticcedilotildees do termo agrave esquerda a2b aab daaabg

n1n2 De n1 a n2 repeticcedilotildees do termo agrave esquerda a12b ab aab aaab gaaabbd

^ Acircncora (no comeccedilo) nada agrave esquerda ^ab ab abb

$ Acircncora (no fim) nada agrave direita ab$ abaab

[] Conjunto de valores (explicado adiante)

4389

Expressotildees regulares - regras - conjuntos de valores

[] denota um conjunto de valores que pode conter

Uma lista de coisas que devem corresponder Ex [abc] signfica qualquer caractere no conjunto abc Correspondem a esta

expressatildeo abcabha

Uma lista de coisas que natildeo podem corresponder [^abc] significa qualquer coisa que natildeo seja a b ou c Correspondem a esta

expressatildeo d jgs gg

Faixas de valores [0-9] signfica qualquer diacutegito [0-9a-zA-Z] significa qualquer diacutegito ou letra

Classes de valores como algumas faixas e outros conjuntos ocorrem com muita frequumlecircncia haacute nomes

especiais para eles Estes (em IDL) vecircm entre [] ex [[digit] significa o mesmo que [0-9]

4489

Expressotildees regulares - regras - classes de valores

Classe signficado

alnum Caracteres alfanumeacutericos 0-9a-zA-Z

alpha Caracteres alfabeacuteticos a-zA-Z

cntrl Caracteres de controle ASCII (natildeo visiacuteveis coacutedigos 1 a 31 e 127)

digit Diacutegitos (decimais) 0-9

graph Caracteres visiacuteveis ASCII 33 a 126 (natildeo inclui o espaccedilo)

lower Letras minuacutesculas a-z

print Caracteres ldquoimprimiacuteveisrdquo (visiacuteveis e o espaccedilo) ASCII 32 a 126

punct Caracteres de pontuaccedilatildeo $amprsquo()+-lt=gt[]^_lsquo|~

space Os caracteres ldquoem brancordquo (blank) espaccedilo tab tab vertical CR LF (ASCII 32 e 9-13)

upper Letras maiuacutesculas A-Z

xdigit Diacutegitos hexadecimais 0-9A-Fa-f

lt Comeccedilo de palavra (palavra definida como sequumlecircncia de coisas natildeo space)

gt Fim de palavra (palavra definida como sequumlecircncia de coisas natildeo space)

Estas satildeo apenas as principais Algumas implementaccedilotildees tecircm muito mais (em particular nas linguagens que usam Unicode nativamente)

4589

Expressotildees regulares - exemplos

Determinar se strings satildeo nuacutemeros (Ex IDL)

IDLgt str=[9-18 875-812-45913E9-98d7a188d032f5]

Inteiros

IDLgt intexpr=^[-+][0-9]+$

IDLgt printstregex(strintexprboolean) 1 1 0 0 0 0 0 0 0 0

Ponto flutuante

IDLgt fpexpr=^[-+](([0-9][0-9]+)|([0-9]+[0-9]))([eEdD][-+][0-9]+)$

IDLgt printstregex(strfpexprboolean) 1 1 0 1 1 1 1 1 0 0

Sinal opcional

1 ou mais diacutegitos

Sinal opcional

0 ou mais diacutegitos opcionalmente seguidos de um ponto e 1 ou mais diacutegitos

1 ou mais diacutegitos opcionalmente seguidos de um ponto e 0 ou mais diacutegitos

ou Expoente opcional letra do expoente seguida de sinal opcional seguido de um ou mais diacutegitos

4689

Expressotildees regulares ndash extraccedilatildeo

Interpretadores de expressotildees regulares costumam oferecer mais que apenas testar se um string corresponde a uma expressatildeo

Em geral tambeacutem podem retornar que parte(s) do string corresponde(m) agrave expressatildeo

Ex (IDL) Determinar se um string conteacutem uma data incluindo os formatos

IDLgt dates=[2011-01-312011 1 3120110131something done on y2011m1d31 with something]

E extrair a data de dentro do string

IDLgt expr=[0-9]4[0-9]12[0-9]12

(4 diacutegitos)(qualquer separador)(1 a 2 diacutegitos)(qualquer separador)(1 a 2 diacutegitos)

IDLgt printstregex(datesexprextract)format=(A)2011-01-312011 1 31201101312011m1d31

Como agora separar ano mecircs e dia Com uma busca e uma extraccedilatildeo para cada Poderia ser mais eacute mais faacutecil com uma uacutenica expressatildeo regular

4789

Expressotildees regulares - aleacutem de apenas testes

Tambeacutem podem retornar que parte(s) do string correspondem agrave expressatildeo toda e agraves suas subexpressotildees (partes da expressatildeo delimitadas por parecircnteses)

Ex (IDL) Separar pedaccedilos de datas Neste caso para a expressatildeo ficar menor assumindo um formato simples (yyyy-mm-ddThhmmssfff) Mas poderia ser um formato mais livre como no exemplo anterior

IDLgt str=Stuff observed on 2011-01-31T123924983 with some instrumentIDLgt expr=([0-9]4)-([0-9]2)-([0-9]2)T([0-9]2)([0-9]2)([0-9]2[0-9]3)

(quatro diacutegitos)-(2 diacutegitos)-(2 diacutegitos)T(2 diacutegitos)(2 diacutegitos)(2 diacutegitos3 diacutegitos)

IDLgt pieces=stregex(strexprextractsubexpr)IDLgt printpiecesformat=(A)2011-01-31T12392498320110131123924983IDLgt d=julday(pieces[2]pieces[3]pieces[1]pieces[4]pieces[5]pieces[6])IDLgt printdformat=(F166) 2455593027372

Expressatildeo inteiraPrimeira subexpressatildeoSegunda subexpressatildeoTerceira subexpressatildeoQuarta subexpressatildeoQuinta subexpressatildeoSexta subexpressatildeo

4889

Expressotildees regulares - referecircncias httpxkcdcom208

Viacutedeos do Software Carpentry

httpsoftware-carpentryorg4_0regexp

4989

Arquivos

Quase todo programa precisa armazenar dados em arquivos

Podem ser pequenos arquivos de paracircmetros ou enormes arquivos de dados produzidos ou a processar

Apesar do sugerido pela praacutetica comum arquivos texto natildeo satildeo sempre a melhor escolha para armazenar dados - e haacute muitas formas diferentes de os usar

Qual eacute a melhor escolha

Assim como para linguagens ou contecirciners natildeo existe ldquoo melhor formatordquo Cada um tem suas vantagens e desvantagens

Dados diferentes (mesmo se usados pelos mesmos programas) em geral se adequam melhor a formatos diferentes

5089

Arquivos - texto X binaacuterios

Em qualquer formato arquivos satildeo armazenados como diacutegitos binaacuterios

Mas haacute duas formas principais como eles podem ser codificados

Arquivos baseados em texto (text files)

Dados satildeo transformados em caracteres usando alguma formataccedilatildeo (mesmo se impliacutecita) e escritos com alguma codificaccedilatildeo de texto (comumente mas natildeo necessariamente ASCII)

Um arquivo texto eacute um ou mais strings As mesmas conversotildees tecircm que ser feitas depara outros tipos

Arquivos ldquobinaacuteriosrdquo (binary files)

Embora todo arquivo seja binaacuterio este nome costuma ser usado soacute para aqueles em que os dados natildeo estatildeo na forma de texto

Com frequumlecircncia (nem sempre) os dados satildeo gravados de forma idecircntica a como satildeo armazenados na memoacuteria

Muitos formatos usam uma mistura de partes em texto e partes binaacuterias

Um cabeccedilalho (header) de texto que daacute informaccedilotildees (metadados) sobre os dados armazenados na parte binaacuteria que vem depois

O cabeccedilalho conteacutem em especial informaccedilotildees sobre como ler os dados binaacuterios

5189

Arquivos - texto X binaacuterios

Vantagens de arquivos texto

Legiacuteveis por pessoas (human readable)

Podem ser auto-suficientes todo o necessaacuterio para os ler e entender o que conteacutem pode ser obtido olhando o arquivo

Satildeo os menos especiacuteficos a linguagens software normalmente satildeo escritos em ASCII ou Unicode e sempre haacute algum suporte a ler escrever texto em linguagens software

Haacute alguns formatos padratildeo para texto (exs CSV XML) que satildeo suportados em muitas plataformas diferentes

5289

Arquivos - texto X binaacuterios

Vantagens de arquivos binaacuterios

Em geral natildeo haacute conversotildees entre o os dados como armazenados na memoacuteria O que torna o armazenamento mais eficiente e sem alteraccedilotildees nos valores

A maior parte dos formatos padronizados eacute binaacuteria Exs FITS cube CDF NetCDF HDF HDF5 JPEG JPEG2000 TIFF GeoTIFF MPEG etc

Eacute mais comum que haja bibliotecas prontas (ateacute de alto niacutevel) para consulta leitura e gravaccedilatildeo

Os formatos melhor desenhados satildeo autodocumentados (em texto ou binaacuterio) para os ler natildeo eacute necessaacuterio conhecimento preacutevio sobre como os dados foram armazenados

Toda linguagem plataforma costuma ter seu formato binaacuterio mais nativo que costuma ser o mais faacutecil para leitura gravaccedilatildeo Em particular nas de alto niacutevel que tecircm formatos autodocumentados (especialmente

em IDL R Python Java)

Muitos formatos tecircm opccedilatildeo de compressatildeo dos dados

5389

Arquivos - proprietaacuterios X padratildeo

Independente da escolha texto binaacuterio programas devem escolher entre usar um formato proacuteprio ou um formato padronizado

A principal vantagem de formatos proacuteprios eacute que satildeo definidos da forma mais conveniente para a aplicaccedilatildeo que os usa simplificando leitura e gravaccedilatildeo e potencialmente otimizando recursos (acesso ao disco tamanho do arquivo etc)

A principal desvantagem de formatos proacuteprios eacute ser necessaacuterio escrever todo o coacutedigo para os ler gravar

Pode dar mais trabalho que usar um formato geneacuterico que natildeo seja exatamente o que melhor se encaixa na aplicaccedilatildeo

O coacutedigo para processar o formato em geral vai ser menos completo e conveniente de usar que o de um formato bem estabelecido usado por muitos outros em muitos ambientes

Cada novo software que for usar estes arquivos vai precisar compartilhar do mesmo coacutedigo ou precisar de coacutedigo novo (em particular se em outra linguagem) para ler gravar naquele formato

Eacute necessaacuterio documentar o formato e decidir sobre como ele seraacute definido

Se outros jaacute colocaram muito trabalho desenvolvendo bons formatos padratildeo bem suportados em muitos ambientes por que ter o trabalho de reinventar (e reprogramar redocumentar e retestar) a roda

5489

Arquivos - padrotildees comuns em astronomia (exs adiante)

Texto

CSV Comma-separated values - bem suportado por muitos softwares

ldquoColunas fixasrdquo Natildeo eacute um padratildeo bem definido mas eacute praacutetica comum para tabelas (2D)

XML Extensible Markup Language - O padratildeo texto mais flexiacutevel de grande uso em programaccedilatildeo geral para armazenar qualquer coisa com frequumlecircncia de forma hieraacuterquica Bem suportado por linguagens modernas (e modernizadas) e bibliotecas das principais

linguagens gerais Alta complexidade o torna trabalhoso de usar

5589

Arquivos - padrotildees comuns em astronomia (exs adiante)Binaacuterios

FITS Flexible Image Transport System - o mais comum para observaccedilotildees astronocircmicas Conteacutem os dados (em geral arrays 1D 2D ou 3D) e documentaccedilatildeo (nos cabeccedilalhos) sobre a origem e caracteriacutesticas dos dados Tambeacutem usado para armazenar tabelas de dados quaisquer mesmo que natildeo sejam observaccedilotildees (especialmente pelo STSCI) Variam muito em qualidade de documentaccedilatildeo

NetCDF Network Common Data Form - evoluccedilatildeo do CDF autodocumentado eacute comum e bem suportado para vaacuterios arrays de dados

HDF5 Hierarchical Data Format ndash autodocumentado comum e bem suportado permitindo aleacutem de simples arrays estruturas (eacute um formato hieraacuterquico)

Formatos de imagens JPEG JPEG2000 TIFF GeoTIFF etc - voltados para arrays 2D3D de inteiros ou (em alguns casos) reais com ou sem compressatildeo JPEG2000 tem caracteriacutesticas mais avanccediladas como imagens multiresoluccedilatildeo

Formatos vetoriais PS EPS DXF SHP SVG - variados niacuteveis de suporte a armazenamento de vetores e formas em 2D ou 3D

ISIS Cube semelhante em caracteriacutesticas ao FITS mais usado em sensoriamento remoto geociecircncias e ciecircncias planetaacuterias em geral para observaccedilotildees 1D 2D ou 3D

Formatos nativos de linguagens todo o trabalho de leitura e gravaccedilatildeo eacute feito automagicamente pela biblioteca padratildeo em IDL R Python Java

5689

Arquivos texto - newlines

Apesar do que possa parecer arquivos texto natildeo tecircm intrinsecamente vaacuterias linhas Arquivos texto satildeo soacute uma sequumlecircncia 1D de caracteres em alguma codificaccedilatildeo Separaccedilatildeo em linhas (equivalente a interpretar o arquivo como 2D em linhas e colunas) eacute

especificada por convenccedilotildees Natildeo haacute apenas uma convenccedilatildeo para o fim de linhas

A mais primitiva convenccedilatildeo eacute separaccedilatildeo nenhuma estipula-se que linhas tenham um nuacutemero fixo N de caracteres e cabe ao software que lecirc o arquivo entender que uma linha nova ocorre regularmente a cada N caracteres

Eacute a forma menos portaacutevel e mais inconveniente eacute necessaacuterio o conhecimento preacutevio (ou por inspeccedilatildeo do arquivo) de quantos caracteres haacute por linha

A maior parte dos editores de texto natildeo vai saber separar linhas desta forma (por falta deste conhecimento preacutevio) Exemplo (de um FITS real)

SIMPLE = T Fits standard BITPIX = 16 Bits per pixel NAXIS = 0 Number of axes EXTEND = T File may contain extensions

O que com as linhas quebradas nos lugares certos seria

SIMPLE = T Fits standard BITPIX = 16 Bits per pixel NAXIS = 0 Number of axes EXTEND = T File may contain extensions

5789

Arquivos texto - newlines

A forma mais comum de especificar linhas eacute com um marcador do final de linha (newline)

Eacute um caractere especial natildeo normalmente presente no texto que serve para marcar fim de linhas

Mas natildeo haacute soacute um padratildeo de newline Os mais comuns

LF (Line Feed ASCII 10) ndash Unix Linux Mac OS X

CR - (Carriage Return ASCII 13) - Mac OS lt10

CR+LF (CR seguido de LF) - Windows DOS

Eacute o motivo de o Notepad (Windows) natildeo entender as quebras de linha de arquivos escritos com o formato nativo de Linux o arquivo soacute tem LF enquanto o editor espera CR+LF

Alguns sistemas (strings em vaacuterias linguagens por exemplo) usam o coacutedigo de escape n para indicar newline que eacute codificado de acordo com o padratildeo sendo usado

Em geral bibliotecas de leitura e gravaccedilatildeo de arquivos usam (default pelo menos) o newline nativo do sistema em que satildeo usadas

Programas de conversatildeo entre os sistemas satildeo comuns (ex dos2unix)

O Wordpad identifica se for usado soacute LF e quebra as linhas de acordo

5889

Arquivos - texto - CSV

Comma-separated values

O formato mais padronizado para tabelas (arrays 2D) em texto (frequentemente mas natildeo necessariamente ASCII)

Bem suportado por bibliotecas padratildeo de linguagens e outros softwares (Excel Calc Origin Google Docs etc)

Conteacutem Linhas de cabeccedilalho (opcionais mas recomendadas) linhas com qualquer texto geral

descrevendo o arquivo e em geral uma linha de tiacutetulo para as colunas da tabela Uma (apenas uma) tabela onde todas as linhas tecircm o mesmo nuacutemero de colunas

Colunas separadas por viacutergulas (opcionalmente pode ser outro separador) Linhas terminadas por newline (qualquer que seja) Strings delimitados por ldquo ldquo

Ex

NAMECALMPOSFILNAMEECHLPOSDISPPOSTARGNAMEPOSDIRCLASSMJD-OBSITIMECOADDSdec18s00010NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001dec18s00020NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001dec18s00120NIRSPEC-5-AO635800364500itan140NIRSPEC-5-AOp2 TITAN5408763000001dec18s00140NIRSPEC-5-AO626300364500itan140NIRSPEC-5-AOp1 TITAN5408763000001dec18s00151NIRSPEC-5-AO626300364500itan140NIRSPEC-5-AOp1ARC5408764000001dec18s00160NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001

Natildeo eacute necessaacuterio que as colunas tenham largura constante

Cabeccedilalho

5989

Arquivos - texto - CSVHaacute amplo suporte a leitura e gravaccedilatildeo de CSV sem precisar recorrer a procedimentos de baixo niacutevel

Podem ser diretamente importados em Excel Calc Origin Google Docs ou lido facilmente com bibliotecas padratildeo comuns Ex (IDL)

IDLgt c=read_csv(filesearch_scamcsvheader=h)IDLgt printhNAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS

IDLgt helpc Structure ltc8bca508gt 11 tags length=5256 data length=5248 refs=1 FIELD01 STRING Array[41] FIELD02 LONG Array[41] FIELD03 STRING Array[41] FIELD04 DOUBLE Array[41] FIELD05 DOUBLE Array[41] FIELD06 STRING Array[41] FIELD07 STRING Array[41] FIELD08 STRING Array[41] FIELD09 STRING Array[41] FIELD10 DOUBLE Array[41] FIELD11 LONG Array[41]

IDLgt printcfield01[03]dec18s0001 dec18s0002 dec18s0003 dec18s0004

IDLgt printcfield03[03]NIRSPEC-5-AO NIRSPEC-5-AO NIRSPEC-5-AO NIRSPEC-5-AO

6089

Arquivos - texto - CSVEx (IDL) Criaccedilatildeo de um CSV com uma tabela de valores

Criaccedilatildeo de 3 arrays 1D (12 elementos) um para cada coluna

IDLgt x=dindgen(3)IDLgt y=dindgen(4)IDLgt xx=reform(rebin(x34)12)IDLgt yy=reform(rebin(reform(y14)34)12)IDLgt f=xx+yy10IDLgt helpxxyyfXX DOUBLE = Array[12]YY DOUBLE = Array[12]F DOUBLE = Array[12]

Escrita do arquivo

IDLgt write_csvexamplecsvxxyyfheader=[XYX+10Y]

ResultadoXYX+10Y000000000000000000000000100000000000000010000000200000000000000020000000000000001000000010000000100000001000000011000000()

6189

Arquivos - texto - ldquoColunas regularesrdquoFixed column width

Natildeo eacute exatamente um padratildeo Eacute uma praacutetica comum

Armazena uma tabela (array 2D) de forma regular simples de ser interpretada e lida

Costumam ter linha(s) de cabeccedilalho descrevendo o conteuacutedo do arquivo em geral com uma linha para os nomes das colunas

As demais linhas conteacutem os dados sempre ocupando a mesma largura por coluna e escritos no mesmo formato em cada coluna

Costumam ser simples de ler inclusive interativamente (exs Excel Calc Origin read_ascii)

Ex (IDL) Uma simples tabela soacute de nuacutemeros

wavl CH4=33 wavl CH4=25 wavl CH4=10 wavl CH4=08 wavl CH4=05 wavl CH4=026 wavl CH4=02 477330000 0090130 477330000 0091110 477330000 0089250 477330000 0087000 477330000 0087140 477330000 0090080 477330000 0088110 480040000 0090930 480040000 0091930 480040000 0090160 480040000 0087930 480040000 0088110 480040000 0090950 480040000 0089090 482750000 0091710 482750000 0092730 482750000 0091060 482750000 0088850 482750000 0089080 482750000 0091810 482750000 0090060 485450000 0092530 485450000 0093570 485450000 0092000 485450000 0089810 485450000 0090100 485450000 0092730 485450000 0091090

IDLgt a=read_ascii(specs_27s_ntxtdata_start=1header=header)IDLgt printheader wavl CH4=33 wavl CH4=25 wavl CH4=10 wavl CH4=08 wavl CH4=05 wavl CH4=026 wavl CH4=02 IDLgt helpa Structure ltd423c9a8gt 1 tags length=224 data length=224 refs=1 FIELD01 FLOAT Array[14 4]

6289

Arquivos - texto - ldquoColunas regularesrdquoJaacute um arquivo um pouco mais difiacutecil de ler

NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS dec18s0001 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0002 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0003 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 FLAT 5408757812500 460000 5 dec18s0004 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 DARK 5408757812500 460000 5

Por ter colunas de tipos diferentes (strings inteiros reais) natildeo eacute possiacutevel o ler em um simples array Mas eacute faacutecil o colocar em uma estrutura de arrays onde cada campo eacute uma coluna

Especificando interativamente como interpretar as linhasIDLgt templ=ascii_template(filesearch_scamtxt)

Nome do campo (default mostrado)

Tipo do campo (identificado automaticamente)

Posiccedilatildeo (caracter) do comeccedilo (identificada automaticamente)

Linha de exemplo para verificar as colunas

6389

Arquivos - texto - ldquoColunas regularesrdquoDepois de feito o template o arquivo pode ser lido com apenas

IDLgt a=read_ascii(filesearch_scamtxttemplate=templ)IDLgt helpa Structure ltd4ec4608gt 11 tags length=416 data length=416 refs=1 FIELD01 STRING Array[4] FIELD02 LONG Array[4] FIELD03 STRING Array[4] FIELD04 FLOAT Array[4] FIELD05 FLOAT Array[4] FIELD06 STRING Array[4] FIELD07 STRING Array[4] FIELD08 STRING Array[4] FIELD09 FLOAT Array[4] FIELD10 FLOAT Array[4] FIELD11 LONG Array[4]IDLgt printafield01dec18s0001 dec18s0002 dec18s0003 dec18s0004IDLgt printafield04 626300 626300 626300 626300

O template (uma estrutura contendo dados sobre como ler o arquivo) pode ser usado para outros arquivos no mesmo formato No lugar de ter sido criado interativamente poderia ter sido lido de algum arquivo Poderia ter especificado nomes para os campos que seriam mais amigaacuteveis que coias como FIELD11

6489

Arquivos - texto - XML

Extensible Markup Language

Admite grande flexibilidade e por isso pode ter alta complexidade

Valores satildeo colocados dentro de uma estrutura em hieraacuterquica (em uma aacutervore) com os noacutes identificados pelos seus nomes (chaves)

Largamente usado em muitas aacutereas para armazenar conjuntos arbitraacuterios de quaisquer estruturas de dados

A maioria das aplicaccedilotildees usa um formato que eacute um subconjunto do XML especificado por um Schema comumente em um arquivo XML DTD (Document Type Definition)

6589

Arquivos - texto ndash XML ndash exemplos de usos

Armazenamento de dados de aplicaccedilotildees web (comum para exportar importar dados MediaWiki DokuWiki WordPress ADS Lattes etc)

Documentos Office (docx pptx xlsx) OpenOffice (odt opd ods)

Como versotildees de outros formatos FITSML XDF

ldquoScientific Dataset XML NASAs Astronomical Data Center (ADC) sponsors a number of research projects that

use XML for scientific data representation The XML activities at the ADC are sponsored and supported by the NASA Office of Space Science Applied Information Systems Research Program (AISRP)rdquo - httpxmlcoverpagesorgnasa-adchtml

Astronomical Instrument Markup Language (AIML)

SVG ndash Scalable Vector Graphics

Muitas de outras aplicaccedilotildees listadas em httpxmlcoverpagesorgxmlhtmlapplications

6689

Arquivos - texto ndash XML - exemploltxml version=10 gtltDOCTYPE Xdmf SYSTEM Xdmfdtd []gtltXdmf xmlnsxi=httpwwww3org2001XInclude Version=20gt ltDomaingt lt-- Example of Basic Topologies --gt ltInformation Name=Descriptiongt Example of a Polyvertex Topology ltInformationgt ltGrid Name=Polyvertex GridType=Uniformgt ltTopology TopologyType=Polyvertex Dimensions=3 NodesPerElement=3gt ltDataItem Format=XML Dimensions=3 3 NumberType=Floatgt 0 1 2 4 5 6 8 9 10 ltDataItemgt ltTopologygt ltGeometry Type=XYZgt ltDataItem Format=XML Dimensions=4 4 3gt 00 00 00 10 00 00()Que mostra que a interpretaccedilatildeo (parsing) de XML eacute em geral complexa

6789

Arquivos - texto - XML

Haacute muitas bibliotecas de alto niacutevel para fazer o processamento (parsing) e entregar os dados em uma estrutura conveniente

A complexidade em processar XML estaacute em decidir o que fazer com os dados jaacute que os arquivos podem ser muito complexos

As APIs (Application Programming Interfaces) mais comuns para processar XML que satildeo implementadas em muitas linguagens

DOM (Document Object Model) ndash manteacutem todo o conteuacutedo do em uma estrutura de dados (em geral uma aacutervore) em uma variaacutevel (em geral um objeto) Esta pode ser consultada para obter os valores de interesse para os alterar e usada para escrever um arquivo

SAX (Simple API for XML) ndash Interpretador (parser) por objetos O usuaacuterio escreve uma classe herdando da classe SAX provendo os meacutetodos que vatildeo processar os campos agrave medida em que estes satildeo lidos

6889

Arquivos - binaacuterios - FITSFlexible Image Transport System

O formato mais comum para observaccedilotildees astronocircmicas Tambeacutem usado para armazenar quaisquer dados mesmo natildeo relacionados a observaccedilotildees (especialmente tabelas como eacute praacutetica do STSCI)

Conteacutem um (ou mais) cabeccedilalho(s) de texto com metadados (informaccedilotildees sobre os dados como caracteriacutesticas (necessaacuterias para os ler) origem condiccedilotildees em que foram obtidos processamento realizado etc)

SIMPLE = T image conforms to FITS standard BITPIX = 32 bits per data value NAXIS = 2 number of axes NAXIS1 = 1024 NAXIS2 = 1024 BSCALE = 100000 Scaling factor BZERO = 000000 Scaling zero-point TELESCOP= Keck II Telescope SLITNAME= 0041x226 Slit Name SLITPA = 351979 Slit position angle SLITX = 131500 X pixel of the center of the slit LST = 12010446 local apparent sidereal time (()

Depois do cabeccedilalho haacute uma (ou mais) seccedilatildeo(otildees) de dados binaacuterios Costuma(m) ser array(s) 1D (espectros) 2D (imagens) ou 3D (ldquocubos de dadosrdquo)

De inteiros ou reais inteiros satildeo comuns em contagens de instrumentos reais para valores derivados (fluxos intensidades etc)

6989

Arquivos - binaacuterios - FITSNormalmente FITS satildeo lidos escritos por bibliotecas prontas de (relativamente) alto niacutevel usuaacuterio natildeo tem que saber como os dados satildeo armazenados no arquivo nem como os ler escrever Ex (IDL com a biblioteca idlastro)

IDLgt fits_info2dspectrumfits2dspectrumfits has 3 extensionsPrimary header 288 recordsNo dataExtension 1 -- SCI Header 144 records IMAGE ( 1201 1201 )Extension 2 -- ERR Header 72 records IMAGE ( 1201 1201 )Extension 3 -- DQ Header 72 records IMAGE ( 1201 1201 )

IDLgt mydata=readfits(2dspectrumfitsexten_no=1myheader) READFITS Reading FITS extension of type IMAGE READFITS Now reading 1201 by 1201 array

IDLgt extastmyheadermyastIDLgt sz=size(mydatadimensions)IDLgt xy2ad[1sz[0]][1sz[1]]myastcorners_acorners_dIDLgt printcorners_aCorners of the data array from file 2dspectrumfits are at 14487480 33063480

IDLgt printcorners_d -00041264444 00041402222

Obteacutem os dados de coordenadas (WCS) do header

Coloca os dados no array (2D de floats) mydata e o header no array (1D de strings) myheader

Calcula as coordenadas das quinas da imagem atraveacutes do WCS

Provecirc informaccedilotildees sobre o arquivo

7089

Arquivos - binaacuterios - ISIS Cube

Formatos como FITS se adequam muito a ter uma interface de mais alto niacutevel por objetos

Tambeacutem para dados em tabelas FITS muito mais trabalhosos de ler em baixo niacutevel que se adequam muito mais a mapas ou estruturas

Exemplo (de um formato semelhante a FITS ISIS cube)

O objeto ao ser criado lecirc todo o arquivo

cube=pp_editablecube(CM_1553510065_1_ircub)

Meacutetodos fornecem os dados desejados para obter quando necessaacuterio os dados de interesse

Find out the names of the backplanesprintcubegetproperty(backnames)Get the start time of the cubeprintcubegetfromheader(START_TIME)2007-084T100057286Z

Valores no cabeccedilalho podem ser convenientemente fornecidos como um mapa

header=cubeheader_as_hash()printheader[START_TIME]2007-084T100057286Z

7189

Arquivos - binaacuterios ndash ISIS Cube

Os dados satildeo fornecidos como arraysMake a contour plot of the latitudesc=contour(cubegetsuffixbyname(LATITUDE))Get the band with wavelength nearest to 21 (in the units used in the cube)selband=cubegetbandbywavelength(21wavelengths=selwavs)

Interfaces por overload tornam o acesso ainda mais conveniente

selband=cube[21]

selwavs=cube[21]

Retorna um array com a banda de comprimento de onda mais proacuteximo de 21 (microm)

Retorna o comprimento de onda mais proacuteximo de 21 (microm) da banda retornada acima

7289

Arquivos - binaacuterios ndash ISIS Cube Alteraccedilotildees feitas ao conteuacutedo satildeo automaticamente refletidas em todos os

lugares (cabeccedilalho em particular) afetados mantendo o objeto vaacutelido que pode depois ser gravado em um novo arquivo

IDLgt printcubelinescubesamplescubebands 64 64 256

IDLgt helpcubecoreltExpressiongt FLOAT = Array[64 64 256]

IDLgt cubecore=dblarr(100100256)

A linha acima natildeo eacute uma atribuiccedilatildeo eacute uma invocaccedilatildeo de meacutetodo Eacute equivalente acubesetpropertycore=dblarr(100100256)

Eacute o trabalho da funccedilatildeo setproperty decidir se a propriedade passada (core) faz sentido e se fizer fazer todo o trabalho necessaacuterio a esta mudanccedila Para o usuaacuterio eacute tudo automaacutetico e os dados da classe satildeo vaacutelidos o tempo todo

IDLgt helpcubecoreltExpressiongt DOUBLE = Array[100 100 256]

IDLgt printcubelinescubesamplescubebands 100 100 256

IDLgt cubesaveCM_1553510065_1_ir_editedcub

7389

Arquivos - binaacuterios ndash NetCDF e HDF5

Network Common Data Form e Hierarchical Data Format

Os dois uacutenicos formatos bem estabelecidos para dados cientiacuteficos geneacutericos

Armazenam dados como vaacuterias variaacuteveis e seus metadados Para cada variaacutevel haacute (ou pode haver) os metadados

Nome Dimensotildees (do array) Unidades Comentaacuterios

Ambos permitem arrays multidimensionais

Apenas HDF5 permite estruturas (daiacute vem a hierarquia)

Autodocumentados qualquer software que saiba ler um destes formatos lecirc qualquer arquivo sem precisar de conhecimento preacutevio sobre como o arquivo foi gerado

Muito bem suportados em bibliotecas padratildeo e natildeo padratildeo em softwares interativos e visualizadores (inclusive plugins para navegadores)

httpwwwunidataucaredusoftwarenetcdf httpenwikipediaorgwikiHdf5

NetCDF eacute mais simples de usar por natildeo ter hierarquia dando menos trabalho para ler e escrever dados Se hierarquia natildeo eacute necessaacuteria eacute mais conveniente de usar que HDF5

7489

Arquivos - binaacuterios - NetCDF e HDF5Haacute tambeacutem o formato CDL uma versatildeo ASCII do NetCDF A biblioteca padratildeo do NetCDF inclui conversores entre estes formatos

$ ncdump -h refspec_g01_0ncnetcdf refspec_g01_0 dimensions nlay = 51 nwn = 400 nleg = 33 numu = 2 nlev = 52 nphi = 3 ngas = 2 nwnc = 1 scal = 1 v3 = 3 dnl = 1 nk = 1 tdisr = UNLIMITED (0 currently) na = 16

variables float alb(nwn) float z(nlay) float t(nlay) float p(nlay) float wl(nwn) float iof(nwn) float mtau(nwn) float htau(nwn) float hctaus(nwn) float gtau(nwn) float outcos(scal) float phi(nleg) float phic(scal) float umu(numu) float flux(v3 nwn nlev) float mix(nlay ngas) float c(nlay) float psat(nlay) float ga(nwnc) float wlc(nwnc) float inc(scal) int dm(scal) int ord(scal) float fbeam(scal) float wn(nwn) float tautot(nwn nlay) float htaus(nwn nlay) float htaux(nwn nlay) float taug(nwn nlay) float phase(nwn nlay nleg) float ssa(nwn nlay) float uu(nwn nphi nlev numu) float u0u(nwn nlev numu) float tray(nwn nlay) float gtauo(tdisr nwn nlay)

Haacute 14 variaacuteveis usadas como dimensotildees para as 35 variaacuteveis que satildeo arrays

Ex alb(nwn) indica que alb eacute um array 1D de nwn elementos

nwn estaacute armazenado como uma das dimensotildees e eacute 400 portanto alb tem 400 elementos

Parte do conteuacutedo de um arquivo NetCDF em formato CDL (gerado pelo programa ncdump)

7589

Arquivos - binaacuterios - NetCDF e HDF5Conteuacutedo daquele arquivo visualizado com o ncview (acompanha a biblioteca NetCDF padratildeo)

7689

Arquivos - binaacuterios - NetCDF e HDF5O conteuacutedo de todo o arquivo pode ser lido facilmente com as bibliotecas disponiacuteveis e armazenado em contecirciners convenientes Usando um objeto que gera um resultado um pouco mais conveniente

IDLgt h=pp_readncdf(refspec_g01_0nchash)IDLgt printhvar_dims ltObjHeapVar229(HASH)gtvars ltObjHeapVar152(HASH)gtdims ltObjHeapVar118(HASH)gt

IDLgt printh[vars]T 173203 175459 175848 176001 175975 Z 431869 418858 406067 393403 380464 FLUX 300660 145536 0705180 0341669 0165532 PHASE 100000 0779034 0660858 0542052 0449983 TAUTOT0694377 0693420 0693474 0693540 0693636()

IDLgt help(h[vars])[TAUTOT]ltExpressiongt FLOAT = Array[51 400]

IDLgt print(h[var_dims])[TAUTOT]NLAY NWN

IDLgt print(h[dims])[(h[var_dims])[TAUTOT]]NLAY 51NWN 400

7789

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5)

Visualizaccedilatildeo da variaacutevel selecionada

Metadados e alguns valores da variaacutevel selecionada

Variaacutevel a ser criada com o conteuacutedo desta variaacutevel do arquivo

Hierarquia das variaacuteveis do arquivo

7889

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5) Imported variable az

IDLgt helpaz Structure ltd5723f38gt 13 tags length=448 data length=444 refs=1 _NAME STRING az _ICONTYPE STRING binary _TYPE STRING DATASET _FILE STRING INTENSI_test_409OUTh5 _PATH STRING _DATA DOUBLE Array[38] _NDIMENSIONS LONG 1 _DIMENSIONS ULONG64 Array[1] _NELEMENTS ULONG64 38 _DATATYPE STRING H5T_FLOAT _STORAGESIZE ULONG 8 _PRECISION LONG 64 _SIGN STRING

IDLgt printaz_data 00000000 10000000 20000000 30000000 40000000 50000000 60000000 80000000 ()

7989

Arquivos - binaacuterios - imagens

JPEG JPEG200 TIFF GeoTIFF etc

Os formatos comuns de imagens satildeo bem suportados em muacuteltiplas plataformas para uso dentro de programas e interativamente

Alguns formatos tecircm opccedilatildeo de compressatildeo com perda eou sem perda

Armazenam imagens como arrays 2D ou 3D (3D frequumlentemente limitado a 3 ou 4 em uma das dimensotildees uma imagem em 3 ou 4 bandas) de inteiros ou (em alguns formatos) reais

Alguns formatos permitem armazenar metadados para caracterizar as imagens armazenadas

JPEG2000 e GeoTIFF (um subconjunto de TIFF) comuns em astronomia e aacutereas proacuteximas

8089

Arquivos - binaacuterios ndash imagens ndash exemplo (IDL)IDLgt printquery_tiff(issmap_2009tiffinfogeotiff=geo) 1

IDLgt helpinfo Structure ltd4eca4b8gt 18 tags length=144 data length=132 refs=1 CHANNELS LONG 4 DIMENSIONS LONG Array[2] IMAGE_INDEX LONG 0 NUM_IMAGES LONG 1 PIXEL_TYPE INT 1 TYPE STRING TIFF BITS_PER_SAMPLE LONG 8 POSITION FLOAT Array[2] RESOLUTION FLOAT Array[2] UNITS LONG 2 TILE_SIZE LONG Array[2] DESCRIPTION STRING ISS (2009) DATE_TIME STRING 20100218 012436()

IDLgt helpgeo Structure ltd4efa1b8gt 10 tags length=264 data length=262 refs=1 MODELPIXELSCALETAG DOUBLE Array[3] MODELTIEPOINTTAG DOUBLE Array[6 4] GEOGRAPHICTYPEGEOKEY INT 4035 GEOGSEMIMAJORAXISGEOKEY DOUBLE 25750000 GEOGSEMIMINORAXISGEOKEY DOUBLE 25750000()

IDLgt myimage=read_tiff(issmap_2009tiff) Lecirc a imagem para o array myimage

Obteacutem informaccedilotildees sobre o arquivo

8189

Arquivos - binaacuterios ndash formatos nativosLinguagens como IDL R Python Java tecircm seu formato nativo binaacuterio acessado em alto niacutevel Basta mandar salvar ler variaacuteveis no do arquivo a biblioteca padratildeo automagicamente faz todo o trabalho de decidir como gravar ler os dados

Conveniente de usar na proacutepria linguagem Mas raramente existem bibliotecas para ler gravar o formato nativo de uma linguagem a partir de outra Ex (IDL)

IDLgt savefile=2dspectrumsavmydatamyheadercorners_dcorners_averbosecompress SAVE Portable (XDR) compressed SAVERESTORE file SAVE Saved variable MYDATA SAVE Saved variable MYHEADER()

Pode ser lido com apenas (haacute formas mais elaboradas)

IDLgt restore2dspectrumsavverbose RESTORE Portable (XDR) compressed SAVERESTORE file RESTORE Save file written by ltunknowngtltunknowngt Thu Jan 27 191422 2011 RESTORE IDL version 801 (linux x86_64) RESTORE Restored variable MYDATA RESTORE Restored variable MYHEADER()

IDLgt helpmydatamyheadercorners_dcorners_aMYDATA FLOAT = Array[1201 1201]MYHEADER STRING = Array[144]()

8289

Arquivos - processamento em baixo niacutevel

Nem sempre um formato padratildeo eacute a melhor escolha para o problema

Nem sempre haacute escolha (pode-se ter que trabalhar com arquivos que jaacute foram escritos em algum formato proprietaacuterio)

Agraves vezes o formato eacute padratildeo mas natildeo haacute bom suporte a ele disponiacutevel

Em todos estes casos eacute necessaacuterio escrever rotinas em baixo niacutevel que vatildeo ler processar diretamente o conteuacutedo do arquivo

Preferencialmente criando interfaces de alto niacutevel para o programa que vai as usar

8389

Arquivos - processamento em baixo niacutevel - texto

Tomando o exemplo anterior onde as colunas eram de diferentes tipos

NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS dec18s0001 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0002 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0003 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 FLAT 5408757812500 460000 5 dec18s0004 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 DARK 5408757812500 460000 5

A forma mais simples de o ler diretamente eacute definir uma estrutura para receber cada linha e um array destas estruturas para receber todo o arquivo Ex (IDL)

IDLgt record=namecalmpos0filnameechlpos0d0disppos0d0targnameposdirclassmjd_obsitime0d0coadds0IDLgt nlines=file_lines(filesearch_scamtxt)IDLgt mydata=replicate(recordnlines-1)IDLgt header=

Depois de definidas as variaacuteveis que vatildeo receber os dados o arquivo pode ser lido

IDLgt openrunitfilesearch_scamtxtget_lunIDLgt readfunitheaderIDLgt readfunitmydataformat=(A14I8A15F104F104A18A19A15F158F105I15)IDLgt free_lununit

A gravaccedilatildeo de um arquivo texto poderia ser feita de forma semelhante apenas trocando openr por openw (abrir o arquivo para gravaccedilatildeo natildeo leitura) e readf por printf

O arquivo eacute aberto em uma unidade (unit) usada para especificar de onde eacute feita a leitura

Ao final o arquivo eacute fechado

8489

Arquivos - processamento em baixo niacutevel - texto

O que resulta em

IDLgt printheader NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS

IDLgt helpmydataMYDATA STRUCT = -gt ltAnonymousgt Array[4]

IDLgt helpmydata[0] Structure ltd5e38f68gt 11 tags length=136 data length=124 refs=3 NAME STRING dec18s0001 CALMPOS INT 0 FILNAME STRING NIRSPEC-5-AO ECHLPOS DOUBLE 62630000 DISPPOS DOUBLE 36450000 TARGNAME STRING HD85258 POSDIR STRING NIRSPEC-5-AOp1 CLASS STRING STAR MJD_OBS STRING 54087574 ITIME DOUBLE 10000000 COADDS INT 1

Este caso eacute mais complicado que os mais comuns por haver colunas de strings

Se todas fossem de nuacutemeros natildeo teria sido necessaacuterio especificar o formato explicitamente As colunas teriam sido adivinhadas pela biblioteca que lecirc o arquivo Poderia ter sido lido escrito soacute com um array de nuacutemeros sem estruturas

8589

Arquivos - processamento em baixo niacutevel - binaacuterio

Formatos binaacuterios podem ser definidos de qualquer forma O arquivo eacute apenas um conjunto de bytes Cabe ao software saber como os interpretar

Uma escolha comum para que sejam autodocumentados eacute incluir um cabeccedilalho de texto informando as caracteriacutesticas dos dados necessaacuterias para os ler

Ex (IDL) criar um arquivo que armazene um array de doubles com um cabeccedilalho informando as dimensotildees para que o programa que o lecirc saiba como ler os dados

Inventa dados e abre o arquivo

IDLgt data_to_write=dindgen(34)IDLgt openwunitbinary_exampledatget_lun

Escreve as dimensotildees como texto

IDLgt printfunitdimensions of the double array stored belowIDLgt printfunitsize(data_to_writedimensions)

Escreve os dados binaacuterios

IDLgt writeuunitdata_to_write

Fecha o arquivo

IDLgt free_lununit

Escreve em binaacuterio (write unformatted)

8689

Arquivos - processamento em baixo niacutevel - binaacuterio

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

dimensions of the double array stored below 3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

8789

Arquivos - processamento em baixo niacutevel - binaacuterioA leitura deste arquivo eacute igualmente simples

IDLgt header=IDLgt dims=[00]IDLgt openrunitbinary_exampledatget_lun

Lecirc as dimensotildees (armazenadas como texto)

IDLgt readfunitheaderIDLgt readfunitdims

Lecirc a parte binaacuteria depois de saber as dimensotildees

IDLgt data_read=dblarr(dims)IDLgt readuunitdata_read

Fecha o arquivo

IDLgt free_lununit

Verifica que os dados foram gravados e lidos corretamente

IDLgt printarray_equal(data_to_writedata_read) 1

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Lecirc dados binaacuterios (read unformatted)

8889

Sumaacuterio

5 ndash Slides em httpwwwppenteadonetpeapea04_strings_iopdf Strings Expressotildees regulares Arquivos

httpwwwppenteadonetpea

8989

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89

Strings - processamento baacutesico Substrings

IDLgt printstrmid(abcdefg32)de

Algumas linguagens nativamente suportam iacutendices para indicar substrings C C++ Fortran Python Ex (Python)

gtgtgt s=abcdegtgtgt print(s[25])cde

Outras permitem que sejam definidos iacutendices por objetos strings

Busca de caracteres ou substrings

IDLgt printstrpos(abcdefgd) 3

IDLgt printstrpos(abcdefgj) -1

IDLgt printstrpos(abcdefgbc) 1

2189

Strings - processamento baacutesico

Outros

IDLgt printstrlen(1234567) 7

IDLgt printstrlen(1234567 ) 8

IDLgt printstrlen( 1234567 ) 9

IDLgt helpstrtrim( 1234567 2)ltExpressiongt STRING = 1234567

IDLgt helpstrtrim( 1234567 1)ltExpressiongt STRING = 1234567

IDLgt helpstrtrim( 1234567 0)ltExpressiongt STRING = 1234567

IDLgt printstrupcase(abcdEF)ABCDEF

IDLgt printstrlowcase(abcdEF)abcdef

Medindo quantos caracteres tem o string inclui espaccedilos em branco

Remoccedilatildeo dos brancos agrave esquerda agrave direita ou dos dois lados

2289

Strings - conversatildeo de outros tipos para strings

Eacute uma das operaccedilotildees mais comuns para gerar textos informativos e nomes escrever arquivos (aquivos texto discutidos adiante) etc

Eacute natildeo trivial jaacute que a conversatildeo pode ser feita de muitas formas diferentes

Para tipos fundamentais sempre haacute uma conversatildeo default tanto criando um string como usando algo tipo print (para strings terminal ou arquivos)

Todo comando tipo print (print printf sprintf string write etc) e toda escrita para arquivos texto eacute uma conversatildeo para string (terminais e arquivos texto soacute conteacutem strings)

2389

Strings - conversatildeo de outros tipos para strings

Exemplos de conversotildees (IDL)

IDLgt print[-109] -1 0 9

IDLgt print1d01B10 10000000 1 100000

IDLgt helpstring(1d01B10)ltExpressiongt STRING = 10000000 1 100000

IDLgt printfunitdblarr(343)

Tipos mais elaborados podem ou natildeo ter uma forma predefinida Com objetos eacute comum ser possiacutevel definir a conversatildeo (stringification) ao criar a classe

IDLgt h=hash(a109[01]18b)

IDLgt printh9 0 1a 100000180000 b

Strings

Coloca strings em um arquivo (adiante)

Strings criados por um meacutetodo da classe hash satildeo uma forma de representar o hash

2489

Strings - conversatildeo de outros tipos para strings

Algumas linguagens (Python IDL) tecircm mais de uma forma default de gerar strings Em Python uma forma eacute executaacutevel a outra eacute mais legiacutevel

In [30] x=arange(12)reshape(43)

In [31] print(x)[[ 0 1 2] [ 3 4 5] [ 6 7 8] [ 9 10 11]]

In [32] xOut[32]array([[ 0 1 2] [ 3 4 5] [ 6 7 8] [ 9 10 11]])

In [33] y=array([[ 0 1 2] [ 3 4 5] [ 6 7 8] [ 9 10 11]])

In [37] print(array_equal(xy))True

String mais legiacutevel

String executaacutevelPode ser usado para criar um objeto equivalente

2589

Strings ndash formataccedilatildeo expliacutecita

A formataccedilatildeo pode ser especificada se a conversatildeo default natildeo eacute adequada para definir a conversatildeo em um novo tipo

Cada linguagem tem sua sintaxe para formataccedilatildeo

Haacute dois estilos semelhantes em vaacuterias linguagens

Ambos os estilos satildeo sintaxes diferentes para a mesma ideacuteia Um coacutedigo especifica o tipo de dado sendo passado (inteiro real etc) e detalhes de como seraacute feito o string (largura do campo diacutegitos decimais alinhamento etc)

2689

Strings ndash formataccedilatildeo expliacutecita

Estilo Fortran

IDL

IDLgt print1d0+1d-9 10000000

IDLgt print1d0+1d-9format=(E1610)10000000010E+00

IDLgt printx=1d0+1d-9format=(A0F1613)X= 10000000010000

Estilo C (ldquoprintfrdquo)

IDL

IDLgt printformat=(x=1610e)1d0+1d-9x=10000000010e+00

Python

In [20] print(x=1610e (1e0+1e-9))x=10000000010e+00

Nenhum formato expliacutecito (default)

2789

Strings - formatos tipo Fortran

(apenas o principal ver documentaccedilatildeo para detalhes)

Ex (IDL)

IDLgt printx=1d0+1d-9format=(A0F1613)X= 10000000010000

Tambeacutem haacute modificadores para especificar alinhamento (-) se deve haver (ou ser suprimido) avanccedilo para a pŕoxima linha posiccedilatildeo dentro do campo etc

Coacutedigo Significado Exemplo(s)

A String (A) (10A)

I Inteiro decimal (I) (10I)(-2I)

B Inteiro binaacuterio (B) (10B)

Z Inteiro hexadecimal (Z) (10Z)

O Inteiro octal (O) (10O)

F Real ponto fixo (F)(F52)

E D Real ponto flutuante (E)(D1610)

G Real ponto fixo ou flutuante de acordo com o valor (G)(G10)

ldquordquo String literal (ldquox=rdquoI10)

X Caracteres em branco (A10XI)

2889

Strings - formatos tipo C (printf)(apenas o principal ver documentaccedilatildeo para detalhes)String com campos a serem substituiacutedos por valores (passados adiante) marcados por coacutedigos com

Ex (Python)In [20] print(x=1610e (1e0+1e-9))x=10000000010e+00

Haacute modificadores para especificar alinhamento como preencher o espaccedilo que sobra (espaccedilos zeros etc) para imprimir o sinal + etc

Coacutedigo Significado (tipo) Exemplo(s)

di Inteiro decimal (int) d 5d +05d

u Inteiro decimal sem sinal (unsigned int) u 7u

fF Real em ponto fixo (double float) f 136f

eE Real em ponto flutuante (double float) e 1610e

gG Real em ponto fixo ou flutuante decidido pelo valor (double float)

g 73G

xX Inteiro sem sinal hexadecimal (unsigned int) x 10X

o Inteiro sem sinal octal (unsigned int) o 5o

s String (string) s 10s

c Caractere (char) c

p Ponteiro - estilo C - (void ) p

literal

2989

Strings - conversatildeo de strings para outros tipos

Para gerar dados a partir de strings datas identificadores pedaccedilos de nomes valores numeacutericos armazenados em strings

Tambeacutem sempre haacute conversotildees default para os tipos baacutesicos onde o intepretador programa faz o possiacutevel para entender o string como um valor daquele tipo

Tipicamente eacute feito por casts (funccedilotildees de conversatildeo) reads (de strings ou arquivos texto (arquivos texto satildeo strings)) construtores de objetos ou implicitamente

3089

Strings - conversatildeo de strings para outros tipos - impliacutecitas

Exs (IDL)

IDLgt helpfix([17 17 171 -17 9 8])ltExpressiongt INT = Array[5]

IDLgt printfix([17 17 171 -17 9 8]) 17 17 17 -17 9

IDLgt printdouble([17 17 171 -17 9 8]) 17000000 17000000 17100000 -17000000 90000000

IDLgt readfunitabcd

IDLgt a=0d0IDLgt b=00IDLgt c=0IDLgt reads171d0 189d0 -9abcIDLgt helpabcA DOUBLE = 17100000B FLOAT = 189000C INT = -9

Converte o conteuacutedo do string para os tipos das variaacuteveis abcd (explicado adiante)

3189

Strings - conversatildeo de strings para outros tipos

Quando o default natildeo eacute suficiente (ou quando escrevendo o conversor em uma classe) costuma ser possiacutevel o fazer com formatos semelhantes aos formatos para gerar strings Exs (IDL)

IDLgt a=0d0IDLgt b=00IDLgt c=0IDLgt reads171d0 something 189d0-9abc READS Input conversion error Unit 0 File ltstdingt Error occurred at $MAIN$ Execution halted at $MAIN$

Natildeo funcionou porque sozinho ele natildeo conseguiu saber o que fazer com o ldquosomethingrdquo Usando um formato especiacutefico

IDLgt reads171d0 something 189d0-9 abcformat=(D6111XD611XI)

IDLgt helpabcA DOUBLE = 17100000B FLOAT = 189000C INT = -9

Exemplos mais complicados adiante (arquivos texto)

Variaacuteveis tecircm que ser definidas para informar para que tipo seraacute feita a conversatildeo default

3289

Strings - processamento natildeo baacutesicoOperaccedilotildees importantes e muito necessaacuterias mas que natildeo satildeo suportadas em todas as linguagens bibliotecas padratildeo

Testes (ex IDL)

IDLgt str=[afitsaFITSafitsaabfitsabcfits]

IDLgt printstrmatch(strfits) 1 0 0 1 1

IDLgt printstrmatch(strfitsfold_case) 1 1 0 1 1

IDLgt printstrmatch(strfitsfold_case) 1 1 1 1 1

IDLgt printstrmatch(strfits) 1 0 0 0 0

IDLgt printstrmatch(strfits) 0 0 0 1 0

3389

Strings - processamento natildeo baacutesico

Operaccedilotildees importantes e muito necessaacuterias mas que natildeo satildeo suportadas em todas as linguagens bibliotecas padratildeo

Separaccedilatildeo de partes (Ex IDL)

IDLgt printstrsplit(2011- 131 -extract)format=(A)2011131

Processamento de nomes de arquivos diretoacuterios (Ex IDL)

IDLgt printfile_dirname(some_directoryanother_directorysome_filetxt)some_directoryanother_directory

IDLgt printfile_basename(some_directoryanother_directorysome_filetxt)some_filetxt

IDLgt printfile_basename(another_directorysome_filetxttxt)+_alteredtxtsome_file_alteredtxt

3489

Strings - processamento natildeo baacutesico

Codificaccedilotildees (Ex Python 3)

gtgtgt s=infinite money infinNeuro sign

gtgtgt print(s)infinite money infineuro

gtgtgt print(ascii(s))infinite money u221eu20ac

gtgtgt print(sencode(utf-8))binfinite money xe2x88x9exe2x82xac

3589

Strings - processamento natildeo baacutesico

Perl eacute a linguagem mais avanccedilada para processamento de strings tem suporte nativo a muitas outras operaccedilotildees a semacircntica da linguagem eacute voltada principalmente para processar strings expressotildees regulares (de vaacuterios tipos) natildeo satildeo strings fazem parte da semacircntica

Ex (sem o objetivo que seja compreensiacutevel apenas para indicar o estilo)

Ler um arquivo contendo campos com nomes separados de valores por ()

temperature 10008name some modelx_dimension 100y_dimension 100z_dimension 50()

Armazenado-o em um mapa O que pode ser feito com apenas

While (ltgt) Loop over input linesPut pre-colon text into $1 post-colon into $2 if (m (S+) (+) ) Use $1 as key $2 as value $file_data$1 = $2

3689

Expressotildees regulares - definiccedilatildeo

Expressotildees regulares (regular expressions regex) satildeo a mais poderosa ferramenta para fazer buscas e separar substrings

Regex satildeo uma linguagem com o uacutenico objetivo de especificar propriedades de strings

Implementadas em graus diferentes em todas as linguagens modernas e modernizadas facilita encontrar uma expressatildeo jaacute pronta pois satildeo quase iguais em qualquer linguagem

Estatildeo na biblioteca padratildeo em IDL Python R Perl

Em C++ e Java em bibliotecas comuns (Boost Jregex)

Para que servem

Uma expressatildeo regular especifica propriedades de strings

O interpretador de expressotildees regulares (regular expression engine) recebe a expressatildeo e o string a analisar e determina se o string corresponde (matches) agrave expressatildeo regular

Em alguns casos o interpretador pode tambeacutem informar que parte(s) do string corresponde(m) a que parte(s) da expressatildeo regular e realizar processamentos com estas partes

3789

Expressotildees regulares ndash exemplos de usos Separar partes de strings

Encontrar linhas em arquivos que tenham nomes valores e comentaacuterios e separar estes pedaccedilos

Escalar com comentaacuterio

SLITPA = 351979 Slit position angle

Array 1D sem comentaacuterio (se extendendo por vaacuterias linhas)

BAND_BIN_CENTER = (03505400358950036629003732200379490 0387900104598)

Escalares em diferentes formatos

Total Mechanical Luminosity 15310E+03resources_usedwalltime=005603

Pedaccedilos de nomes

6063 17836E-20 2456 T FeIX((3Pe)3d(2PE)4p_1Po-3s2_3p6_1Se)

Datas separando ano mecircs dia hora (em vaacuterios formatos diferentes)

DATE-OBS= 2006-12-18 universal date of observationDATE_TIME = 2010-07-19T161032START_TIME = 2006-182T225102850Z

3889

Expressotildees regulares ndash exemplos de usos

Separar partes de strings Separar partes de nomes de arquivos (por significarem algo como identificar o

conteuacutedo)

specdec18s0041fitsscamdec18i0054fits15_7_mts_hmpixselh_mr15sav15_7_mts_hwpixselh_mr15sav16_3_mts_hwpixselb_mr16savreadmodel5l_-1_000010000_10000_r05_030_08196_0100000_005000000_1000eps

Determinar se um string eacute um nuacutemero (inteiro real fixo flutuante)

Encontrar identificadores Exs nomes de cataacutelogos endereccedilos HTTPFTP endereccedilos de email

Separar campos em arquivos sendo lidos onde as linhas natildeo tecircm a mesma formataccedilatildeo algumas linhas com colunas separadas por espaccedilos outras por tabs outras por

siacutembolos ignorando linhas de comentaacuterios e linhas vazias

3989

Expressotildees regulares - usoEx (IDL) encontrar nomes de arquivos com algumas propriedades

IDLgt printfilesformat=(A)CM_1477475933_1_viscubCM_1477476864_1_ircubCM_1477476864_1_irgcubCM_1477476864_1_viscubCM_1477477826_1_ircubCM_1477477826_1_irgcubCM_1477477826_1_viscubmosaic2cub

IDLgt printstregex(files+irgcubboolean) 0 0 1 0 0 1 0 0

A expressatildeo regular eacute +irgcub Especifica uma ou mais ocorrecircncias seguidas (+) de qualquer caractere () seguido de uma ocorrecircncia de irgcub (o ponto vem precedido do caractere de

escape () para ser entendido literalmente como um ponto e natildeo como o seu significado especial (qualquer caractere)

Esta aplicaccedilatildeo do interpretador (stregex) retorna um valor Booleano (verdadeirofalso) para cada elemento do string passado (files) que informa se aquele elemento correspondia agravequela expressatildeo regular

Este eacute um exemplo artificial Seria mais faacutecil ter usado strmatch(filesirgcub)

4089

Expressotildees regulares - uso

Em casos como este tipicamente o resultado de stregex seria usado como filtro para selecionar apenas os elementos do array de strings que satisfazem agravequela expressatildeo regular

IDLgt w=where(stregex(files+irgcubboolean)null)IDLgt printfiles[w]format=(A)CM_1477476864_1_irgcubCM_1477477826_1_irgcub

Ex (IDL) Determinar que strings conteacutem uma data no formato yyyy-mm-dd

IDLgt strs=[201002012010-02-012010-2-1aaaa-mm-ddT2010-02-01J]IDLgt printstregex(strs[0-9]4-[0-9]2-[0-9]2boolean) 0 1 0 0 1

Esta expressatildeo regular especifica quatro repeticcedilotildees (4) de diacutegitos (caracteres na faixa [0-9]) seguido de um (-) seguido de duas repeticcedilotildees (2) de dois diacutegitos ([0-9]) seguido de um (-) seguido de duas repeticcedilotildees (2) de dois diacutegitos ([0-9])

Uma expressatildeo regular apenas um pouco mais elaborada poderia corresponder aos 3 formatos de data no array acima E poderia se impedir que a uacuteltima (com outros caracteres antes e depois da data) seja aceita

4189

Expressotildees regulares - regras - caracteres ldquonormaisrdquo

Uma expressatildeo regular usa caracteres ldquonormaisrdquo e especiais para especificar o que se vai procurar na ordem em que aparecem na expressatildeo

Se um caractere eacute normal (natildeo eacute um dos especiais mostrados adiante) ele especifica uma ocorrecircncia daquele caractere

Ex J eacute uma expressatildeo regular que corresponde a qualquer string onde ocorra J Jaacute JA soacute corresponde a strings que tenham JA dentro

Exs (IDL)

IDLgt strs=[JJJJJJaJAjaJa]

IDLgt printstregex(strsJboolean) 1 1 1 0 1

IDLgt printstregex(strsJAboolean) 0 0 1 0 0

4289

Expressotildees regulares - regras - caracteres especiaisCaracteres especiais tecircm outros significados Para significar literalmente aquele caractere deve ser escapado (escaped) com um

Siacutembolo significado exemplo Corresponde(m) Escape o caractere seguinte deve ser interpretado

literalmente natildeo como especial aa

Qualquer caractere ab ajb aab abb jafbc

+ Uma ou mais repeticcedilotildees do que vem agrave esquerda a+b ab aab bab baabh

() Subexpressatildeo para agrupar termos afetados por um caractere especial (como parecircnteses em notaccedilatildeo matemaacutetica)

(ab)+c abc ababc dabababcg

Zero ou mais repeticcedilotildees dos termos agrave esquerda ab abbaab caaabg

Zero ou uma repeticcedilatildeo dos termos agrave esquerda ab b ab cabd cbd

| Alternaccedilatildeo qualquer um dos dois agrave esquerda a|bc ac bc jacd jbcd

n Exatamente n repeticcedilotildees do termo agrave esquerda a2b aab daaabg

n1n2 De n1 a n2 repeticcedilotildees do termo agrave esquerda a12b ab aab aaab gaaabbd

^ Acircncora (no comeccedilo) nada agrave esquerda ^ab ab abb

$ Acircncora (no fim) nada agrave direita ab$ abaab

[] Conjunto de valores (explicado adiante)

4389

Expressotildees regulares - regras - conjuntos de valores

[] denota um conjunto de valores que pode conter

Uma lista de coisas que devem corresponder Ex [abc] signfica qualquer caractere no conjunto abc Correspondem a esta

expressatildeo abcabha

Uma lista de coisas que natildeo podem corresponder [^abc] significa qualquer coisa que natildeo seja a b ou c Correspondem a esta

expressatildeo d jgs gg

Faixas de valores [0-9] signfica qualquer diacutegito [0-9a-zA-Z] significa qualquer diacutegito ou letra

Classes de valores como algumas faixas e outros conjuntos ocorrem com muita frequumlecircncia haacute nomes

especiais para eles Estes (em IDL) vecircm entre [] ex [[digit] significa o mesmo que [0-9]

4489

Expressotildees regulares - regras - classes de valores

Classe signficado

alnum Caracteres alfanumeacutericos 0-9a-zA-Z

alpha Caracteres alfabeacuteticos a-zA-Z

cntrl Caracteres de controle ASCII (natildeo visiacuteveis coacutedigos 1 a 31 e 127)

digit Diacutegitos (decimais) 0-9

graph Caracteres visiacuteveis ASCII 33 a 126 (natildeo inclui o espaccedilo)

lower Letras minuacutesculas a-z

print Caracteres ldquoimprimiacuteveisrdquo (visiacuteveis e o espaccedilo) ASCII 32 a 126

punct Caracteres de pontuaccedilatildeo $amprsquo()+-lt=gt[]^_lsquo|~

space Os caracteres ldquoem brancordquo (blank) espaccedilo tab tab vertical CR LF (ASCII 32 e 9-13)

upper Letras maiuacutesculas A-Z

xdigit Diacutegitos hexadecimais 0-9A-Fa-f

lt Comeccedilo de palavra (palavra definida como sequumlecircncia de coisas natildeo space)

gt Fim de palavra (palavra definida como sequumlecircncia de coisas natildeo space)

Estas satildeo apenas as principais Algumas implementaccedilotildees tecircm muito mais (em particular nas linguagens que usam Unicode nativamente)

4589

Expressotildees regulares - exemplos

Determinar se strings satildeo nuacutemeros (Ex IDL)

IDLgt str=[9-18 875-812-45913E9-98d7a188d032f5]

Inteiros

IDLgt intexpr=^[-+][0-9]+$

IDLgt printstregex(strintexprboolean) 1 1 0 0 0 0 0 0 0 0

Ponto flutuante

IDLgt fpexpr=^[-+](([0-9][0-9]+)|([0-9]+[0-9]))([eEdD][-+][0-9]+)$

IDLgt printstregex(strfpexprboolean) 1 1 0 1 1 1 1 1 0 0

Sinal opcional

1 ou mais diacutegitos

Sinal opcional

0 ou mais diacutegitos opcionalmente seguidos de um ponto e 1 ou mais diacutegitos

1 ou mais diacutegitos opcionalmente seguidos de um ponto e 0 ou mais diacutegitos

ou Expoente opcional letra do expoente seguida de sinal opcional seguido de um ou mais diacutegitos

4689

Expressotildees regulares ndash extraccedilatildeo

Interpretadores de expressotildees regulares costumam oferecer mais que apenas testar se um string corresponde a uma expressatildeo

Em geral tambeacutem podem retornar que parte(s) do string corresponde(m) agrave expressatildeo

Ex (IDL) Determinar se um string conteacutem uma data incluindo os formatos

IDLgt dates=[2011-01-312011 1 3120110131something done on y2011m1d31 with something]

E extrair a data de dentro do string

IDLgt expr=[0-9]4[0-9]12[0-9]12

(4 diacutegitos)(qualquer separador)(1 a 2 diacutegitos)(qualquer separador)(1 a 2 diacutegitos)

IDLgt printstregex(datesexprextract)format=(A)2011-01-312011 1 31201101312011m1d31

Como agora separar ano mecircs e dia Com uma busca e uma extraccedilatildeo para cada Poderia ser mais eacute mais faacutecil com uma uacutenica expressatildeo regular

4789

Expressotildees regulares - aleacutem de apenas testes

Tambeacutem podem retornar que parte(s) do string correspondem agrave expressatildeo toda e agraves suas subexpressotildees (partes da expressatildeo delimitadas por parecircnteses)

Ex (IDL) Separar pedaccedilos de datas Neste caso para a expressatildeo ficar menor assumindo um formato simples (yyyy-mm-ddThhmmssfff) Mas poderia ser um formato mais livre como no exemplo anterior

IDLgt str=Stuff observed on 2011-01-31T123924983 with some instrumentIDLgt expr=([0-9]4)-([0-9]2)-([0-9]2)T([0-9]2)([0-9]2)([0-9]2[0-9]3)

(quatro diacutegitos)-(2 diacutegitos)-(2 diacutegitos)T(2 diacutegitos)(2 diacutegitos)(2 diacutegitos3 diacutegitos)

IDLgt pieces=stregex(strexprextractsubexpr)IDLgt printpiecesformat=(A)2011-01-31T12392498320110131123924983IDLgt d=julday(pieces[2]pieces[3]pieces[1]pieces[4]pieces[5]pieces[6])IDLgt printdformat=(F166) 2455593027372

Expressatildeo inteiraPrimeira subexpressatildeoSegunda subexpressatildeoTerceira subexpressatildeoQuarta subexpressatildeoQuinta subexpressatildeoSexta subexpressatildeo

4889

Expressotildees regulares - referecircncias httpxkcdcom208

Viacutedeos do Software Carpentry

httpsoftware-carpentryorg4_0regexp

4989

Arquivos

Quase todo programa precisa armazenar dados em arquivos

Podem ser pequenos arquivos de paracircmetros ou enormes arquivos de dados produzidos ou a processar

Apesar do sugerido pela praacutetica comum arquivos texto natildeo satildeo sempre a melhor escolha para armazenar dados - e haacute muitas formas diferentes de os usar

Qual eacute a melhor escolha

Assim como para linguagens ou contecirciners natildeo existe ldquoo melhor formatordquo Cada um tem suas vantagens e desvantagens

Dados diferentes (mesmo se usados pelos mesmos programas) em geral se adequam melhor a formatos diferentes

5089

Arquivos - texto X binaacuterios

Em qualquer formato arquivos satildeo armazenados como diacutegitos binaacuterios

Mas haacute duas formas principais como eles podem ser codificados

Arquivos baseados em texto (text files)

Dados satildeo transformados em caracteres usando alguma formataccedilatildeo (mesmo se impliacutecita) e escritos com alguma codificaccedilatildeo de texto (comumente mas natildeo necessariamente ASCII)

Um arquivo texto eacute um ou mais strings As mesmas conversotildees tecircm que ser feitas depara outros tipos

Arquivos ldquobinaacuteriosrdquo (binary files)

Embora todo arquivo seja binaacuterio este nome costuma ser usado soacute para aqueles em que os dados natildeo estatildeo na forma de texto

Com frequumlecircncia (nem sempre) os dados satildeo gravados de forma idecircntica a como satildeo armazenados na memoacuteria

Muitos formatos usam uma mistura de partes em texto e partes binaacuterias

Um cabeccedilalho (header) de texto que daacute informaccedilotildees (metadados) sobre os dados armazenados na parte binaacuteria que vem depois

O cabeccedilalho conteacutem em especial informaccedilotildees sobre como ler os dados binaacuterios

5189

Arquivos - texto X binaacuterios

Vantagens de arquivos texto

Legiacuteveis por pessoas (human readable)

Podem ser auto-suficientes todo o necessaacuterio para os ler e entender o que conteacutem pode ser obtido olhando o arquivo

Satildeo os menos especiacuteficos a linguagens software normalmente satildeo escritos em ASCII ou Unicode e sempre haacute algum suporte a ler escrever texto em linguagens software

Haacute alguns formatos padratildeo para texto (exs CSV XML) que satildeo suportados em muitas plataformas diferentes

5289

Arquivos - texto X binaacuterios

Vantagens de arquivos binaacuterios

Em geral natildeo haacute conversotildees entre o os dados como armazenados na memoacuteria O que torna o armazenamento mais eficiente e sem alteraccedilotildees nos valores

A maior parte dos formatos padronizados eacute binaacuteria Exs FITS cube CDF NetCDF HDF HDF5 JPEG JPEG2000 TIFF GeoTIFF MPEG etc

Eacute mais comum que haja bibliotecas prontas (ateacute de alto niacutevel) para consulta leitura e gravaccedilatildeo

Os formatos melhor desenhados satildeo autodocumentados (em texto ou binaacuterio) para os ler natildeo eacute necessaacuterio conhecimento preacutevio sobre como os dados foram armazenados

Toda linguagem plataforma costuma ter seu formato binaacuterio mais nativo que costuma ser o mais faacutecil para leitura gravaccedilatildeo Em particular nas de alto niacutevel que tecircm formatos autodocumentados (especialmente

em IDL R Python Java)

Muitos formatos tecircm opccedilatildeo de compressatildeo dos dados

5389

Arquivos - proprietaacuterios X padratildeo

Independente da escolha texto binaacuterio programas devem escolher entre usar um formato proacuteprio ou um formato padronizado

A principal vantagem de formatos proacuteprios eacute que satildeo definidos da forma mais conveniente para a aplicaccedilatildeo que os usa simplificando leitura e gravaccedilatildeo e potencialmente otimizando recursos (acesso ao disco tamanho do arquivo etc)

A principal desvantagem de formatos proacuteprios eacute ser necessaacuterio escrever todo o coacutedigo para os ler gravar

Pode dar mais trabalho que usar um formato geneacuterico que natildeo seja exatamente o que melhor se encaixa na aplicaccedilatildeo

O coacutedigo para processar o formato em geral vai ser menos completo e conveniente de usar que o de um formato bem estabelecido usado por muitos outros em muitos ambientes

Cada novo software que for usar estes arquivos vai precisar compartilhar do mesmo coacutedigo ou precisar de coacutedigo novo (em particular se em outra linguagem) para ler gravar naquele formato

Eacute necessaacuterio documentar o formato e decidir sobre como ele seraacute definido

Se outros jaacute colocaram muito trabalho desenvolvendo bons formatos padratildeo bem suportados em muitos ambientes por que ter o trabalho de reinventar (e reprogramar redocumentar e retestar) a roda

5489

Arquivos - padrotildees comuns em astronomia (exs adiante)

Texto

CSV Comma-separated values - bem suportado por muitos softwares

ldquoColunas fixasrdquo Natildeo eacute um padratildeo bem definido mas eacute praacutetica comum para tabelas (2D)

XML Extensible Markup Language - O padratildeo texto mais flexiacutevel de grande uso em programaccedilatildeo geral para armazenar qualquer coisa com frequumlecircncia de forma hieraacuterquica Bem suportado por linguagens modernas (e modernizadas) e bibliotecas das principais

linguagens gerais Alta complexidade o torna trabalhoso de usar

5589

Arquivos - padrotildees comuns em astronomia (exs adiante)Binaacuterios

FITS Flexible Image Transport System - o mais comum para observaccedilotildees astronocircmicas Conteacutem os dados (em geral arrays 1D 2D ou 3D) e documentaccedilatildeo (nos cabeccedilalhos) sobre a origem e caracteriacutesticas dos dados Tambeacutem usado para armazenar tabelas de dados quaisquer mesmo que natildeo sejam observaccedilotildees (especialmente pelo STSCI) Variam muito em qualidade de documentaccedilatildeo

NetCDF Network Common Data Form - evoluccedilatildeo do CDF autodocumentado eacute comum e bem suportado para vaacuterios arrays de dados

HDF5 Hierarchical Data Format ndash autodocumentado comum e bem suportado permitindo aleacutem de simples arrays estruturas (eacute um formato hieraacuterquico)

Formatos de imagens JPEG JPEG2000 TIFF GeoTIFF etc - voltados para arrays 2D3D de inteiros ou (em alguns casos) reais com ou sem compressatildeo JPEG2000 tem caracteriacutesticas mais avanccediladas como imagens multiresoluccedilatildeo

Formatos vetoriais PS EPS DXF SHP SVG - variados niacuteveis de suporte a armazenamento de vetores e formas em 2D ou 3D

ISIS Cube semelhante em caracteriacutesticas ao FITS mais usado em sensoriamento remoto geociecircncias e ciecircncias planetaacuterias em geral para observaccedilotildees 1D 2D ou 3D

Formatos nativos de linguagens todo o trabalho de leitura e gravaccedilatildeo eacute feito automagicamente pela biblioteca padratildeo em IDL R Python Java

5689

Arquivos texto - newlines

Apesar do que possa parecer arquivos texto natildeo tecircm intrinsecamente vaacuterias linhas Arquivos texto satildeo soacute uma sequumlecircncia 1D de caracteres em alguma codificaccedilatildeo Separaccedilatildeo em linhas (equivalente a interpretar o arquivo como 2D em linhas e colunas) eacute

especificada por convenccedilotildees Natildeo haacute apenas uma convenccedilatildeo para o fim de linhas

A mais primitiva convenccedilatildeo eacute separaccedilatildeo nenhuma estipula-se que linhas tenham um nuacutemero fixo N de caracteres e cabe ao software que lecirc o arquivo entender que uma linha nova ocorre regularmente a cada N caracteres

Eacute a forma menos portaacutevel e mais inconveniente eacute necessaacuterio o conhecimento preacutevio (ou por inspeccedilatildeo do arquivo) de quantos caracteres haacute por linha

A maior parte dos editores de texto natildeo vai saber separar linhas desta forma (por falta deste conhecimento preacutevio) Exemplo (de um FITS real)

SIMPLE = T Fits standard BITPIX = 16 Bits per pixel NAXIS = 0 Number of axes EXTEND = T File may contain extensions

O que com as linhas quebradas nos lugares certos seria

SIMPLE = T Fits standard BITPIX = 16 Bits per pixel NAXIS = 0 Number of axes EXTEND = T File may contain extensions

5789

Arquivos texto - newlines

A forma mais comum de especificar linhas eacute com um marcador do final de linha (newline)

Eacute um caractere especial natildeo normalmente presente no texto que serve para marcar fim de linhas

Mas natildeo haacute soacute um padratildeo de newline Os mais comuns

LF (Line Feed ASCII 10) ndash Unix Linux Mac OS X

CR - (Carriage Return ASCII 13) - Mac OS lt10

CR+LF (CR seguido de LF) - Windows DOS

Eacute o motivo de o Notepad (Windows) natildeo entender as quebras de linha de arquivos escritos com o formato nativo de Linux o arquivo soacute tem LF enquanto o editor espera CR+LF

Alguns sistemas (strings em vaacuterias linguagens por exemplo) usam o coacutedigo de escape n para indicar newline que eacute codificado de acordo com o padratildeo sendo usado

Em geral bibliotecas de leitura e gravaccedilatildeo de arquivos usam (default pelo menos) o newline nativo do sistema em que satildeo usadas

Programas de conversatildeo entre os sistemas satildeo comuns (ex dos2unix)

O Wordpad identifica se for usado soacute LF e quebra as linhas de acordo

5889

Arquivos - texto - CSV

Comma-separated values

O formato mais padronizado para tabelas (arrays 2D) em texto (frequentemente mas natildeo necessariamente ASCII)

Bem suportado por bibliotecas padratildeo de linguagens e outros softwares (Excel Calc Origin Google Docs etc)

Conteacutem Linhas de cabeccedilalho (opcionais mas recomendadas) linhas com qualquer texto geral

descrevendo o arquivo e em geral uma linha de tiacutetulo para as colunas da tabela Uma (apenas uma) tabela onde todas as linhas tecircm o mesmo nuacutemero de colunas

Colunas separadas por viacutergulas (opcionalmente pode ser outro separador) Linhas terminadas por newline (qualquer que seja) Strings delimitados por ldquo ldquo

Ex

NAMECALMPOSFILNAMEECHLPOSDISPPOSTARGNAMEPOSDIRCLASSMJD-OBSITIMECOADDSdec18s00010NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001dec18s00020NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001dec18s00120NIRSPEC-5-AO635800364500itan140NIRSPEC-5-AOp2 TITAN5408763000001dec18s00140NIRSPEC-5-AO626300364500itan140NIRSPEC-5-AOp1 TITAN5408763000001dec18s00151NIRSPEC-5-AO626300364500itan140NIRSPEC-5-AOp1ARC5408764000001dec18s00160NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001

Natildeo eacute necessaacuterio que as colunas tenham largura constante

Cabeccedilalho

5989

Arquivos - texto - CSVHaacute amplo suporte a leitura e gravaccedilatildeo de CSV sem precisar recorrer a procedimentos de baixo niacutevel

Podem ser diretamente importados em Excel Calc Origin Google Docs ou lido facilmente com bibliotecas padratildeo comuns Ex (IDL)

IDLgt c=read_csv(filesearch_scamcsvheader=h)IDLgt printhNAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS

IDLgt helpc Structure ltc8bca508gt 11 tags length=5256 data length=5248 refs=1 FIELD01 STRING Array[41] FIELD02 LONG Array[41] FIELD03 STRING Array[41] FIELD04 DOUBLE Array[41] FIELD05 DOUBLE Array[41] FIELD06 STRING Array[41] FIELD07 STRING Array[41] FIELD08 STRING Array[41] FIELD09 STRING Array[41] FIELD10 DOUBLE Array[41] FIELD11 LONG Array[41]

IDLgt printcfield01[03]dec18s0001 dec18s0002 dec18s0003 dec18s0004

IDLgt printcfield03[03]NIRSPEC-5-AO NIRSPEC-5-AO NIRSPEC-5-AO NIRSPEC-5-AO

6089

Arquivos - texto - CSVEx (IDL) Criaccedilatildeo de um CSV com uma tabela de valores

Criaccedilatildeo de 3 arrays 1D (12 elementos) um para cada coluna

IDLgt x=dindgen(3)IDLgt y=dindgen(4)IDLgt xx=reform(rebin(x34)12)IDLgt yy=reform(rebin(reform(y14)34)12)IDLgt f=xx+yy10IDLgt helpxxyyfXX DOUBLE = Array[12]YY DOUBLE = Array[12]F DOUBLE = Array[12]

Escrita do arquivo

IDLgt write_csvexamplecsvxxyyfheader=[XYX+10Y]

ResultadoXYX+10Y000000000000000000000000100000000000000010000000200000000000000020000000000000001000000010000000100000001000000011000000()

6189

Arquivos - texto - ldquoColunas regularesrdquoFixed column width

Natildeo eacute exatamente um padratildeo Eacute uma praacutetica comum

Armazena uma tabela (array 2D) de forma regular simples de ser interpretada e lida

Costumam ter linha(s) de cabeccedilalho descrevendo o conteuacutedo do arquivo em geral com uma linha para os nomes das colunas

As demais linhas conteacutem os dados sempre ocupando a mesma largura por coluna e escritos no mesmo formato em cada coluna

Costumam ser simples de ler inclusive interativamente (exs Excel Calc Origin read_ascii)

Ex (IDL) Uma simples tabela soacute de nuacutemeros

wavl CH4=33 wavl CH4=25 wavl CH4=10 wavl CH4=08 wavl CH4=05 wavl CH4=026 wavl CH4=02 477330000 0090130 477330000 0091110 477330000 0089250 477330000 0087000 477330000 0087140 477330000 0090080 477330000 0088110 480040000 0090930 480040000 0091930 480040000 0090160 480040000 0087930 480040000 0088110 480040000 0090950 480040000 0089090 482750000 0091710 482750000 0092730 482750000 0091060 482750000 0088850 482750000 0089080 482750000 0091810 482750000 0090060 485450000 0092530 485450000 0093570 485450000 0092000 485450000 0089810 485450000 0090100 485450000 0092730 485450000 0091090

IDLgt a=read_ascii(specs_27s_ntxtdata_start=1header=header)IDLgt printheader wavl CH4=33 wavl CH4=25 wavl CH4=10 wavl CH4=08 wavl CH4=05 wavl CH4=026 wavl CH4=02 IDLgt helpa Structure ltd423c9a8gt 1 tags length=224 data length=224 refs=1 FIELD01 FLOAT Array[14 4]

6289

Arquivos - texto - ldquoColunas regularesrdquoJaacute um arquivo um pouco mais difiacutecil de ler

NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS dec18s0001 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0002 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0003 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 FLAT 5408757812500 460000 5 dec18s0004 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 DARK 5408757812500 460000 5

Por ter colunas de tipos diferentes (strings inteiros reais) natildeo eacute possiacutevel o ler em um simples array Mas eacute faacutecil o colocar em uma estrutura de arrays onde cada campo eacute uma coluna

Especificando interativamente como interpretar as linhasIDLgt templ=ascii_template(filesearch_scamtxt)

Nome do campo (default mostrado)

Tipo do campo (identificado automaticamente)

Posiccedilatildeo (caracter) do comeccedilo (identificada automaticamente)

Linha de exemplo para verificar as colunas

6389

Arquivos - texto - ldquoColunas regularesrdquoDepois de feito o template o arquivo pode ser lido com apenas

IDLgt a=read_ascii(filesearch_scamtxttemplate=templ)IDLgt helpa Structure ltd4ec4608gt 11 tags length=416 data length=416 refs=1 FIELD01 STRING Array[4] FIELD02 LONG Array[4] FIELD03 STRING Array[4] FIELD04 FLOAT Array[4] FIELD05 FLOAT Array[4] FIELD06 STRING Array[4] FIELD07 STRING Array[4] FIELD08 STRING Array[4] FIELD09 FLOAT Array[4] FIELD10 FLOAT Array[4] FIELD11 LONG Array[4]IDLgt printafield01dec18s0001 dec18s0002 dec18s0003 dec18s0004IDLgt printafield04 626300 626300 626300 626300

O template (uma estrutura contendo dados sobre como ler o arquivo) pode ser usado para outros arquivos no mesmo formato No lugar de ter sido criado interativamente poderia ter sido lido de algum arquivo Poderia ter especificado nomes para os campos que seriam mais amigaacuteveis que coias como FIELD11

6489

Arquivos - texto - XML

Extensible Markup Language

Admite grande flexibilidade e por isso pode ter alta complexidade

Valores satildeo colocados dentro de uma estrutura em hieraacuterquica (em uma aacutervore) com os noacutes identificados pelos seus nomes (chaves)

Largamente usado em muitas aacutereas para armazenar conjuntos arbitraacuterios de quaisquer estruturas de dados

A maioria das aplicaccedilotildees usa um formato que eacute um subconjunto do XML especificado por um Schema comumente em um arquivo XML DTD (Document Type Definition)

6589

Arquivos - texto ndash XML ndash exemplos de usos

Armazenamento de dados de aplicaccedilotildees web (comum para exportar importar dados MediaWiki DokuWiki WordPress ADS Lattes etc)

Documentos Office (docx pptx xlsx) OpenOffice (odt opd ods)

Como versotildees de outros formatos FITSML XDF

ldquoScientific Dataset XML NASAs Astronomical Data Center (ADC) sponsors a number of research projects that

use XML for scientific data representation The XML activities at the ADC are sponsored and supported by the NASA Office of Space Science Applied Information Systems Research Program (AISRP)rdquo - httpxmlcoverpagesorgnasa-adchtml

Astronomical Instrument Markup Language (AIML)

SVG ndash Scalable Vector Graphics

Muitas de outras aplicaccedilotildees listadas em httpxmlcoverpagesorgxmlhtmlapplications

6689

Arquivos - texto ndash XML - exemploltxml version=10 gtltDOCTYPE Xdmf SYSTEM Xdmfdtd []gtltXdmf xmlnsxi=httpwwww3org2001XInclude Version=20gt ltDomaingt lt-- Example of Basic Topologies --gt ltInformation Name=Descriptiongt Example of a Polyvertex Topology ltInformationgt ltGrid Name=Polyvertex GridType=Uniformgt ltTopology TopologyType=Polyvertex Dimensions=3 NodesPerElement=3gt ltDataItem Format=XML Dimensions=3 3 NumberType=Floatgt 0 1 2 4 5 6 8 9 10 ltDataItemgt ltTopologygt ltGeometry Type=XYZgt ltDataItem Format=XML Dimensions=4 4 3gt 00 00 00 10 00 00()Que mostra que a interpretaccedilatildeo (parsing) de XML eacute em geral complexa

6789

Arquivos - texto - XML

Haacute muitas bibliotecas de alto niacutevel para fazer o processamento (parsing) e entregar os dados em uma estrutura conveniente

A complexidade em processar XML estaacute em decidir o que fazer com os dados jaacute que os arquivos podem ser muito complexos

As APIs (Application Programming Interfaces) mais comuns para processar XML que satildeo implementadas em muitas linguagens

DOM (Document Object Model) ndash manteacutem todo o conteuacutedo do em uma estrutura de dados (em geral uma aacutervore) em uma variaacutevel (em geral um objeto) Esta pode ser consultada para obter os valores de interesse para os alterar e usada para escrever um arquivo

SAX (Simple API for XML) ndash Interpretador (parser) por objetos O usuaacuterio escreve uma classe herdando da classe SAX provendo os meacutetodos que vatildeo processar os campos agrave medida em que estes satildeo lidos

6889

Arquivos - binaacuterios - FITSFlexible Image Transport System

O formato mais comum para observaccedilotildees astronocircmicas Tambeacutem usado para armazenar quaisquer dados mesmo natildeo relacionados a observaccedilotildees (especialmente tabelas como eacute praacutetica do STSCI)

Conteacutem um (ou mais) cabeccedilalho(s) de texto com metadados (informaccedilotildees sobre os dados como caracteriacutesticas (necessaacuterias para os ler) origem condiccedilotildees em que foram obtidos processamento realizado etc)

SIMPLE = T image conforms to FITS standard BITPIX = 32 bits per data value NAXIS = 2 number of axes NAXIS1 = 1024 NAXIS2 = 1024 BSCALE = 100000 Scaling factor BZERO = 000000 Scaling zero-point TELESCOP= Keck II Telescope SLITNAME= 0041x226 Slit Name SLITPA = 351979 Slit position angle SLITX = 131500 X pixel of the center of the slit LST = 12010446 local apparent sidereal time (()

Depois do cabeccedilalho haacute uma (ou mais) seccedilatildeo(otildees) de dados binaacuterios Costuma(m) ser array(s) 1D (espectros) 2D (imagens) ou 3D (ldquocubos de dadosrdquo)

De inteiros ou reais inteiros satildeo comuns em contagens de instrumentos reais para valores derivados (fluxos intensidades etc)

6989

Arquivos - binaacuterios - FITSNormalmente FITS satildeo lidos escritos por bibliotecas prontas de (relativamente) alto niacutevel usuaacuterio natildeo tem que saber como os dados satildeo armazenados no arquivo nem como os ler escrever Ex (IDL com a biblioteca idlastro)

IDLgt fits_info2dspectrumfits2dspectrumfits has 3 extensionsPrimary header 288 recordsNo dataExtension 1 -- SCI Header 144 records IMAGE ( 1201 1201 )Extension 2 -- ERR Header 72 records IMAGE ( 1201 1201 )Extension 3 -- DQ Header 72 records IMAGE ( 1201 1201 )

IDLgt mydata=readfits(2dspectrumfitsexten_no=1myheader) READFITS Reading FITS extension of type IMAGE READFITS Now reading 1201 by 1201 array

IDLgt extastmyheadermyastIDLgt sz=size(mydatadimensions)IDLgt xy2ad[1sz[0]][1sz[1]]myastcorners_acorners_dIDLgt printcorners_aCorners of the data array from file 2dspectrumfits are at 14487480 33063480

IDLgt printcorners_d -00041264444 00041402222

Obteacutem os dados de coordenadas (WCS) do header

Coloca os dados no array (2D de floats) mydata e o header no array (1D de strings) myheader

Calcula as coordenadas das quinas da imagem atraveacutes do WCS

Provecirc informaccedilotildees sobre o arquivo

7089

Arquivos - binaacuterios - ISIS Cube

Formatos como FITS se adequam muito a ter uma interface de mais alto niacutevel por objetos

Tambeacutem para dados em tabelas FITS muito mais trabalhosos de ler em baixo niacutevel que se adequam muito mais a mapas ou estruturas

Exemplo (de um formato semelhante a FITS ISIS cube)

O objeto ao ser criado lecirc todo o arquivo

cube=pp_editablecube(CM_1553510065_1_ircub)

Meacutetodos fornecem os dados desejados para obter quando necessaacuterio os dados de interesse

Find out the names of the backplanesprintcubegetproperty(backnames)Get the start time of the cubeprintcubegetfromheader(START_TIME)2007-084T100057286Z

Valores no cabeccedilalho podem ser convenientemente fornecidos como um mapa

header=cubeheader_as_hash()printheader[START_TIME]2007-084T100057286Z

7189

Arquivos - binaacuterios ndash ISIS Cube

Os dados satildeo fornecidos como arraysMake a contour plot of the latitudesc=contour(cubegetsuffixbyname(LATITUDE))Get the band with wavelength nearest to 21 (in the units used in the cube)selband=cubegetbandbywavelength(21wavelengths=selwavs)

Interfaces por overload tornam o acesso ainda mais conveniente

selband=cube[21]

selwavs=cube[21]

Retorna um array com a banda de comprimento de onda mais proacuteximo de 21 (microm)

Retorna o comprimento de onda mais proacuteximo de 21 (microm) da banda retornada acima

7289

Arquivos - binaacuterios ndash ISIS Cube Alteraccedilotildees feitas ao conteuacutedo satildeo automaticamente refletidas em todos os

lugares (cabeccedilalho em particular) afetados mantendo o objeto vaacutelido que pode depois ser gravado em um novo arquivo

IDLgt printcubelinescubesamplescubebands 64 64 256

IDLgt helpcubecoreltExpressiongt FLOAT = Array[64 64 256]

IDLgt cubecore=dblarr(100100256)

A linha acima natildeo eacute uma atribuiccedilatildeo eacute uma invocaccedilatildeo de meacutetodo Eacute equivalente acubesetpropertycore=dblarr(100100256)

Eacute o trabalho da funccedilatildeo setproperty decidir se a propriedade passada (core) faz sentido e se fizer fazer todo o trabalho necessaacuterio a esta mudanccedila Para o usuaacuterio eacute tudo automaacutetico e os dados da classe satildeo vaacutelidos o tempo todo

IDLgt helpcubecoreltExpressiongt DOUBLE = Array[100 100 256]

IDLgt printcubelinescubesamplescubebands 100 100 256

IDLgt cubesaveCM_1553510065_1_ir_editedcub

7389

Arquivos - binaacuterios ndash NetCDF e HDF5

Network Common Data Form e Hierarchical Data Format

Os dois uacutenicos formatos bem estabelecidos para dados cientiacuteficos geneacutericos

Armazenam dados como vaacuterias variaacuteveis e seus metadados Para cada variaacutevel haacute (ou pode haver) os metadados

Nome Dimensotildees (do array) Unidades Comentaacuterios

Ambos permitem arrays multidimensionais

Apenas HDF5 permite estruturas (daiacute vem a hierarquia)

Autodocumentados qualquer software que saiba ler um destes formatos lecirc qualquer arquivo sem precisar de conhecimento preacutevio sobre como o arquivo foi gerado

Muito bem suportados em bibliotecas padratildeo e natildeo padratildeo em softwares interativos e visualizadores (inclusive plugins para navegadores)

httpwwwunidataucaredusoftwarenetcdf httpenwikipediaorgwikiHdf5

NetCDF eacute mais simples de usar por natildeo ter hierarquia dando menos trabalho para ler e escrever dados Se hierarquia natildeo eacute necessaacuteria eacute mais conveniente de usar que HDF5

7489

Arquivos - binaacuterios - NetCDF e HDF5Haacute tambeacutem o formato CDL uma versatildeo ASCII do NetCDF A biblioteca padratildeo do NetCDF inclui conversores entre estes formatos

$ ncdump -h refspec_g01_0ncnetcdf refspec_g01_0 dimensions nlay = 51 nwn = 400 nleg = 33 numu = 2 nlev = 52 nphi = 3 ngas = 2 nwnc = 1 scal = 1 v3 = 3 dnl = 1 nk = 1 tdisr = UNLIMITED (0 currently) na = 16

variables float alb(nwn) float z(nlay) float t(nlay) float p(nlay) float wl(nwn) float iof(nwn) float mtau(nwn) float htau(nwn) float hctaus(nwn) float gtau(nwn) float outcos(scal) float phi(nleg) float phic(scal) float umu(numu) float flux(v3 nwn nlev) float mix(nlay ngas) float c(nlay) float psat(nlay) float ga(nwnc) float wlc(nwnc) float inc(scal) int dm(scal) int ord(scal) float fbeam(scal) float wn(nwn) float tautot(nwn nlay) float htaus(nwn nlay) float htaux(nwn nlay) float taug(nwn nlay) float phase(nwn nlay nleg) float ssa(nwn nlay) float uu(nwn nphi nlev numu) float u0u(nwn nlev numu) float tray(nwn nlay) float gtauo(tdisr nwn nlay)

Haacute 14 variaacuteveis usadas como dimensotildees para as 35 variaacuteveis que satildeo arrays

Ex alb(nwn) indica que alb eacute um array 1D de nwn elementos

nwn estaacute armazenado como uma das dimensotildees e eacute 400 portanto alb tem 400 elementos

Parte do conteuacutedo de um arquivo NetCDF em formato CDL (gerado pelo programa ncdump)

7589

Arquivos - binaacuterios - NetCDF e HDF5Conteuacutedo daquele arquivo visualizado com o ncview (acompanha a biblioteca NetCDF padratildeo)

7689

Arquivos - binaacuterios - NetCDF e HDF5O conteuacutedo de todo o arquivo pode ser lido facilmente com as bibliotecas disponiacuteveis e armazenado em contecirciners convenientes Usando um objeto que gera um resultado um pouco mais conveniente

IDLgt h=pp_readncdf(refspec_g01_0nchash)IDLgt printhvar_dims ltObjHeapVar229(HASH)gtvars ltObjHeapVar152(HASH)gtdims ltObjHeapVar118(HASH)gt

IDLgt printh[vars]T 173203 175459 175848 176001 175975 Z 431869 418858 406067 393403 380464 FLUX 300660 145536 0705180 0341669 0165532 PHASE 100000 0779034 0660858 0542052 0449983 TAUTOT0694377 0693420 0693474 0693540 0693636()

IDLgt help(h[vars])[TAUTOT]ltExpressiongt FLOAT = Array[51 400]

IDLgt print(h[var_dims])[TAUTOT]NLAY NWN

IDLgt print(h[dims])[(h[var_dims])[TAUTOT]]NLAY 51NWN 400

7789

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5)

Visualizaccedilatildeo da variaacutevel selecionada

Metadados e alguns valores da variaacutevel selecionada

Variaacutevel a ser criada com o conteuacutedo desta variaacutevel do arquivo

Hierarquia das variaacuteveis do arquivo

7889

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5) Imported variable az

IDLgt helpaz Structure ltd5723f38gt 13 tags length=448 data length=444 refs=1 _NAME STRING az _ICONTYPE STRING binary _TYPE STRING DATASET _FILE STRING INTENSI_test_409OUTh5 _PATH STRING _DATA DOUBLE Array[38] _NDIMENSIONS LONG 1 _DIMENSIONS ULONG64 Array[1] _NELEMENTS ULONG64 38 _DATATYPE STRING H5T_FLOAT _STORAGESIZE ULONG 8 _PRECISION LONG 64 _SIGN STRING

IDLgt printaz_data 00000000 10000000 20000000 30000000 40000000 50000000 60000000 80000000 ()

7989

Arquivos - binaacuterios - imagens

JPEG JPEG200 TIFF GeoTIFF etc

Os formatos comuns de imagens satildeo bem suportados em muacuteltiplas plataformas para uso dentro de programas e interativamente

Alguns formatos tecircm opccedilatildeo de compressatildeo com perda eou sem perda

Armazenam imagens como arrays 2D ou 3D (3D frequumlentemente limitado a 3 ou 4 em uma das dimensotildees uma imagem em 3 ou 4 bandas) de inteiros ou (em alguns formatos) reais

Alguns formatos permitem armazenar metadados para caracterizar as imagens armazenadas

JPEG2000 e GeoTIFF (um subconjunto de TIFF) comuns em astronomia e aacutereas proacuteximas

8089

Arquivos - binaacuterios ndash imagens ndash exemplo (IDL)IDLgt printquery_tiff(issmap_2009tiffinfogeotiff=geo) 1

IDLgt helpinfo Structure ltd4eca4b8gt 18 tags length=144 data length=132 refs=1 CHANNELS LONG 4 DIMENSIONS LONG Array[2] IMAGE_INDEX LONG 0 NUM_IMAGES LONG 1 PIXEL_TYPE INT 1 TYPE STRING TIFF BITS_PER_SAMPLE LONG 8 POSITION FLOAT Array[2] RESOLUTION FLOAT Array[2] UNITS LONG 2 TILE_SIZE LONG Array[2] DESCRIPTION STRING ISS (2009) DATE_TIME STRING 20100218 012436()

IDLgt helpgeo Structure ltd4efa1b8gt 10 tags length=264 data length=262 refs=1 MODELPIXELSCALETAG DOUBLE Array[3] MODELTIEPOINTTAG DOUBLE Array[6 4] GEOGRAPHICTYPEGEOKEY INT 4035 GEOGSEMIMAJORAXISGEOKEY DOUBLE 25750000 GEOGSEMIMINORAXISGEOKEY DOUBLE 25750000()

IDLgt myimage=read_tiff(issmap_2009tiff) Lecirc a imagem para o array myimage

Obteacutem informaccedilotildees sobre o arquivo

8189

Arquivos - binaacuterios ndash formatos nativosLinguagens como IDL R Python Java tecircm seu formato nativo binaacuterio acessado em alto niacutevel Basta mandar salvar ler variaacuteveis no do arquivo a biblioteca padratildeo automagicamente faz todo o trabalho de decidir como gravar ler os dados

Conveniente de usar na proacutepria linguagem Mas raramente existem bibliotecas para ler gravar o formato nativo de uma linguagem a partir de outra Ex (IDL)

IDLgt savefile=2dspectrumsavmydatamyheadercorners_dcorners_averbosecompress SAVE Portable (XDR) compressed SAVERESTORE file SAVE Saved variable MYDATA SAVE Saved variable MYHEADER()

Pode ser lido com apenas (haacute formas mais elaboradas)

IDLgt restore2dspectrumsavverbose RESTORE Portable (XDR) compressed SAVERESTORE file RESTORE Save file written by ltunknowngtltunknowngt Thu Jan 27 191422 2011 RESTORE IDL version 801 (linux x86_64) RESTORE Restored variable MYDATA RESTORE Restored variable MYHEADER()

IDLgt helpmydatamyheadercorners_dcorners_aMYDATA FLOAT = Array[1201 1201]MYHEADER STRING = Array[144]()

8289

Arquivos - processamento em baixo niacutevel

Nem sempre um formato padratildeo eacute a melhor escolha para o problema

Nem sempre haacute escolha (pode-se ter que trabalhar com arquivos que jaacute foram escritos em algum formato proprietaacuterio)

Agraves vezes o formato eacute padratildeo mas natildeo haacute bom suporte a ele disponiacutevel

Em todos estes casos eacute necessaacuterio escrever rotinas em baixo niacutevel que vatildeo ler processar diretamente o conteuacutedo do arquivo

Preferencialmente criando interfaces de alto niacutevel para o programa que vai as usar

8389

Arquivos - processamento em baixo niacutevel - texto

Tomando o exemplo anterior onde as colunas eram de diferentes tipos

NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS dec18s0001 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0002 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0003 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 FLAT 5408757812500 460000 5 dec18s0004 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 DARK 5408757812500 460000 5

A forma mais simples de o ler diretamente eacute definir uma estrutura para receber cada linha e um array destas estruturas para receber todo o arquivo Ex (IDL)

IDLgt record=namecalmpos0filnameechlpos0d0disppos0d0targnameposdirclassmjd_obsitime0d0coadds0IDLgt nlines=file_lines(filesearch_scamtxt)IDLgt mydata=replicate(recordnlines-1)IDLgt header=

Depois de definidas as variaacuteveis que vatildeo receber os dados o arquivo pode ser lido

IDLgt openrunitfilesearch_scamtxtget_lunIDLgt readfunitheaderIDLgt readfunitmydataformat=(A14I8A15F104F104A18A19A15F158F105I15)IDLgt free_lununit

A gravaccedilatildeo de um arquivo texto poderia ser feita de forma semelhante apenas trocando openr por openw (abrir o arquivo para gravaccedilatildeo natildeo leitura) e readf por printf

O arquivo eacute aberto em uma unidade (unit) usada para especificar de onde eacute feita a leitura

Ao final o arquivo eacute fechado

8489

Arquivos - processamento em baixo niacutevel - texto

O que resulta em

IDLgt printheader NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS

IDLgt helpmydataMYDATA STRUCT = -gt ltAnonymousgt Array[4]

IDLgt helpmydata[0] Structure ltd5e38f68gt 11 tags length=136 data length=124 refs=3 NAME STRING dec18s0001 CALMPOS INT 0 FILNAME STRING NIRSPEC-5-AO ECHLPOS DOUBLE 62630000 DISPPOS DOUBLE 36450000 TARGNAME STRING HD85258 POSDIR STRING NIRSPEC-5-AOp1 CLASS STRING STAR MJD_OBS STRING 54087574 ITIME DOUBLE 10000000 COADDS INT 1

Este caso eacute mais complicado que os mais comuns por haver colunas de strings

Se todas fossem de nuacutemeros natildeo teria sido necessaacuterio especificar o formato explicitamente As colunas teriam sido adivinhadas pela biblioteca que lecirc o arquivo Poderia ter sido lido escrito soacute com um array de nuacutemeros sem estruturas

8589

Arquivos - processamento em baixo niacutevel - binaacuterio

Formatos binaacuterios podem ser definidos de qualquer forma O arquivo eacute apenas um conjunto de bytes Cabe ao software saber como os interpretar

Uma escolha comum para que sejam autodocumentados eacute incluir um cabeccedilalho de texto informando as caracteriacutesticas dos dados necessaacuterias para os ler

Ex (IDL) criar um arquivo que armazene um array de doubles com um cabeccedilalho informando as dimensotildees para que o programa que o lecirc saiba como ler os dados

Inventa dados e abre o arquivo

IDLgt data_to_write=dindgen(34)IDLgt openwunitbinary_exampledatget_lun

Escreve as dimensotildees como texto

IDLgt printfunitdimensions of the double array stored belowIDLgt printfunitsize(data_to_writedimensions)

Escreve os dados binaacuterios

IDLgt writeuunitdata_to_write

Fecha o arquivo

IDLgt free_lununit

Escreve em binaacuterio (write unformatted)

8689

Arquivos - processamento em baixo niacutevel - binaacuterio

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

dimensions of the double array stored below 3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

8789

Arquivos - processamento em baixo niacutevel - binaacuterioA leitura deste arquivo eacute igualmente simples

IDLgt header=IDLgt dims=[00]IDLgt openrunitbinary_exampledatget_lun

Lecirc as dimensotildees (armazenadas como texto)

IDLgt readfunitheaderIDLgt readfunitdims

Lecirc a parte binaacuteria depois de saber as dimensotildees

IDLgt data_read=dblarr(dims)IDLgt readuunitdata_read

Fecha o arquivo

IDLgt free_lununit

Verifica que os dados foram gravados e lidos corretamente

IDLgt printarray_equal(data_to_writedata_read) 1

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Lecirc dados binaacuterios (read unformatted)

8889

Sumaacuterio

5 ndash Slides em httpwwwppenteadonetpeapea04_strings_iopdf Strings Expressotildees regulares Arquivos

httpwwwppenteadonetpea

8989

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89

Strings - processamento baacutesico

Outros

IDLgt printstrlen(1234567) 7

IDLgt printstrlen(1234567 ) 8

IDLgt printstrlen( 1234567 ) 9

IDLgt helpstrtrim( 1234567 2)ltExpressiongt STRING = 1234567

IDLgt helpstrtrim( 1234567 1)ltExpressiongt STRING = 1234567

IDLgt helpstrtrim( 1234567 0)ltExpressiongt STRING = 1234567

IDLgt printstrupcase(abcdEF)ABCDEF

IDLgt printstrlowcase(abcdEF)abcdef

Medindo quantos caracteres tem o string inclui espaccedilos em branco

Remoccedilatildeo dos brancos agrave esquerda agrave direita ou dos dois lados

2289

Strings - conversatildeo de outros tipos para strings

Eacute uma das operaccedilotildees mais comuns para gerar textos informativos e nomes escrever arquivos (aquivos texto discutidos adiante) etc

Eacute natildeo trivial jaacute que a conversatildeo pode ser feita de muitas formas diferentes

Para tipos fundamentais sempre haacute uma conversatildeo default tanto criando um string como usando algo tipo print (para strings terminal ou arquivos)

Todo comando tipo print (print printf sprintf string write etc) e toda escrita para arquivos texto eacute uma conversatildeo para string (terminais e arquivos texto soacute conteacutem strings)

2389

Strings - conversatildeo de outros tipos para strings

Exemplos de conversotildees (IDL)

IDLgt print[-109] -1 0 9

IDLgt print1d01B10 10000000 1 100000

IDLgt helpstring(1d01B10)ltExpressiongt STRING = 10000000 1 100000

IDLgt printfunitdblarr(343)

Tipos mais elaborados podem ou natildeo ter uma forma predefinida Com objetos eacute comum ser possiacutevel definir a conversatildeo (stringification) ao criar a classe

IDLgt h=hash(a109[01]18b)

IDLgt printh9 0 1a 100000180000 b

Strings

Coloca strings em um arquivo (adiante)

Strings criados por um meacutetodo da classe hash satildeo uma forma de representar o hash

2489

Strings - conversatildeo de outros tipos para strings

Algumas linguagens (Python IDL) tecircm mais de uma forma default de gerar strings Em Python uma forma eacute executaacutevel a outra eacute mais legiacutevel

In [30] x=arange(12)reshape(43)

In [31] print(x)[[ 0 1 2] [ 3 4 5] [ 6 7 8] [ 9 10 11]]

In [32] xOut[32]array([[ 0 1 2] [ 3 4 5] [ 6 7 8] [ 9 10 11]])

In [33] y=array([[ 0 1 2] [ 3 4 5] [ 6 7 8] [ 9 10 11]])

In [37] print(array_equal(xy))True

String mais legiacutevel

String executaacutevelPode ser usado para criar um objeto equivalente

2589

Strings ndash formataccedilatildeo expliacutecita

A formataccedilatildeo pode ser especificada se a conversatildeo default natildeo eacute adequada para definir a conversatildeo em um novo tipo

Cada linguagem tem sua sintaxe para formataccedilatildeo

Haacute dois estilos semelhantes em vaacuterias linguagens

Ambos os estilos satildeo sintaxes diferentes para a mesma ideacuteia Um coacutedigo especifica o tipo de dado sendo passado (inteiro real etc) e detalhes de como seraacute feito o string (largura do campo diacutegitos decimais alinhamento etc)

2689

Strings ndash formataccedilatildeo expliacutecita

Estilo Fortran

IDL

IDLgt print1d0+1d-9 10000000

IDLgt print1d0+1d-9format=(E1610)10000000010E+00

IDLgt printx=1d0+1d-9format=(A0F1613)X= 10000000010000

Estilo C (ldquoprintfrdquo)

IDL

IDLgt printformat=(x=1610e)1d0+1d-9x=10000000010e+00

Python

In [20] print(x=1610e (1e0+1e-9))x=10000000010e+00

Nenhum formato expliacutecito (default)

2789

Strings - formatos tipo Fortran

(apenas o principal ver documentaccedilatildeo para detalhes)

Ex (IDL)

IDLgt printx=1d0+1d-9format=(A0F1613)X= 10000000010000

Tambeacutem haacute modificadores para especificar alinhamento (-) se deve haver (ou ser suprimido) avanccedilo para a pŕoxima linha posiccedilatildeo dentro do campo etc

Coacutedigo Significado Exemplo(s)

A String (A) (10A)

I Inteiro decimal (I) (10I)(-2I)

B Inteiro binaacuterio (B) (10B)

Z Inteiro hexadecimal (Z) (10Z)

O Inteiro octal (O) (10O)

F Real ponto fixo (F)(F52)

E D Real ponto flutuante (E)(D1610)

G Real ponto fixo ou flutuante de acordo com o valor (G)(G10)

ldquordquo String literal (ldquox=rdquoI10)

X Caracteres em branco (A10XI)

2889

Strings - formatos tipo C (printf)(apenas o principal ver documentaccedilatildeo para detalhes)String com campos a serem substituiacutedos por valores (passados adiante) marcados por coacutedigos com

Ex (Python)In [20] print(x=1610e (1e0+1e-9))x=10000000010e+00

Haacute modificadores para especificar alinhamento como preencher o espaccedilo que sobra (espaccedilos zeros etc) para imprimir o sinal + etc

Coacutedigo Significado (tipo) Exemplo(s)

di Inteiro decimal (int) d 5d +05d

u Inteiro decimal sem sinal (unsigned int) u 7u

fF Real em ponto fixo (double float) f 136f

eE Real em ponto flutuante (double float) e 1610e

gG Real em ponto fixo ou flutuante decidido pelo valor (double float)

g 73G

xX Inteiro sem sinal hexadecimal (unsigned int) x 10X

o Inteiro sem sinal octal (unsigned int) o 5o

s String (string) s 10s

c Caractere (char) c

p Ponteiro - estilo C - (void ) p

literal

2989

Strings - conversatildeo de strings para outros tipos

Para gerar dados a partir de strings datas identificadores pedaccedilos de nomes valores numeacutericos armazenados em strings

Tambeacutem sempre haacute conversotildees default para os tipos baacutesicos onde o intepretador programa faz o possiacutevel para entender o string como um valor daquele tipo

Tipicamente eacute feito por casts (funccedilotildees de conversatildeo) reads (de strings ou arquivos texto (arquivos texto satildeo strings)) construtores de objetos ou implicitamente

3089

Strings - conversatildeo de strings para outros tipos - impliacutecitas

Exs (IDL)

IDLgt helpfix([17 17 171 -17 9 8])ltExpressiongt INT = Array[5]

IDLgt printfix([17 17 171 -17 9 8]) 17 17 17 -17 9

IDLgt printdouble([17 17 171 -17 9 8]) 17000000 17000000 17100000 -17000000 90000000

IDLgt readfunitabcd

IDLgt a=0d0IDLgt b=00IDLgt c=0IDLgt reads171d0 189d0 -9abcIDLgt helpabcA DOUBLE = 17100000B FLOAT = 189000C INT = -9

Converte o conteuacutedo do string para os tipos das variaacuteveis abcd (explicado adiante)

3189

Strings - conversatildeo de strings para outros tipos

Quando o default natildeo eacute suficiente (ou quando escrevendo o conversor em uma classe) costuma ser possiacutevel o fazer com formatos semelhantes aos formatos para gerar strings Exs (IDL)

IDLgt a=0d0IDLgt b=00IDLgt c=0IDLgt reads171d0 something 189d0-9abc READS Input conversion error Unit 0 File ltstdingt Error occurred at $MAIN$ Execution halted at $MAIN$

Natildeo funcionou porque sozinho ele natildeo conseguiu saber o que fazer com o ldquosomethingrdquo Usando um formato especiacutefico

IDLgt reads171d0 something 189d0-9 abcformat=(D6111XD611XI)

IDLgt helpabcA DOUBLE = 17100000B FLOAT = 189000C INT = -9

Exemplos mais complicados adiante (arquivos texto)

Variaacuteveis tecircm que ser definidas para informar para que tipo seraacute feita a conversatildeo default

3289

Strings - processamento natildeo baacutesicoOperaccedilotildees importantes e muito necessaacuterias mas que natildeo satildeo suportadas em todas as linguagens bibliotecas padratildeo

Testes (ex IDL)

IDLgt str=[afitsaFITSafitsaabfitsabcfits]

IDLgt printstrmatch(strfits) 1 0 0 1 1

IDLgt printstrmatch(strfitsfold_case) 1 1 0 1 1

IDLgt printstrmatch(strfitsfold_case) 1 1 1 1 1

IDLgt printstrmatch(strfits) 1 0 0 0 0

IDLgt printstrmatch(strfits) 0 0 0 1 0

3389

Strings - processamento natildeo baacutesico

Operaccedilotildees importantes e muito necessaacuterias mas que natildeo satildeo suportadas em todas as linguagens bibliotecas padratildeo

Separaccedilatildeo de partes (Ex IDL)

IDLgt printstrsplit(2011- 131 -extract)format=(A)2011131

Processamento de nomes de arquivos diretoacuterios (Ex IDL)

IDLgt printfile_dirname(some_directoryanother_directorysome_filetxt)some_directoryanother_directory

IDLgt printfile_basename(some_directoryanother_directorysome_filetxt)some_filetxt

IDLgt printfile_basename(another_directorysome_filetxttxt)+_alteredtxtsome_file_alteredtxt

3489

Strings - processamento natildeo baacutesico

Codificaccedilotildees (Ex Python 3)

gtgtgt s=infinite money infinNeuro sign

gtgtgt print(s)infinite money infineuro

gtgtgt print(ascii(s))infinite money u221eu20ac

gtgtgt print(sencode(utf-8))binfinite money xe2x88x9exe2x82xac

3589

Strings - processamento natildeo baacutesico

Perl eacute a linguagem mais avanccedilada para processamento de strings tem suporte nativo a muitas outras operaccedilotildees a semacircntica da linguagem eacute voltada principalmente para processar strings expressotildees regulares (de vaacuterios tipos) natildeo satildeo strings fazem parte da semacircntica

Ex (sem o objetivo que seja compreensiacutevel apenas para indicar o estilo)

Ler um arquivo contendo campos com nomes separados de valores por ()

temperature 10008name some modelx_dimension 100y_dimension 100z_dimension 50()

Armazenado-o em um mapa O que pode ser feito com apenas

While (ltgt) Loop over input linesPut pre-colon text into $1 post-colon into $2 if (m (S+) (+) ) Use $1 as key $2 as value $file_data$1 = $2

3689

Expressotildees regulares - definiccedilatildeo

Expressotildees regulares (regular expressions regex) satildeo a mais poderosa ferramenta para fazer buscas e separar substrings

Regex satildeo uma linguagem com o uacutenico objetivo de especificar propriedades de strings

Implementadas em graus diferentes em todas as linguagens modernas e modernizadas facilita encontrar uma expressatildeo jaacute pronta pois satildeo quase iguais em qualquer linguagem

Estatildeo na biblioteca padratildeo em IDL Python R Perl

Em C++ e Java em bibliotecas comuns (Boost Jregex)

Para que servem

Uma expressatildeo regular especifica propriedades de strings

O interpretador de expressotildees regulares (regular expression engine) recebe a expressatildeo e o string a analisar e determina se o string corresponde (matches) agrave expressatildeo regular

Em alguns casos o interpretador pode tambeacutem informar que parte(s) do string corresponde(m) a que parte(s) da expressatildeo regular e realizar processamentos com estas partes

3789

Expressotildees regulares ndash exemplos de usos Separar partes de strings

Encontrar linhas em arquivos que tenham nomes valores e comentaacuterios e separar estes pedaccedilos

Escalar com comentaacuterio

SLITPA = 351979 Slit position angle

Array 1D sem comentaacuterio (se extendendo por vaacuterias linhas)

BAND_BIN_CENTER = (03505400358950036629003732200379490 0387900104598)

Escalares em diferentes formatos

Total Mechanical Luminosity 15310E+03resources_usedwalltime=005603

Pedaccedilos de nomes

6063 17836E-20 2456 T FeIX((3Pe)3d(2PE)4p_1Po-3s2_3p6_1Se)

Datas separando ano mecircs dia hora (em vaacuterios formatos diferentes)

DATE-OBS= 2006-12-18 universal date of observationDATE_TIME = 2010-07-19T161032START_TIME = 2006-182T225102850Z

3889

Expressotildees regulares ndash exemplos de usos

Separar partes de strings Separar partes de nomes de arquivos (por significarem algo como identificar o

conteuacutedo)

specdec18s0041fitsscamdec18i0054fits15_7_mts_hmpixselh_mr15sav15_7_mts_hwpixselh_mr15sav16_3_mts_hwpixselb_mr16savreadmodel5l_-1_000010000_10000_r05_030_08196_0100000_005000000_1000eps

Determinar se um string eacute um nuacutemero (inteiro real fixo flutuante)

Encontrar identificadores Exs nomes de cataacutelogos endereccedilos HTTPFTP endereccedilos de email

Separar campos em arquivos sendo lidos onde as linhas natildeo tecircm a mesma formataccedilatildeo algumas linhas com colunas separadas por espaccedilos outras por tabs outras por

siacutembolos ignorando linhas de comentaacuterios e linhas vazias

3989

Expressotildees regulares - usoEx (IDL) encontrar nomes de arquivos com algumas propriedades

IDLgt printfilesformat=(A)CM_1477475933_1_viscubCM_1477476864_1_ircubCM_1477476864_1_irgcubCM_1477476864_1_viscubCM_1477477826_1_ircubCM_1477477826_1_irgcubCM_1477477826_1_viscubmosaic2cub

IDLgt printstregex(files+irgcubboolean) 0 0 1 0 0 1 0 0

A expressatildeo regular eacute +irgcub Especifica uma ou mais ocorrecircncias seguidas (+) de qualquer caractere () seguido de uma ocorrecircncia de irgcub (o ponto vem precedido do caractere de

escape () para ser entendido literalmente como um ponto e natildeo como o seu significado especial (qualquer caractere)

Esta aplicaccedilatildeo do interpretador (stregex) retorna um valor Booleano (verdadeirofalso) para cada elemento do string passado (files) que informa se aquele elemento correspondia agravequela expressatildeo regular

Este eacute um exemplo artificial Seria mais faacutecil ter usado strmatch(filesirgcub)

4089

Expressotildees regulares - uso

Em casos como este tipicamente o resultado de stregex seria usado como filtro para selecionar apenas os elementos do array de strings que satisfazem agravequela expressatildeo regular

IDLgt w=where(stregex(files+irgcubboolean)null)IDLgt printfiles[w]format=(A)CM_1477476864_1_irgcubCM_1477477826_1_irgcub

Ex (IDL) Determinar que strings conteacutem uma data no formato yyyy-mm-dd

IDLgt strs=[201002012010-02-012010-2-1aaaa-mm-ddT2010-02-01J]IDLgt printstregex(strs[0-9]4-[0-9]2-[0-9]2boolean) 0 1 0 0 1

Esta expressatildeo regular especifica quatro repeticcedilotildees (4) de diacutegitos (caracteres na faixa [0-9]) seguido de um (-) seguido de duas repeticcedilotildees (2) de dois diacutegitos ([0-9]) seguido de um (-) seguido de duas repeticcedilotildees (2) de dois diacutegitos ([0-9])

Uma expressatildeo regular apenas um pouco mais elaborada poderia corresponder aos 3 formatos de data no array acima E poderia se impedir que a uacuteltima (com outros caracteres antes e depois da data) seja aceita

4189

Expressotildees regulares - regras - caracteres ldquonormaisrdquo

Uma expressatildeo regular usa caracteres ldquonormaisrdquo e especiais para especificar o que se vai procurar na ordem em que aparecem na expressatildeo

Se um caractere eacute normal (natildeo eacute um dos especiais mostrados adiante) ele especifica uma ocorrecircncia daquele caractere

Ex J eacute uma expressatildeo regular que corresponde a qualquer string onde ocorra J Jaacute JA soacute corresponde a strings que tenham JA dentro

Exs (IDL)

IDLgt strs=[JJJJJJaJAjaJa]

IDLgt printstregex(strsJboolean) 1 1 1 0 1

IDLgt printstregex(strsJAboolean) 0 0 1 0 0

4289

Expressotildees regulares - regras - caracteres especiaisCaracteres especiais tecircm outros significados Para significar literalmente aquele caractere deve ser escapado (escaped) com um

Siacutembolo significado exemplo Corresponde(m) Escape o caractere seguinte deve ser interpretado

literalmente natildeo como especial aa

Qualquer caractere ab ajb aab abb jafbc

+ Uma ou mais repeticcedilotildees do que vem agrave esquerda a+b ab aab bab baabh

() Subexpressatildeo para agrupar termos afetados por um caractere especial (como parecircnteses em notaccedilatildeo matemaacutetica)

(ab)+c abc ababc dabababcg

Zero ou mais repeticcedilotildees dos termos agrave esquerda ab abbaab caaabg

Zero ou uma repeticcedilatildeo dos termos agrave esquerda ab b ab cabd cbd

| Alternaccedilatildeo qualquer um dos dois agrave esquerda a|bc ac bc jacd jbcd

n Exatamente n repeticcedilotildees do termo agrave esquerda a2b aab daaabg

n1n2 De n1 a n2 repeticcedilotildees do termo agrave esquerda a12b ab aab aaab gaaabbd

^ Acircncora (no comeccedilo) nada agrave esquerda ^ab ab abb

$ Acircncora (no fim) nada agrave direita ab$ abaab

[] Conjunto de valores (explicado adiante)

4389

Expressotildees regulares - regras - conjuntos de valores

[] denota um conjunto de valores que pode conter

Uma lista de coisas que devem corresponder Ex [abc] signfica qualquer caractere no conjunto abc Correspondem a esta

expressatildeo abcabha

Uma lista de coisas que natildeo podem corresponder [^abc] significa qualquer coisa que natildeo seja a b ou c Correspondem a esta

expressatildeo d jgs gg

Faixas de valores [0-9] signfica qualquer diacutegito [0-9a-zA-Z] significa qualquer diacutegito ou letra

Classes de valores como algumas faixas e outros conjuntos ocorrem com muita frequumlecircncia haacute nomes

especiais para eles Estes (em IDL) vecircm entre [] ex [[digit] significa o mesmo que [0-9]

4489

Expressotildees regulares - regras - classes de valores

Classe signficado

alnum Caracteres alfanumeacutericos 0-9a-zA-Z

alpha Caracteres alfabeacuteticos a-zA-Z

cntrl Caracteres de controle ASCII (natildeo visiacuteveis coacutedigos 1 a 31 e 127)

digit Diacutegitos (decimais) 0-9

graph Caracteres visiacuteveis ASCII 33 a 126 (natildeo inclui o espaccedilo)

lower Letras minuacutesculas a-z

print Caracteres ldquoimprimiacuteveisrdquo (visiacuteveis e o espaccedilo) ASCII 32 a 126

punct Caracteres de pontuaccedilatildeo $amprsquo()+-lt=gt[]^_lsquo|~

space Os caracteres ldquoem brancordquo (blank) espaccedilo tab tab vertical CR LF (ASCII 32 e 9-13)

upper Letras maiuacutesculas A-Z

xdigit Diacutegitos hexadecimais 0-9A-Fa-f

lt Comeccedilo de palavra (palavra definida como sequumlecircncia de coisas natildeo space)

gt Fim de palavra (palavra definida como sequumlecircncia de coisas natildeo space)

Estas satildeo apenas as principais Algumas implementaccedilotildees tecircm muito mais (em particular nas linguagens que usam Unicode nativamente)

4589

Expressotildees regulares - exemplos

Determinar se strings satildeo nuacutemeros (Ex IDL)

IDLgt str=[9-18 875-812-45913E9-98d7a188d032f5]

Inteiros

IDLgt intexpr=^[-+][0-9]+$

IDLgt printstregex(strintexprboolean) 1 1 0 0 0 0 0 0 0 0

Ponto flutuante

IDLgt fpexpr=^[-+](([0-9][0-9]+)|([0-9]+[0-9]))([eEdD][-+][0-9]+)$

IDLgt printstregex(strfpexprboolean) 1 1 0 1 1 1 1 1 0 0

Sinal opcional

1 ou mais diacutegitos

Sinal opcional

0 ou mais diacutegitos opcionalmente seguidos de um ponto e 1 ou mais diacutegitos

1 ou mais diacutegitos opcionalmente seguidos de um ponto e 0 ou mais diacutegitos

ou Expoente opcional letra do expoente seguida de sinal opcional seguido de um ou mais diacutegitos

4689

Expressotildees regulares ndash extraccedilatildeo

Interpretadores de expressotildees regulares costumam oferecer mais que apenas testar se um string corresponde a uma expressatildeo

Em geral tambeacutem podem retornar que parte(s) do string corresponde(m) agrave expressatildeo

Ex (IDL) Determinar se um string conteacutem uma data incluindo os formatos

IDLgt dates=[2011-01-312011 1 3120110131something done on y2011m1d31 with something]

E extrair a data de dentro do string

IDLgt expr=[0-9]4[0-9]12[0-9]12

(4 diacutegitos)(qualquer separador)(1 a 2 diacutegitos)(qualquer separador)(1 a 2 diacutegitos)

IDLgt printstregex(datesexprextract)format=(A)2011-01-312011 1 31201101312011m1d31

Como agora separar ano mecircs e dia Com uma busca e uma extraccedilatildeo para cada Poderia ser mais eacute mais faacutecil com uma uacutenica expressatildeo regular

4789

Expressotildees regulares - aleacutem de apenas testes

Tambeacutem podem retornar que parte(s) do string correspondem agrave expressatildeo toda e agraves suas subexpressotildees (partes da expressatildeo delimitadas por parecircnteses)

Ex (IDL) Separar pedaccedilos de datas Neste caso para a expressatildeo ficar menor assumindo um formato simples (yyyy-mm-ddThhmmssfff) Mas poderia ser um formato mais livre como no exemplo anterior

IDLgt str=Stuff observed on 2011-01-31T123924983 with some instrumentIDLgt expr=([0-9]4)-([0-9]2)-([0-9]2)T([0-9]2)([0-9]2)([0-9]2[0-9]3)

(quatro diacutegitos)-(2 diacutegitos)-(2 diacutegitos)T(2 diacutegitos)(2 diacutegitos)(2 diacutegitos3 diacutegitos)

IDLgt pieces=stregex(strexprextractsubexpr)IDLgt printpiecesformat=(A)2011-01-31T12392498320110131123924983IDLgt d=julday(pieces[2]pieces[3]pieces[1]pieces[4]pieces[5]pieces[6])IDLgt printdformat=(F166) 2455593027372

Expressatildeo inteiraPrimeira subexpressatildeoSegunda subexpressatildeoTerceira subexpressatildeoQuarta subexpressatildeoQuinta subexpressatildeoSexta subexpressatildeo

4889

Expressotildees regulares - referecircncias httpxkcdcom208

Viacutedeos do Software Carpentry

httpsoftware-carpentryorg4_0regexp

4989

Arquivos

Quase todo programa precisa armazenar dados em arquivos

Podem ser pequenos arquivos de paracircmetros ou enormes arquivos de dados produzidos ou a processar

Apesar do sugerido pela praacutetica comum arquivos texto natildeo satildeo sempre a melhor escolha para armazenar dados - e haacute muitas formas diferentes de os usar

Qual eacute a melhor escolha

Assim como para linguagens ou contecirciners natildeo existe ldquoo melhor formatordquo Cada um tem suas vantagens e desvantagens

Dados diferentes (mesmo se usados pelos mesmos programas) em geral se adequam melhor a formatos diferentes

5089

Arquivos - texto X binaacuterios

Em qualquer formato arquivos satildeo armazenados como diacutegitos binaacuterios

Mas haacute duas formas principais como eles podem ser codificados

Arquivos baseados em texto (text files)

Dados satildeo transformados em caracteres usando alguma formataccedilatildeo (mesmo se impliacutecita) e escritos com alguma codificaccedilatildeo de texto (comumente mas natildeo necessariamente ASCII)

Um arquivo texto eacute um ou mais strings As mesmas conversotildees tecircm que ser feitas depara outros tipos

Arquivos ldquobinaacuteriosrdquo (binary files)

Embora todo arquivo seja binaacuterio este nome costuma ser usado soacute para aqueles em que os dados natildeo estatildeo na forma de texto

Com frequumlecircncia (nem sempre) os dados satildeo gravados de forma idecircntica a como satildeo armazenados na memoacuteria

Muitos formatos usam uma mistura de partes em texto e partes binaacuterias

Um cabeccedilalho (header) de texto que daacute informaccedilotildees (metadados) sobre os dados armazenados na parte binaacuteria que vem depois

O cabeccedilalho conteacutem em especial informaccedilotildees sobre como ler os dados binaacuterios

5189

Arquivos - texto X binaacuterios

Vantagens de arquivos texto

Legiacuteveis por pessoas (human readable)

Podem ser auto-suficientes todo o necessaacuterio para os ler e entender o que conteacutem pode ser obtido olhando o arquivo

Satildeo os menos especiacuteficos a linguagens software normalmente satildeo escritos em ASCII ou Unicode e sempre haacute algum suporte a ler escrever texto em linguagens software

Haacute alguns formatos padratildeo para texto (exs CSV XML) que satildeo suportados em muitas plataformas diferentes

5289

Arquivos - texto X binaacuterios

Vantagens de arquivos binaacuterios

Em geral natildeo haacute conversotildees entre o os dados como armazenados na memoacuteria O que torna o armazenamento mais eficiente e sem alteraccedilotildees nos valores

A maior parte dos formatos padronizados eacute binaacuteria Exs FITS cube CDF NetCDF HDF HDF5 JPEG JPEG2000 TIFF GeoTIFF MPEG etc

Eacute mais comum que haja bibliotecas prontas (ateacute de alto niacutevel) para consulta leitura e gravaccedilatildeo

Os formatos melhor desenhados satildeo autodocumentados (em texto ou binaacuterio) para os ler natildeo eacute necessaacuterio conhecimento preacutevio sobre como os dados foram armazenados

Toda linguagem plataforma costuma ter seu formato binaacuterio mais nativo que costuma ser o mais faacutecil para leitura gravaccedilatildeo Em particular nas de alto niacutevel que tecircm formatos autodocumentados (especialmente

em IDL R Python Java)

Muitos formatos tecircm opccedilatildeo de compressatildeo dos dados

5389

Arquivos - proprietaacuterios X padratildeo

Independente da escolha texto binaacuterio programas devem escolher entre usar um formato proacuteprio ou um formato padronizado

A principal vantagem de formatos proacuteprios eacute que satildeo definidos da forma mais conveniente para a aplicaccedilatildeo que os usa simplificando leitura e gravaccedilatildeo e potencialmente otimizando recursos (acesso ao disco tamanho do arquivo etc)

A principal desvantagem de formatos proacuteprios eacute ser necessaacuterio escrever todo o coacutedigo para os ler gravar

Pode dar mais trabalho que usar um formato geneacuterico que natildeo seja exatamente o que melhor se encaixa na aplicaccedilatildeo

O coacutedigo para processar o formato em geral vai ser menos completo e conveniente de usar que o de um formato bem estabelecido usado por muitos outros em muitos ambientes

Cada novo software que for usar estes arquivos vai precisar compartilhar do mesmo coacutedigo ou precisar de coacutedigo novo (em particular se em outra linguagem) para ler gravar naquele formato

Eacute necessaacuterio documentar o formato e decidir sobre como ele seraacute definido

Se outros jaacute colocaram muito trabalho desenvolvendo bons formatos padratildeo bem suportados em muitos ambientes por que ter o trabalho de reinventar (e reprogramar redocumentar e retestar) a roda

5489

Arquivos - padrotildees comuns em astronomia (exs adiante)

Texto

CSV Comma-separated values - bem suportado por muitos softwares

ldquoColunas fixasrdquo Natildeo eacute um padratildeo bem definido mas eacute praacutetica comum para tabelas (2D)

XML Extensible Markup Language - O padratildeo texto mais flexiacutevel de grande uso em programaccedilatildeo geral para armazenar qualquer coisa com frequumlecircncia de forma hieraacuterquica Bem suportado por linguagens modernas (e modernizadas) e bibliotecas das principais

linguagens gerais Alta complexidade o torna trabalhoso de usar

5589

Arquivos - padrotildees comuns em astronomia (exs adiante)Binaacuterios

FITS Flexible Image Transport System - o mais comum para observaccedilotildees astronocircmicas Conteacutem os dados (em geral arrays 1D 2D ou 3D) e documentaccedilatildeo (nos cabeccedilalhos) sobre a origem e caracteriacutesticas dos dados Tambeacutem usado para armazenar tabelas de dados quaisquer mesmo que natildeo sejam observaccedilotildees (especialmente pelo STSCI) Variam muito em qualidade de documentaccedilatildeo

NetCDF Network Common Data Form - evoluccedilatildeo do CDF autodocumentado eacute comum e bem suportado para vaacuterios arrays de dados

HDF5 Hierarchical Data Format ndash autodocumentado comum e bem suportado permitindo aleacutem de simples arrays estruturas (eacute um formato hieraacuterquico)

Formatos de imagens JPEG JPEG2000 TIFF GeoTIFF etc - voltados para arrays 2D3D de inteiros ou (em alguns casos) reais com ou sem compressatildeo JPEG2000 tem caracteriacutesticas mais avanccediladas como imagens multiresoluccedilatildeo

Formatos vetoriais PS EPS DXF SHP SVG - variados niacuteveis de suporte a armazenamento de vetores e formas em 2D ou 3D

ISIS Cube semelhante em caracteriacutesticas ao FITS mais usado em sensoriamento remoto geociecircncias e ciecircncias planetaacuterias em geral para observaccedilotildees 1D 2D ou 3D

Formatos nativos de linguagens todo o trabalho de leitura e gravaccedilatildeo eacute feito automagicamente pela biblioteca padratildeo em IDL R Python Java

5689

Arquivos texto - newlines

Apesar do que possa parecer arquivos texto natildeo tecircm intrinsecamente vaacuterias linhas Arquivos texto satildeo soacute uma sequumlecircncia 1D de caracteres em alguma codificaccedilatildeo Separaccedilatildeo em linhas (equivalente a interpretar o arquivo como 2D em linhas e colunas) eacute

especificada por convenccedilotildees Natildeo haacute apenas uma convenccedilatildeo para o fim de linhas

A mais primitiva convenccedilatildeo eacute separaccedilatildeo nenhuma estipula-se que linhas tenham um nuacutemero fixo N de caracteres e cabe ao software que lecirc o arquivo entender que uma linha nova ocorre regularmente a cada N caracteres

Eacute a forma menos portaacutevel e mais inconveniente eacute necessaacuterio o conhecimento preacutevio (ou por inspeccedilatildeo do arquivo) de quantos caracteres haacute por linha

A maior parte dos editores de texto natildeo vai saber separar linhas desta forma (por falta deste conhecimento preacutevio) Exemplo (de um FITS real)

SIMPLE = T Fits standard BITPIX = 16 Bits per pixel NAXIS = 0 Number of axes EXTEND = T File may contain extensions

O que com as linhas quebradas nos lugares certos seria

SIMPLE = T Fits standard BITPIX = 16 Bits per pixel NAXIS = 0 Number of axes EXTEND = T File may contain extensions

5789

Arquivos texto - newlines

A forma mais comum de especificar linhas eacute com um marcador do final de linha (newline)

Eacute um caractere especial natildeo normalmente presente no texto que serve para marcar fim de linhas

Mas natildeo haacute soacute um padratildeo de newline Os mais comuns

LF (Line Feed ASCII 10) ndash Unix Linux Mac OS X

CR - (Carriage Return ASCII 13) - Mac OS lt10

CR+LF (CR seguido de LF) - Windows DOS

Eacute o motivo de o Notepad (Windows) natildeo entender as quebras de linha de arquivos escritos com o formato nativo de Linux o arquivo soacute tem LF enquanto o editor espera CR+LF

Alguns sistemas (strings em vaacuterias linguagens por exemplo) usam o coacutedigo de escape n para indicar newline que eacute codificado de acordo com o padratildeo sendo usado

Em geral bibliotecas de leitura e gravaccedilatildeo de arquivos usam (default pelo menos) o newline nativo do sistema em que satildeo usadas

Programas de conversatildeo entre os sistemas satildeo comuns (ex dos2unix)

O Wordpad identifica se for usado soacute LF e quebra as linhas de acordo

5889

Arquivos - texto - CSV

Comma-separated values

O formato mais padronizado para tabelas (arrays 2D) em texto (frequentemente mas natildeo necessariamente ASCII)

Bem suportado por bibliotecas padratildeo de linguagens e outros softwares (Excel Calc Origin Google Docs etc)

Conteacutem Linhas de cabeccedilalho (opcionais mas recomendadas) linhas com qualquer texto geral

descrevendo o arquivo e em geral uma linha de tiacutetulo para as colunas da tabela Uma (apenas uma) tabela onde todas as linhas tecircm o mesmo nuacutemero de colunas

Colunas separadas por viacutergulas (opcionalmente pode ser outro separador) Linhas terminadas por newline (qualquer que seja) Strings delimitados por ldquo ldquo

Ex

NAMECALMPOSFILNAMEECHLPOSDISPPOSTARGNAMEPOSDIRCLASSMJD-OBSITIMECOADDSdec18s00010NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001dec18s00020NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001dec18s00120NIRSPEC-5-AO635800364500itan140NIRSPEC-5-AOp2 TITAN5408763000001dec18s00140NIRSPEC-5-AO626300364500itan140NIRSPEC-5-AOp1 TITAN5408763000001dec18s00151NIRSPEC-5-AO626300364500itan140NIRSPEC-5-AOp1ARC5408764000001dec18s00160NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001

Natildeo eacute necessaacuterio que as colunas tenham largura constante

Cabeccedilalho

5989

Arquivos - texto - CSVHaacute amplo suporte a leitura e gravaccedilatildeo de CSV sem precisar recorrer a procedimentos de baixo niacutevel

Podem ser diretamente importados em Excel Calc Origin Google Docs ou lido facilmente com bibliotecas padratildeo comuns Ex (IDL)

IDLgt c=read_csv(filesearch_scamcsvheader=h)IDLgt printhNAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS

IDLgt helpc Structure ltc8bca508gt 11 tags length=5256 data length=5248 refs=1 FIELD01 STRING Array[41] FIELD02 LONG Array[41] FIELD03 STRING Array[41] FIELD04 DOUBLE Array[41] FIELD05 DOUBLE Array[41] FIELD06 STRING Array[41] FIELD07 STRING Array[41] FIELD08 STRING Array[41] FIELD09 STRING Array[41] FIELD10 DOUBLE Array[41] FIELD11 LONG Array[41]

IDLgt printcfield01[03]dec18s0001 dec18s0002 dec18s0003 dec18s0004

IDLgt printcfield03[03]NIRSPEC-5-AO NIRSPEC-5-AO NIRSPEC-5-AO NIRSPEC-5-AO

6089

Arquivos - texto - CSVEx (IDL) Criaccedilatildeo de um CSV com uma tabela de valores

Criaccedilatildeo de 3 arrays 1D (12 elementos) um para cada coluna

IDLgt x=dindgen(3)IDLgt y=dindgen(4)IDLgt xx=reform(rebin(x34)12)IDLgt yy=reform(rebin(reform(y14)34)12)IDLgt f=xx+yy10IDLgt helpxxyyfXX DOUBLE = Array[12]YY DOUBLE = Array[12]F DOUBLE = Array[12]

Escrita do arquivo

IDLgt write_csvexamplecsvxxyyfheader=[XYX+10Y]

ResultadoXYX+10Y000000000000000000000000100000000000000010000000200000000000000020000000000000001000000010000000100000001000000011000000()

6189

Arquivos - texto - ldquoColunas regularesrdquoFixed column width

Natildeo eacute exatamente um padratildeo Eacute uma praacutetica comum

Armazena uma tabela (array 2D) de forma regular simples de ser interpretada e lida

Costumam ter linha(s) de cabeccedilalho descrevendo o conteuacutedo do arquivo em geral com uma linha para os nomes das colunas

As demais linhas conteacutem os dados sempre ocupando a mesma largura por coluna e escritos no mesmo formato em cada coluna

Costumam ser simples de ler inclusive interativamente (exs Excel Calc Origin read_ascii)

Ex (IDL) Uma simples tabela soacute de nuacutemeros

wavl CH4=33 wavl CH4=25 wavl CH4=10 wavl CH4=08 wavl CH4=05 wavl CH4=026 wavl CH4=02 477330000 0090130 477330000 0091110 477330000 0089250 477330000 0087000 477330000 0087140 477330000 0090080 477330000 0088110 480040000 0090930 480040000 0091930 480040000 0090160 480040000 0087930 480040000 0088110 480040000 0090950 480040000 0089090 482750000 0091710 482750000 0092730 482750000 0091060 482750000 0088850 482750000 0089080 482750000 0091810 482750000 0090060 485450000 0092530 485450000 0093570 485450000 0092000 485450000 0089810 485450000 0090100 485450000 0092730 485450000 0091090

IDLgt a=read_ascii(specs_27s_ntxtdata_start=1header=header)IDLgt printheader wavl CH4=33 wavl CH4=25 wavl CH4=10 wavl CH4=08 wavl CH4=05 wavl CH4=026 wavl CH4=02 IDLgt helpa Structure ltd423c9a8gt 1 tags length=224 data length=224 refs=1 FIELD01 FLOAT Array[14 4]

6289

Arquivos - texto - ldquoColunas regularesrdquoJaacute um arquivo um pouco mais difiacutecil de ler

NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS dec18s0001 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0002 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0003 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 FLAT 5408757812500 460000 5 dec18s0004 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 DARK 5408757812500 460000 5

Por ter colunas de tipos diferentes (strings inteiros reais) natildeo eacute possiacutevel o ler em um simples array Mas eacute faacutecil o colocar em uma estrutura de arrays onde cada campo eacute uma coluna

Especificando interativamente como interpretar as linhasIDLgt templ=ascii_template(filesearch_scamtxt)

Nome do campo (default mostrado)

Tipo do campo (identificado automaticamente)

Posiccedilatildeo (caracter) do comeccedilo (identificada automaticamente)

Linha de exemplo para verificar as colunas

6389

Arquivos - texto - ldquoColunas regularesrdquoDepois de feito o template o arquivo pode ser lido com apenas

IDLgt a=read_ascii(filesearch_scamtxttemplate=templ)IDLgt helpa Structure ltd4ec4608gt 11 tags length=416 data length=416 refs=1 FIELD01 STRING Array[4] FIELD02 LONG Array[4] FIELD03 STRING Array[4] FIELD04 FLOAT Array[4] FIELD05 FLOAT Array[4] FIELD06 STRING Array[4] FIELD07 STRING Array[4] FIELD08 STRING Array[4] FIELD09 FLOAT Array[4] FIELD10 FLOAT Array[4] FIELD11 LONG Array[4]IDLgt printafield01dec18s0001 dec18s0002 dec18s0003 dec18s0004IDLgt printafield04 626300 626300 626300 626300

O template (uma estrutura contendo dados sobre como ler o arquivo) pode ser usado para outros arquivos no mesmo formato No lugar de ter sido criado interativamente poderia ter sido lido de algum arquivo Poderia ter especificado nomes para os campos que seriam mais amigaacuteveis que coias como FIELD11

6489

Arquivos - texto - XML

Extensible Markup Language

Admite grande flexibilidade e por isso pode ter alta complexidade

Valores satildeo colocados dentro de uma estrutura em hieraacuterquica (em uma aacutervore) com os noacutes identificados pelos seus nomes (chaves)

Largamente usado em muitas aacutereas para armazenar conjuntos arbitraacuterios de quaisquer estruturas de dados

A maioria das aplicaccedilotildees usa um formato que eacute um subconjunto do XML especificado por um Schema comumente em um arquivo XML DTD (Document Type Definition)

6589

Arquivos - texto ndash XML ndash exemplos de usos

Armazenamento de dados de aplicaccedilotildees web (comum para exportar importar dados MediaWiki DokuWiki WordPress ADS Lattes etc)

Documentos Office (docx pptx xlsx) OpenOffice (odt opd ods)

Como versotildees de outros formatos FITSML XDF

ldquoScientific Dataset XML NASAs Astronomical Data Center (ADC) sponsors a number of research projects that

use XML for scientific data representation The XML activities at the ADC are sponsored and supported by the NASA Office of Space Science Applied Information Systems Research Program (AISRP)rdquo - httpxmlcoverpagesorgnasa-adchtml

Astronomical Instrument Markup Language (AIML)

SVG ndash Scalable Vector Graphics

Muitas de outras aplicaccedilotildees listadas em httpxmlcoverpagesorgxmlhtmlapplications

6689

Arquivos - texto ndash XML - exemploltxml version=10 gtltDOCTYPE Xdmf SYSTEM Xdmfdtd []gtltXdmf xmlnsxi=httpwwww3org2001XInclude Version=20gt ltDomaingt lt-- Example of Basic Topologies --gt ltInformation Name=Descriptiongt Example of a Polyvertex Topology ltInformationgt ltGrid Name=Polyvertex GridType=Uniformgt ltTopology TopologyType=Polyvertex Dimensions=3 NodesPerElement=3gt ltDataItem Format=XML Dimensions=3 3 NumberType=Floatgt 0 1 2 4 5 6 8 9 10 ltDataItemgt ltTopologygt ltGeometry Type=XYZgt ltDataItem Format=XML Dimensions=4 4 3gt 00 00 00 10 00 00()Que mostra que a interpretaccedilatildeo (parsing) de XML eacute em geral complexa

6789

Arquivos - texto - XML

Haacute muitas bibliotecas de alto niacutevel para fazer o processamento (parsing) e entregar os dados em uma estrutura conveniente

A complexidade em processar XML estaacute em decidir o que fazer com os dados jaacute que os arquivos podem ser muito complexos

As APIs (Application Programming Interfaces) mais comuns para processar XML que satildeo implementadas em muitas linguagens

DOM (Document Object Model) ndash manteacutem todo o conteuacutedo do em uma estrutura de dados (em geral uma aacutervore) em uma variaacutevel (em geral um objeto) Esta pode ser consultada para obter os valores de interesse para os alterar e usada para escrever um arquivo

SAX (Simple API for XML) ndash Interpretador (parser) por objetos O usuaacuterio escreve uma classe herdando da classe SAX provendo os meacutetodos que vatildeo processar os campos agrave medida em que estes satildeo lidos

6889

Arquivos - binaacuterios - FITSFlexible Image Transport System

O formato mais comum para observaccedilotildees astronocircmicas Tambeacutem usado para armazenar quaisquer dados mesmo natildeo relacionados a observaccedilotildees (especialmente tabelas como eacute praacutetica do STSCI)

Conteacutem um (ou mais) cabeccedilalho(s) de texto com metadados (informaccedilotildees sobre os dados como caracteriacutesticas (necessaacuterias para os ler) origem condiccedilotildees em que foram obtidos processamento realizado etc)

SIMPLE = T image conforms to FITS standard BITPIX = 32 bits per data value NAXIS = 2 number of axes NAXIS1 = 1024 NAXIS2 = 1024 BSCALE = 100000 Scaling factor BZERO = 000000 Scaling zero-point TELESCOP= Keck II Telescope SLITNAME= 0041x226 Slit Name SLITPA = 351979 Slit position angle SLITX = 131500 X pixel of the center of the slit LST = 12010446 local apparent sidereal time (()

Depois do cabeccedilalho haacute uma (ou mais) seccedilatildeo(otildees) de dados binaacuterios Costuma(m) ser array(s) 1D (espectros) 2D (imagens) ou 3D (ldquocubos de dadosrdquo)

De inteiros ou reais inteiros satildeo comuns em contagens de instrumentos reais para valores derivados (fluxos intensidades etc)

6989

Arquivos - binaacuterios - FITSNormalmente FITS satildeo lidos escritos por bibliotecas prontas de (relativamente) alto niacutevel usuaacuterio natildeo tem que saber como os dados satildeo armazenados no arquivo nem como os ler escrever Ex (IDL com a biblioteca idlastro)

IDLgt fits_info2dspectrumfits2dspectrumfits has 3 extensionsPrimary header 288 recordsNo dataExtension 1 -- SCI Header 144 records IMAGE ( 1201 1201 )Extension 2 -- ERR Header 72 records IMAGE ( 1201 1201 )Extension 3 -- DQ Header 72 records IMAGE ( 1201 1201 )

IDLgt mydata=readfits(2dspectrumfitsexten_no=1myheader) READFITS Reading FITS extension of type IMAGE READFITS Now reading 1201 by 1201 array

IDLgt extastmyheadermyastIDLgt sz=size(mydatadimensions)IDLgt xy2ad[1sz[0]][1sz[1]]myastcorners_acorners_dIDLgt printcorners_aCorners of the data array from file 2dspectrumfits are at 14487480 33063480

IDLgt printcorners_d -00041264444 00041402222

Obteacutem os dados de coordenadas (WCS) do header

Coloca os dados no array (2D de floats) mydata e o header no array (1D de strings) myheader

Calcula as coordenadas das quinas da imagem atraveacutes do WCS

Provecirc informaccedilotildees sobre o arquivo

7089

Arquivos - binaacuterios - ISIS Cube

Formatos como FITS se adequam muito a ter uma interface de mais alto niacutevel por objetos

Tambeacutem para dados em tabelas FITS muito mais trabalhosos de ler em baixo niacutevel que se adequam muito mais a mapas ou estruturas

Exemplo (de um formato semelhante a FITS ISIS cube)

O objeto ao ser criado lecirc todo o arquivo

cube=pp_editablecube(CM_1553510065_1_ircub)

Meacutetodos fornecem os dados desejados para obter quando necessaacuterio os dados de interesse

Find out the names of the backplanesprintcubegetproperty(backnames)Get the start time of the cubeprintcubegetfromheader(START_TIME)2007-084T100057286Z

Valores no cabeccedilalho podem ser convenientemente fornecidos como um mapa

header=cubeheader_as_hash()printheader[START_TIME]2007-084T100057286Z

7189

Arquivos - binaacuterios ndash ISIS Cube

Os dados satildeo fornecidos como arraysMake a contour plot of the latitudesc=contour(cubegetsuffixbyname(LATITUDE))Get the band with wavelength nearest to 21 (in the units used in the cube)selband=cubegetbandbywavelength(21wavelengths=selwavs)

Interfaces por overload tornam o acesso ainda mais conveniente

selband=cube[21]

selwavs=cube[21]

Retorna um array com a banda de comprimento de onda mais proacuteximo de 21 (microm)

Retorna o comprimento de onda mais proacuteximo de 21 (microm) da banda retornada acima

7289

Arquivos - binaacuterios ndash ISIS Cube Alteraccedilotildees feitas ao conteuacutedo satildeo automaticamente refletidas em todos os

lugares (cabeccedilalho em particular) afetados mantendo o objeto vaacutelido que pode depois ser gravado em um novo arquivo

IDLgt printcubelinescubesamplescubebands 64 64 256

IDLgt helpcubecoreltExpressiongt FLOAT = Array[64 64 256]

IDLgt cubecore=dblarr(100100256)

A linha acima natildeo eacute uma atribuiccedilatildeo eacute uma invocaccedilatildeo de meacutetodo Eacute equivalente acubesetpropertycore=dblarr(100100256)

Eacute o trabalho da funccedilatildeo setproperty decidir se a propriedade passada (core) faz sentido e se fizer fazer todo o trabalho necessaacuterio a esta mudanccedila Para o usuaacuterio eacute tudo automaacutetico e os dados da classe satildeo vaacutelidos o tempo todo

IDLgt helpcubecoreltExpressiongt DOUBLE = Array[100 100 256]

IDLgt printcubelinescubesamplescubebands 100 100 256

IDLgt cubesaveCM_1553510065_1_ir_editedcub

7389

Arquivos - binaacuterios ndash NetCDF e HDF5

Network Common Data Form e Hierarchical Data Format

Os dois uacutenicos formatos bem estabelecidos para dados cientiacuteficos geneacutericos

Armazenam dados como vaacuterias variaacuteveis e seus metadados Para cada variaacutevel haacute (ou pode haver) os metadados

Nome Dimensotildees (do array) Unidades Comentaacuterios

Ambos permitem arrays multidimensionais

Apenas HDF5 permite estruturas (daiacute vem a hierarquia)

Autodocumentados qualquer software que saiba ler um destes formatos lecirc qualquer arquivo sem precisar de conhecimento preacutevio sobre como o arquivo foi gerado

Muito bem suportados em bibliotecas padratildeo e natildeo padratildeo em softwares interativos e visualizadores (inclusive plugins para navegadores)

httpwwwunidataucaredusoftwarenetcdf httpenwikipediaorgwikiHdf5

NetCDF eacute mais simples de usar por natildeo ter hierarquia dando menos trabalho para ler e escrever dados Se hierarquia natildeo eacute necessaacuteria eacute mais conveniente de usar que HDF5

7489

Arquivos - binaacuterios - NetCDF e HDF5Haacute tambeacutem o formato CDL uma versatildeo ASCII do NetCDF A biblioteca padratildeo do NetCDF inclui conversores entre estes formatos

$ ncdump -h refspec_g01_0ncnetcdf refspec_g01_0 dimensions nlay = 51 nwn = 400 nleg = 33 numu = 2 nlev = 52 nphi = 3 ngas = 2 nwnc = 1 scal = 1 v3 = 3 dnl = 1 nk = 1 tdisr = UNLIMITED (0 currently) na = 16

variables float alb(nwn) float z(nlay) float t(nlay) float p(nlay) float wl(nwn) float iof(nwn) float mtau(nwn) float htau(nwn) float hctaus(nwn) float gtau(nwn) float outcos(scal) float phi(nleg) float phic(scal) float umu(numu) float flux(v3 nwn nlev) float mix(nlay ngas) float c(nlay) float psat(nlay) float ga(nwnc) float wlc(nwnc) float inc(scal) int dm(scal) int ord(scal) float fbeam(scal) float wn(nwn) float tautot(nwn nlay) float htaus(nwn nlay) float htaux(nwn nlay) float taug(nwn nlay) float phase(nwn nlay nleg) float ssa(nwn nlay) float uu(nwn nphi nlev numu) float u0u(nwn nlev numu) float tray(nwn nlay) float gtauo(tdisr nwn nlay)

Haacute 14 variaacuteveis usadas como dimensotildees para as 35 variaacuteveis que satildeo arrays

Ex alb(nwn) indica que alb eacute um array 1D de nwn elementos

nwn estaacute armazenado como uma das dimensotildees e eacute 400 portanto alb tem 400 elementos

Parte do conteuacutedo de um arquivo NetCDF em formato CDL (gerado pelo programa ncdump)

7589

Arquivos - binaacuterios - NetCDF e HDF5Conteuacutedo daquele arquivo visualizado com o ncview (acompanha a biblioteca NetCDF padratildeo)

7689

Arquivos - binaacuterios - NetCDF e HDF5O conteuacutedo de todo o arquivo pode ser lido facilmente com as bibliotecas disponiacuteveis e armazenado em contecirciners convenientes Usando um objeto que gera um resultado um pouco mais conveniente

IDLgt h=pp_readncdf(refspec_g01_0nchash)IDLgt printhvar_dims ltObjHeapVar229(HASH)gtvars ltObjHeapVar152(HASH)gtdims ltObjHeapVar118(HASH)gt

IDLgt printh[vars]T 173203 175459 175848 176001 175975 Z 431869 418858 406067 393403 380464 FLUX 300660 145536 0705180 0341669 0165532 PHASE 100000 0779034 0660858 0542052 0449983 TAUTOT0694377 0693420 0693474 0693540 0693636()

IDLgt help(h[vars])[TAUTOT]ltExpressiongt FLOAT = Array[51 400]

IDLgt print(h[var_dims])[TAUTOT]NLAY NWN

IDLgt print(h[dims])[(h[var_dims])[TAUTOT]]NLAY 51NWN 400

7789

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5)

Visualizaccedilatildeo da variaacutevel selecionada

Metadados e alguns valores da variaacutevel selecionada

Variaacutevel a ser criada com o conteuacutedo desta variaacutevel do arquivo

Hierarquia das variaacuteveis do arquivo

7889

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5) Imported variable az

IDLgt helpaz Structure ltd5723f38gt 13 tags length=448 data length=444 refs=1 _NAME STRING az _ICONTYPE STRING binary _TYPE STRING DATASET _FILE STRING INTENSI_test_409OUTh5 _PATH STRING _DATA DOUBLE Array[38] _NDIMENSIONS LONG 1 _DIMENSIONS ULONG64 Array[1] _NELEMENTS ULONG64 38 _DATATYPE STRING H5T_FLOAT _STORAGESIZE ULONG 8 _PRECISION LONG 64 _SIGN STRING

IDLgt printaz_data 00000000 10000000 20000000 30000000 40000000 50000000 60000000 80000000 ()

7989

Arquivos - binaacuterios - imagens

JPEG JPEG200 TIFF GeoTIFF etc

Os formatos comuns de imagens satildeo bem suportados em muacuteltiplas plataformas para uso dentro de programas e interativamente

Alguns formatos tecircm opccedilatildeo de compressatildeo com perda eou sem perda

Armazenam imagens como arrays 2D ou 3D (3D frequumlentemente limitado a 3 ou 4 em uma das dimensotildees uma imagem em 3 ou 4 bandas) de inteiros ou (em alguns formatos) reais

Alguns formatos permitem armazenar metadados para caracterizar as imagens armazenadas

JPEG2000 e GeoTIFF (um subconjunto de TIFF) comuns em astronomia e aacutereas proacuteximas

8089

Arquivos - binaacuterios ndash imagens ndash exemplo (IDL)IDLgt printquery_tiff(issmap_2009tiffinfogeotiff=geo) 1

IDLgt helpinfo Structure ltd4eca4b8gt 18 tags length=144 data length=132 refs=1 CHANNELS LONG 4 DIMENSIONS LONG Array[2] IMAGE_INDEX LONG 0 NUM_IMAGES LONG 1 PIXEL_TYPE INT 1 TYPE STRING TIFF BITS_PER_SAMPLE LONG 8 POSITION FLOAT Array[2] RESOLUTION FLOAT Array[2] UNITS LONG 2 TILE_SIZE LONG Array[2] DESCRIPTION STRING ISS (2009) DATE_TIME STRING 20100218 012436()

IDLgt helpgeo Structure ltd4efa1b8gt 10 tags length=264 data length=262 refs=1 MODELPIXELSCALETAG DOUBLE Array[3] MODELTIEPOINTTAG DOUBLE Array[6 4] GEOGRAPHICTYPEGEOKEY INT 4035 GEOGSEMIMAJORAXISGEOKEY DOUBLE 25750000 GEOGSEMIMINORAXISGEOKEY DOUBLE 25750000()

IDLgt myimage=read_tiff(issmap_2009tiff) Lecirc a imagem para o array myimage

Obteacutem informaccedilotildees sobre o arquivo

8189

Arquivos - binaacuterios ndash formatos nativosLinguagens como IDL R Python Java tecircm seu formato nativo binaacuterio acessado em alto niacutevel Basta mandar salvar ler variaacuteveis no do arquivo a biblioteca padratildeo automagicamente faz todo o trabalho de decidir como gravar ler os dados

Conveniente de usar na proacutepria linguagem Mas raramente existem bibliotecas para ler gravar o formato nativo de uma linguagem a partir de outra Ex (IDL)

IDLgt savefile=2dspectrumsavmydatamyheadercorners_dcorners_averbosecompress SAVE Portable (XDR) compressed SAVERESTORE file SAVE Saved variable MYDATA SAVE Saved variable MYHEADER()

Pode ser lido com apenas (haacute formas mais elaboradas)

IDLgt restore2dspectrumsavverbose RESTORE Portable (XDR) compressed SAVERESTORE file RESTORE Save file written by ltunknowngtltunknowngt Thu Jan 27 191422 2011 RESTORE IDL version 801 (linux x86_64) RESTORE Restored variable MYDATA RESTORE Restored variable MYHEADER()

IDLgt helpmydatamyheadercorners_dcorners_aMYDATA FLOAT = Array[1201 1201]MYHEADER STRING = Array[144]()

8289

Arquivos - processamento em baixo niacutevel

Nem sempre um formato padratildeo eacute a melhor escolha para o problema

Nem sempre haacute escolha (pode-se ter que trabalhar com arquivos que jaacute foram escritos em algum formato proprietaacuterio)

Agraves vezes o formato eacute padratildeo mas natildeo haacute bom suporte a ele disponiacutevel

Em todos estes casos eacute necessaacuterio escrever rotinas em baixo niacutevel que vatildeo ler processar diretamente o conteuacutedo do arquivo

Preferencialmente criando interfaces de alto niacutevel para o programa que vai as usar

8389

Arquivos - processamento em baixo niacutevel - texto

Tomando o exemplo anterior onde as colunas eram de diferentes tipos

NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS dec18s0001 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0002 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0003 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 FLAT 5408757812500 460000 5 dec18s0004 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 DARK 5408757812500 460000 5

A forma mais simples de o ler diretamente eacute definir uma estrutura para receber cada linha e um array destas estruturas para receber todo o arquivo Ex (IDL)

IDLgt record=namecalmpos0filnameechlpos0d0disppos0d0targnameposdirclassmjd_obsitime0d0coadds0IDLgt nlines=file_lines(filesearch_scamtxt)IDLgt mydata=replicate(recordnlines-1)IDLgt header=

Depois de definidas as variaacuteveis que vatildeo receber os dados o arquivo pode ser lido

IDLgt openrunitfilesearch_scamtxtget_lunIDLgt readfunitheaderIDLgt readfunitmydataformat=(A14I8A15F104F104A18A19A15F158F105I15)IDLgt free_lununit

A gravaccedilatildeo de um arquivo texto poderia ser feita de forma semelhante apenas trocando openr por openw (abrir o arquivo para gravaccedilatildeo natildeo leitura) e readf por printf

O arquivo eacute aberto em uma unidade (unit) usada para especificar de onde eacute feita a leitura

Ao final o arquivo eacute fechado

8489

Arquivos - processamento em baixo niacutevel - texto

O que resulta em

IDLgt printheader NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS

IDLgt helpmydataMYDATA STRUCT = -gt ltAnonymousgt Array[4]

IDLgt helpmydata[0] Structure ltd5e38f68gt 11 tags length=136 data length=124 refs=3 NAME STRING dec18s0001 CALMPOS INT 0 FILNAME STRING NIRSPEC-5-AO ECHLPOS DOUBLE 62630000 DISPPOS DOUBLE 36450000 TARGNAME STRING HD85258 POSDIR STRING NIRSPEC-5-AOp1 CLASS STRING STAR MJD_OBS STRING 54087574 ITIME DOUBLE 10000000 COADDS INT 1

Este caso eacute mais complicado que os mais comuns por haver colunas de strings

Se todas fossem de nuacutemeros natildeo teria sido necessaacuterio especificar o formato explicitamente As colunas teriam sido adivinhadas pela biblioteca que lecirc o arquivo Poderia ter sido lido escrito soacute com um array de nuacutemeros sem estruturas

8589

Arquivos - processamento em baixo niacutevel - binaacuterio

Formatos binaacuterios podem ser definidos de qualquer forma O arquivo eacute apenas um conjunto de bytes Cabe ao software saber como os interpretar

Uma escolha comum para que sejam autodocumentados eacute incluir um cabeccedilalho de texto informando as caracteriacutesticas dos dados necessaacuterias para os ler

Ex (IDL) criar um arquivo que armazene um array de doubles com um cabeccedilalho informando as dimensotildees para que o programa que o lecirc saiba como ler os dados

Inventa dados e abre o arquivo

IDLgt data_to_write=dindgen(34)IDLgt openwunitbinary_exampledatget_lun

Escreve as dimensotildees como texto

IDLgt printfunitdimensions of the double array stored belowIDLgt printfunitsize(data_to_writedimensions)

Escreve os dados binaacuterios

IDLgt writeuunitdata_to_write

Fecha o arquivo

IDLgt free_lununit

Escreve em binaacuterio (write unformatted)

8689

Arquivos - processamento em baixo niacutevel - binaacuterio

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

dimensions of the double array stored below 3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

8789

Arquivos - processamento em baixo niacutevel - binaacuterioA leitura deste arquivo eacute igualmente simples

IDLgt header=IDLgt dims=[00]IDLgt openrunitbinary_exampledatget_lun

Lecirc as dimensotildees (armazenadas como texto)

IDLgt readfunitheaderIDLgt readfunitdims

Lecirc a parte binaacuteria depois de saber as dimensotildees

IDLgt data_read=dblarr(dims)IDLgt readuunitdata_read

Fecha o arquivo

IDLgt free_lununit

Verifica que os dados foram gravados e lidos corretamente

IDLgt printarray_equal(data_to_writedata_read) 1

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Lecirc dados binaacuterios (read unformatted)

8889

Sumaacuterio

5 ndash Slides em httpwwwppenteadonetpeapea04_strings_iopdf Strings Expressotildees regulares Arquivos

httpwwwppenteadonetpea

8989

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89

Strings - conversatildeo de outros tipos para strings

Eacute uma das operaccedilotildees mais comuns para gerar textos informativos e nomes escrever arquivos (aquivos texto discutidos adiante) etc

Eacute natildeo trivial jaacute que a conversatildeo pode ser feita de muitas formas diferentes

Para tipos fundamentais sempre haacute uma conversatildeo default tanto criando um string como usando algo tipo print (para strings terminal ou arquivos)

Todo comando tipo print (print printf sprintf string write etc) e toda escrita para arquivos texto eacute uma conversatildeo para string (terminais e arquivos texto soacute conteacutem strings)

2389

Strings - conversatildeo de outros tipos para strings

Exemplos de conversotildees (IDL)

IDLgt print[-109] -1 0 9

IDLgt print1d01B10 10000000 1 100000

IDLgt helpstring(1d01B10)ltExpressiongt STRING = 10000000 1 100000

IDLgt printfunitdblarr(343)

Tipos mais elaborados podem ou natildeo ter uma forma predefinida Com objetos eacute comum ser possiacutevel definir a conversatildeo (stringification) ao criar a classe

IDLgt h=hash(a109[01]18b)

IDLgt printh9 0 1a 100000180000 b

Strings

Coloca strings em um arquivo (adiante)

Strings criados por um meacutetodo da classe hash satildeo uma forma de representar o hash

2489

Strings - conversatildeo de outros tipos para strings

Algumas linguagens (Python IDL) tecircm mais de uma forma default de gerar strings Em Python uma forma eacute executaacutevel a outra eacute mais legiacutevel

In [30] x=arange(12)reshape(43)

In [31] print(x)[[ 0 1 2] [ 3 4 5] [ 6 7 8] [ 9 10 11]]

In [32] xOut[32]array([[ 0 1 2] [ 3 4 5] [ 6 7 8] [ 9 10 11]])

In [33] y=array([[ 0 1 2] [ 3 4 5] [ 6 7 8] [ 9 10 11]])

In [37] print(array_equal(xy))True

String mais legiacutevel

String executaacutevelPode ser usado para criar um objeto equivalente

2589

Strings ndash formataccedilatildeo expliacutecita

A formataccedilatildeo pode ser especificada se a conversatildeo default natildeo eacute adequada para definir a conversatildeo em um novo tipo

Cada linguagem tem sua sintaxe para formataccedilatildeo

Haacute dois estilos semelhantes em vaacuterias linguagens

Ambos os estilos satildeo sintaxes diferentes para a mesma ideacuteia Um coacutedigo especifica o tipo de dado sendo passado (inteiro real etc) e detalhes de como seraacute feito o string (largura do campo diacutegitos decimais alinhamento etc)

2689

Strings ndash formataccedilatildeo expliacutecita

Estilo Fortran

IDL

IDLgt print1d0+1d-9 10000000

IDLgt print1d0+1d-9format=(E1610)10000000010E+00

IDLgt printx=1d0+1d-9format=(A0F1613)X= 10000000010000

Estilo C (ldquoprintfrdquo)

IDL

IDLgt printformat=(x=1610e)1d0+1d-9x=10000000010e+00

Python

In [20] print(x=1610e (1e0+1e-9))x=10000000010e+00

Nenhum formato expliacutecito (default)

2789

Strings - formatos tipo Fortran

(apenas o principal ver documentaccedilatildeo para detalhes)

Ex (IDL)

IDLgt printx=1d0+1d-9format=(A0F1613)X= 10000000010000

Tambeacutem haacute modificadores para especificar alinhamento (-) se deve haver (ou ser suprimido) avanccedilo para a pŕoxima linha posiccedilatildeo dentro do campo etc

Coacutedigo Significado Exemplo(s)

A String (A) (10A)

I Inteiro decimal (I) (10I)(-2I)

B Inteiro binaacuterio (B) (10B)

Z Inteiro hexadecimal (Z) (10Z)

O Inteiro octal (O) (10O)

F Real ponto fixo (F)(F52)

E D Real ponto flutuante (E)(D1610)

G Real ponto fixo ou flutuante de acordo com o valor (G)(G10)

ldquordquo String literal (ldquox=rdquoI10)

X Caracteres em branco (A10XI)

2889

Strings - formatos tipo C (printf)(apenas o principal ver documentaccedilatildeo para detalhes)String com campos a serem substituiacutedos por valores (passados adiante) marcados por coacutedigos com

Ex (Python)In [20] print(x=1610e (1e0+1e-9))x=10000000010e+00

Haacute modificadores para especificar alinhamento como preencher o espaccedilo que sobra (espaccedilos zeros etc) para imprimir o sinal + etc

Coacutedigo Significado (tipo) Exemplo(s)

di Inteiro decimal (int) d 5d +05d

u Inteiro decimal sem sinal (unsigned int) u 7u

fF Real em ponto fixo (double float) f 136f

eE Real em ponto flutuante (double float) e 1610e

gG Real em ponto fixo ou flutuante decidido pelo valor (double float)

g 73G

xX Inteiro sem sinal hexadecimal (unsigned int) x 10X

o Inteiro sem sinal octal (unsigned int) o 5o

s String (string) s 10s

c Caractere (char) c

p Ponteiro - estilo C - (void ) p

literal

2989

Strings - conversatildeo de strings para outros tipos

Para gerar dados a partir de strings datas identificadores pedaccedilos de nomes valores numeacutericos armazenados em strings

Tambeacutem sempre haacute conversotildees default para os tipos baacutesicos onde o intepretador programa faz o possiacutevel para entender o string como um valor daquele tipo

Tipicamente eacute feito por casts (funccedilotildees de conversatildeo) reads (de strings ou arquivos texto (arquivos texto satildeo strings)) construtores de objetos ou implicitamente

3089

Strings - conversatildeo de strings para outros tipos - impliacutecitas

Exs (IDL)

IDLgt helpfix([17 17 171 -17 9 8])ltExpressiongt INT = Array[5]

IDLgt printfix([17 17 171 -17 9 8]) 17 17 17 -17 9

IDLgt printdouble([17 17 171 -17 9 8]) 17000000 17000000 17100000 -17000000 90000000

IDLgt readfunitabcd

IDLgt a=0d0IDLgt b=00IDLgt c=0IDLgt reads171d0 189d0 -9abcIDLgt helpabcA DOUBLE = 17100000B FLOAT = 189000C INT = -9

Converte o conteuacutedo do string para os tipos das variaacuteveis abcd (explicado adiante)

3189

Strings - conversatildeo de strings para outros tipos

Quando o default natildeo eacute suficiente (ou quando escrevendo o conversor em uma classe) costuma ser possiacutevel o fazer com formatos semelhantes aos formatos para gerar strings Exs (IDL)

IDLgt a=0d0IDLgt b=00IDLgt c=0IDLgt reads171d0 something 189d0-9abc READS Input conversion error Unit 0 File ltstdingt Error occurred at $MAIN$ Execution halted at $MAIN$

Natildeo funcionou porque sozinho ele natildeo conseguiu saber o que fazer com o ldquosomethingrdquo Usando um formato especiacutefico

IDLgt reads171d0 something 189d0-9 abcformat=(D6111XD611XI)

IDLgt helpabcA DOUBLE = 17100000B FLOAT = 189000C INT = -9

Exemplos mais complicados adiante (arquivos texto)

Variaacuteveis tecircm que ser definidas para informar para que tipo seraacute feita a conversatildeo default

3289

Strings - processamento natildeo baacutesicoOperaccedilotildees importantes e muito necessaacuterias mas que natildeo satildeo suportadas em todas as linguagens bibliotecas padratildeo

Testes (ex IDL)

IDLgt str=[afitsaFITSafitsaabfitsabcfits]

IDLgt printstrmatch(strfits) 1 0 0 1 1

IDLgt printstrmatch(strfitsfold_case) 1 1 0 1 1

IDLgt printstrmatch(strfitsfold_case) 1 1 1 1 1

IDLgt printstrmatch(strfits) 1 0 0 0 0

IDLgt printstrmatch(strfits) 0 0 0 1 0

3389

Strings - processamento natildeo baacutesico

Operaccedilotildees importantes e muito necessaacuterias mas que natildeo satildeo suportadas em todas as linguagens bibliotecas padratildeo

Separaccedilatildeo de partes (Ex IDL)

IDLgt printstrsplit(2011- 131 -extract)format=(A)2011131

Processamento de nomes de arquivos diretoacuterios (Ex IDL)

IDLgt printfile_dirname(some_directoryanother_directorysome_filetxt)some_directoryanother_directory

IDLgt printfile_basename(some_directoryanother_directorysome_filetxt)some_filetxt

IDLgt printfile_basename(another_directorysome_filetxttxt)+_alteredtxtsome_file_alteredtxt

3489

Strings - processamento natildeo baacutesico

Codificaccedilotildees (Ex Python 3)

gtgtgt s=infinite money infinNeuro sign

gtgtgt print(s)infinite money infineuro

gtgtgt print(ascii(s))infinite money u221eu20ac

gtgtgt print(sencode(utf-8))binfinite money xe2x88x9exe2x82xac

3589

Strings - processamento natildeo baacutesico

Perl eacute a linguagem mais avanccedilada para processamento de strings tem suporte nativo a muitas outras operaccedilotildees a semacircntica da linguagem eacute voltada principalmente para processar strings expressotildees regulares (de vaacuterios tipos) natildeo satildeo strings fazem parte da semacircntica

Ex (sem o objetivo que seja compreensiacutevel apenas para indicar o estilo)

Ler um arquivo contendo campos com nomes separados de valores por ()

temperature 10008name some modelx_dimension 100y_dimension 100z_dimension 50()

Armazenado-o em um mapa O que pode ser feito com apenas

While (ltgt) Loop over input linesPut pre-colon text into $1 post-colon into $2 if (m (S+) (+) ) Use $1 as key $2 as value $file_data$1 = $2

3689

Expressotildees regulares - definiccedilatildeo

Expressotildees regulares (regular expressions regex) satildeo a mais poderosa ferramenta para fazer buscas e separar substrings

Regex satildeo uma linguagem com o uacutenico objetivo de especificar propriedades de strings

Implementadas em graus diferentes em todas as linguagens modernas e modernizadas facilita encontrar uma expressatildeo jaacute pronta pois satildeo quase iguais em qualquer linguagem

Estatildeo na biblioteca padratildeo em IDL Python R Perl

Em C++ e Java em bibliotecas comuns (Boost Jregex)

Para que servem

Uma expressatildeo regular especifica propriedades de strings

O interpretador de expressotildees regulares (regular expression engine) recebe a expressatildeo e o string a analisar e determina se o string corresponde (matches) agrave expressatildeo regular

Em alguns casos o interpretador pode tambeacutem informar que parte(s) do string corresponde(m) a que parte(s) da expressatildeo regular e realizar processamentos com estas partes

3789

Expressotildees regulares ndash exemplos de usos Separar partes de strings

Encontrar linhas em arquivos que tenham nomes valores e comentaacuterios e separar estes pedaccedilos

Escalar com comentaacuterio

SLITPA = 351979 Slit position angle

Array 1D sem comentaacuterio (se extendendo por vaacuterias linhas)

BAND_BIN_CENTER = (03505400358950036629003732200379490 0387900104598)

Escalares em diferentes formatos

Total Mechanical Luminosity 15310E+03resources_usedwalltime=005603

Pedaccedilos de nomes

6063 17836E-20 2456 T FeIX((3Pe)3d(2PE)4p_1Po-3s2_3p6_1Se)

Datas separando ano mecircs dia hora (em vaacuterios formatos diferentes)

DATE-OBS= 2006-12-18 universal date of observationDATE_TIME = 2010-07-19T161032START_TIME = 2006-182T225102850Z

3889

Expressotildees regulares ndash exemplos de usos

Separar partes de strings Separar partes de nomes de arquivos (por significarem algo como identificar o

conteuacutedo)

specdec18s0041fitsscamdec18i0054fits15_7_mts_hmpixselh_mr15sav15_7_mts_hwpixselh_mr15sav16_3_mts_hwpixselb_mr16savreadmodel5l_-1_000010000_10000_r05_030_08196_0100000_005000000_1000eps

Determinar se um string eacute um nuacutemero (inteiro real fixo flutuante)

Encontrar identificadores Exs nomes de cataacutelogos endereccedilos HTTPFTP endereccedilos de email

Separar campos em arquivos sendo lidos onde as linhas natildeo tecircm a mesma formataccedilatildeo algumas linhas com colunas separadas por espaccedilos outras por tabs outras por

siacutembolos ignorando linhas de comentaacuterios e linhas vazias

3989

Expressotildees regulares - usoEx (IDL) encontrar nomes de arquivos com algumas propriedades

IDLgt printfilesformat=(A)CM_1477475933_1_viscubCM_1477476864_1_ircubCM_1477476864_1_irgcubCM_1477476864_1_viscubCM_1477477826_1_ircubCM_1477477826_1_irgcubCM_1477477826_1_viscubmosaic2cub

IDLgt printstregex(files+irgcubboolean) 0 0 1 0 0 1 0 0

A expressatildeo regular eacute +irgcub Especifica uma ou mais ocorrecircncias seguidas (+) de qualquer caractere () seguido de uma ocorrecircncia de irgcub (o ponto vem precedido do caractere de

escape () para ser entendido literalmente como um ponto e natildeo como o seu significado especial (qualquer caractere)

Esta aplicaccedilatildeo do interpretador (stregex) retorna um valor Booleano (verdadeirofalso) para cada elemento do string passado (files) que informa se aquele elemento correspondia agravequela expressatildeo regular

Este eacute um exemplo artificial Seria mais faacutecil ter usado strmatch(filesirgcub)

4089

Expressotildees regulares - uso

Em casos como este tipicamente o resultado de stregex seria usado como filtro para selecionar apenas os elementos do array de strings que satisfazem agravequela expressatildeo regular

IDLgt w=where(stregex(files+irgcubboolean)null)IDLgt printfiles[w]format=(A)CM_1477476864_1_irgcubCM_1477477826_1_irgcub

Ex (IDL) Determinar que strings conteacutem uma data no formato yyyy-mm-dd

IDLgt strs=[201002012010-02-012010-2-1aaaa-mm-ddT2010-02-01J]IDLgt printstregex(strs[0-9]4-[0-9]2-[0-9]2boolean) 0 1 0 0 1

Esta expressatildeo regular especifica quatro repeticcedilotildees (4) de diacutegitos (caracteres na faixa [0-9]) seguido de um (-) seguido de duas repeticcedilotildees (2) de dois diacutegitos ([0-9]) seguido de um (-) seguido de duas repeticcedilotildees (2) de dois diacutegitos ([0-9])

Uma expressatildeo regular apenas um pouco mais elaborada poderia corresponder aos 3 formatos de data no array acima E poderia se impedir que a uacuteltima (com outros caracteres antes e depois da data) seja aceita

4189

Expressotildees regulares - regras - caracteres ldquonormaisrdquo

Uma expressatildeo regular usa caracteres ldquonormaisrdquo e especiais para especificar o que se vai procurar na ordem em que aparecem na expressatildeo

Se um caractere eacute normal (natildeo eacute um dos especiais mostrados adiante) ele especifica uma ocorrecircncia daquele caractere

Ex J eacute uma expressatildeo regular que corresponde a qualquer string onde ocorra J Jaacute JA soacute corresponde a strings que tenham JA dentro

Exs (IDL)

IDLgt strs=[JJJJJJaJAjaJa]

IDLgt printstregex(strsJboolean) 1 1 1 0 1

IDLgt printstregex(strsJAboolean) 0 0 1 0 0

4289

Expressotildees regulares - regras - caracteres especiaisCaracteres especiais tecircm outros significados Para significar literalmente aquele caractere deve ser escapado (escaped) com um

Siacutembolo significado exemplo Corresponde(m) Escape o caractere seguinte deve ser interpretado

literalmente natildeo como especial aa

Qualquer caractere ab ajb aab abb jafbc

+ Uma ou mais repeticcedilotildees do que vem agrave esquerda a+b ab aab bab baabh

() Subexpressatildeo para agrupar termos afetados por um caractere especial (como parecircnteses em notaccedilatildeo matemaacutetica)

(ab)+c abc ababc dabababcg

Zero ou mais repeticcedilotildees dos termos agrave esquerda ab abbaab caaabg

Zero ou uma repeticcedilatildeo dos termos agrave esquerda ab b ab cabd cbd

| Alternaccedilatildeo qualquer um dos dois agrave esquerda a|bc ac bc jacd jbcd

n Exatamente n repeticcedilotildees do termo agrave esquerda a2b aab daaabg

n1n2 De n1 a n2 repeticcedilotildees do termo agrave esquerda a12b ab aab aaab gaaabbd

^ Acircncora (no comeccedilo) nada agrave esquerda ^ab ab abb

$ Acircncora (no fim) nada agrave direita ab$ abaab

[] Conjunto de valores (explicado adiante)

4389

Expressotildees regulares - regras - conjuntos de valores

[] denota um conjunto de valores que pode conter

Uma lista de coisas que devem corresponder Ex [abc] signfica qualquer caractere no conjunto abc Correspondem a esta

expressatildeo abcabha

Uma lista de coisas que natildeo podem corresponder [^abc] significa qualquer coisa que natildeo seja a b ou c Correspondem a esta

expressatildeo d jgs gg

Faixas de valores [0-9] signfica qualquer diacutegito [0-9a-zA-Z] significa qualquer diacutegito ou letra

Classes de valores como algumas faixas e outros conjuntos ocorrem com muita frequumlecircncia haacute nomes

especiais para eles Estes (em IDL) vecircm entre [] ex [[digit] significa o mesmo que [0-9]

4489

Expressotildees regulares - regras - classes de valores

Classe signficado

alnum Caracteres alfanumeacutericos 0-9a-zA-Z

alpha Caracteres alfabeacuteticos a-zA-Z

cntrl Caracteres de controle ASCII (natildeo visiacuteveis coacutedigos 1 a 31 e 127)

digit Diacutegitos (decimais) 0-9

graph Caracteres visiacuteveis ASCII 33 a 126 (natildeo inclui o espaccedilo)

lower Letras minuacutesculas a-z

print Caracteres ldquoimprimiacuteveisrdquo (visiacuteveis e o espaccedilo) ASCII 32 a 126

punct Caracteres de pontuaccedilatildeo $amprsquo()+-lt=gt[]^_lsquo|~

space Os caracteres ldquoem brancordquo (blank) espaccedilo tab tab vertical CR LF (ASCII 32 e 9-13)

upper Letras maiuacutesculas A-Z

xdigit Diacutegitos hexadecimais 0-9A-Fa-f

lt Comeccedilo de palavra (palavra definida como sequumlecircncia de coisas natildeo space)

gt Fim de palavra (palavra definida como sequumlecircncia de coisas natildeo space)

Estas satildeo apenas as principais Algumas implementaccedilotildees tecircm muito mais (em particular nas linguagens que usam Unicode nativamente)

4589

Expressotildees regulares - exemplos

Determinar se strings satildeo nuacutemeros (Ex IDL)

IDLgt str=[9-18 875-812-45913E9-98d7a188d032f5]

Inteiros

IDLgt intexpr=^[-+][0-9]+$

IDLgt printstregex(strintexprboolean) 1 1 0 0 0 0 0 0 0 0

Ponto flutuante

IDLgt fpexpr=^[-+](([0-9][0-9]+)|([0-9]+[0-9]))([eEdD][-+][0-9]+)$

IDLgt printstregex(strfpexprboolean) 1 1 0 1 1 1 1 1 0 0

Sinal opcional

1 ou mais diacutegitos

Sinal opcional

0 ou mais diacutegitos opcionalmente seguidos de um ponto e 1 ou mais diacutegitos

1 ou mais diacutegitos opcionalmente seguidos de um ponto e 0 ou mais diacutegitos

ou Expoente opcional letra do expoente seguida de sinal opcional seguido de um ou mais diacutegitos

4689

Expressotildees regulares ndash extraccedilatildeo

Interpretadores de expressotildees regulares costumam oferecer mais que apenas testar se um string corresponde a uma expressatildeo

Em geral tambeacutem podem retornar que parte(s) do string corresponde(m) agrave expressatildeo

Ex (IDL) Determinar se um string conteacutem uma data incluindo os formatos

IDLgt dates=[2011-01-312011 1 3120110131something done on y2011m1d31 with something]

E extrair a data de dentro do string

IDLgt expr=[0-9]4[0-9]12[0-9]12

(4 diacutegitos)(qualquer separador)(1 a 2 diacutegitos)(qualquer separador)(1 a 2 diacutegitos)

IDLgt printstregex(datesexprextract)format=(A)2011-01-312011 1 31201101312011m1d31

Como agora separar ano mecircs e dia Com uma busca e uma extraccedilatildeo para cada Poderia ser mais eacute mais faacutecil com uma uacutenica expressatildeo regular

4789

Expressotildees regulares - aleacutem de apenas testes

Tambeacutem podem retornar que parte(s) do string correspondem agrave expressatildeo toda e agraves suas subexpressotildees (partes da expressatildeo delimitadas por parecircnteses)

Ex (IDL) Separar pedaccedilos de datas Neste caso para a expressatildeo ficar menor assumindo um formato simples (yyyy-mm-ddThhmmssfff) Mas poderia ser um formato mais livre como no exemplo anterior

IDLgt str=Stuff observed on 2011-01-31T123924983 with some instrumentIDLgt expr=([0-9]4)-([0-9]2)-([0-9]2)T([0-9]2)([0-9]2)([0-9]2[0-9]3)

(quatro diacutegitos)-(2 diacutegitos)-(2 diacutegitos)T(2 diacutegitos)(2 diacutegitos)(2 diacutegitos3 diacutegitos)

IDLgt pieces=stregex(strexprextractsubexpr)IDLgt printpiecesformat=(A)2011-01-31T12392498320110131123924983IDLgt d=julday(pieces[2]pieces[3]pieces[1]pieces[4]pieces[5]pieces[6])IDLgt printdformat=(F166) 2455593027372

Expressatildeo inteiraPrimeira subexpressatildeoSegunda subexpressatildeoTerceira subexpressatildeoQuarta subexpressatildeoQuinta subexpressatildeoSexta subexpressatildeo

4889

Expressotildees regulares - referecircncias httpxkcdcom208

Viacutedeos do Software Carpentry

httpsoftware-carpentryorg4_0regexp

4989

Arquivos

Quase todo programa precisa armazenar dados em arquivos

Podem ser pequenos arquivos de paracircmetros ou enormes arquivos de dados produzidos ou a processar

Apesar do sugerido pela praacutetica comum arquivos texto natildeo satildeo sempre a melhor escolha para armazenar dados - e haacute muitas formas diferentes de os usar

Qual eacute a melhor escolha

Assim como para linguagens ou contecirciners natildeo existe ldquoo melhor formatordquo Cada um tem suas vantagens e desvantagens

Dados diferentes (mesmo se usados pelos mesmos programas) em geral se adequam melhor a formatos diferentes

5089

Arquivos - texto X binaacuterios

Em qualquer formato arquivos satildeo armazenados como diacutegitos binaacuterios

Mas haacute duas formas principais como eles podem ser codificados

Arquivos baseados em texto (text files)

Dados satildeo transformados em caracteres usando alguma formataccedilatildeo (mesmo se impliacutecita) e escritos com alguma codificaccedilatildeo de texto (comumente mas natildeo necessariamente ASCII)

Um arquivo texto eacute um ou mais strings As mesmas conversotildees tecircm que ser feitas depara outros tipos

Arquivos ldquobinaacuteriosrdquo (binary files)

Embora todo arquivo seja binaacuterio este nome costuma ser usado soacute para aqueles em que os dados natildeo estatildeo na forma de texto

Com frequumlecircncia (nem sempre) os dados satildeo gravados de forma idecircntica a como satildeo armazenados na memoacuteria

Muitos formatos usam uma mistura de partes em texto e partes binaacuterias

Um cabeccedilalho (header) de texto que daacute informaccedilotildees (metadados) sobre os dados armazenados na parte binaacuteria que vem depois

O cabeccedilalho conteacutem em especial informaccedilotildees sobre como ler os dados binaacuterios

5189

Arquivos - texto X binaacuterios

Vantagens de arquivos texto

Legiacuteveis por pessoas (human readable)

Podem ser auto-suficientes todo o necessaacuterio para os ler e entender o que conteacutem pode ser obtido olhando o arquivo

Satildeo os menos especiacuteficos a linguagens software normalmente satildeo escritos em ASCII ou Unicode e sempre haacute algum suporte a ler escrever texto em linguagens software

Haacute alguns formatos padratildeo para texto (exs CSV XML) que satildeo suportados em muitas plataformas diferentes

5289

Arquivos - texto X binaacuterios

Vantagens de arquivos binaacuterios

Em geral natildeo haacute conversotildees entre o os dados como armazenados na memoacuteria O que torna o armazenamento mais eficiente e sem alteraccedilotildees nos valores

A maior parte dos formatos padronizados eacute binaacuteria Exs FITS cube CDF NetCDF HDF HDF5 JPEG JPEG2000 TIFF GeoTIFF MPEG etc

Eacute mais comum que haja bibliotecas prontas (ateacute de alto niacutevel) para consulta leitura e gravaccedilatildeo

Os formatos melhor desenhados satildeo autodocumentados (em texto ou binaacuterio) para os ler natildeo eacute necessaacuterio conhecimento preacutevio sobre como os dados foram armazenados

Toda linguagem plataforma costuma ter seu formato binaacuterio mais nativo que costuma ser o mais faacutecil para leitura gravaccedilatildeo Em particular nas de alto niacutevel que tecircm formatos autodocumentados (especialmente

em IDL R Python Java)

Muitos formatos tecircm opccedilatildeo de compressatildeo dos dados

5389

Arquivos - proprietaacuterios X padratildeo

Independente da escolha texto binaacuterio programas devem escolher entre usar um formato proacuteprio ou um formato padronizado

A principal vantagem de formatos proacuteprios eacute que satildeo definidos da forma mais conveniente para a aplicaccedilatildeo que os usa simplificando leitura e gravaccedilatildeo e potencialmente otimizando recursos (acesso ao disco tamanho do arquivo etc)

A principal desvantagem de formatos proacuteprios eacute ser necessaacuterio escrever todo o coacutedigo para os ler gravar

Pode dar mais trabalho que usar um formato geneacuterico que natildeo seja exatamente o que melhor se encaixa na aplicaccedilatildeo

O coacutedigo para processar o formato em geral vai ser menos completo e conveniente de usar que o de um formato bem estabelecido usado por muitos outros em muitos ambientes

Cada novo software que for usar estes arquivos vai precisar compartilhar do mesmo coacutedigo ou precisar de coacutedigo novo (em particular se em outra linguagem) para ler gravar naquele formato

Eacute necessaacuterio documentar o formato e decidir sobre como ele seraacute definido

Se outros jaacute colocaram muito trabalho desenvolvendo bons formatos padratildeo bem suportados em muitos ambientes por que ter o trabalho de reinventar (e reprogramar redocumentar e retestar) a roda

5489

Arquivos - padrotildees comuns em astronomia (exs adiante)

Texto

CSV Comma-separated values - bem suportado por muitos softwares

ldquoColunas fixasrdquo Natildeo eacute um padratildeo bem definido mas eacute praacutetica comum para tabelas (2D)

XML Extensible Markup Language - O padratildeo texto mais flexiacutevel de grande uso em programaccedilatildeo geral para armazenar qualquer coisa com frequumlecircncia de forma hieraacuterquica Bem suportado por linguagens modernas (e modernizadas) e bibliotecas das principais

linguagens gerais Alta complexidade o torna trabalhoso de usar

5589

Arquivos - padrotildees comuns em astronomia (exs adiante)Binaacuterios

FITS Flexible Image Transport System - o mais comum para observaccedilotildees astronocircmicas Conteacutem os dados (em geral arrays 1D 2D ou 3D) e documentaccedilatildeo (nos cabeccedilalhos) sobre a origem e caracteriacutesticas dos dados Tambeacutem usado para armazenar tabelas de dados quaisquer mesmo que natildeo sejam observaccedilotildees (especialmente pelo STSCI) Variam muito em qualidade de documentaccedilatildeo

NetCDF Network Common Data Form - evoluccedilatildeo do CDF autodocumentado eacute comum e bem suportado para vaacuterios arrays de dados

HDF5 Hierarchical Data Format ndash autodocumentado comum e bem suportado permitindo aleacutem de simples arrays estruturas (eacute um formato hieraacuterquico)

Formatos de imagens JPEG JPEG2000 TIFF GeoTIFF etc - voltados para arrays 2D3D de inteiros ou (em alguns casos) reais com ou sem compressatildeo JPEG2000 tem caracteriacutesticas mais avanccediladas como imagens multiresoluccedilatildeo

Formatos vetoriais PS EPS DXF SHP SVG - variados niacuteveis de suporte a armazenamento de vetores e formas em 2D ou 3D

ISIS Cube semelhante em caracteriacutesticas ao FITS mais usado em sensoriamento remoto geociecircncias e ciecircncias planetaacuterias em geral para observaccedilotildees 1D 2D ou 3D

Formatos nativos de linguagens todo o trabalho de leitura e gravaccedilatildeo eacute feito automagicamente pela biblioteca padratildeo em IDL R Python Java

5689

Arquivos texto - newlines

Apesar do que possa parecer arquivos texto natildeo tecircm intrinsecamente vaacuterias linhas Arquivos texto satildeo soacute uma sequumlecircncia 1D de caracteres em alguma codificaccedilatildeo Separaccedilatildeo em linhas (equivalente a interpretar o arquivo como 2D em linhas e colunas) eacute

especificada por convenccedilotildees Natildeo haacute apenas uma convenccedilatildeo para o fim de linhas

A mais primitiva convenccedilatildeo eacute separaccedilatildeo nenhuma estipula-se que linhas tenham um nuacutemero fixo N de caracteres e cabe ao software que lecirc o arquivo entender que uma linha nova ocorre regularmente a cada N caracteres

Eacute a forma menos portaacutevel e mais inconveniente eacute necessaacuterio o conhecimento preacutevio (ou por inspeccedilatildeo do arquivo) de quantos caracteres haacute por linha

A maior parte dos editores de texto natildeo vai saber separar linhas desta forma (por falta deste conhecimento preacutevio) Exemplo (de um FITS real)

SIMPLE = T Fits standard BITPIX = 16 Bits per pixel NAXIS = 0 Number of axes EXTEND = T File may contain extensions

O que com as linhas quebradas nos lugares certos seria

SIMPLE = T Fits standard BITPIX = 16 Bits per pixel NAXIS = 0 Number of axes EXTEND = T File may contain extensions

5789

Arquivos texto - newlines

A forma mais comum de especificar linhas eacute com um marcador do final de linha (newline)

Eacute um caractere especial natildeo normalmente presente no texto que serve para marcar fim de linhas

Mas natildeo haacute soacute um padratildeo de newline Os mais comuns

LF (Line Feed ASCII 10) ndash Unix Linux Mac OS X

CR - (Carriage Return ASCII 13) - Mac OS lt10

CR+LF (CR seguido de LF) - Windows DOS

Eacute o motivo de o Notepad (Windows) natildeo entender as quebras de linha de arquivos escritos com o formato nativo de Linux o arquivo soacute tem LF enquanto o editor espera CR+LF

Alguns sistemas (strings em vaacuterias linguagens por exemplo) usam o coacutedigo de escape n para indicar newline que eacute codificado de acordo com o padratildeo sendo usado

Em geral bibliotecas de leitura e gravaccedilatildeo de arquivos usam (default pelo menos) o newline nativo do sistema em que satildeo usadas

Programas de conversatildeo entre os sistemas satildeo comuns (ex dos2unix)

O Wordpad identifica se for usado soacute LF e quebra as linhas de acordo

5889

Arquivos - texto - CSV

Comma-separated values

O formato mais padronizado para tabelas (arrays 2D) em texto (frequentemente mas natildeo necessariamente ASCII)

Bem suportado por bibliotecas padratildeo de linguagens e outros softwares (Excel Calc Origin Google Docs etc)

Conteacutem Linhas de cabeccedilalho (opcionais mas recomendadas) linhas com qualquer texto geral

descrevendo o arquivo e em geral uma linha de tiacutetulo para as colunas da tabela Uma (apenas uma) tabela onde todas as linhas tecircm o mesmo nuacutemero de colunas

Colunas separadas por viacutergulas (opcionalmente pode ser outro separador) Linhas terminadas por newline (qualquer que seja) Strings delimitados por ldquo ldquo

Ex

NAMECALMPOSFILNAMEECHLPOSDISPPOSTARGNAMEPOSDIRCLASSMJD-OBSITIMECOADDSdec18s00010NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001dec18s00020NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001dec18s00120NIRSPEC-5-AO635800364500itan140NIRSPEC-5-AOp2 TITAN5408763000001dec18s00140NIRSPEC-5-AO626300364500itan140NIRSPEC-5-AOp1 TITAN5408763000001dec18s00151NIRSPEC-5-AO626300364500itan140NIRSPEC-5-AOp1ARC5408764000001dec18s00160NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001

Natildeo eacute necessaacuterio que as colunas tenham largura constante

Cabeccedilalho

5989

Arquivos - texto - CSVHaacute amplo suporte a leitura e gravaccedilatildeo de CSV sem precisar recorrer a procedimentos de baixo niacutevel

Podem ser diretamente importados em Excel Calc Origin Google Docs ou lido facilmente com bibliotecas padratildeo comuns Ex (IDL)

IDLgt c=read_csv(filesearch_scamcsvheader=h)IDLgt printhNAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS

IDLgt helpc Structure ltc8bca508gt 11 tags length=5256 data length=5248 refs=1 FIELD01 STRING Array[41] FIELD02 LONG Array[41] FIELD03 STRING Array[41] FIELD04 DOUBLE Array[41] FIELD05 DOUBLE Array[41] FIELD06 STRING Array[41] FIELD07 STRING Array[41] FIELD08 STRING Array[41] FIELD09 STRING Array[41] FIELD10 DOUBLE Array[41] FIELD11 LONG Array[41]

IDLgt printcfield01[03]dec18s0001 dec18s0002 dec18s0003 dec18s0004

IDLgt printcfield03[03]NIRSPEC-5-AO NIRSPEC-5-AO NIRSPEC-5-AO NIRSPEC-5-AO

6089

Arquivos - texto - CSVEx (IDL) Criaccedilatildeo de um CSV com uma tabela de valores

Criaccedilatildeo de 3 arrays 1D (12 elementos) um para cada coluna

IDLgt x=dindgen(3)IDLgt y=dindgen(4)IDLgt xx=reform(rebin(x34)12)IDLgt yy=reform(rebin(reform(y14)34)12)IDLgt f=xx+yy10IDLgt helpxxyyfXX DOUBLE = Array[12]YY DOUBLE = Array[12]F DOUBLE = Array[12]

Escrita do arquivo

IDLgt write_csvexamplecsvxxyyfheader=[XYX+10Y]

ResultadoXYX+10Y000000000000000000000000100000000000000010000000200000000000000020000000000000001000000010000000100000001000000011000000()

6189

Arquivos - texto - ldquoColunas regularesrdquoFixed column width

Natildeo eacute exatamente um padratildeo Eacute uma praacutetica comum

Armazena uma tabela (array 2D) de forma regular simples de ser interpretada e lida

Costumam ter linha(s) de cabeccedilalho descrevendo o conteuacutedo do arquivo em geral com uma linha para os nomes das colunas

As demais linhas conteacutem os dados sempre ocupando a mesma largura por coluna e escritos no mesmo formato em cada coluna

Costumam ser simples de ler inclusive interativamente (exs Excel Calc Origin read_ascii)

Ex (IDL) Uma simples tabela soacute de nuacutemeros

wavl CH4=33 wavl CH4=25 wavl CH4=10 wavl CH4=08 wavl CH4=05 wavl CH4=026 wavl CH4=02 477330000 0090130 477330000 0091110 477330000 0089250 477330000 0087000 477330000 0087140 477330000 0090080 477330000 0088110 480040000 0090930 480040000 0091930 480040000 0090160 480040000 0087930 480040000 0088110 480040000 0090950 480040000 0089090 482750000 0091710 482750000 0092730 482750000 0091060 482750000 0088850 482750000 0089080 482750000 0091810 482750000 0090060 485450000 0092530 485450000 0093570 485450000 0092000 485450000 0089810 485450000 0090100 485450000 0092730 485450000 0091090

IDLgt a=read_ascii(specs_27s_ntxtdata_start=1header=header)IDLgt printheader wavl CH4=33 wavl CH4=25 wavl CH4=10 wavl CH4=08 wavl CH4=05 wavl CH4=026 wavl CH4=02 IDLgt helpa Structure ltd423c9a8gt 1 tags length=224 data length=224 refs=1 FIELD01 FLOAT Array[14 4]

6289

Arquivos - texto - ldquoColunas regularesrdquoJaacute um arquivo um pouco mais difiacutecil de ler

NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS dec18s0001 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0002 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0003 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 FLAT 5408757812500 460000 5 dec18s0004 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 DARK 5408757812500 460000 5

Por ter colunas de tipos diferentes (strings inteiros reais) natildeo eacute possiacutevel o ler em um simples array Mas eacute faacutecil o colocar em uma estrutura de arrays onde cada campo eacute uma coluna

Especificando interativamente como interpretar as linhasIDLgt templ=ascii_template(filesearch_scamtxt)

Nome do campo (default mostrado)

Tipo do campo (identificado automaticamente)

Posiccedilatildeo (caracter) do comeccedilo (identificada automaticamente)

Linha de exemplo para verificar as colunas

6389

Arquivos - texto - ldquoColunas regularesrdquoDepois de feito o template o arquivo pode ser lido com apenas

IDLgt a=read_ascii(filesearch_scamtxttemplate=templ)IDLgt helpa Structure ltd4ec4608gt 11 tags length=416 data length=416 refs=1 FIELD01 STRING Array[4] FIELD02 LONG Array[4] FIELD03 STRING Array[4] FIELD04 FLOAT Array[4] FIELD05 FLOAT Array[4] FIELD06 STRING Array[4] FIELD07 STRING Array[4] FIELD08 STRING Array[4] FIELD09 FLOAT Array[4] FIELD10 FLOAT Array[4] FIELD11 LONG Array[4]IDLgt printafield01dec18s0001 dec18s0002 dec18s0003 dec18s0004IDLgt printafield04 626300 626300 626300 626300

O template (uma estrutura contendo dados sobre como ler o arquivo) pode ser usado para outros arquivos no mesmo formato No lugar de ter sido criado interativamente poderia ter sido lido de algum arquivo Poderia ter especificado nomes para os campos que seriam mais amigaacuteveis que coias como FIELD11

6489

Arquivos - texto - XML

Extensible Markup Language

Admite grande flexibilidade e por isso pode ter alta complexidade

Valores satildeo colocados dentro de uma estrutura em hieraacuterquica (em uma aacutervore) com os noacutes identificados pelos seus nomes (chaves)

Largamente usado em muitas aacutereas para armazenar conjuntos arbitraacuterios de quaisquer estruturas de dados

A maioria das aplicaccedilotildees usa um formato que eacute um subconjunto do XML especificado por um Schema comumente em um arquivo XML DTD (Document Type Definition)

6589

Arquivos - texto ndash XML ndash exemplos de usos

Armazenamento de dados de aplicaccedilotildees web (comum para exportar importar dados MediaWiki DokuWiki WordPress ADS Lattes etc)

Documentos Office (docx pptx xlsx) OpenOffice (odt opd ods)

Como versotildees de outros formatos FITSML XDF

ldquoScientific Dataset XML NASAs Astronomical Data Center (ADC) sponsors a number of research projects that

use XML for scientific data representation The XML activities at the ADC are sponsored and supported by the NASA Office of Space Science Applied Information Systems Research Program (AISRP)rdquo - httpxmlcoverpagesorgnasa-adchtml

Astronomical Instrument Markup Language (AIML)

SVG ndash Scalable Vector Graphics

Muitas de outras aplicaccedilotildees listadas em httpxmlcoverpagesorgxmlhtmlapplications

6689

Arquivos - texto ndash XML - exemploltxml version=10 gtltDOCTYPE Xdmf SYSTEM Xdmfdtd []gtltXdmf xmlnsxi=httpwwww3org2001XInclude Version=20gt ltDomaingt lt-- Example of Basic Topologies --gt ltInformation Name=Descriptiongt Example of a Polyvertex Topology ltInformationgt ltGrid Name=Polyvertex GridType=Uniformgt ltTopology TopologyType=Polyvertex Dimensions=3 NodesPerElement=3gt ltDataItem Format=XML Dimensions=3 3 NumberType=Floatgt 0 1 2 4 5 6 8 9 10 ltDataItemgt ltTopologygt ltGeometry Type=XYZgt ltDataItem Format=XML Dimensions=4 4 3gt 00 00 00 10 00 00()Que mostra que a interpretaccedilatildeo (parsing) de XML eacute em geral complexa

6789

Arquivos - texto - XML

Haacute muitas bibliotecas de alto niacutevel para fazer o processamento (parsing) e entregar os dados em uma estrutura conveniente

A complexidade em processar XML estaacute em decidir o que fazer com os dados jaacute que os arquivos podem ser muito complexos

As APIs (Application Programming Interfaces) mais comuns para processar XML que satildeo implementadas em muitas linguagens

DOM (Document Object Model) ndash manteacutem todo o conteuacutedo do em uma estrutura de dados (em geral uma aacutervore) em uma variaacutevel (em geral um objeto) Esta pode ser consultada para obter os valores de interesse para os alterar e usada para escrever um arquivo

SAX (Simple API for XML) ndash Interpretador (parser) por objetos O usuaacuterio escreve uma classe herdando da classe SAX provendo os meacutetodos que vatildeo processar os campos agrave medida em que estes satildeo lidos

6889

Arquivos - binaacuterios - FITSFlexible Image Transport System

O formato mais comum para observaccedilotildees astronocircmicas Tambeacutem usado para armazenar quaisquer dados mesmo natildeo relacionados a observaccedilotildees (especialmente tabelas como eacute praacutetica do STSCI)

Conteacutem um (ou mais) cabeccedilalho(s) de texto com metadados (informaccedilotildees sobre os dados como caracteriacutesticas (necessaacuterias para os ler) origem condiccedilotildees em que foram obtidos processamento realizado etc)

SIMPLE = T image conforms to FITS standard BITPIX = 32 bits per data value NAXIS = 2 number of axes NAXIS1 = 1024 NAXIS2 = 1024 BSCALE = 100000 Scaling factor BZERO = 000000 Scaling zero-point TELESCOP= Keck II Telescope SLITNAME= 0041x226 Slit Name SLITPA = 351979 Slit position angle SLITX = 131500 X pixel of the center of the slit LST = 12010446 local apparent sidereal time (()

Depois do cabeccedilalho haacute uma (ou mais) seccedilatildeo(otildees) de dados binaacuterios Costuma(m) ser array(s) 1D (espectros) 2D (imagens) ou 3D (ldquocubos de dadosrdquo)

De inteiros ou reais inteiros satildeo comuns em contagens de instrumentos reais para valores derivados (fluxos intensidades etc)

6989

Arquivos - binaacuterios - FITSNormalmente FITS satildeo lidos escritos por bibliotecas prontas de (relativamente) alto niacutevel usuaacuterio natildeo tem que saber como os dados satildeo armazenados no arquivo nem como os ler escrever Ex (IDL com a biblioteca idlastro)

IDLgt fits_info2dspectrumfits2dspectrumfits has 3 extensionsPrimary header 288 recordsNo dataExtension 1 -- SCI Header 144 records IMAGE ( 1201 1201 )Extension 2 -- ERR Header 72 records IMAGE ( 1201 1201 )Extension 3 -- DQ Header 72 records IMAGE ( 1201 1201 )

IDLgt mydata=readfits(2dspectrumfitsexten_no=1myheader) READFITS Reading FITS extension of type IMAGE READFITS Now reading 1201 by 1201 array

IDLgt extastmyheadermyastIDLgt sz=size(mydatadimensions)IDLgt xy2ad[1sz[0]][1sz[1]]myastcorners_acorners_dIDLgt printcorners_aCorners of the data array from file 2dspectrumfits are at 14487480 33063480

IDLgt printcorners_d -00041264444 00041402222

Obteacutem os dados de coordenadas (WCS) do header

Coloca os dados no array (2D de floats) mydata e o header no array (1D de strings) myheader

Calcula as coordenadas das quinas da imagem atraveacutes do WCS

Provecirc informaccedilotildees sobre o arquivo

7089

Arquivos - binaacuterios - ISIS Cube

Formatos como FITS se adequam muito a ter uma interface de mais alto niacutevel por objetos

Tambeacutem para dados em tabelas FITS muito mais trabalhosos de ler em baixo niacutevel que se adequam muito mais a mapas ou estruturas

Exemplo (de um formato semelhante a FITS ISIS cube)

O objeto ao ser criado lecirc todo o arquivo

cube=pp_editablecube(CM_1553510065_1_ircub)

Meacutetodos fornecem os dados desejados para obter quando necessaacuterio os dados de interesse

Find out the names of the backplanesprintcubegetproperty(backnames)Get the start time of the cubeprintcubegetfromheader(START_TIME)2007-084T100057286Z

Valores no cabeccedilalho podem ser convenientemente fornecidos como um mapa

header=cubeheader_as_hash()printheader[START_TIME]2007-084T100057286Z

7189

Arquivos - binaacuterios ndash ISIS Cube

Os dados satildeo fornecidos como arraysMake a contour plot of the latitudesc=contour(cubegetsuffixbyname(LATITUDE))Get the band with wavelength nearest to 21 (in the units used in the cube)selband=cubegetbandbywavelength(21wavelengths=selwavs)

Interfaces por overload tornam o acesso ainda mais conveniente

selband=cube[21]

selwavs=cube[21]

Retorna um array com a banda de comprimento de onda mais proacuteximo de 21 (microm)

Retorna o comprimento de onda mais proacuteximo de 21 (microm) da banda retornada acima

7289

Arquivos - binaacuterios ndash ISIS Cube Alteraccedilotildees feitas ao conteuacutedo satildeo automaticamente refletidas em todos os

lugares (cabeccedilalho em particular) afetados mantendo o objeto vaacutelido que pode depois ser gravado em um novo arquivo

IDLgt printcubelinescubesamplescubebands 64 64 256

IDLgt helpcubecoreltExpressiongt FLOAT = Array[64 64 256]

IDLgt cubecore=dblarr(100100256)

A linha acima natildeo eacute uma atribuiccedilatildeo eacute uma invocaccedilatildeo de meacutetodo Eacute equivalente acubesetpropertycore=dblarr(100100256)

Eacute o trabalho da funccedilatildeo setproperty decidir se a propriedade passada (core) faz sentido e se fizer fazer todo o trabalho necessaacuterio a esta mudanccedila Para o usuaacuterio eacute tudo automaacutetico e os dados da classe satildeo vaacutelidos o tempo todo

IDLgt helpcubecoreltExpressiongt DOUBLE = Array[100 100 256]

IDLgt printcubelinescubesamplescubebands 100 100 256

IDLgt cubesaveCM_1553510065_1_ir_editedcub

7389

Arquivos - binaacuterios ndash NetCDF e HDF5

Network Common Data Form e Hierarchical Data Format

Os dois uacutenicos formatos bem estabelecidos para dados cientiacuteficos geneacutericos

Armazenam dados como vaacuterias variaacuteveis e seus metadados Para cada variaacutevel haacute (ou pode haver) os metadados

Nome Dimensotildees (do array) Unidades Comentaacuterios

Ambos permitem arrays multidimensionais

Apenas HDF5 permite estruturas (daiacute vem a hierarquia)

Autodocumentados qualquer software que saiba ler um destes formatos lecirc qualquer arquivo sem precisar de conhecimento preacutevio sobre como o arquivo foi gerado

Muito bem suportados em bibliotecas padratildeo e natildeo padratildeo em softwares interativos e visualizadores (inclusive plugins para navegadores)

httpwwwunidataucaredusoftwarenetcdf httpenwikipediaorgwikiHdf5

NetCDF eacute mais simples de usar por natildeo ter hierarquia dando menos trabalho para ler e escrever dados Se hierarquia natildeo eacute necessaacuteria eacute mais conveniente de usar que HDF5

7489

Arquivos - binaacuterios - NetCDF e HDF5Haacute tambeacutem o formato CDL uma versatildeo ASCII do NetCDF A biblioteca padratildeo do NetCDF inclui conversores entre estes formatos

$ ncdump -h refspec_g01_0ncnetcdf refspec_g01_0 dimensions nlay = 51 nwn = 400 nleg = 33 numu = 2 nlev = 52 nphi = 3 ngas = 2 nwnc = 1 scal = 1 v3 = 3 dnl = 1 nk = 1 tdisr = UNLIMITED (0 currently) na = 16

variables float alb(nwn) float z(nlay) float t(nlay) float p(nlay) float wl(nwn) float iof(nwn) float mtau(nwn) float htau(nwn) float hctaus(nwn) float gtau(nwn) float outcos(scal) float phi(nleg) float phic(scal) float umu(numu) float flux(v3 nwn nlev) float mix(nlay ngas) float c(nlay) float psat(nlay) float ga(nwnc) float wlc(nwnc) float inc(scal) int dm(scal) int ord(scal) float fbeam(scal) float wn(nwn) float tautot(nwn nlay) float htaus(nwn nlay) float htaux(nwn nlay) float taug(nwn nlay) float phase(nwn nlay nleg) float ssa(nwn nlay) float uu(nwn nphi nlev numu) float u0u(nwn nlev numu) float tray(nwn nlay) float gtauo(tdisr nwn nlay)

Haacute 14 variaacuteveis usadas como dimensotildees para as 35 variaacuteveis que satildeo arrays

Ex alb(nwn) indica que alb eacute um array 1D de nwn elementos

nwn estaacute armazenado como uma das dimensotildees e eacute 400 portanto alb tem 400 elementos

Parte do conteuacutedo de um arquivo NetCDF em formato CDL (gerado pelo programa ncdump)

7589

Arquivos - binaacuterios - NetCDF e HDF5Conteuacutedo daquele arquivo visualizado com o ncview (acompanha a biblioteca NetCDF padratildeo)

7689

Arquivos - binaacuterios - NetCDF e HDF5O conteuacutedo de todo o arquivo pode ser lido facilmente com as bibliotecas disponiacuteveis e armazenado em contecirciners convenientes Usando um objeto que gera um resultado um pouco mais conveniente

IDLgt h=pp_readncdf(refspec_g01_0nchash)IDLgt printhvar_dims ltObjHeapVar229(HASH)gtvars ltObjHeapVar152(HASH)gtdims ltObjHeapVar118(HASH)gt

IDLgt printh[vars]T 173203 175459 175848 176001 175975 Z 431869 418858 406067 393403 380464 FLUX 300660 145536 0705180 0341669 0165532 PHASE 100000 0779034 0660858 0542052 0449983 TAUTOT0694377 0693420 0693474 0693540 0693636()

IDLgt help(h[vars])[TAUTOT]ltExpressiongt FLOAT = Array[51 400]

IDLgt print(h[var_dims])[TAUTOT]NLAY NWN

IDLgt print(h[dims])[(h[var_dims])[TAUTOT]]NLAY 51NWN 400

7789

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5)

Visualizaccedilatildeo da variaacutevel selecionada

Metadados e alguns valores da variaacutevel selecionada

Variaacutevel a ser criada com o conteuacutedo desta variaacutevel do arquivo

Hierarquia das variaacuteveis do arquivo

7889

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5) Imported variable az

IDLgt helpaz Structure ltd5723f38gt 13 tags length=448 data length=444 refs=1 _NAME STRING az _ICONTYPE STRING binary _TYPE STRING DATASET _FILE STRING INTENSI_test_409OUTh5 _PATH STRING _DATA DOUBLE Array[38] _NDIMENSIONS LONG 1 _DIMENSIONS ULONG64 Array[1] _NELEMENTS ULONG64 38 _DATATYPE STRING H5T_FLOAT _STORAGESIZE ULONG 8 _PRECISION LONG 64 _SIGN STRING

IDLgt printaz_data 00000000 10000000 20000000 30000000 40000000 50000000 60000000 80000000 ()

7989

Arquivos - binaacuterios - imagens

JPEG JPEG200 TIFF GeoTIFF etc

Os formatos comuns de imagens satildeo bem suportados em muacuteltiplas plataformas para uso dentro de programas e interativamente

Alguns formatos tecircm opccedilatildeo de compressatildeo com perda eou sem perda

Armazenam imagens como arrays 2D ou 3D (3D frequumlentemente limitado a 3 ou 4 em uma das dimensotildees uma imagem em 3 ou 4 bandas) de inteiros ou (em alguns formatos) reais

Alguns formatos permitem armazenar metadados para caracterizar as imagens armazenadas

JPEG2000 e GeoTIFF (um subconjunto de TIFF) comuns em astronomia e aacutereas proacuteximas

8089

Arquivos - binaacuterios ndash imagens ndash exemplo (IDL)IDLgt printquery_tiff(issmap_2009tiffinfogeotiff=geo) 1

IDLgt helpinfo Structure ltd4eca4b8gt 18 tags length=144 data length=132 refs=1 CHANNELS LONG 4 DIMENSIONS LONG Array[2] IMAGE_INDEX LONG 0 NUM_IMAGES LONG 1 PIXEL_TYPE INT 1 TYPE STRING TIFF BITS_PER_SAMPLE LONG 8 POSITION FLOAT Array[2] RESOLUTION FLOAT Array[2] UNITS LONG 2 TILE_SIZE LONG Array[2] DESCRIPTION STRING ISS (2009) DATE_TIME STRING 20100218 012436()

IDLgt helpgeo Structure ltd4efa1b8gt 10 tags length=264 data length=262 refs=1 MODELPIXELSCALETAG DOUBLE Array[3] MODELTIEPOINTTAG DOUBLE Array[6 4] GEOGRAPHICTYPEGEOKEY INT 4035 GEOGSEMIMAJORAXISGEOKEY DOUBLE 25750000 GEOGSEMIMINORAXISGEOKEY DOUBLE 25750000()

IDLgt myimage=read_tiff(issmap_2009tiff) Lecirc a imagem para o array myimage

Obteacutem informaccedilotildees sobre o arquivo

8189

Arquivos - binaacuterios ndash formatos nativosLinguagens como IDL R Python Java tecircm seu formato nativo binaacuterio acessado em alto niacutevel Basta mandar salvar ler variaacuteveis no do arquivo a biblioteca padratildeo automagicamente faz todo o trabalho de decidir como gravar ler os dados

Conveniente de usar na proacutepria linguagem Mas raramente existem bibliotecas para ler gravar o formato nativo de uma linguagem a partir de outra Ex (IDL)

IDLgt savefile=2dspectrumsavmydatamyheadercorners_dcorners_averbosecompress SAVE Portable (XDR) compressed SAVERESTORE file SAVE Saved variable MYDATA SAVE Saved variable MYHEADER()

Pode ser lido com apenas (haacute formas mais elaboradas)

IDLgt restore2dspectrumsavverbose RESTORE Portable (XDR) compressed SAVERESTORE file RESTORE Save file written by ltunknowngtltunknowngt Thu Jan 27 191422 2011 RESTORE IDL version 801 (linux x86_64) RESTORE Restored variable MYDATA RESTORE Restored variable MYHEADER()

IDLgt helpmydatamyheadercorners_dcorners_aMYDATA FLOAT = Array[1201 1201]MYHEADER STRING = Array[144]()

8289

Arquivos - processamento em baixo niacutevel

Nem sempre um formato padratildeo eacute a melhor escolha para o problema

Nem sempre haacute escolha (pode-se ter que trabalhar com arquivos que jaacute foram escritos em algum formato proprietaacuterio)

Agraves vezes o formato eacute padratildeo mas natildeo haacute bom suporte a ele disponiacutevel

Em todos estes casos eacute necessaacuterio escrever rotinas em baixo niacutevel que vatildeo ler processar diretamente o conteuacutedo do arquivo

Preferencialmente criando interfaces de alto niacutevel para o programa que vai as usar

8389

Arquivos - processamento em baixo niacutevel - texto

Tomando o exemplo anterior onde as colunas eram de diferentes tipos

NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS dec18s0001 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0002 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0003 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 FLAT 5408757812500 460000 5 dec18s0004 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 DARK 5408757812500 460000 5

A forma mais simples de o ler diretamente eacute definir uma estrutura para receber cada linha e um array destas estruturas para receber todo o arquivo Ex (IDL)

IDLgt record=namecalmpos0filnameechlpos0d0disppos0d0targnameposdirclassmjd_obsitime0d0coadds0IDLgt nlines=file_lines(filesearch_scamtxt)IDLgt mydata=replicate(recordnlines-1)IDLgt header=

Depois de definidas as variaacuteveis que vatildeo receber os dados o arquivo pode ser lido

IDLgt openrunitfilesearch_scamtxtget_lunIDLgt readfunitheaderIDLgt readfunitmydataformat=(A14I8A15F104F104A18A19A15F158F105I15)IDLgt free_lununit

A gravaccedilatildeo de um arquivo texto poderia ser feita de forma semelhante apenas trocando openr por openw (abrir o arquivo para gravaccedilatildeo natildeo leitura) e readf por printf

O arquivo eacute aberto em uma unidade (unit) usada para especificar de onde eacute feita a leitura

Ao final o arquivo eacute fechado

8489

Arquivos - processamento em baixo niacutevel - texto

O que resulta em

IDLgt printheader NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS

IDLgt helpmydataMYDATA STRUCT = -gt ltAnonymousgt Array[4]

IDLgt helpmydata[0] Structure ltd5e38f68gt 11 tags length=136 data length=124 refs=3 NAME STRING dec18s0001 CALMPOS INT 0 FILNAME STRING NIRSPEC-5-AO ECHLPOS DOUBLE 62630000 DISPPOS DOUBLE 36450000 TARGNAME STRING HD85258 POSDIR STRING NIRSPEC-5-AOp1 CLASS STRING STAR MJD_OBS STRING 54087574 ITIME DOUBLE 10000000 COADDS INT 1

Este caso eacute mais complicado que os mais comuns por haver colunas de strings

Se todas fossem de nuacutemeros natildeo teria sido necessaacuterio especificar o formato explicitamente As colunas teriam sido adivinhadas pela biblioteca que lecirc o arquivo Poderia ter sido lido escrito soacute com um array de nuacutemeros sem estruturas

8589

Arquivos - processamento em baixo niacutevel - binaacuterio

Formatos binaacuterios podem ser definidos de qualquer forma O arquivo eacute apenas um conjunto de bytes Cabe ao software saber como os interpretar

Uma escolha comum para que sejam autodocumentados eacute incluir um cabeccedilalho de texto informando as caracteriacutesticas dos dados necessaacuterias para os ler

Ex (IDL) criar um arquivo que armazene um array de doubles com um cabeccedilalho informando as dimensotildees para que o programa que o lecirc saiba como ler os dados

Inventa dados e abre o arquivo

IDLgt data_to_write=dindgen(34)IDLgt openwunitbinary_exampledatget_lun

Escreve as dimensotildees como texto

IDLgt printfunitdimensions of the double array stored belowIDLgt printfunitsize(data_to_writedimensions)

Escreve os dados binaacuterios

IDLgt writeuunitdata_to_write

Fecha o arquivo

IDLgt free_lununit

Escreve em binaacuterio (write unformatted)

8689

Arquivos - processamento em baixo niacutevel - binaacuterio

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

dimensions of the double array stored below 3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

8789

Arquivos - processamento em baixo niacutevel - binaacuterioA leitura deste arquivo eacute igualmente simples

IDLgt header=IDLgt dims=[00]IDLgt openrunitbinary_exampledatget_lun

Lecirc as dimensotildees (armazenadas como texto)

IDLgt readfunitheaderIDLgt readfunitdims

Lecirc a parte binaacuteria depois de saber as dimensotildees

IDLgt data_read=dblarr(dims)IDLgt readuunitdata_read

Fecha o arquivo

IDLgt free_lununit

Verifica que os dados foram gravados e lidos corretamente

IDLgt printarray_equal(data_to_writedata_read) 1

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Lecirc dados binaacuterios (read unformatted)

8889

Sumaacuterio

5 ndash Slides em httpwwwppenteadonetpeapea04_strings_iopdf Strings Expressotildees regulares Arquivos

httpwwwppenteadonetpea

8989

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89

Strings - conversatildeo de outros tipos para strings

Exemplos de conversotildees (IDL)

IDLgt print[-109] -1 0 9

IDLgt print1d01B10 10000000 1 100000

IDLgt helpstring(1d01B10)ltExpressiongt STRING = 10000000 1 100000

IDLgt printfunitdblarr(343)

Tipos mais elaborados podem ou natildeo ter uma forma predefinida Com objetos eacute comum ser possiacutevel definir a conversatildeo (stringification) ao criar a classe

IDLgt h=hash(a109[01]18b)

IDLgt printh9 0 1a 100000180000 b

Strings

Coloca strings em um arquivo (adiante)

Strings criados por um meacutetodo da classe hash satildeo uma forma de representar o hash

2489

Strings - conversatildeo de outros tipos para strings

Algumas linguagens (Python IDL) tecircm mais de uma forma default de gerar strings Em Python uma forma eacute executaacutevel a outra eacute mais legiacutevel

In [30] x=arange(12)reshape(43)

In [31] print(x)[[ 0 1 2] [ 3 4 5] [ 6 7 8] [ 9 10 11]]

In [32] xOut[32]array([[ 0 1 2] [ 3 4 5] [ 6 7 8] [ 9 10 11]])

In [33] y=array([[ 0 1 2] [ 3 4 5] [ 6 7 8] [ 9 10 11]])

In [37] print(array_equal(xy))True

String mais legiacutevel

String executaacutevelPode ser usado para criar um objeto equivalente

2589

Strings ndash formataccedilatildeo expliacutecita

A formataccedilatildeo pode ser especificada se a conversatildeo default natildeo eacute adequada para definir a conversatildeo em um novo tipo

Cada linguagem tem sua sintaxe para formataccedilatildeo

Haacute dois estilos semelhantes em vaacuterias linguagens

Ambos os estilos satildeo sintaxes diferentes para a mesma ideacuteia Um coacutedigo especifica o tipo de dado sendo passado (inteiro real etc) e detalhes de como seraacute feito o string (largura do campo diacutegitos decimais alinhamento etc)

2689

Strings ndash formataccedilatildeo expliacutecita

Estilo Fortran

IDL

IDLgt print1d0+1d-9 10000000

IDLgt print1d0+1d-9format=(E1610)10000000010E+00

IDLgt printx=1d0+1d-9format=(A0F1613)X= 10000000010000

Estilo C (ldquoprintfrdquo)

IDL

IDLgt printformat=(x=1610e)1d0+1d-9x=10000000010e+00

Python

In [20] print(x=1610e (1e0+1e-9))x=10000000010e+00

Nenhum formato expliacutecito (default)

2789

Strings - formatos tipo Fortran

(apenas o principal ver documentaccedilatildeo para detalhes)

Ex (IDL)

IDLgt printx=1d0+1d-9format=(A0F1613)X= 10000000010000

Tambeacutem haacute modificadores para especificar alinhamento (-) se deve haver (ou ser suprimido) avanccedilo para a pŕoxima linha posiccedilatildeo dentro do campo etc

Coacutedigo Significado Exemplo(s)

A String (A) (10A)

I Inteiro decimal (I) (10I)(-2I)

B Inteiro binaacuterio (B) (10B)

Z Inteiro hexadecimal (Z) (10Z)

O Inteiro octal (O) (10O)

F Real ponto fixo (F)(F52)

E D Real ponto flutuante (E)(D1610)

G Real ponto fixo ou flutuante de acordo com o valor (G)(G10)

ldquordquo String literal (ldquox=rdquoI10)

X Caracteres em branco (A10XI)

2889

Strings - formatos tipo C (printf)(apenas o principal ver documentaccedilatildeo para detalhes)String com campos a serem substituiacutedos por valores (passados adiante) marcados por coacutedigos com

Ex (Python)In [20] print(x=1610e (1e0+1e-9))x=10000000010e+00

Haacute modificadores para especificar alinhamento como preencher o espaccedilo que sobra (espaccedilos zeros etc) para imprimir o sinal + etc

Coacutedigo Significado (tipo) Exemplo(s)

di Inteiro decimal (int) d 5d +05d

u Inteiro decimal sem sinal (unsigned int) u 7u

fF Real em ponto fixo (double float) f 136f

eE Real em ponto flutuante (double float) e 1610e

gG Real em ponto fixo ou flutuante decidido pelo valor (double float)

g 73G

xX Inteiro sem sinal hexadecimal (unsigned int) x 10X

o Inteiro sem sinal octal (unsigned int) o 5o

s String (string) s 10s

c Caractere (char) c

p Ponteiro - estilo C - (void ) p

literal

2989

Strings - conversatildeo de strings para outros tipos

Para gerar dados a partir de strings datas identificadores pedaccedilos de nomes valores numeacutericos armazenados em strings

Tambeacutem sempre haacute conversotildees default para os tipos baacutesicos onde o intepretador programa faz o possiacutevel para entender o string como um valor daquele tipo

Tipicamente eacute feito por casts (funccedilotildees de conversatildeo) reads (de strings ou arquivos texto (arquivos texto satildeo strings)) construtores de objetos ou implicitamente

3089

Strings - conversatildeo de strings para outros tipos - impliacutecitas

Exs (IDL)

IDLgt helpfix([17 17 171 -17 9 8])ltExpressiongt INT = Array[5]

IDLgt printfix([17 17 171 -17 9 8]) 17 17 17 -17 9

IDLgt printdouble([17 17 171 -17 9 8]) 17000000 17000000 17100000 -17000000 90000000

IDLgt readfunitabcd

IDLgt a=0d0IDLgt b=00IDLgt c=0IDLgt reads171d0 189d0 -9abcIDLgt helpabcA DOUBLE = 17100000B FLOAT = 189000C INT = -9

Converte o conteuacutedo do string para os tipos das variaacuteveis abcd (explicado adiante)

3189

Strings - conversatildeo de strings para outros tipos

Quando o default natildeo eacute suficiente (ou quando escrevendo o conversor em uma classe) costuma ser possiacutevel o fazer com formatos semelhantes aos formatos para gerar strings Exs (IDL)

IDLgt a=0d0IDLgt b=00IDLgt c=0IDLgt reads171d0 something 189d0-9abc READS Input conversion error Unit 0 File ltstdingt Error occurred at $MAIN$ Execution halted at $MAIN$

Natildeo funcionou porque sozinho ele natildeo conseguiu saber o que fazer com o ldquosomethingrdquo Usando um formato especiacutefico

IDLgt reads171d0 something 189d0-9 abcformat=(D6111XD611XI)

IDLgt helpabcA DOUBLE = 17100000B FLOAT = 189000C INT = -9

Exemplos mais complicados adiante (arquivos texto)

Variaacuteveis tecircm que ser definidas para informar para que tipo seraacute feita a conversatildeo default

3289

Strings - processamento natildeo baacutesicoOperaccedilotildees importantes e muito necessaacuterias mas que natildeo satildeo suportadas em todas as linguagens bibliotecas padratildeo

Testes (ex IDL)

IDLgt str=[afitsaFITSafitsaabfitsabcfits]

IDLgt printstrmatch(strfits) 1 0 0 1 1

IDLgt printstrmatch(strfitsfold_case) 1 1 0 1 1

IDLgt printstrmatch(strfitsfold_case) 1 1 1 1 1

IDLgt printstrmatch(strfits) 1 0 0 0 0

IDLgt printstrmatch(strfits) 0 0 0 1 0

3389

Strings - processamento natildeo baacutesico

Operaccedilotildees importantes e muito necessaacuterias mas que natildeo satildeo suportadas em todas as linguagens bibliotecas padratildeo

Separaccedilatildeo de partes (Ex IDL)

IDLgt printstrsplit(2011- 131 -extract)format=(A)2011131

Processamento de nomes de arquivos diretoacuterios (Ex IDL)

IDLgt printfile_dirname(some_directoryanother_directorysome_filetxt)some_directoryanother_directory

IDLgt printfile_basename(some_directoryanother_directorysome_filetxt)some_filetxt

IDLgt printfile_basename(another_directorysome_filetxttxt)+_alteredtxtsome_file_alteredtxt

3489

Strings - processamento natildeo baacutesico

Codificaccedilotildees (Ex Python 3)

gtgtgt s=infinite money infinNeuro sign

gtgtgt print(s)infinite money infineuro

gtgtgt print(ascii(s))infinite money u221eu20ac

gtgtgt print(sencode(utf-8))binfinite money xe2x88x9exe2x82xac

3589

Strings - processamento natildeo baacutesico

Perl eacute a linguagem mais avanccedilada para processamento de strings tem suporte nativo a muitas outras operaccedilotildees a semacircntica da linguagem eacute voltada principalmente para processar strings expressotildees regulares (de vaacuterios tipos) natildeo satildeo strings fazem parte da semacircntica

Ex (sem o objetivo que seja compreensiacutevel apenas para indicar o estilo)

Ler um arquivo contendo campos com nomes separados de valores por ()

temperature 10008name some modelx_dimension 100y_dimension 100z_dimension 50()

Armazenado-o em um mapa O que pode ser feito com apenas

While (ltgt) Loop over input linesPut pre-colon text into $1 post-colon into $2 if (m (S+) (+) ) Use $1 as key $2 as value $file_data$1 = $2

3689

Expressotildees regulares - definiccedilatildeo

Expressotildees regulares (regular expressions regex) satildeo a mais poderosa ferramenta para fazer buscas e separar substrings

Regex satildeo uma linguagem com o uacutenico objetivo de especificar propriedades de strings

Implementadas em graus diferentes em todas as linguagens modernas e modernizadas facilita encontrar uma expressatildeo jaacute pronta pois satildeo quase iguais em qualquer linguagem

Estatildeo na biblioteca padratildeo em IDL Python R Perl

Em C++ e Java em bibliotecas comuns (Boost Jregex)

Para que servem

Uma expressatildeo regular especifica propriedades de strings

O interpretador de expressotildees regulares (regular expression engine) recebe a expressatildeo e o string a analisar e determina se o string corresponde (matches) agrave expressatildeo regular

Em alguns casos o interpretador pode tambeacutem informar que parte(s) do string corresponde(m) a que parte(s) da expressatildeo regular e realizar processamentos com estas partes

3789

Expressotildees regulares ndash exemplos de usos Separar partes de strings

Encontrar linhas em arquivos que tenham nomes valores e comentaacuterios e separar estes pedaccedilos

Escalar com comentaacuterio

SLITPA = 351979 Slit position angle

Array 1D sem comentaacuterio (se extendendo por vaacuterias linhas)

BAND_BIN_CENTER = (03505400358950036629003732200379490 0387900104598)

Escalares em diferentes formatos

Total Mechanical Luminosity 15310E+03resources_usedwalltime=005603

Pedaccedilos de nomes

6063 17836E-20 2456 T FeIX((3Pe)3d(2PE)4p_1Po-3s2_3p6_1Se)

Datas separando ano mecircs dia hora (em vaacuterios formatos diferentes)

DATE-OBS= 2006-12-18 universal date of observationDATE_TIME = 2010-07-19T161032START_TIME = 2006-182T225102850Z

3889

Expressotildees regulares ndash exemplos de usos

Separar partes de strings Separar partes de nomes de arquivos (por significarem algo como identificar o

conteuacutedo)

specdec18s0041fitsscamdec18i0054fits15_7_mts_hmpixselh_mr15sav15_7_mts_hwpixselh_mr15sav16_3_mts_hwpixselb_mr16savreadmodel5l_-1_000010000_10000_r05_030_08196_0100000_005000000_1000eps

Determinar se um string eacute um nuacutemero (inteiro real fixo flutuante)

Encontrar identificadores Exs nomes de cataacutelogos endereccedilos HTTPFTP endereccedilos de email

Separar campos em arquivos sendo lidos onde as linhas natildeo tecircm a mesma formataccedilatildeo algumas linhas com colunas separadas por espaccedilos outras por tabs outras por

siacutembolos ignorando linhas de comentaacuterios e linhas vazias

3989

Expressotildees regulares - usoEx (IDL) encontrar nomes de arquivos com algumas propriedades

IDLgt printfilesformat=(A)CM_1477475933_1_viscubCM_1477476864_1_ircubCM_1477476864_1_irgcubCM_1477476864_1_viscubCM_1477477826_1_ircubCM_1477477826_1_irgcubCM_1477477826_1_viscubmosaic2cub

IDLgt printstregex(files+irgcubboolean) 0 0 1 0 0 1 0 0

A expressatildeo regular eacute +irgcub Especifica uma ou mais ocorrecircncias seguidas (+) de qualquer caractere () seguido de uma ocorrecircncia de irgcub (o ponto vem precedido do caractere de

escape () para ser entendido literalmente como um ponto e natildeo como o seu significado especial (qualquer caractere)

Esta aplicaccedilatildeo do interpretador (stregex) retorna um valor Booleano (verdadeirofalso) para cada elemento do string passado (files) que informa se aquele elemento correspondia agravequela expressatildeo regular

Este eacute um exemplo artificial Seria mais faacutecil ter usado strmatch(filesirgcub)

4089

Expressotildees regulares - uso

Em casos como este tipicamente o resultado de stregex seria usado como filtro para selecionar apenas os elementos do array de strings que satisfazem agravequela expressatildeo regular

IDLgt w=where(stregex(files+irgcubboolean)null)IDLgt printfiles[w]format=(A)CM_1477476864_1_irgcubCM_1477477826_1_irgcub

Ex (IDL) Determinar que strings conteacutem uma data no formato yyyy-mm-dd

IDLgt strs=[201002012010-02-012010-2-1aaaa-mm-ddT2010-02-01J]IDLgt printstregex(strs[0-9]4-[0-9]2-[0-9]2boolean) 0 1 0 0 1

Esta expressatildeo regular especifica quatro repeticcedilotildees (4) de diacutegitos (caracteres na faixa [0-9]) seguido de um (-) seguido de duas repeticcedilotildees (2) de dois diacutegitos ([0-9]) seguido de um (-) seguido de duas repeticcedilotildees (2) de dois diacutegitos ([0-9])

Uma expressatildeo regular apenas um pouco mais elaborada poderia corresponder aos 3 formatos de data no array acima E poderia se impedir que a uacuteltima (com outros caracteres antes e depois da data) seja aceita

4189

Expressotildees regulares - regras - caracteres ldquonormaisrdquo

Uma expressatildeo regular usa caracteres ldquonormaisrdquo e especiais para especificar o que se vai procurar na ordem em que aparecem na expressatildeo

Se um caractere eacute normal (natildeo eacute um dos especiais mostrados adiante) ele especifica uma ocorrecircncia daquele caractere

Ex J eacute uma expressatildeo regular que corresponde a qualquer string onde ocorra J Jaacute JA soacute corresponde a strings que tenham JA dentro

Exs (IDL)

IDLgt strs=[JJJJJJaJAjaJa]

IDLgt printstregex(strsJboolean) 1 1 1 0 1

IDLgt printstregex(strsJAboolean) 0 0 1 0 0

4289

Expressotildees regulares - regras - caracteres especiaisCaracteres especiais tecircm outros significados Para significar literalmente aquele caractere deve ser escapado (escaped) com um

Siacutembolo significado exemplo Corresponde(m) Escape o caractere seguinte deve ser interpretado

literalmente natildeo como especial aa

Qualquer caractere ab ajb aab abb jafbc

+ Uma ou mais repeticcedilotildees do que vem agrave esquerda a+b ab aab bab baabh

() Subexpressatildeo para agrupar termos afetados por um caractere especial (como parecircnteses em notaccedilatildeo matemaacutetica)

(ab)+c abc ababc dabababcg

Zero ou mais repeticcedilotildees dos termos agrave esquerda ab abbaab caaabg

Zero ou uma repeticcedilatildeo dos termos agrave esquerda ab b ab cabd cbd

| Alternaccedilatildeo qualquer um dos dois agrave esquerda a|bc ac bc jacd jbcd

n Exatamente n repeticcedilotildees do termo agrave esquerda a2b aab daaabg

n1n2 De n1 a n2 repeticcedilotildees do termo agrave esquerda a12b ab aab aaab gaaabbd

^ Acircncora (no comeccedilo) nada agrave esquerda ^ab ab abb

$ Acircncora (no fim) nada agrave direita ab$ abaab

[] Conjunto de valores (explicado adiante)

4389

Expressotildees regulares - regras - conjuntos de valores

[] denota um conjunto de valores que pode conter

Uma lista de coisas que devem corresponder Ex [abc] signfica qualquer caractere no conjunto abc Correspondem a esta

expressatildeo abcabha

Uma lista de coisas que natildeo podem corresponder [^abc] significa qualquer coisa que natildeo seja a b ou c Correspondem a esta

expressatildeo d jgs gg

Faixas de valores [0-9] signfica qualquer diacutegito [0-9a-zA-Z] significa qualquer diacutegito ou letra

Classes de valores como algumas faixas e outros conjuntos ocorrem com muita frequumlecircncia haacute nomes

especiais para eles Estes (em IDL) vecircm entre [] ex [[digit] significa o mesmo que [0-9]

4489

Expressotildees regulares - regras - classes de valores

Classe signficado

alnum Caracteres alfanumeacutericos 0-9a-zA-Z

alpha Caracteres alfabeacuteticos a-zA-Z

cntrl Caracteres de controle ASCII (natildeo visiacuteveis coacutedigos 1 a 31 e 127)

digit Diacutegitos (decimais) 0-9

graph Caracteres visiacuteveis ASCII 33 a 126 (natildeo inclui o espaccedilo)

lower Letras minuacutesculas a-z

print Caracteres ldquoimprimiacuteveisrdquo (visiacuteveis e o espaccedilo) ASCII 32 a 126

punct Caracteres de pontuaccedilatildeo $amprsquo()+-lt=gt[]^_lsquo|~

space Os caracteres ldquoem brancordquo (blank) espaccedilo tab tab vertical CR LF (ASCII 32 e 9-13)

upper Letras maiuacutesculas A-Z

xdigit Diacutegitos hexadecimais 0-9A-Fa-f

lt Comeccedilo de palavra (palavra definida como sequumlecircncia de coisas natildeo space)

gt Fim de palavra (palavra definida como sequumlecircncia de coisas natildeo space)

Estas satildeo apenas as principais Algumas implementaccedilotildees tecircm muito mais (em particular nas linguagens que usam Unicode nativamente)

4589

Expressotildees regulares - exemplos

Determinar se strings satildeo nuacutemeros (Ex IDL)

IDLgt str=[9-18 875-812-45913E9-98d7a188d032f5]

Inteiros

IDLgt intexpr=^[-+][0-9]+$

IDLgt printstregex(strintexprboolean) 1 1 0 0 0 0 0 0 0 0

Ponto flutuante

IDLgt fpexpr=^[-+](([0-9][0-9]+)|([0-9]+[0-9]))([eEdD][-+][0-9]+)$

IDLgt printstregex(strfpexprboolean) 1 1 0 1 1 1 1 1 0 0

Sinal opcional

1 ou mais diacutegitos

Sinal opcional

0 ou mais diacutegitos opcionalmente seguidos de um ponto e 1 ou mais diacutegitos

1 ou mais diacutegitos opcionalmente seguidos de um ponto e 0 ou mais diacutegitos

ou Expoente opcional letra do expoente seguida de sinal opcional seguido de um ou mais diacutegitos

4689

Expressotildees regulares ndash extraccedilatildeo

Interpretadores de expressotildees regulares costumam oferecer mais que apenas testar se um string corresponde a uma expressatildeo

Em geral tambeacutem podem retornar que parte(s) do string corresponde(m) agrave expressatildeo

Ex (IDL) Determinar se um string conteacutem uma data incluindo os formatos

IDLgt dates=[2011-01-312011 1 3120110131something done on y2011m1d31 with something]

E extrair a data de dentro do string

IDLgt expr=[0-9]4[0-9]12[0-9]12

(4 diacutegitos)(qualquer separador)(1 a 2 diacutegitos)(qualquer separador)(1 a 2 diacutegitos)

IDLgt printstregex(datesexprextract)format=(A)2011-01-312011 1 31201101312011m1d31

Como agora separar ano mecircs e dia Com uma busca e uma extraccedilatildeo para cada Poderia ser mais eacute mais faacutecil com uma uacutenica expressatildeo regular

4789

Expressotildees regulares - aleacutem de apenas testes

Tambeacutem podem retornar que parte(s) do string correspondem agrave expressatildeo toda e agraves suas subexpressotildees (partes da expressatildeo delimitadas por parecircnteses)

Ex (IDL) Separar pedaccedilos de datas Neste caso para a expressatildeo ficar menor assumindo um formato simples (yyyy-mm-ddThhmmssfff) Mas poderia ser um formato mais livre como no exemplo anterior

IDLgt str=Stuff observed on 2011-01-31T123924983 with some instrumentIDLgt expr=([0-9]4)-([0-9]2)-([0-9]2)T([0-9]2)([0-9]2)([0-9]2[0-9]3)

(quatro diacutegitos)-(2 diacutegitos)-(2 diacutegitos)T(2 diacutegitos)(2 diacutegitos)(2 diacutegitos3 diacutegitos)

IDLgt pieces=stregex(strexprextractsubexpr)IDLgt printpiecesformat=(A)2011-01-31T12392498320110131123924983IDLgt d=julday(pieces[2]pieces[3]pieces[1]pieces[4]pieces[5]pieces[6])IDLgt printdformat=(F166) 2455593027372

Expressatildeo inteiraPrimeira subexpressatildeoSegunda subexpressatildeoTerceira subexpressatildeoQuarta subexpressatildeoQuinta subexpressatildeoSexta subexpressatildeo

4889

Expressotildees regulares - referecircncias httpxkcdcom208

Viacutedeos do Software Carpentry

httpsoftware-carpentryorg4_0regexp

4989

Arquivos

Quase todo programa precisa armazenar dados em arquivos

Podem ser pequenos arquivos de paracircmetros ou enormes arquivos de dados produzidos ou a processar

Apesar do sugerido pela praacutetica comum arquivos texto natildeo satildeo sempre a melhor escolha para armazenar dados - e haacute muitas formas diferentes de os usar

Qual eacute a melhor escolha

Assim como para linguagens ou contecirciners natildeo existe ldquoo melhor formatordquo Cada um tem suas vantagens e desvantagens

Dados diferentes (mesmo se usados pelos mesmos programas) em geral se adequam melhor a formatos diferentes

5089

Arquivos - texto X binaacuterios

Em qualquer formato arquivos satildeo armazenados como diacutegitos binaacuterios

Mas haacute duas formas principais como eles podem ser codificados

Arquivos baseados em texto (text files)

Dados satildeo transformados em caracteres usando alguma formataccedilatildeo (mesmo se impliacutecita) e escritos com alguma codificaccedilatildeo de texto (comumente mas natildeo necessariamente ASCII)

Um arquivo texto eacute um ou mais strings As mesmas conversotildees tecircm que ser feitas depara outros tipos

Arquivos ldquobinaacuteriosrdquo (binary files)

Embora todo arquivo seja binaacuterio este nome costuma ser usado soacute para aqueles em que os dados natildeo estatildeo na forma de texto

Com frequumlecircncia (nem sempre) os dados satildeo gravados de forma idecircntica a como satildeo armazenados na memoacuteria

Muitos formatos usam uma mistura de partes em texto e partes binaacuterias

Um cabeccedilalho (header) de texto que daacute informaccedilotildees (metadados) sobre os dados armazenados na parte binaacuteria que vem depois

O cabeccedilalho conteacutem em especial informaccedilotildees sobre como ler os dados binaacuterios

5189

Arquivos - texto X binaacuterios

Vantagens de arquivos texto

Legiacuteveis por pessoas (human readable)

Podem ser auto-suficientes todo o necessaacuterio para os ler e entender o que conteacutem pode ser obtido olhando o arquivo

Satildeo os menos especiacuteficos a linguagens software normalmente satildeo escritos em ASCII ou Unicode e sempre haacute algum suporte a ler escrever texto em linguagens software

Haacute alguns formatos padratildeo para texto (exs CSV XML) que satildeo suportados em muitas plataformas diferentes

5289

Arquivos - texto X binaacuterios

Vantagens de arquivos binaacuterios

Em geral natildeo haacute conversotildees entre o os dados como armazenados na memoacuteria O que torna o armazenamento mais eficiente e sem alteraccedilotildees nos valores

A maior parte dos formatos padronizados eacute binaacuteria Exs FITS cube CDF NetCDF HDF HDF5 JPEG JPEG2000 TIFF GeoTIFF MPEG etc

Eacute mais comum que haja bibliotecas prontas (ateacute de alto niacutevel) para consulta leitura e gravaccedilatildeo

Os formatos melhor desenhados satildeo autodocumentados (em texto ou binaacuterio) para os ler natildeo eacute necessaacuterio conhecimento preacutevio sobre como os dados foram armazenados

Toda linguagem plataforma costuma ter seu formato binaacuterio mais nativo que costuma ser o mais faacutecil para leitura gravaccedilatildeo Em particular nas de alto niacutevel que tecircm formatos autodocumentados (especialmente

em IDL R Python Java)

Muitos formatos tecircm opccedilatildeo de compressatildeo dos dados

5389

Arquivos - proprietaacuterios X padratildeo

Independente da escolha texto binaacuterio programas devem escolher entre usar um formato proacuteprio ou um formato padronizado

A principal vantagem de formatos proacuteprios eacute que satildeo definidos da forma mais conveniente para a aplicaccedilatildeo que os usa simplificando leitura e gravaccedilatildeo e potencialmente otimizando recursos (acesso ao disco tamanho do arquivo etc)

A principal desvantagem de formatos proacuteprios eacute ser necessaacuterio escrever todo o coacutedigo para os ler gravar

Pode dar mais trabalho que usar um formato geneacuterico que natildeo seja exatamente o que melhor se encaixa na aplicaccedilatildeo

O coacutedigo para processar o formato em geral vai ser menos completo e conveniente de usar que o de um formato bem estabelecido usado por muitos outros em muitos ambientes

Cada novo software que for usar estes arquivos vai precisar compartilhar do mesmo coacutedigo ou precisar de coacutedigo novo (em particular se em outra linguagem) para ler gravar naquele formato

Eacute necessaacuterio documentar o formato e decidir sobre como ele seraacute definido

Se outros jaacute colocaram muito trabalho desenvolvendo bons formatos padratildeo bem suportados em muitos ambientes por que ter o trabalho de reinventar (e reprogramar redocumentar e retestar) a roda

5489

Arquivos - padrotildees comuns em astronomia (exs adiante)

Texto

CSV Comma-separated values - bem suportado por muitos softwares

ldquoColunas fixasrdquo Natildeo eacute um padratildeo bem definido mas eacute praacutetica comum para tabelas (2D)

XML Extensible Markup Language - O padratildeo texto mais flexiacutevel de grande uso em programaccedilatildeo geral para armazenar qualquer coisa com frequumlecircncia de forma hieraacuterquica Bem suportado por linguagens modernas (e modernizadas) e bibliotecas das principais

linguagens gerais Alta complexidade o torna trabalhoso de usar

5589

Arquivos - padrotildees comuns em astronomia (exs adiante)Binaacuterios

FITS Flexible Image Transport System - o mais comum para observaccedilotildees astronocircmicas Conteacutem os dados (em geral arrays 1D 2D ou 3D) e documentaccedilatildeo (nos cabeccedilalhos) sobre a origem e caracteriacutesticas dos dados Tambeacutem usado para armazenar tabelas de dados quaisquer mesmo que natildeo sejam observaccedilotildees (especialmente pelo STSCI) Variam muito em qualidade de documentaccedilatildeo

NetCDF Network Common Data Form - evoluccedilatildeo do CDF autodocumentado eacute comum e bem suportado para vaacuterios arrays de dados

HDF5 Hierarchical Data Format ndash autodocumentado comum e bem suportado permitindo aleacutem de simples arrays estruturas (eacute um formato hieraacuterquico)

Formatos de imagens JPEG JPEG2000 TIFF GeoTIFF etc - voltados para arrays 2D3D de inteiros ou (em alguns casos) reais com ou sem compressatildeo JPEG2000 tem caracteriacutesticas mais avanccediladas como imagens multiresoluccedilatildeo

Formatos vetoriais PS EPS DXF SHP SVG - variados niacuteveis de suporte a armazenamento de vetores e formas em 2D ou 3D

ISIS Cube semelhante em caracteriacutesticas ao FITS mais usado em sensoriamento remoto geociecircncias e ciecircncias planetaacuterias em geral para observaccedilotildees 1D 2D ou 3D

Formatos nativos de linguagens todo o trabalho de leitura e gravaccedilatildeo eacute feito automagicamente pela biblioteca padratildeo em IDL R Python Java

5689

Arquivos texto - newlines

Apesar do que possa parecer arquivos texto natildeo tecircm intrinsecamente vaacuterias linhas Arquivos texto satildeo soacute uma sequumlecircncia 1D de caracteres em alguma codificaccedilatildeo Separaccedilatildeo em linhas (equivalente a interpretar o arquivo como 2D em linhas e colunas) eacute

especificada por convenccedilotildees Natildeo haacute apenas uma convenccedilatildeo para o fim de linhas

A mais primitiva convenccedilatildeo eacute separaccedilatildeo nenhuma estipula-se que linhas tenham um nuacutemero fixo N de caracteres e cabe ao software que lecirc o arquivo entender que uma linha nova ocorre regularmente a cada N caracteres

Eacute a forma menos portaacutevel e mais inconveniente eacute necessaacuterio o conhecimento preacutevio (ou por inspeccedilatildeo do arquivo) de quantos caracteres haacute por linha

A maior parte dos editores de texto natildeo vai saber separar linhas desta forma (por falta deste conhecimento preacutevio) Exemplo (de um FITS real)

SIMPLE = T Fits standard BITPIX = 16 Bits per pixel NAXIS = 0 Number of axes EXTEND = T File may contain extensions

O que com as linhas quebradas nos lugares certos seria

SIMPLE = T Fits standard BITPIX = 16 Bits per pixel NAXIS = 0 Number of axes EXTEND = T File may contain extensions

5789

Arquivos texto - newlines

A forma mais comum de especificar linhas eacute com um marcador do final de linha (newline)

Eacute um caractere especial natildeo normalmente presente no texto que serve para marcar fim de linhas

Mas natildeo haacute soacute um padratildeo de newline Os mais comuns

LF (Line Feed ASCII 10) ndash Unix Linux Mac OS X

CR - (Carriage Return ASCII 13) - Mac OS lt10

CR+LF (CR seguido de LF) - Windows DOS

Eacute o motivo de o Notepad (Windows) natildeo entender as quebras de linha de arquivos escritos com o formato nativo de Linux o arquivo soacute tem LF enquanto o editor espera CR+LF

Alguns sistemas (strings em vaacuterias linguagens por exemplo) usam o coacutedigo de escape n para indicar newline que eacute codificado de acordo com o padratildeo sendo usado

Em geral bibliotecas de leitura e gravaccedilatildeo de arquivos usam (default pelo menos) o newline nativo do sistema em que satildeo usadas

Programas de conversatildeo entre os sistemas satildeo comuns (ex dos2unix)

O Wordpad identifica se for usado soacute LF e quebra as linhas de acordo

5889

Arquivos - texto - CSV

Comma-separated values

O formato mais padronizado para tabelas (arrays 2D) em texto (frequentemente mas natildeo necessariamente ASCII)

Bem suportado por bibliotecas padratildeo de linguagens e outros softwares (Excel Calc Origin Google Docs etc)

Conteacutem Linhas de cabeccedilalho (opcionais mas recomendadas) linhas com qualquer texto geral

descrevendo o arquivo e em geral uma linha de tiacutetulo para as colunas da tabela Uma (apenas uma) tabela onde todas as linhas tecircm o mesmo nuacutemero de colunas

Colunas separadas por viacutergulas (opcionalmente pode ser outro separador) Linhas terminadas por newline (qualquer que seja) Strings delimitados por ldquo ldquo

Ex

NAMECALMPOSFILNAMEECHLPOSDISPPOSTARGNAMEPOSDIRCLASSMJD-OBSITIMECOADDSdec18s00010NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001dec18s00020NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001dec18s00120NIRSPEC-5-AO635800364500itan140NIRSPEC-5-AOp2 TITAN5408763000001dec18s00140NIRSPEC-5-AO626300364500itan140NIRSPEC-5-AOp1 TITAN5408763000001dec18s00151NIRSPEC-5-AO626300364500itan140NIRSPEC-5-AOp1ARC5408764000001dec18s00160NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001

Natildeo eacute necessaacuterio que as colunas tenham largura constante

Cabeccedilalho

5989

Arquivos - texto - CSVHaacute amplo suporte a leitura e gravaccedilatildeo de CSV sem precisar recorrer a procedimentos de baixo niacutevel

Podem ser diretamente importados em Excel Calc Origin Google Docs ou lido facilmente com bibliotecas padratildeo comuns Ex (IDL)

IDLgt c=read_csv(filesearch_scamcsvheader=h)IDLgt printhNAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS

IDLgt helpc Structure ltc8bca508gt 11 tags length=5256 data length=5248 refs=1 FIELD01 STRING Array[41] FIELD02 LONG Array[41] FIELD03 STRING Array[41] FIELD04 DOUBLE Array[41] FIELD05 DOUBLE Array[41] FIELD06 STRING Array[41] FIELD07 STRING Array[41] FIELD08 STRING Array[41] FIELD09 STRING Array[41] FIELD10 DOUBLE Array[41] FIELD11 LONG Array[41]

IDLgt printcfield01[03]dec18s0001 dec18s0002 dec18s0003 dec18s0004

IDLgt printcfield03[03]NIRSPEC-5-AO NIRSPEC-5-AO NIRSPEC-5-AO NIRSPEC-5-AO

6089

Arquivos - texto - CSVEx (IDL) Criaccedilatildeo de um CSV com uma tabela de valores

Criaccedilatildeo de 3 arrays 1D (12 elementos) um para cada coluna

IDLgt x=dindgen(3)IDLgt y=dindgen(4)IDLgt xx=reform(rebin(x34)12)IDLgt yy=reform(rebin(reform(y14)34)12)IDLgt f=xx+yy10IDLgt helpxxyyfXX DOUBLE = Array[12]YY DOUBLE = Array[12]F DOUBLE = Array[12]

Escrita do arquivo

IDLgt write_csvexamplecsvxxyyfheader=[XYX+10Y]

ResultadoXYX+10Y000000000000000000000000100000000000000010000000200000000000000020000000000000001000000010000000100000001000000011000000()

6189

Arquivos - texto - ldquoColunas regularesrdquoFixed column width

Natildeo eacute exatamente um padratildeo Eacute uma praacutetica comum

Armazena uma tabela (array 2D) de forma regular simples de ser interpretada e lida

Costumam ter linha(s) de cabeccedilalho descrevendo o conteuacutedo do arquivo em geral com uma linha para os nomes das colunas

As demais linhas conteacutem os dados sempre ocupando a mesma largura por coluna e escritos no mesmo formato em cada coluna

Costumam ser simples de ler inclusive interativamente (exs Excel Calc Origin read_ascii)

Ex (IDL) Uma simples tabela soacute de nuacutemeros

wavl CH4=33 wavl CH4=25 wavl CH4=10 wavl CH4=08 wavl CH4=05 wavl CH4=026 wavl CH4=02 477330000 0090130 477330000 0091110 477330000 0089250 477330000 0087000 477330000 0087140 477330000 0090080 477330000 0088110 480040000 0090930 480040000 0091930 480040000 0090160 480040000 0087930 480040000 0088110 480040000 0090950 480040000 0089090 482750000 0091710 482750000 0092730 482750000 0091060 482750000 0088850 482750000 0089080 482750000 0091810 482750000 0090060 485450000 0092530 485450000 0093570 485450000 0092000 485450000 0089810 485450000 0090100 485450000 0092730 485450000 0091090

IDLgt a=read_ascii(specs_27s_ntxtdata_start=1header=header)IDLgt printheader wavl CH4=33 wavl CH4=25 wavl CH4=10 wavl CH4=08 wavl CH4=05 wavl CH4=026 wavl CH4=02 IDLgt helpa Structure ltd423c9a8gt 1 tags length=224 data length=224 refs=1 FIELD01 FLOAT Array[14 4]

6289

Arquivos - texto - ldquoColunas regularesrdquoJaacute um arquivo um pouco mais difiacutecil de ler

NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS dec18s0001 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0002 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0003 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 FLAT 5408757812500 460000 5 dec18s0004 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 DARK 5408757812500 460000 5

Por ter colunas de tipos diferentes (strings inteiros reais) natildeo eacute possiacutevel o ler em um simples array Mas eacute faacutecil o colocar em uma estrutura de arrays onde cada campo eacute uma coluna

Especificando interativamente como interpretar as linhasIDLgt templ=ascii_template(filesearch_scamtxt)

Nome do campo (default mostrado)

Tipo do campo (identificado automaticamente)

Posiccedilatildeo (caracter) do comeccedilo (identificada automaticamente)

Linha de exemplo para verificar as colunas

6389

Arquivos - texto - ldquoColunas regularesrdquoDepois de feito o template o arquivo pode ser lido com apenas

IDLgt a=read_ascii(filesearch_scamtxttemplate=templ)IDLgt helpa Structure ltd4ec4608gt 11 tags length=416 data length=416 refs=1 FIELD01 STRING Array[4] FIELD02 LONG Array[4] FIELD03 STRING Array[4] FIELD04 FLOAT Array[4] FIELD05 FLOAT Array[4] FIELD06 STRING Array[4] FIELD07 STRING Array[4] FIELD08 STRING Array[4] FIELD09 FLOAT Array[4] FIELD10 FLOAT Array[4] FIELD11 LONG Array[4]IDLgt printafield01dec18s0001 dec18s0002 dec18s0003 dec18s0004IDLgt printafield04 626300 626300 626300 626300

O template (uma estrutura contendo dados sobre como ler o arquivo) pode ser usado para outros arquivos no mesmo formato No lugar de ter sido criado interativamente poderia ter sido lido de algum arquivo Poderia ter especificado nomes para os campos que seriam mais amigaacuteveis que coias como FIELD11

6489

Arquivos - texto - XML

Extensible Markup Language

Admite grande flexibilidade e por isso pode ter alta complexidade

Valores satildeo colocados dentro de uma estrutura em hieraacuterquica (em uma aacutervore) com os noacutes identificados pelos seus nomes (chaves)

Largamente usado em muitas aacutereas para armazenar conjuntos arbitraacuterios de quaisquer estruturas de dados

A maioria das aplicaccedilotildees usa um formato que eacute um subconjunto do XML especificado por um Schema comumente em um arquivo XML DTD (Document Type Definition)

6589

Arquivos - texto ndash XML ndash exemplos de usos

Armazenamento de dados de aplicaccedilotildees web (comum para exportar importar dados MediaWiki DokuWiki WordPress ADS Lattes etc)

Documentos Office (docx pptx xlsx) OpenOffice (odt opd ods)

Como versotildees de outros formatos FITSML XDF

ldquoScientific Dataset XML NASAs Astronomical Data Center (ADC) sponsors a number of research projects that

use XML for scientific data representation The XML activities at the ADC are sponsored and supported by the NASA Office of Space Science Applied Information Systems Research Program (AISRP)rdquo - httpxmlcoverpagesorgnasa-adchtml

Astronomical Instrument Markup Language (AIML)

SVG ndash Scalable Vector Graphics

Muitas de outras aplicaccedilotildees listadas em httpxmlcoverpagesorgxmlhtmlapplications

6689

Arquivos - texto ndash XML - exemploltxml version=10 gtltDOCTYPE Xdmf SYSTEM Xdmfdtd []gtltXdmf xmlnsxi=httpwwww3org2001XInclude Version=20gt ltDomaingt lt-- Example of Basic Topologies --gt ltInformation Name=Descriptiongt Example of a Polyvertex Topology ltInformationgt ltGrid Name=Polyvertex GridType=Uniformgt ltTopology TopologyType=Polyvertex Dimensions=3 NodesPerElement=3gt ltDataItem Format=XML Dimensions=3 3 NumberType=Floatgt 0 1 2 4 5 6 8 9 10 ltDataItemgt ltTopologygt ltGeometry Type=XYZgt ltDataItem Format=XML Dimensions=4 4 3gt 00 00 00 10 00 00()Que mostra que a interpretaccedilatildeo (parsing) de XML eacute em geral complexa

6789

Arquivos - texto - XML

Haacute muitas bibliotecas de alto niacutevel para fazer o processamento (parsing) e entregar os dados em uma estrutura conveniente

A complexidade em processar XML estaacute em decidir o que fazer com os dados jaacute que os arquivos podem ser muito complexos

As APIs (Application Programming Interfaces) mais comuns para processar XML que satildeo implementadas em muitas linguagens

DOM (Document Object Model) ndash manteacutem todo o conteuacutedo do em uma estrutura de dados (em geral uma aacutervore) em uma variaacutevel (em geral um objeto) Esta pode ser consultada para obter os valores de interesse para os alterar e usada para escrever um arquivo

SAX (Simple API for XML) ndash Interpretador (parser) por objetos O usuaacuterio escreve uma classe herdando da classe SAX provendo os meacutetodos que vatildeo processar os campos agrave medida em que estes satildeo lidos

6889

Arquivos - binaacuterios - FITSFlexible Image Transport System

O formato mais comum para observaccedilotildees astronocircmicas Tambeacutem usado para armazenar quaisquer dados mesmo natildeo relacionados a observaccedilotildees (especialmente tabelas como eacute praacutetica do STSCI)

Conteacutem um (ou mais) cabeccedilalho(s) de texto com metadados (informaccedilotildees sobre os dados como caracteriacutesticas (necessaacuterias para os ler) origem condiccedilotildees em que foram obtidos processamento realizado etc)

SIMPLE = T image conforms to FITS standard BITPIX = 32 bits per data value NAXIS = 2 number of axes NAXIS1 = 1024 NAXIS2 = 1024 BSCALE = 100000 Scaling factor BZERO = 000000 Scaling zero-point TELESCOP= Keck II Telescope SLITNAME= 0041x226 Slit Name SLITPA = 351979 Slit position angle SLITX = 131500 X pixel of the center of the slit LST = 12010446 local apparent sidereal time (()

Depois do cabeccedilalho haacute uma (ou mais) seccedilatildeo(otildees) de dados binaacuterios Costuma(m) ser array(s) 1D (espectros) 2D (imagens) ou 3D (ldquocubos de dadosrdquo)

De inteiros ou reais inteiros satildeo comuns em contagens de instrumentos reais para valores derivados (fluxos intensidades etc)

6989

Arquivos - binaacuterios - FITSNormalmente FITS satildeo lidos escritos por bibliotecas prontas de (relativamente) alto niacutevel usuaacuterio natildeo tem que saber como os dados satildeo armazenados no arquivo nem como os ler escrever Ex (IDL com a biblioteca idlastro)

IDLgt fits_info2dspectrumfits2dspectrumfits has 3 extensionsPrimary header 288 recordsNo dataExtension 1 -- SCI Header 144 records IMAGE ( 1201 1201 )Extension 2 -- ERR Header 72 records IMAGE ( 1201 1201 )Extension 3 -- DQ Header 72 records IMAGE ( 1201 1201 )

IDLgt mydata=readfits(2dspectrumfitsexten_no=1myheader) READFITS Reading FITS extension of type IMAGE READFITS Now reading 1201 by 1201 array

IDLgt extastmyheadermyastIDLgt sz=size(mydatadimensions)IDLgt xy2ad[1sz[0]][1sz[1]]myastcorners_acorners_dIDLgt printcorners_aCorners of the data array from file 2dspectrumfits are at 14487480 33063480

IDLgt printcorners_d -00041264444 00041402222

Obteacutem os dados de coordenadas (WCS) do header

Coloca os dados no array (2D de floats) mydata e o header no array (1D de strings) myheader

Calcula as coordenadas das quinas da imagem atraveacutes do WCS

Provecirc informaccedilotildees sobre o arquivo

7089

Arquivos - binaacuterios - ISIS Cube

Formatos como FITS se adequam muito a ter uma interface de mais alto niacutevel por objetos

Tambeacutem para dados em tabelas FITS muito mais trabalhosos de ler em baixo niacutevel que se adequam muito mais a mapas ou estruturas

Exemplo (de um formato semelhante a FITS ISIS cube)

O objeto ao ser criado lecirc todo o arquivo

cube=pp_editablecube(CM_1553510065_1_ircub)

Meacutetodos fornecem os dados desejados para obter quando necessaacuterio os dados de interesse

Find out the names of the backplanesprintcubegetproperty(backnames)Get the start time of the cubeprintcubegetfromheader(START_TIME)2007-084T100057286Z

Valores no cabeccedilalho podem ser convenientemente fornecidos como um mapa

header=cubeheader_as_hash()printheader[START_TIME]2007-084T100057286Z

7189

Arquivos - binaacuterios ndash ISIS Cube

Os dados satildeo fornecidos como arraysMake a contour plot of the latitudesc=contour(cubegetsuffixbyname(LATITUDE))Get the band with wavelength nearest to 21 (in the units used in the cube)selband=cubegetbandbywavelength(21wavelengths=selwavs)

Interfaces por overload tornam o acesso ainda mais conveniente

selband=cube[21]

selwavs=cube[21]

Retorna um array com a banda de comprimento de onda mais proacuteximo de 21 (microm)

Retorna o comprimento de onda mais proacuteximo de 21 (microm) da banda retornada acima

7289

Arquivos - binaacuterios ndash ISIS Cube Alteraccedilotildees feitas ao conteuacutedo satildeo automaticamente refletidas em todos os

lugares (cabeccedilalho em particular) afetados mantendo o objeto vaacutelido que pode depois ser gravado em um novo arquivo

IDLgt printcubelinescubesamplescubebands 64 64 256

IDLgt helpcubecoreltExpressiongt FLOAT = Array[64 64 256]

IDLgt cubecore=dblarr(100100256)

A linha acima natildeo eacute uma atribuiccedilatildeo eacute uma invocaccedilatildeo de meacutetodo Eacute equivalente acubesetpropertycore=dblarr(100100256)

Eacute o trabalho da funccedilatildeo setproperty decidir se a propriedade passada (core) faz sentido e se fizer fazer todo o trabalho necessaacuterio a esta mudanccedila Para o usuaacuterio eacute tudo automaacutetico e os dados da classe satildeo vaacutelidos o tempo todo

IDLgt helpcubecoreltExpressiongt DOUBLE = Array[100 100 256]

IDLgt printcubelinescubesamplescubebands 100 100 256

IDLgt cubesaveCM_1553510065_1_ir_editedcub

7389

Arquivos - binaacuterios ndash NetCDF e HDF5

Network Common Data Form e Hierarchical Data Format

Os dois uacutenicos formatos bem estabelecidos para dados cientiacuteficos geneacutericos

Armazenam dados como vaacuterias variaacuteveis e seus metadados Para cada variaacutevel haacute (ou pode haver) os metadados

Nome Dimensotildees (do array) Unidades Comentaacuterios

Ambos permitem arrays multidimensionais

Apenas HDF5 permite estruturas (daiacute vem a hierarquia)

Autodocumentados qualquer software que saiba ler um destes formatos lecirc qualquer arquivo sem precisar de conhecimento preacutevio sobre como o arquivo foi gerado

Muito bem suportados em bibliotecas padratildeo e natildeo padratildeo em softwares interativos e visualizadores (inclusive plugins para navegadores)

httpwwwunidataucaredusoftwarenetcdf httpenwikipediaorgwikiHdf5

NetCDF eacute mais simples de usar por natildeo ter hierarquia dando menos trabalho para ler e escrever dados Se hierarquia natildeo eacute necessaacuteria eacute mais conveniente de usar que HDF5

7489

Arquivos - binaacuterios - NetCDF e HDF5Haacute tambeacutem o formato CDL uma versatildeo ASCII do NetCDF A biblioteca padratildeo do NetCDF inclui conversores entre estes formatos

$ ncdump -h refspec_g01_0ncnetcdf refspec_g01_0 dimensions nlay = 51 nwn = 400 nleg = 33 numu = 2 nlev = 52 nphi = 3 ngas = 2 nwnc = 1 scal = 1 v3 = 3 dnl = 1 nk = 1 tdisr = UNLIMITED (0 currently) na = 16

variables float alb(nwn) float z(nlay) float t(nlay) float p(nlay) float wl(nwn) float iof(nwn) float mtau(nwn) float htau(nwn) float hctaus(nwn) float gtau(nwn) float outcos(scal) float phi(nleg) float phic(scal) float umu(numu) float flux(v3 nwn nlev) float mix(nlay ngas) float c(nlay) float psat(nlay) float ga(nwnc) float wlc(nwnc) float inc(scal) int dm(scal) int ord(scal) float fbeam(scal) float wn(nwn) float tautot(nwn nlay) float htaus(nwn nlay) float htaux(nwn nlay) float taug(nwn nlay) float phase(nwn nlay nleg) float ssa(nwn nlay) float uu(nwn nphi nlev numu) float u0u(nwn nlev numu) float tray(nwn nlay) float gtauo(tdisr nwn nlay)

Haacute 14 variaacuteveis usadas como dimensotildees para as 35 variaacuteveis que satildeo arrays

Ex alb(nwn) indica que alb eacute um array 1D de nwn elementos

nwn estaacute armazenado como uma das dimensotildees e eacute 400 portanto alb tem 400 elementos

Parte do conteuacutedo de um arquivo NetCDF em formato CDL (gerado pelo programa ncdump)

7589

Arquivos - binaacuterios - NetCDF e HDF5Conteuacutedo daquele arquivo visualizado com o ncview (acompanha a biblioteca NetCDF padratildeo)

7689

Arquivos - binaacuterios - NetCDF e HDF5O conteuacutedo de todo o arquivo pode ser lido facilmente com as bibliotecas disponiacuteveis e armazenado em contecirciners convenientes Usando um objeto que gera um resultado um pouco mais conveniente

IDLgt h=pp_readncdf(refspec_g01_0nchash)IDLgt printhvar_dims ltObjHeapVar229(HASH)gtvars ltObjHeapVar152(HASH)gtdims ltObjHeapVar118(HASH)gt

IDLgt printh[vars]T 173203 175459 175848 176001 175975 Z 431869 418858 406067 393403 380464 FLUX 300660 145536 0705180 0341669 0165532 PHASE 100000 0779034 0660858 0542052 0449983 TAUTOT0694377 0693420 0693474 0693540 0693636()

IDLgt help(h[vars])[TAUTOT]ltExpressiongt FLOAT = Array[51 400]

IDLgt print(h[var_dims])[TAUTOT]NLAY NWN

IDLgt print(h[dims])[(h[var_dims])[TAUTOT]]NLAY 51NWN 400

7789

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5)

Visualizaccedilatildeo da variaacutevel selecionada

Metadados e alguns valores da variaacutevel selecionada

Variaacutevel a ser criada com o conteuacutedo desta variaacutevel do arquivo

Hierarquia das variaacuteveis do arquivo

7889

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5) Imported variable az

IDLgt helpaz Structure ltd5723f38gt 13 tags length=448 data length=444 refs=1 _NAME STRING az _ICONTYPE STRING binary _TYPE STRING DATASET _FILE STRING INTENSI_test_409OUTh5 _PATH STRING _DATA DOUBLE Array[38] _NDIMENSIONS LONG 1 _DIMENSIONS ULONG64 Array[1] _NELEMENTS ULONG64 38 _DATATYPE STRING H5T_FLOAT _STORAGESIZE ULONG 8 _PRECISION LONG 64 _SIGN STRING

IDLgt printaz_data 00000000 10000000 20000000 30000000 40000000 50000000 60000000 80000000 ()

7989

Arquivos - binaacuterios - imagens

JPEG JPEG200 TIFF GeoTIFF etc

Os formatos comuns de imagens satildeo bem suportados em muacuteltiplas plataformas para uso dentro de programas e interativamente

Alguns formatos tecircm opccedilatildeo de compressatildeo com perda eou sem perda

Armazenam imagens como arrays 2D ou 3D (3D frequumlentemente limitado a 3 ou 4 em uma das dimensotildees uma imagem em 3 ou 4 bandas) de inteiros ou (em alguns formatos) reais

Alguns formatos permitem armazenar metadados para caracterizar as imagens armazenadas

JPEG2000 e GeoTIFF (um subconjunto de TIFF) comuns em astronomia e aacutereas proacuteximas

8089

Arquivos - binaacuterios ndash imagens ndash exemplo (IDL)IDLgt printquery_tiff(issmap_2009tiffinfogeotiff=geo) 1

IDLgt helpinfo Structure ltd4eca4b8gt 18 tags length=144 data length=132 refs=1 CHANNELS LONG 4 DIMENSIONS LONG Array[2] IMAGE_INDEX LONG 0 NUM_IMAGES LONG 1 PIXEL_TYPE INT 1 TYPE STRING TIFF BITS_PER_SAMPLE LONG 8 POSITION FLOAT Array[2] RESOLUTION FLOAT Array[2] UNITS LONG 2 TILE_SIZE LONG Array[2] DESCRIPTION STRING ISS (2009) DATE_TIME STRING 20100218 012436()

IDLgt helpgeo Structure ltd4efa1b8gt 10 tags length=264 data length=262 refs=1 MODELPIXELSCALETAG DOUBLE Array[3] MODELTIEPOINTTAG DOUBLE Array[6 4] GEOGRAPHICTYPEGEOKEY INT 4035 GEOGSEMIMAJORAXISGEOKEY DOUBLE 25750000 GEOGSEMIMINORAXISGEOKEY DOUBLE 25750000()

IDLgt myimage=read_tiff(issmap_2009tiff) Lecirc a imagem para o array myimage

Obteacutem informaccedilotildees sobre o arquivo

8189

Arquivos - binaacuterios ndash formatos nativosLinguagens como IDL R Python Java tecircm seu formato nativo binaacuterio acessado em alto niacutevel Basta mandar salvar ler variaacuteveis no do arquivo a biblioteca padratildeo automagicamente faz todo o trabalho de decidir como gravar ler os dados

Conveniente de usar na proacutepria linguagem Mas raramente existem bibliotecas para ler gravar o formato nativo de uma linguagem a partir de outra Ex (IDL)

IDLgt savefile=2dspectrumsavmydatamyheadercorners_dcorners_averbosecompress SAVE Portable (XDR) compressed SAVERESTORE file SAVE Saved variable MYDATA SAVE Saved variable MYHEADER()

Pode ser lido com apenas (haacute formas mais elaboradas)

IDLgt restore2dspectrumsavverbose RESTORE Portable (XDR) compressed SAVERESTORE file RESTORE Save file written by ltunknowngtltunknowngt Thu Jan 27 191422 2011 RESTORE IDL version 801 (linux x86_64) RESTORE Restored variable MYDATA RESTORE Restored variable MYHEADER()

IDLgt helpmydatamyheadercorners_dcorners_aMYDATA FLOAT = Array[1201 1201]MYHEADER STRING = Array[144]()

8289

Arquivos - processamento em baixo niacutevel

Nem sempre um formato padratildeo eacute a melhor escolha para o problema

Nem sempre haacute escolha (pode-se ter que trabalhar com arquivos que jaacute foram escritos em algum formato proprietaacuterio)

Agraves vezes o formato eacute padratildeo mas natildeo haacute bom suporte a ele disponiacutevel

Em todos estes casos eacute necessaacuterio escrever rotinas em baixo niacutevel que vatildeo ler processar diretamente o conteuacutedo do arquivo

Preferencialmente criando interfaces de alto niacutevel para o programa que vai as usar

8389

Arquivos - processamento em baixo niacutevel - texto

Tomando o exemplo anterior onde as colunas eram de diferentes tipos

NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS dec18s0001 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0002 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0003 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 FLAT 5408757812500 460000 5 dec18s0004 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 DARK 5408757812500 460000 5

A forma mais simples de o ler diretamente eacute definir uma estrutura para receber cada linha e um array destas estruturas para receber todo o arquivo Ex (IDL)

IDLgt record=namecalmpos0filnameechlpos0d0disppos0d0targnameposdirclassmjd_obsitime0d0coadds0IDLgt nlines=file_lines(filesearch_scamtxt)IDLgt mydata=replicate(recordnlines-1)IDLgt header=

Depois de definidas as variaacuteveis que vatildeo receber os dados o arquivo pode ser lido

IDLgt openrunitfilesearch_scamtxtget_lunIDLgt readfunitheaderIDLgt readfunitmydataformat=(A14I8A15F104F104A18A19A15F158F105I15)IDLgt free_lununit

A gravaccedilatildeo de um arquivo texto poderia ser feita de forma semelhante apenas trocando openr por openw (abrir o arquivo para gravaccedilatildeo natildeo leitura) e readf por printf

O arquivo eacute aberto em uma unidade (unit) usada para especificar de onde eacute feita a leitura

Ao final o arquivo eacute fechado

8489

Arquivos - processamento em baixo niacutevel - texto

O que resulta em

IDLgt printheader NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS

IDLgt helpmydataMYDATA STRUCT = -gt ltAnonymousgt Array[4]

IDLgt helpmydata[0] Structure ltd5e38f68gt 11 tags length=136 data length=124 refs=3 NAME STRING dec18s0001 CALMPOS INT 0 FILNAME STRING NIRSPEC-5-AO ECHLPOS DOUBLE 62630000 DISPPOS DOUBLE 36450000 TARGNAME STRING HD85258 POSDIR STRING NIRSPEC-5-AOp1 CLASS STRING STAR MJD_OBS STRING 54087574 ITIME DOUBLE 10000000 COADDS INT 1

Este caso eacute mais complicado que os mais comuns por haver colunas de strings

Se todas fossem de nuacutemeros natildeo teria sido necessaacuterio especificar o formato explicitamente As colunas teriam sido adivinhadas pela biblioteca que lecirc o arquivo Poderia ter sido lido escrito soacute com um array de nuacutemeros sem estruturas

8589

Arquivos - processamento em baixo niacutevel - binaacuterio

Formatos binaacuterios podem ser definidos de qualquer forma O arquivo eacute apenas um conjunto de bytes Cabe ao software saber como os interpretar

Uma escolha comum para que sejam autodocumentados eacute incluir um cabeccedilalho de texto informando as caracteriacutesticas dos dados necessaacuterias para os ler

Ex (IDL) criar um arquivo que armazene um array de doubles com um cabeccedilalho informando as dimensotildees para que o programa que o lecirc saiba como ler os dados

Inventa dados e abre o arquivo

IDLgt data_to_write=dindgen(34)IDLgt openwunitbinary_exampledatget_lun

Escreve as dimensotildees como texto

IDLgt printfunitdimensions of the double array stored belowIDLgt printfunitsize(data_to_writedimensions)

Escreve os dados binaacuterios

IDLgt writeuunitdata_to_write

Fecha o arquivo

IDLgt free_lununit

Escreve em binaacuterio (write unformatted)

8689

Arquivos - processamento em baixo niacutevel - binaacuterio

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

dimensions of the double array stored below 3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

8789

Arquivos - processamento em baixo niacutevel - binaacuterioA leitura deste arquivo eacute igualmente simples

IDLgt header=IDLgt dims=[00]IDLgt openrunitbinary_exampledatget_lun

Lecirc as dimensotildees (armazenadas como texto)

IDLgt readfunitheaderIDLgt readfunitdims

Lecirc a parte binaacuteria depois de saber as dimensotildees

IDLgt data_read=dblarr(dims)IDLgt readuunitdata_read

Fecha o arquivo

IDLgt free_lununit

Verifica que os dados foram gravados e lidos corretamente

IDLgt printarray_equal(data_to_writedata_read) 1

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Lecirc dados binaacuterios (read unformatted)

8889

Sumaacuterio

5 ndash Slides em httpwwwppenteadonetpeapea04_strings_iopdf Strings Expressotildees regulares Arquivos

httpwwwppenteadonetpea

8989

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89

Strings - conversatildeo de outros tipos para strings

Algumas linguagens (Python IDL) tecircm mais de uma forma default de gerar strings Em Python uma forma eacute executaacutevel a outra eacute mais legiacutevel

In [30] x=arange(12)reshape(43)

In [31] print(x)[[ 0 1 2] [ 3 4 5] [ 6 7 8] [ 9 10 11]]

In [32] xOut[32]array([[ 0 1 2] [ 3 4 5] [ 6 7 8] [ 9 10 11]])

In [33] y=array([[ 0 1 2] [ 3 4 5] [ 6 7 8] [ 9 10 11]])

In [37] print(array_equal(xy))True

String mais legiacutevel

String executaacutevelPode ser usado para criar um objeto equivalente

2589

Strings ndash formataccedilatildeo expliacutecita

A formataccedilatildeo pode ser especificada se a conversatildeo default natildeo eacute adequada para definir a conversatildeo em um novo tipo

Cada linguagem tem sua sintaxe para formataccedilatildeo

Haacute dois estilos semelhantes em vaacuterias linguagens

Ambos os estilos satildeo sintaxes diferentes para a mesma ideacuteia Um coacutedigo especifica o tipo de dado sendo passado (inteiro real etc) e detalhes de como seraacute feito o string (largura do campo diacutegitos decimais alinhamento etc)

2689

Strings ndash formataccedilatildeo expliacutecita

Estilo Fortran

IDL

IDLgt print1d0+1d-9 10000000

IDLgt print1d0+1d-9format=(E1610)10000000010E+00

IDLgt printx=1d0+1d-9format=(A0F1613)X= 10000000010000

Estilo C (ldquoprintfrdquo)

IDL

IDLgt printformat=(x=1610e)1d0+1d-9x=10000000010e+00

Python

In [20] print(x=1610e (1e0+1e-9))x=10000000010e+00

Nenhum formato expliacutecito (default)

2789

Strings - formatos tipo Fortran

(apenas o principal ver documentaccedilatildeo para detalhes)

Ex (IDL)

IDLgt printx=1d0+1d-9format=(A0F1613)X= 10000000010000

Tambeacutem haacute modificadores para especificar alinhamento (-) se deve haver (ou ser suprimido) avanccedilo para a pŕoxima linha posiccedilatildeo dentro do campo etc

Coacutedigo Significado Exemplo(s)

A String (A) (10A)

I Inteiro decimal (I) (10I)(-2I)

B Inteiro binaacuterio (B) (10B)

Z Inteiro hexadecimal (Z) (10Z)

O Inteiro octal (O) (10O)

F Real ponto fixo (F)(F52)

E D Real ponto flutuante (E)(D1610)

G Real ponto fixo ou flutuante de acordo com o valor (G)(G10)

ldquordquo String literal (ldquox=rdquoI10)

X Caracteres em branco (A10XI)

2889

Strings - formatos tipo C (printf)(apenas o principal ver documentaccedilatildeo para detalhes)String com campos a serem substituiacutedos por valores (passados adiante) marcados por coacutedigos com

Ex (Python)In [20] print(x=1610e (1e0+1e-9))x=10000000010e+00

Haacute modificadores para especificar alinhamento como preencher o espaccedilo que sobra (espaccedilos zeros etc) para imprimir o sinal + etc

Coacutedigo Significado (tipo) Exemplo(s)

di Inteiro decimal (int) d 5d +05d

u Inteiro decimal sem sinal (unsigned int) u 7u

fF Real em ponto fixo (double float) f 136f

eE Real em ponto flutuante (double float) e 1610e

gG Real em ponto fixo ou flutuante decidido pelo valor (double float)

g 73G

xX Inteiro sem sinal hexadecimal (unsigned int) x 10X

o Inteiro sem sinal octal (unsigned int) o 5o

s String (string) s 10s

c Caractere (char) c

p Ponteiro - estilo C - (void ) p

literal

2989

Strings - conversatildeo de strings para outros tipos

Para gerar dados a partir de strings datas identificadores pedaccedilos de nomes valores numeacutericos armazenados em strings

Tambeacutem sempre haacute conversotildees default para os tipos baacutesicos onde o intepretador programa faz o possiacutevel para entender o string como um valor daquele tipo

Tipicamente eacute feito por casts (funccedilotildees de conversatildeo) reads (de strings ou arquivos texto (arquivos texto satildeo strings)) construtores de objetos ou implicitamente

3089

Strings - conversatildeo de strings para outros tipos - impliacutecitas

Exs (IDL)

IDLgt helpfix([17 17 171 -17 9 8])ltExpressiongt INT = Array[5]

IDLgt printfix([17 17 171 -17 9 8]) 17 17 17 -17 9

IDLgt printdouble([17 17 171 -17 9 8]) 17000000 17000000 17100000 -17000000 90000000

IDLgt readfunitabcd

IDLgt a=0d0IDLgt b=00IDLgt c=0IDLgt reads171d0 189d0 -9abcIDLgt helpabcA DOUBLE = 17100000B FLOAT = 189000C INT = -9

Converte o conteuacutedo do string para os tipos das variaacuteveis abcd (explicado adiante)

3189

Strings - conversatildeo de strings para outros tipos

Quando o default natildeo eacute suficiente (ou quando escrevendo o conversor em uma classe) costuma ser possiacutevel o fazer com formatos semelhantes aos formatos para gerar strings Exs (IDL)

IDLgt a=0d0IDLgt b=00IDLgt c=0IDLgt reads171d0 something 189d0-9abc READS Input conversion error Unit 0 File ltstdingt Error occurred at $MAIN$ Execution halted at $MAIN$

Natildeo funcionou porque sozinho ele natildeo conseguiu saber o que fazer com o ldquosomethingrdquo Usando um formato especiacutefico

IDLgt reads171d0 something 189d0-9 abcformat=(D6111XD611XI)

IDLgt helpabcA DOUBLE = 17100000B FLOAT = 189000C INT = -9

Exemplos mais complicados adiante (arquivos texto)

Variaacuteveis tecircm que ser definidas para informar para que tipo seraacute feita a conversatildeo default

3289

Strings - processamento natildeo baacutesicoOperaccedilotildees importantes e muito necessaacuterias mas que natildeo satildeo suportadas em todas as linguagens bibliotecas padratildeo

Testes (ex IDL)

IDLgt str=[afitsaFITSafitsaabfitsabcfits]

IDLgt printstrmatch(strfits) 1 0 0 1 1

IDLgt printstrmatch(strfitsfold_case) 1 1 0 1 1

IDLgt printstrmatch(strfitsfold_case) 1 1 1 1 1

IDLgt printstrmatch(strfits) 1 0 0 0 0

IDLgt printstrmatch(strfits) 0 0 0 1 0

3389

Strings - processamento natildeo baacutesico

Operaccedilotildees importantes e muito necessaacuterias mas que natildeo satildeo suportadas em todas as linguagens bibliotecas padratildeo

Separaccedilatildeo de partes (Ex IDL)

IDLgt printstrsplit(2011- 131 -extract)format=(A)2011131

Processamento de nomes de arquivos diretoacuterios (Ex IDL)

IDLgt printfile_dirname(some_directoryanother_directorysome_filetxt)some_directoryanother_directory

IDLgt printfile_basename(some_directoryanother_directorysome_filetxt)some_filetxt

IDLgt printfile_basename(another_directorysome_filetxttxt)+_alteredtxtsome_file_alteredtxt

3489

Strings - processamento natildeo baacutesico

Codificaccedilotildees (Ex Python 3)

gtgtgt s=infinite money infinNeuro sign

gtgtgt print(s)infinite money infineuro

gtgtgt print(ascii(s))infinite money u221eu20ac

gtgtgt print(sencode(utf-8))binfinite money xe2x88x9exe2x82xac

3589

Strings - processamento natildeo baacutesico

Perl eacute a linguagem mais avanccedilada para processamento de strings tem suporte nativo a muitas outras operaccedilotildees a semacircntica da linguagem eacute voltada principalmente para processar strings expressotildees regulares (de vaacuterios tipos) natildeo satildeo strings fazem parte da semacircntica

Ex (sem o objetivo que seja compreensiacutevel apenas para indicar o estilo)

Ler um arquivo contendo campos com nomes separados de valores por ()

temperature 10008name some modelx_dimension 100y_dimension 100z_dimension 50()

Armazenado-o em um mapa O que pode ser feito com apenas

While (ltgt) Loop over input linesPut pre-colon text into $1 post-colon into $2 if (m (S+) (+) ) Use $1 as key $2 as value $file_data$1 = $2

3689

Expressotildees regulares - definiccedilatildeo

Expressotildees regulares (regular expressions regex) satildeo a mais poderosa ferramenta para fazer buscas e separar substrings

Regex satildeo uma linguagem com o uacutenico objetivo de especificar propriedades de strings

Implementadas em graus diferentes em todas as linguagens modernas e modernizadas facilita encontrar uma expressatildeo jaacute pronta pois satildeo quase iguais em qualquer linguagem

Estatildeo na biblioteca padratildeo em IDL Python R Perl

Em C++ e Java em bibliotecas comuns (Boost Jregex)

Para que servem

Uma expressatildeo regular especifica propriedades de strings

O interpretador de expressotildees regulares (regular expression engine) recebe a expressatildeo e o string a analisar e determina se o string corresponde (matches) agrave expressatildeo regular

Em alguns casos o interpretador pode tambeacutem informar que parte(s) do string corresponde(m) a que parte(s) da expressatildeo regular e realizar processamentos com estas partes

3789

Expressotildees regulares ndash exemplos de usos Separar partes de strings

Encontrar linhas em arquivos que tenham nomes valores e comentaacuterios e separar estes pedaccedilos

Escalar com comentaacuterio

SLITPA = 351979 Slit position angle

Array 1D sem comentaacuterio (se extendendo por vaacuterias linhas)

BAND_BIN_CENTER = (03505400358950036629003732200379490 0387900104598)

Escalares em diferentes formatos

Total Mechanical Luminosity 15310E+03resources_usedwalltime=005603

Pedaccedilos de nomes

6063 17836E-20 2456 T FeIX((3Pe)3d(2PE)4p_1Po-3s2_3p6_1Se)

Datas separando ano mecircs dia hora (em vaacuterios formatos diferentes)

DATE-OBS= 2006-12-18 universal date of observationDATE_TIME = 2010-07-19T161032START_TIME = 2006-182T225102850Z

3889

Expressotildees regulares ndash exemplos de usos

Separar partes de strings Separar partes de nomes de arquivos (por significarem algo como identificar o

conteuacutedo)

specdec18s0041fitsscamdec18i0054fits15_7_mts_hmpixselh_mr15sav15_7_mts_hwpixselh_mr15sav16_3_mts_hwpixselb_mr16savreadmodel5l_-1_000010000_10000_r05_030_08196_0100000_005000000_1000eps

Determinar se um string eacute um nuacutemero (inteiro real fixo flutuante)

Encontrar identificadores Exs nomes de cataacutelogos endereccedilos HTTPFTP endereccedilos de email

Separar campos em arquivos sendo lidos onde as linhas natildeo tecircm a mesma formataccedilatildeo algumas linhas com colunas separadas por espaccedilos outras por tabs outras por

siacutembolos ignorando linhas de comentaacuterios e linhas vazias

3989

Expressotildees regulares - usoEx (IDL) encontrar nomes de arquivos com algumas propriedades

IDLgt printfilesformat=(A)CM_1477475933_1_viscubCM_1477476864_1_ircubCM_1477476864_1_irgcubCM_1477476864_1_viscubCM_1477477826_1_ircubCM_1477477826_1_irgcubCM_1477477826_1_viscubmosaic2cub

IDLgt printstregex(files+irgcubboolean) 0 0 1 0 0 1 0 0

A expressatildeo regular eacute +irgcub Especifica uma ou mais ocorrecircncias seguidas (+) de qualquer caractere () seguido de uma ocorrecircncia de irgcub (o ponto vem precedido do caractere de

escape () para ser entendido literalmente como um ponto e natildeo como o seu significado especial (qualquer caractere)

Esta aplicaccedilatildeo do interpretador (stregex) retorna um valor Booleano (verdadeirofalso) para cada elemento do string passado (files) que informa se aquele elemento correspondia agravequela expressatildeo regular

Este eacute um exemplo artificial Seria mais faacutecil ter usado strmatch(filesirgcub)

4089

Expressotildees regulares - uso

Em casos como este tipicamente o resultado de stregex seria usado como filtro para selecionar apenas os elementos do array de strings que satisfazem agravequela expressatildeo regular

IDLgt w=where(stregex(files+irgcubboolean)null)IDLgt printfiles[w]format=(A)CM_1477476864_1_irgcubCM_1477477826_1_irgcub

Ex (IDL) Determinar que strings conteacutem uma data no formato yyyy-mm-dd

IDLgt strs=[201002012010-02-012010-2-1aaaa-mm-ddT2010-02-01J]IDLgt printstregex(strs[0-9]4-[0-9]2-[0-9]2boolean) 0 1 0 0 1

Esta expressatildeo regular especifica quatro repeticcedilotildees (4) de diacutegitos (caracteres na faixa [0-9]) seguido de um (-) seguido de duas repeticcedilotildees (2) de dois diacutegitos ([0-9]) seguido de um (-) seguido de duas repeticcedilotildees (2) de dois diacutegitos ([0-9])

Uma expressatildeo regular apenas um pouco mais elaborada poderia corresponder aos 3 formatos de data no array acima E poderia se impedir que a uacuteltima (com outros caracteres antes e depois da data) seja aceita

4189

Expressotildees regulares - regras - caracteres ldquonormaisrdquo

Uma expressatildeo regular usa caracteres ldquonormaisrdquo e especiais para especificar o que se vai procurar na ordem em que aparecem na expressatildeo

Se um caractere eacute normal (natildeo eacute um dos especiais mostrados adiante) ele especifica uma ocorrecircncia daquele caractere

Ex J eacute uma expressatildeo regular que corresponde a qualquer string onde ocorra J Jaacute JA soacute corresponde a strings que tenham JA dentro

Exs (IDL)

IDLgt strs=[JJJJJJaJAjaJa]

IDLgt printstregex(strsJboolean) 1 1 1 0 1

IDLgt printstregex(strsJAboolean) 0 0 1 0 0

4289

Expressotildees regulares - regras - caracteres especiaisCaracteres especiais tecircm outros significados Para significar literalmente aquele caractere deve ser escapado (escaped) com um

Siacutembolo significado exemplo Corresponde(m) Escape o caractere seguinte deve ser interpretado

literalmente natildeo como especial aa

Qualquer caractere ab ajb aab abb jafbc

+ Uma ou mais repeticcedilotildees do que vem agrave esquerda a+b ab aab bab baabh

() Subexpressatildeo para agrupar termos afetados por um caractere especial (como parecircnteses em notaccedilatildeo matemaacutetica)

(ab)+c abc ababc dabababcg

Zero ou mais repeticcedilotildees dos termos agrave esquerda ab abbaab caaabg

Zero ou uma repeticcedilatildeo dos termos agrave esquerda ab b ab cabd cbd

| Alternaccedilatildeo qualquer um dos dois agrave esquerda a|bc ac bc jacd jbcd

n Exatamente n repeticcedilotildees do termo agrave esquerda a2b aab daaabg

n1n2 De n1 a n2 repeticcedilotildees do termo agrave esquerda a12b ab aab aaab gaaabbd

^ Acircncora (no comeccedilo) nada agrave esquerda ^ab ab abb

$ Acircncora (no fim) nada agrave direita ab$ abaab

[] Conjunto de valores (explicado adiante)

4389

Expressotildees regulares - regras - conjuntos de valores

[] denota um conjunto de valores que pode conter

Uma lista de coisas que devem corresponder Ex [abc] signfica qualquer caractere no conjunto abc Correspondem a esta

expressatildeo abcabha

Uma lista de coisas que natildeo podem corresponder [^abc] significa qualquer coisa que natildeo seja a b ou c Correspondem a esta

expressatildeo d jgs gg

Faixas de valores [0-9] signfica qualquer diacutegito [0-9a-zA-Z] significa qualquer diacutegito ou letra

Classes de valores como algumas faixas e outros conjuntos ocorrem com muita frequumlecircncia haacute nomes

especiais para eles Estes (em IDL) vecircm entre [] ex [[digit] significa o mesmo que [0-9]

4489

Expressotildees regulares - regras - classes de valores

Classe signficado

alnum Caracteres alfanumeacutericos 0-9a-zA-Z

alpha Caracteres alfabeacuteticos a-zA-Z

cntrl Caracteres de controle ASCII (natildeo visiacuteveis coacutedigos 1 a 31 e 127)

digit Diacutegitos (decimais) 0-9

graph Caracteres visiacuteveis ASCII 33 a 126 (natildeo inclui o espaccedilo)

lower Letras minuacutesculas a-z

print Caracteres ldquoimprimiacuteveisrdquo (visiacuteveis e o espaccedilo) ASCII 32 a 126

punct Caracteres de pontuaccedilatildeo $amprsquo()+-lt=gt[]^_lsquo|~

space Os caracteres ldquoem brancordquo (blank) espaccedilo tab tab vertical CR LF (ASCII 32 e 9-13)

upper Letras maiuacutesculas A-Z

xdigit Diacutegitos hexadecimais 0-9A-Fa-f

lt Comeccedilo de palavra (palavra definida como sequumlecircncia de coisas natildeo space)

gt Fim de palavra (palavra definida como sequumlecircncia de coisas natildeo space)

Estas satildeo apenas as principais Algumas implementaccedilotildees tecircm muito mais (em particular nas linguagens que usam Unicode nativamente)

4589

Expressotildees regulares - exemplos

Determinar se strings satildeo nuacutemeros (Ex IDL)

IDLgt str=[9-18 875-812-45913E9-98d7a188d032f5]

Inteiros

IDLgt intexpr=^[-+][0-9]+$

IDLgt printstregex(strintexprboolean) 1 1 0 0 0 0 0 0 0 0

Ponto flutuante

IDLgt fpexpr=^[-+](([0-9][0-9]+)|([0-9]+[0-9]))([eEdD][-+][0-9]+)$

IDLgt printstregex(strfpexprboolean) 1 1 0 1 1 1 1 1 0 0

Sinal opcional

1 ou mais diacutegitos

Sinal opcional

0 ou mais diacutegitos opcionalmente seguidos de um ponto e 1 ou mais diacutegitos

1 ou mais diacutegitos opcionalmente seguidos de um ponto e 0 ou mais diacutegitos

ou Expoente opcional letra do expoente seguida de sinal opcional seguido de um ou mais diacutegitos

4689

Expressotildees regulares ndash extraccedilatildeo

Interpretadores de expressotildees regulares costumam oferecer mais que apenas testar se um string corresponde a uma expressatildeo

Em geral tambeacutem podem retornar que parte(s) do string corresponde(m) agrave expressatildeo

Ex (IDL) Determinar se um string conteacutem uma data incluindo os formatos

IDLgt dates=[2011-01-312011 1 3120110131something done on y2011m1d31 with something]

E extrair a data de dentro do string

IDLgt expr=[0-9]4[0-9]12[0-9]12

(4 diacutegitos)(qualquer separador)(1 a 2 diacutegitos)(qualquer separador)(1 a 2 diacutegitos)

IDLgt printstregex(datesexprextract)format=(A)2011-01-312011 1 31201101312011m1d31

Como agora separar ano mecircs e dia Com uma busca e uma extraccedilatildeo para cada Poderia ser mais eacute mais faacutecil com uma uacutenica expressatildeo regular

4789

Expressotildees regulares - aleacutem de apenas testes

Tambeacutem podem retornar que parte(s) do string correspondem agrave expressatildeo toda e agraves suas subexpressotildees (partes da expressatildeo delimitadas por parecircnteses)

Ex (IDL) Separar pedaccedilos de datas Neste caso para a expressatildeo ficar menor assumindo um formato simples (yyyy-mm-ddThhmmssfff) Mas poderia ser um formato mais livre como no exemplo anterior

IDLgt str=Stuff observed on 2011-01-31T123924983 with some instrumentIDLgt expr=([0-9]4)-([0-9]2)-([0-9]2)T([0-9]2)([0-9]2)([0-9]2[0-9]3)

(quatro diacutegitos)-(2 diacutegitos)-(2 diacutegitos)T(2 diacutegitos)(2 diacutegitos)(2 diacutegitos3 diacutegitos)

IDLgt pieces=stregex(strexprextractsubexpr)IDLgt printpiecesformat=(A)2011-01-31T12392498320110131123924983IDLgt d=julday(pieces[2]pieces[3]pieces[1]pieces[4]pieces[5]pieces[6])IDLgt printdformat=(F166) 2455593027372

Expressatildeo inteiraPrimeira subexpressatildeoSegunda subexpressatildeoTerceira subexpressatildeoQuarta subexpressatildeoQuinta subexpressatildeoSexta subexpressatildeo

4889

Expressotildees regulares - referecircncias httpxkcdcom208

Viacutedeos do Software Carpentry

httpsoftware-carpentryorg4_0regexp

4989

Arquivos

Quase todo programa precisa armazenar dados em arquivos

Podem ser pequenos arquivos de paracircmetros ou enormes arquivos de dados produzidos ou a processar

Apesar do sugerido pela praacutetica comum arquivos texto natildeo satildeo sempre a melhor escolha para armazenar dados - e haacute muitas formas diferentes de os usar

Qual eacute a melhor escolha

Assim como para linguagens ou contecirciners natildeo existe ldquoo melhor formatordquo Cada um tem suas vantagens e desvantagens

Dados diferentes (mesmo se usados pelos mesmos programas) em geral se adequam melhor a formatos diferentes

5089

Arquivos - texto X binaacuterios

Em qualquer formato arquivos satildeo armazenados como diacutegitos binaacuterios

Mas haacute duas formas principais como eles podem ser codificados

Arquivos baseados em texto (text files)

Dados satildeo transformados em caracteres usando alguma formataccedilatildeo (mesmo se impliacutecita) e escritos com alguma codificaccedilatildeo de texto (comumente mas natildeo necessariamente ASCII)

Um arquivo texto eacute um ou mais strings As mesmas conversotildees tecircm que ser feitas depara outros tipos

Arquivos ldquobinaacuteriosrdquo (binary files)

Embora todo arquivo seja binaacuterio este nome costuma ser usado soacute para aqueles em que os dados natildeo estatildeo na forma de texto

Com frequumlecircncia (nem sempre) os dados satildeo gravados de forma idecircntica a como satildeo armazenados na memoacuteria

Muitos formatos usam uma mistura de partes em texto e partes binaacuterias

Um cabeccedilalho (header) de texto que daacute informaccedilotildees (metadados) sobre os dados armazenados na parte binaacuteria que vem depois

O cabeccedilalho conteacutem em especial informaccedilotildees sobre como ler os dados binaacuterios

5189

Arquivos - texto X binaacuterios

Vantagens de arquivos texto

Legiacuteveis por pessoas (human readable)

Podem ser auto-suficientes todo o necessaacuterio para os ler e entender o que conteacutem pode ser obtido olhando o arquivo

Satildeo os menos especiacuteficos a linguagens software normalmente satildeo escritos em ASCII ou Unicode e sempre haacute algum suporte a ler escrever texto em linguagens software

Haacute alguns formatos padratildeo para texto (exs CSV XML) que satildeo suportados em muitas plataformas diferentes

5289

Arquivos - texto X binaacuterios

Vantagens de arquivos binaacuterios

Em geral natildeo haacute conversotildees entre o os dados como armazenados na memoacuteria O que torna o armazenamento mais eficiente e sem alteraccedilotildees nos valores

A maior parte dos formatos padronizados eacute binaacuteria Exs FITS cube CDF NetCDF HDF HDF5 JPEG JPEG2000 TIFF GeoTIFF MPEG etc

Eacute mais comum que haja bibliotecas prontas (ateacute de alto niacutevel) para consulta leitura e gravaccedilatildeo

Os formatos melhor desenhados satildeo autodocumentados (em texto ou binaacuterio) para os ler natildeo eacute necessaacuterio conhecimento preacutevio sobre como os dados foram armazenados

Toda linguagem plataforma costuma ter seu formato binaacuterio mais nativo que costuma ser o mais faacutecil para leitura gravaccedilatildeo Em particular nas de alto niacutevel que tecircm formatos autodocumentados (especialmente

em IDL R Python Java)

Muitos formatos tecircm opccedilatildeo de compressatildeo dos dados

5389

Arquivos - proprietaacuterios X padratildeo

Independente da escolha texto binaacuterio programas devem escolher entre usar um formato proacuteprio ou um formato padronizado

A principal vantagem de formatos proacuteprios eacute que satildeo definidos da forma mais conveniente para a aplicaccedilatildeo que os usa simplificando leitura e gravaccedilatildeo e potencialmente otimizando recursos (acesso ao disco tamanho do arquivo etc)

A principal desvantagem de formatos proacuteprios eacute ser necessaacuterio escrever todo o coacutedigo para os ler gravar

Pode dar mais trabalho que usar um formato geneacuterico que natildeo seja exatamente o que melhor se encaixa na aplicaccedilatildeo

O coacutedigo para processar o formato em geral vai ser menos completo e conveniente de usar que o de um formato bem estabelecido usado por muitos outros em muitos ambientes

Cada novo software que for usar estes arquivos vai precisar compartilhar do mesmo coacutedigo ou precisar de coacutedigo novo (em particular se em outra linguagem) para ler gravar naquele formato

Eacute necessaacuterio documentar o formato e decidir sobre como ele seraacute definido

Se outros jaacute colocaram muito trabalho desenvolvendo bons formatos padratildeo bem suportados em muitos ambientes por que ter o trabalho de reinventar (e reprogramar redocumentar e retestar) a roda

5489

Arquivos - padrotildees comuns em astronomia (exs adiante)

Texto

CSV Comma-separated values - bem suportado por muitos softwares

ldquoColunas fixasrdquo Natildeo eacute um padratildeo bem definido mas eacute praacutetica comum para tabelas (2D)

XML Extensible Markup Language - O padratildeo texto mais flexiacutevel de grande uso em programaccedilatildeo geral para armazenar qualquer coisa com frequumlecircncia de forma hieraacuterquica Bem suportado por linguagens modernas (e modernizadas) e bibliotecas das principais

linguagens gerais Alta complexidade o torna trabalhoso de usar

5589

Arquivos - padrotildees comuns em astronomia (exs adiante)Binaacuterios

FITS Flexible Image Transport System - o mais comum para observaccedilotildees astronocircmicas Conteacutem os dados (em geral arrays 1D 2D ou 3D) e documentaccedilatildeo (nos cabeccedilalhos) sobre a origem e caracteriacutesticas dos dados Tambeacutem usado para armazenar tabelas de dados quaisquer mesmo que natildeo sejam observaccedilotildees (especialmente pelo STSCI) Variam muito em qualidade de documentaccedilatildeo

NetCDF Network Common Data Form - evoluccedilatildeo do CDF autodocumentado eacute comum e bem suportado para vaacuterios arrays de dados

HDF5 Hierarchical Data Format ndash autodocumentado comum e bem suportado permitindo aleacutem de simples arrays estruturas (eacute um formato hieraacuterquico)

Formatos de imagens JPEG JPEG2000 TIFF GeoTIFF etc - voltados para arrays 2D3D de inteiros ou (em alguns casos) reais com ou sem compressatildeo JPEG2000 tem caracteriacutesticas mais avanccediladas como imagens multiresoluccedilatildeo

Formatos vetoriais PS EPS DXF SHP SVG - variados niacuteveis de suporte a armazenamento de vetores e formas em 2D ou 3D

ISIS Cube semelhante em caracteriacutesticas ao FITS mais usado em sensoriamento remoto geociecircncias e ciecircncias planetaacuterias em geral para observaccedilotildees 1D 2D ou 3D

Formatos nativos de linguagens todo o trabalho de leitura e gravaccedilatildeo eacute feito automagicamente pela biblioteca padratildeo em IDL R Python Java

5689

Arquivos texto - newlines

Apesar do que possa parecer arquivos texto natildeo tecircm intrinsecamente vaacuterias linhas Arquivos texto satildeo soacute uma sequumlecircncia 1D de caracteres em alguma codificaccedilatildeo Separaccedilatildeo em linhas (equivalente a interpretar o arquivo como 2D em linhas e colunas) eacute

especificada por convenccedilotildees Natildeo haacute apenas uma convenccedilatildeo para o fim de linhas

A mais primitiva convenccedilatildeo eacute separaccedilatildeo nenhuma estipula-se que linhas tenham um nuacutemero fixo N de caracteres e cabe ao software que lecirc o arquivo entender que uma linha nova ocorre regularmente a cada N caracteres

Eacute a forma menos portaacutevel e mais inconveniente eacute necessaacuterio o conhecimento preacutevio (ou por inspeccedilatildeo do arquivo) de quantos caracteres haacute por linha

A maior parte dos editores de texto natildeo vai saber separar linhas desta forma (por falta deste conhecimento preacutevio) Exemplo (de um FITS real)

SIMPLE = T Fits standard BITPIX = 16 Bits per pixel NAXIS = 0 Number of axes EXTEND = T File may contain extensions

O que com as linhas quebradas nos lugares certos seria

SIMPLE = T Fits standard BITPIX = 16 Bits per pixel NAXIS = 0 Number of axes EXTEND = T File may contain extensions

5789

Arquivos texto - newlines

A forma mais comum de especificar linhas eacute com um marcador do final de linha (newline)

Eacute um caractere especial natildeo normalmente presente no texto que serve para marcar fim de linhas

Mas natildeo haacute soacute um padratildeo de newline Os mais comuns

LF (Line Feed ASCII 10) ndash Unix Linux Mac OS X

CR - (Carriage Return ASCII 13) - Mac OS lt10

CR+LF (CR seguido de LF) - Windows DOS

Eacute o motivo de o Notepad (Windows) natildeo entender as quebras de linha de arquivos escritos com o formato nativo de Linux o arquivo soacute tem LF enquanto o editor espera CR+LF

Alguns sistemas (strings em vaacuterias linguagens por exemplo) usam o coacutedigo de escape n para indicar newline que eacute codificado de acordo com o padratildeo sendo usado

Em geral bibliotecas de leitura e gravaccedilatildeo de arquivos usam (default pelo menos) o newline nativo do sistema em que satildeo usadas

Programas de conversatildeo entre os sistemas satildeo comuns (ex dos2unix)

O Wordpad identifica se for usado soacute LF e quebra as linhas de acordo

5889

Arquivos - texto - CSV

Comma-separated values

O formato mais padronizado para tabelas (arrays 2D) em texto (frequentemente mas natildeo necessariamente ASCII)

Bem suportado por bibliotecas padratildeo de linguagens e outros softwares (Excel Calc Origin Google Docs etc)

Conteacutem Linhas de cabeccedilalho (opcionais mas recomendadas) linhas com qualquer texto geral

descrevendo o arquivo e em geral uma linha de tiacutetulo para as colunas da tabela Uma (apenas uma) tabela onde todas as linhas tecircm o mesmo nuacutemero de colunas

Colunas separadas por viacutergulas (opcionalmente pode ser outro separador) Linhas terminadas por newline (qualquer que seja) Strings delimitados por ldquo ldquo

Ex

NAMECALMPOSFILNAMEECHLPOSDISPPOSTARGNAMEPOSDIRCLASSMJD-OBSITIMECOADDSdec18s00010NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001dec18s00020NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001dec18s00120NIRSPEC-5-AO635800364500itan140NIRSPEC-5-AOp2 TITAN5408763000001dec18s00140NIRSPEC-5-AO626300364500itan140NIRSPEC-5-AOp1 TITAN5408763000001dec18s00151NIRSPEC-5-AO626300364500itan140NIRSPEC-5-AOp1ARC5408764000001dec18s00160NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001

Natildeo eacute necessaacuterio que as colunas tenham largura constante

Cabeccedilalho

5989

Arquivos - texto - CSVHaacute amplo suporte a leitura e gravaccedilatildeo de CSV sem precisar recorrer a procedimentos de baixo niacutevel

Podem ser diretamente importados em Excel Calc Origin Google Docs ou lido facilmente com bibliotecas padratildeo comuns Ex (IDL)

IDLgt c=read_csv(filesearch_scamcsvheader=h)IDLgt printhNAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS

IDLgt helpc Structure ltc8bca508gt 11 tags length=5256 data length=5248 refs=1 FIELD01 STRING Array[41] FIELD02 LONG Array[41] FIELD03 STRING Array[41] FIELD04 DOUBLE Array[41] FIELD05 DOUBLE Array[41] FIELD06 STRING Array[41] FIELD07 STRING Array[41] FIELD08 STRING Array[41] FIELD09 STRING Array[41] FIELD10 DOUBLE Array[41] FIELD11 LONG Array[41]

IDLgt printcfield01[03]dec18s0001 dec18s0002 dec18s0003 dec18s0004

IDLgt printcfield03[03]NIRSPEC-5-AO NIRSPEC-5-AO NIRSPEC-5-AO NIRSPEC-5-AO

6089

Arquivos - texto - CSVEx (IDL) Criaccedilatildeo de um CSV com uma tabela de valores

Criaccedilatildeo de 3 arrays 1D (12 elementos) um para cada coluna

IDLgt x=dindgen(3)IDLgt y=dindgen(4)IDLgt xx=reform(rebin(x34)12)IDLgt yy=reform(rebin(reform(y14)34)12)IDLgt f=xx+yy10IDLgt helpxxyyfXX DOUBLE = Array[12]YY DOUBLE = Array[12]F DOUBLE = Array[12]

Escrita do arquivo

IDLgt write_csvexamplecsvxxyyfheader=[XYX+10Y]

ResultadoXYX+10Y000000000000000000000000100000000000000010000000200000000000000020000000000000001000000010000000100000001000000011000000()

6189

Arquivos - texto - ldquoColunas regularesrdquoFixed column width

Natildeo eacute exatamente um padratildeo Eacute uma praacutetica comum

Armazena uma tabela (array 2D) de forma regular simples de ser interpretada e lida

Costumam ter linha(s) de cabeccedilalho descrevendo o conteuacutedo do arquivo em geral com uma linha para os nomes das colunas

As demais linhas conteacutem os dados sempre ocupando a mesma largura por coluna e escritos no mesmo formato em cada coluna

Costumam ser simples de ler inclusive interativamente (exs Excel Calc Origin read_ascii)

Ex (IDL) Uma simples tabela soacute de nuacutemeros

wavl CH4=33 wavl CH4=25 wavl CH4=10 wavl CH4=08 wavl CH4=05 wavl CH4=026 wavl CH4=02 477330000 0090130 477330000 0091110 477330000 0089250 477330000 0087000 477330000 0087140 477330000 0090080 477330000 0088110 480040000 0090930 480040000 0091930 480040000 0090160 480040000 0087930 480040000 0088110 480040000 0090950 480040000 0089090 482750000 0091710 482750000 0092730 482750000 0091060 482750000 0088850 482750000 0089080 482750000 0091810 482750000 0090060 485450000 0092530 485450000 0093570 485450000 0092000 485450000 0089810 485450000 0090100 485450000 0092730 485450000 0091090

IDLgt a=read_ascii(specs_27s_ntxtdata_start=1header=header)IDLgt printheader wavl CH4=33 wavl CH4=25 wavl CH4=10 wavl CH4=08 wavl CH4=05 wavl CH4=026 wavl CH4=02 IDLgt helpa Structure ltd423c9a8gt 1 tags length=224 data length=224 refs=1 FIELD01 FLOAT Array[14 4]

6289

Arquivos - texto - ldquoColunas regularesrdquoJaacute um arquivo um pouco mais difiacutecil de ler

NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS dec18s0001 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0002 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0003 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 FLAT 5408757812500 460000 5 dec18s0004 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 DARK 5408757812500 460000 5

Por ter colunas de tipos diferentes (strings inteiros reais) natildeo eacute possiacutevel o ler em um simples array Mas eacute faacutecil o colocar em uma estrutura de arrays onde cada campo eacute uma coluna

Especificando interativamente como interpretar as linhasIDLgt templ=ascii_template(filesearch_scamtxt)

Nome do campo (default mostrado)

Tipo do campo (identificado automaticamente)

Posiccedilatildeo (caracter) do comeccedilo (identificada automaticamente)

Linha de exemplo para verificar as colunas

6389

Arquivos - texto - ldquoColunas regularesrdquoDepois de feito o template o arquivo pode ser lido com apenas

IDLgt a=read_ascii(filesearch_scamtxttemplate=templ)IDLgt helpa Structure ltd4ec4608gt 11 tags length=416 data length=416 refs=1 FIELD01 STRING Array[4] FIELD02 LONG Array[4] FIELD03 STRING Array[4] FIELD04 FLOAT Array[4] FIELD05 FLOAT Array[4] FIELD06 STRING Array[4] FIELD07 STRING Array[4] FIELD08 STRING Array[4] FIELD09 FLOAT Array[4] FIELD10 FLOAT Array[4] FIELD11 LONG Array[4]IDLgt printafield01dec18s0001 dec18s0002 dec18s0003 dec18s0004IDLgt printafield04 626300 626300 626300 626300

O template (uma estrutura contendo dados sobre como ler o arquivo) pode ser usado para outros arquivos no mesmo formato No lugar de ter sido criado interativamente poderia ter sido lido de algum arquivo Poderia ter especificado nomes para os campos que seriam mais amigaacuteveis que coias como FIELD11

6489

Arquivos - texto - XML

Extensible Markup Language

Admite grande flexibilidade e por isso pode ter alta complexidade

Valores satildeo colocados dentro de uma estrutura em hieraacuterquica (em uma aacutervore) com os noacutes identificados pelos seus nomes (chaves)

Largamente usado em muitas aacutereas para armazenar conjuntos arbitraacuterios de quaisquer estruturas de dados

A maioria das aplicaccedilotildees usa um formato que eacute um subconjunto do XML especificado por um Schema comumente em um arquivo XML DTD (Document Type Definition)

6589

Arquivos - texto ndash XML ndash exemplos de usos

Armazenamento de dados de aplicaccedilotildees web (comum para exportar importar dados MediaWiki DokuWiki WordPress ADS Lattes etc)

Documentos Office (docx pptx xlsx) OpenOffice (odt opd ods)

Como versotildees de outros formatos FITSML XDF

ldquoScientific Dataset XML NASAs Astronomical Data Center (ADC) sponsors a number of research projects that

use XML for scientific data representation The XML activities at the ADC are sponsored and supported by the NASA Office of Space Science Applied Information Systems Research Program (AISRP)rdquo - httpxmlcoverpagesorgnasa-adchtml

Astronomical Instrument Markup Language (AIML)

SVG ndash Scalable Vector Graphics

Muitas de outras aplicaccedilotildees listadas em httpxmlcoverpagesorgxmlhtmlapplications

6689

Arquivos - texto ndash XML - exemploltxml version=10 gtltDOCTYPE Xdmf SYSTEM Xdmfdtd []gtltXdmf xmlnsxi=httpwwww3org2001XInclude Version=20gt ltDomaingt lt-- Example of Basic Topologies --gt ltInformation Name=Descriptiongt Example of a Polyvertex Topology ltInformationgt ltGrid Name=Polyvertex GridType=Uniformgt ltTopology TopologyType=Polyvertex Dimensions=3 NodesPerElement=3gt ltDataItem Format=XML Dimensions=3 3 NumberType=Floatgt 0 1 2 4 5 6 8 9 10 ltDataItemgt ltTopologygt ltGeometry Type=XYZgt ltDataItem Format=XML Dimensions=4 4 3gt 00 00 00 10 00 00()Que mostra que a interpretaccedilatildeo (parsing) de XML eacute em geral complexa

6789

Arquivos - texto - XML

Haacute muitas bibliotecas de alto niacutevel para fazer o processamento (parsing) e entregar os dados em uma estrutura conveniente

A complexidade em processar XML estaacute em decidir o que fazer com os dados jaacute que os arquivos podem ser muito complexos

As APIs (Application Programming Interfaces) mais comuns para processar XML que satildeo implementadas em muitas linguagens

DOM (Document Object Model) ndash manteacutem todo o conteuacutedo do em uma estrutura de dados (em geral uma aacutervore) em uma variaacutevel (em geral um objeto) Esta pode ser consultada para obter os valores de interesse para os alterar e usada para escrever um arquivo

SAX (Simple API for XML) ndash Interpretador (parser) por objetos O usuaacuterio escreve uma classe herdando da classe SAX provendo os meacutetodos que vatildeo processar os campos agrave medida em que estes satildeo lidos

6889

Arquivos - binaacuterios - FITSFlexible Image Transport System

O formato mais comum para observaccedilotildees astronocircmicas Tambeacutem usado para armazenar quaisquer dados mesmo natildeo relacionados a observaccedilotildees (especialmente tabelas como eacute praacutetica do STSCI)

Conteacutem um (ou mais) cabeccedilalho(s) de texto com metadados (informaccedilotildees sobre os dados como caracteriacutesticas (necessaacuterias para os ler) origem condiccedilotildees em que foram obtidos processamento realizado etc)

SIMPLE = T image conforms to FITS standard BITPIX = 32 bits per data value NAXIS = 2 number of axes NAXIS1 = 1024 NAXIS2 = 1024 BSCALE = 100000 Scaling factor BZERO = 000000 Scaling zero-point TELESCOP= Keck II Telescope SLITNAME= 0041x226 Slit Name SLITPA = 351979 Slit position angle SLITX = 131500 X pixel of the center of the slit LST = 12010446 local apparent sidereal time (()

Depois do cabeccedilalho haacute uma (ou mais) seccedilatildeo(otildees) de dados binaacuterios Costuma(m) ser array(s) 1D (espectros) 2D (imagens) ou 3D (ldquocubos de dadosrdquo)

De inteiros ou reais inteiros satildeo comuns em contagens de instrumentos reais para valores derivados (fluxos intensidades etc)

6989

Arquivos - binaacuterios - FITSNormalmente FITS satildeo lidos escritos por bibliotecas prontas de (relativamente) alto niacutevel usuaacuterio natildeo tem que saber como os dados satildeo armazenados no arquivo nem como os ler escrever Ex (IDL com a biblioteca idlastro)

IDLgt fits_info2dspectrumfits2dspectrumfits has 3 extensionsPrimary header 288 recordsNo dataExtension 1 -- SCI Header 144 records IMAGE ( 1201 1201 )Extension 2 -- ERR Header 72 records IMAGE ( 1201 1201 )Extension 3 -- DQ Header 72 records IMAGE ( 1201 1201 )

IDLgt mydata=readfits(2dspectrumfitsexten_no=1myheader) READFITS Reading FITS extension of type IMAGE READFITS Now reading 1201 by 1201 array

IDLgt extastmyheadermyastIDLgt sz=size(mydatadimensions)IDLgt xy2ad[1sz[0]][1sz[1]]myastcorners_acorners_dIDLgt printcorners_aCorners of the data array from file 2dspectrumfits are at 14487480 33063480

IDLgt printcorners_d -00041264444 00041402222

Obteacutem os dados de coordenadas (WCS) do header

Coloca os dados no array (2D de floats) mydata e o header no array (1D de strings) myheader

Calcula as coordenadas das quinas da imagem atraveacutes do WCS

Provecirc informaccedilotildees sobre o arquivo

7089

Arquivos - binaacuterios - ISIS Cube

Formatos como FITS se adequam muito a ter uma interface de mais alto niacutevel por objetos

Tambeacutem para dados em tabelas FITS muito mais trabalhosos de ler em baixo niacutevel que se adequam muito mais a mapas ou estruturas

Exemplo (de um formato semelhante a FITS ISIS cube)

O objeto ao ser criado lecirc todo o arquivo

cube=pp_editablecube(CM_1553510065_1_ircub)

Meacutetodos fornecem os dados desejados para obter quando necessaacuterio os dados de interesse

Find out the names of the backplanesprintcubegetproperty(backnames)Get the start time of the cubeprintcubegetfromheader(START_TIME)2007-084T100057286Z

Valores no cabeccedilalho podem ser convenientemente fornecidos como um mapa

header=cubeheader_as_hash()printheader[START_TIME]2007-084T100057286Z

7189

Arquivos - binaacuterios ndash ISIS Cube

Os dados satildeo fornecidos como arraysMake a contour plot of the latitudesc=contour(cubegetsuffixbyname(LATITUDE))Get the band with wavelength nearest to 21 (in the units used in the cube)selband=cubegetbandbywavelength(21wavelengths=selwavs)

Interfaces por overload tornam o acesso ainda mais conveniente

selband=cube[21]

selwavs=cube[21]

Retorna um array com a banda de comprimento de onda mais proacuteximo de 21 (microm)

Retorna o comprimento de onda mais proacuteximo de 21 (microm) da banda retornada acima

7289

Arquivos - binaacuterios ndash ISIS Cube Alteraccedilotildees feitas ao conteuacutedo satildeo automaticamente refletidas em todos os

lugares (cabeccedilalho em particular) afetados mantendo o objeto vaacutelido que pode depois ser gravado em um novo arquivo

IDLgt printcubelinescubesamplescubebands 64 64 256

IDLgt helpcubecoreltExpressiongt FLOAT = Array[64 64 256]

IDLgt cubecore=dblarr(100100256)

A linha acima natildeo eacute uma atribuiccedilatildeo eacute uma invocaccedilatildeo de meacutetodo Eacute equivalente acubesetpropertycore=dblarr(100100256)

Eacute o trabalho da funccedilatildeo setproperty decidir se a propriedade passada (core) faz sentido e se fizer fazer todo o trabalho necessaacuterio a esta mudanccedila Para o usuaacuterio eacute tudo automaacutetico e os dados da classe satildeo vaacutelidos o tempo todo

IDLgt helpcubecoreltExpressiongt DOUBLE = Array[100 100 256]

IDLgt printcubelinescubesamplescubebands 100 100 256

IDLgt cubesaveCM_1553510065_1_ir_editedcub

7389

Arquivos - binaacuterios ndash NetCDF e HDF5

Network Common Data Form e Hierarchical Data Format

Os dois uacutenicos formatos bem estabelecidos para dados cientiacuteficos geneacutericos

Armazenam dados como vaacuterias variaacuteveis e seus metadados Para cada variaacutevel haacute (ou pode haver) os metadados

Nome Dimensotildees (do array) Unidades Comentaacuterios

Ambos permitem arrays multidimensionais

Apenas HDF5 permite estruturas (daiacute vem a hierarquia)

Autodocumentados qualquer software que saiba ler um destes formatos lecirc qualquer arquivo sem precisar de conhecimento preacutevio sobre como o arquivo foi gerado

Muito bem suportados em bibliotecas padratildeo e natildeo padratildeo em softwares interativos e visualizadores (inclusive plugins para navegadores)

httpwwwunidataucaredusoftwarenetcdf httpenwikipediaorgwikiHdf5

NetCDF eacute mais simples de usar por natildeo ter hierarquia dando menos trabalho para ler e escrever dados Se hierarquia natildeo eacute necessaacuteria eacute mais conveniente de usar que HDF5

7489

Arquivos - binaacuterios - NetCDF e HDF5Haacute tambeacutem o formato CDL uma versatildeo ASCII do NetCDF A biblioteca padratildeo do NetCDF inclui conversores entre estes formatos

$ ncdump -h refspec_g01_0ncnetcdf refspec_g01_0 dimensions nlay = 51 nwn = 400 nleg = 33 numu = 2 nlev = 52 nphi = 3 ngas = 2 nwnc = 1 scal = 1 v3 = 3 dnl = 1 nk = 1 tdisr = UNLIMITED (0 currently) na = 16

variables float alb(nwn) float z(nlay) float t(nlay) float p(nlay) float wl(nwn) float iof(nwn) float mtau(nwn) float htau(nwn) float hctaus(nwn) float gtau(nwn) float outcos(scal) float phi(nleg) float phic(scal) float umu(numu) float flux(v3 nwn nlev) float mix(nlay ngas) float c(nlay) float psat(nlay) float ga(nwnc) float wlc(nwnc) float inc(scal) int dm(scal) int ord(scal) float fbeam(scal) float wn(nwn) float tautot(nwn nlay) float htaus(nwn nlay) float htaux(nwn nlay) float taug(nwn nlay) float phase(nwn nlay nleg) float ssa(nwn nlay) float uu(nwn nphi nlev numu) float u0u(nwn nlev numu) float tray(nwn nlay) float gtauo(tdisr nwn nlay)

Haacute 14 variaacuteveis usadas como dimensotildees para as 35 variaacuteveis que satildeo arrays

Ex alb(nwn) indica que alb eacute um array 1D de nwn elementos

nwn estaacute armazenado como uma das dimensotildees e eacute 400 portanto alb tem 400 elementos

Parte do conteuacutedo de um arquivo NetCDF em formato CDL (gerado pelo programa ncdump)

7589

Arquivos - binaacuterios - NetCDF e HDF5Conteuacutedo daquele arquivo visualizado com o ncview (acompanha a biblioteca NetCDF padratildeo)

7689

Arquivos - binaacuterios - NetCDF e HDF5O conteuacutedo de todo o arquivo pode ser lido facilmente com as bibliotecas disponiacuteveis e armazenado em contecirciners convenientes Usando um objeto que gera um resultado um pouco mais conveniente

IDLgt h=pp_readncdf(refspec_g01_0nchash)IDLgt printhvar_dims ltObjHeapVar229(HASH)gtvars ltObjHeapVar152(HASH)gtdims ltObjHeapVar118(HASH)gt

IDLgt printh[vars]T 173203 175459 175848 176001 175975 Z 431869 418858 406067 393403 380464 FLUX 300660 145536 0705180 0341669 0165532 PHASE 100000 0779034 0660858 0542052 0449983 TAUTOT0694377 0693420 0693474 0693540 0693636()

IDLgt help(h[vars])[TAUTOT]ltExpressiongt FLOAT = Array[51 400]

IDLgt print(h[var_dims])[TAUTOT]NLAY NWN

IDLgt print(h[dims])[(h[var_dims])[TAUTOT]]NLAY 51NWN 400

7789

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5)

Visualizaccedilatildeo da variaacutevel selecionada

Metadados e alguns valores da variaacutevel selecionada

Variaacutevel a ser criada com o conteuacutedo desta variaacutevel do arquivo

Hierarquia das variaacuteveis do arquivo

7889

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5) Imported variable az

IDLgt helpaz Structure ltd5723f38gt 13 tags length=448 data length=444 refs=1 _NAME STRING az _ICONTYPE STRING binary _TYPE STRING DATASET _FILE STRING INTENSI_test_409OUTh5 _PATH STRING _DATA DOUBLE Array[38] _NDIMENSIONS LONG 1 _DIMENSIONS ULONG64 Array[1] _NELEMENTS ULONG64 38 _DATATYPE STRING H5T_FLOAT _STORAGESIZE ULONG 8 _PRECISION LONG 64 _SIGN STRING

IDLgt printaz_data 00000000 10000000 20000000 30000000 40000000 50000000 60000000 80000000 ()

7989

Arquivos - binaacuterios - imagens

JPEG JPEG200 TIFF GeoTIFF etc

Os formatos comuns de imagens satildeo bem suportados em muacuteltiplas plataformas para uso dentro de programas e interativamente

Alguns formatos tecircm opccedilatildeo de compressatildeo com perda eou sem perda

Armazenam imagens como arrays 2D ou 3D (3D frequumlentemente limitado a 3 ou 4 em uma das dimensotildees uma imagem em 3 ou 4 bandas) de inteiros ou (em alguns formatos) reais

Alguns formatos permitem armazenar metadados para caracterizar as imagens armazenadas

JPEG2000 e GeoTIFF (um subconjunto de TIFF) comuns em astronomia e aacutereas proacuteximas

8089

Arquivos - binaacuterios ndash imagens ndash exemplo (IDL)IDLgt printquery_tiff(issmap_2009tiffinfogeotiff=geo) 1

IDLgt helpinfo Structure ltd4eca4b8gt 18 tags length=144 data length=132 refs=1 CHANNELS LONG 4 DIMENSIONS LONG Array[2] IMAGE_INDEX LONG 0 NUM_IMAGES LONG 1 PIXEL_TYPE INT 1 TYPE STRING TIFF BITS_PER_SAMPLE LONG 8 POSITION FLOAT Array[2] RESOLUTION FLOAT Array[2] UNITS LONG 2 TILE_SIZE LONG Array[2] DESCRIPTION STRING ISS (2009) DATE_TIME STRING 20100218 012436()

IDLgt helpgeo Structure ltd4efa1b8gt 10 tags length=264 data length=262 refs=1 MODELPIXELSCALETAG DOUBLE Array[3] MODELTIEPOINTTAG DOUBLE Array[6 4] GEOGRAPHICTYPEGEOKEY INT 4035 GEOGSEMIMAJORAXISGEOKEY DOUBLE 25750000 GEOGSEMIMINORAXISGEOKEY DOUBLE 25750000()

IDLgt myimage=read_tiff(issmap_2009tiff) Lecirc a imagem para o array myimage

Obteacutem informaccedilotildees sobre o arquivo

8189

Arquivos - binaacuterios ndash formatos nativosLinguagens como IDL R Python Java tecircm seu formato nativo binaacuterio acessado em alto niacutevel Basta mandar salvar ler variaacuteveis no do arquivo a biblioteca padratildeo automagicamente faz todo o trabalho de decidir como gravar ler os dados

Conveniente de usar na proacutepria linguagem Mas raramente existem bibliotecas para ler gravar o formato nativo de uma linguagem a partir de outra Ex (IDL)

IDLgt savefile=2dspectrumsavmydatamyheadercorners_dcorners_averbosecompress SAVE Portable (XDR) compressed SAVERESTORE file SAVE Saved variable MYDATA SAVE Saved variable MYHEADER()

Pode ser lido com apenas (haacute formas mais elaboradas)

IDLgt restore2dspectrumsavverbose RESTORE Portable (XDR) compressed SAVERESTORE file RESTORE Save file written by ltunknowngtltunknowngt Thu Jan 27 191422 2011 RESTORE IDL version 801 (linux x86_64) RESTORE Restored variable MYDATA RESTORE Restored variable MYHEADER()

IDLgt helpmydatamyheadercorners_dcorners_aMYDATA FLOAT = Array[1201 1201]MYHEADER STRING = Array[144]()

8289

Arquivos - processamento em baixo niacutevel

Nem sempre um formato padratildeo eacute a melhor escolha para o problema

Nem sempre haacute escolha (pode-se ter que trabalhar com arquivos que jaacute foram escritos em algum formato proprietaacuterio)

Agraves vezes o formato eacute padratildeo mas natildeo haacute bom suporte a ele disponiacutevel

Em todos estes casos eacute necessaacuterio escrever rotinas em baixo niacutevel que vatildeo ler processar diretamente o conteuacutedo do arquivo

Preferencialmente criando interfaces de alto niacutevel para o programa que vai as usar

8389

Arquivos - processamento em baixo niacutevel - texto

Tomando o exemplo anterior onde as colunas eram de diferentes tipos

NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS dec18s0001 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0002 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0003 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 FLAT 5408757812500 460000 5 dec18s0004 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 DARK 5408757812500 460000 5

A forma mais simples de o ler diretamente eacute definir uma estrutura para receber cada linha e um array destas estruturas para receber todo o arquivo Ex (IDL)

IDLgt record=namecalmpos0filnameechlpos0d0disppos0d0targnameposdirclassmjd_obsitime0d0coadds0IDLgt nlines=file_lines(filesearch_scamtxt)IDLgt mydata=replicate(recordnlines-1)IDLgt header=

Depois de definidas as variaacuteveis que vatildeo receber os dados o arquivo pode ser lido

IDLgt openrunitfilesearch_scamtxtget_lunIDLgt readfunitheaderIDLgt readfunitmydataformat=(A14I8A15F104F104A18A19A15F158F105I15)IDLgt free_lununit

A gravaccedilatildeo de um arquivo texto poderia ser feita de forma semelhante apenas trocando openr por openw (abrir o arquivo para gravaccedilatildeo natildeo leitura) e readf por printf

O arquivo eacute aberto em uma unidade (unit) usada para especificar de onde eacute feita a leitura

Ao final o arquivo eacute fechado

8489

Arquivos - processamento em baixo niacutevel - texto

O que resulta em

IDLgt printheader NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS

IDLgt helpmydataMYDATA STRUCT = -gt ltAnonymousgt Array[4]

IDLgt helpmydata[0] Structure ltd5e38f68gt 11 tags length=136 data length=124 refs=3 NAME STRING dec18s0001 CALMPOS INT 0 FILNAME STRING NIRSPEC-5-AO ECHLPOS DOUBLE 62630000 DISPPOS DOUBLE 36450000 TARGNAME STRING HD85258 POSDIR STRING NIRSPEC-5-AOp1 CLASS STRING STAR MJD_OBS STRING 54087574 ITIME DOUBLE 10000000 COADDS INT 1

Este caso eacute mais complicado que os mais comuns por haver colunas de strings

Se todas fossem de nuacutemeros natildeo teria sido necessaacuterio especificar o formato explicitamente As colunas teriam sido adivinhadas pela biblioteca que lecirc o arquivo Poderia ter sido lido escrito soacute com um array de nuacutemeros sem estruturas

8589

Arquivos - processamento em baixo niacutevel - binaacuterio

Formatos binaacuterios podem ser definidos de qualquer forma O arquivo eacute apenas um conjunto de bytes Cabe ao software saber como os interpretar

Uma escolha comum para que sejam autodocumentados eacute incluir um cabeccedilalho de texto informando as caracteriacutesticas dos dados necessaacuterias para os ler

Ex (IDL) criar um arquivo que armazene um array de doubles com um cabeccedilalho informando as dimensotildees para que o programa que o lecirc saiba como ler os dados

Inventa dados e abre o arquivo

IDLgt data_to_write=dindgen(34)IDLgt openwunitbinary_exampledatget_lun

Escreve as dimensotildees como texto

IDLgt printfunitdimensions of the double array stored belowIDLgt printfunitsize(data_to_writedimensions)

Escreve os dados binaacuterios

IDLgt writeuunitdata_to_write

Fecha o arquivo

IDLgt free_lununit

Escreve em binaacuterio (write unformatted)

8689

Arquivos - processamento em baixo niacutevel - binaacuterio

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

dimensions of the double array stored below 3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

8789

Arquivos - processamento em baixo niacutevel - binaacuterioA leitura deste arquivo eacute igualmente simples

IDLgt header=IDLgt dims=[00]IDLgt openrunitbinary_exampledatget_lun

Lecirc as dimensotildees (armazenadas como texto)

IDLgt readfunitheaderIDLgt readfunitdims

Lecirc a parte binaacuteria depois de saber as dimensotildees

IDLgt data_read=dblarr(dims)IDLgt readuunitdata_read

Fecha o arquivo

IDLgt free_lununit

Verifica que os dados foram gravados e lidos corretamente

IDLgt printarray_equal(data_to_writedata_read) 1

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Lecirc dados binaacuterios (read unformatted)

8889

Sumaacuterio

5 ndash Slides em httpwwwppenteadonetpeapea04_strings_iopdf Strings Expressotildees regulares Arquivos

httpwwwppenteadonetpea

8989

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89

Strings ndash formataccedilatildeo expliacutecita

A formataccedilatildeo pode ser especificada se a conversatildeo default natildeo eacute adequada para definir a conversatildeo em um novo tipo

Cada linguagem tem sua sintaxe para formataccedilatildeo

Haacute dois estilos semelhantes em vaacuterias linguagens

Ambos os estilos satildeo sintaxes diferentes para a mesma ideacuteia Um coacutedigo especifica o tipo de dado sendo passado (inteiro real etc) e detalhes de como seraacute feito o string (largura do campo diacutegitos decimais alinhamento etc)

2689

Strings ndash formataccedilatildeo expliacutecita

Estilo Fortran

IDL

IDLgt print1d0+1d-9 10000000

IDLgt print1d0+1d-9format=(E1610)10000000010E+00

IDLgt printx=1d0+1d-9format=(A0F1613)X= 10000000010000

Estilo C (ldquoprintfrdquo)

IDL

IDLgt printformat=(x=1610e)1d0+1d-9x=10000000010e+00

Python

In [20] print(x=1610e (1e0+1e-9))x=10000000010e+00

Nenhum formato expliacutecito (default)

2789

Strings - formatos tipo Fortran

(apenas o principal ver documentaccedilatildeo para detalhes)

Ex (IDL)

IDLgt printx=1d0+1d-9format=(A0F1613)X= 10000000010000

Tambeacutem haacute modificadores para especificar alinhamento (-) se deve haver (ou ser suprimido) avanccedilo para a pŕoxima linha posiccedilatildeo dentro do campo etc

Coacutedigo Significado Exemplo(s)

A String (A) (10A)

I Inteiro decimal (I) (10I)(-2I)

B Inteiro binaacuterio (B) (10B)

Z Inteiro hexadecimal (Z) (10Z)

O Inteiro octal (O) (10O)

F Real ponto fixo (F)(F52)

E D Real ponto flutuante (E)(D1610)

G Real ponto fixo ou flutuante de acordo com o valor (G)(G10)

ldquordquo String literal (ldquox=rdquoI10)

X Caracteres em branco (A10XI)

2889

Strings - formatos tipo C (printf)(apenas o principal ver documentaccedilatildeo para detalhes)String com campos a serem substituiacutedos por valores (passados adiante) marcados por coacutedigos com

Ex (Python)In [20] print(x=1610e (1e0+1e-9))x=10000000010e+00

Haacute modificadores para especificar alinhamento como preencher o espaccedilo que sobra (espaccedilos zeros etc) para imprimir o sinal + etc

Coacutedigo Significado (tipo) Exemplo(s)

di Inteiro decimal (int) d 5d +05d

u Inteiro decimal sem sinal (unsigned int) u 7u

fF Real em ponto fixo (double float) f 136f

eE Real em ponto flutuante (double float) e 1610e

gG Real em ponto fixo ou flutuante decidido pelo valor (double float)

g 73G

xX Inteiro sem sinal hexadecimal (unsigned int) x 10X

o Inteiro sem sinal octal (unsigned int) o 5o

s String (string) s 10s

c Caractere (char) c

p Ponteiro - estilo C - (void ) p

literal

2989

Strings - conversatildeo de strings para outros tipos

Para gerar dados a partir de strings datas identificadores pedaccedilos de nomes valores numeacutericos armazenados em strings

Tambeacutem sempre haacute conversotildees default para os tipos baacutesicos onde o intepretador programa faz o possiacutevel para entender o string como um valor daquele tipo

Tipicamente eacute feito por casts (funccedilotildees de conversatildeo) reads (de strings ou arquivos texto (arquivos texto satildeo strings)) construtores de objetos ou implicitamente

3089

Strings - conversatildeo de strings para outros tipos - impliacutecitas

Exs (IDL)

IDLgt helpfix([17 17 171 -17 9 8])ltExpressiongt INT = Array[5]

IDLgt printfix([17 17 171 -17 9 8]) 17 17 17 -17 9

IDLgt printdouble([17 17 171 -17 9 8]) 17000000 17000000 17100000 -17000000 90000000

IDLgt readfunitabcd

IDLgt a=0d0IDLgt b=00IDLgt c=0IDLgt reads171d0 189d0 -9abcIDLgt helpabcA DOUBLE = 17100000B FLOAT = 189000C INT = -9

Converte o conteuacutedo do string para os tipos das variaacuteveis abcd (explicado adiante)

3189

Strings - conversatildeo de strings para outros tipos

Quando o default natildeo eacute suficiente (ou quando escrevendo o conversor em uma classe) costuma ser possiacutevel o fazer com formatos semelhantes aos formatos para gerar strings Exs (IDL)

IDLgt a=0d0IDLgt b=00IDLgt c=0IDLgt reads171d0 something 189d0-9abc READS Input conversion error Unit 0 File ltstdingt Error occurred at $MAIN$ Execution halted at $MAIN$

Natildeo funcionou porque sozinho ele natildeo conseguiu saber o que fazer com o ldquosomethingrdquo Usando um formato especiacutefico

IDLgt reads171d0 something 189d0-9 abcformat=(D6111XD611XI)

IDLgt helpabcA DOUBLE = 17100000B FLOAT = 189000C INT = -9

Exemplos mais complicados adiante (arquivos texto)

Variaacuteveis tecircm que ser definidas para informar para que tipo seraacute feita a conversatildeo default

3289

Strings - processamento natildeo baacutesicoOperaccedilotildees importantes e muito necessaacuterias mas que natildeo satildeo suportadas em todas as linguagens bibliotecas padratildeo

Testes (ex IDL)

IDLgt str=[afitsaFITSafitsaabfitsabcfits]

IDLgt printstrmatch(strfits) 1 0 0 1 1

IDLgt printstrmatch(strfitsfold_case) 1 1 0 1 1

IDLgt printstrmatch(strfitsfold_case) 1 1 1 1 1

IDLgt printstrmatch(strfits) 1 0 0 0 0

IDLgt printstrmatch(strfits) 0 0 0 1 0

3389

Strings - processamento natildeo baacutesico

Operaccedilotildees importantes e muito necessaacuterias mas que natildeo satildeo suportadas em todas as linguagens bibliotecas padratildeo

Separaccedilatildeo de partes (Ex IDL)

IDLgt printstrsplit(2011- 131 -extract)format=(A)2011131

Processamento de nomes de arquivos diretoacuterios (Ex IDL)

IDLgt printfile_dirname(some_directoryanother_directorysome_filetxt)some_directoryanother_directory

IDLgt printfile_basename(some_directoryanother_directorysome_filetxt)some_filetxt

IDLgt printfile_basename(another_directorysome_filetxttxt)+_alteredtxtsome_file_alteredtxt

3489

Strings - processamento natildeo baacutesico

Codificaccedilotildees (Ex Python 3)

gtgtgt s=infinite money infinNeuro sign

gtgtgt print(s)infinite money infineuro

gtgtgt print(ascii(s))infinite money u221eu20ac

gtgtgt print(sencode(utf-8))binfinite money xe2x88x9exe2x82xac

3589

Strings - processamento natildeo baacutesico

Perl eacute a linguagem mais avanccedilada para processamento de strings tem suporte nativo a muitas outras operaccedilotildees a semacircntica da linguagem eacute voltada principalmente para processar strings expressotildees regulares (de vaacuterios tipos) natildeo satildeo strings fazem parte da semacircntica

Ex (sem o objetivo que seja compreensiacutevel apenas para indicar o estilo)

Ler um arquivo contendo campos com nomes separados de valores por ()

temperature 10008name some modelx_dimension 100y_dimension 100z_dimension 50()

Armazenado-o em um mapa O que pode ser feito com apenas

While (ltgt) Loop over input linesPut pre-colon text into $1 post-colon into $2 if (m (S+) (+) ) Use $1 as key $2 as value $file_data$1 = $2

3689

Expressotildees regulares - definiccedilatildeo

Expressotildees regulares (regular expressions regex) satildeo a mais poderosa ferramenta para fazer buscas e separar substrings

Regex satildeo uma linguagem com o uacutenico objetivo de especificar propriedades de strings

Implementadas em graus diferentes em todas as linguagens modernas e modernizadas facilita encontrar uma expressatildeo jaacute pronta pois satildeo quase iguais em qualquer linguagem

Estatildeo na biblioteca padratildeo em IDL Python R Perl

Em C++ e Java em bibliotecas comuns (Boost Jregex)

Para que servem

Uma expressatildeo regular especifica propriedades de strings

O interpretador de expressotildees regulares (regular expression engine) recebe a expressatildeo e o string a analisar e determina se o string corresponde (matches) agrave expressatildeo regular

Em alguns casos o interpretador pode tambeacutem informar que parte(s) do string corresponde(m) a que parte(s) da expressatildeo regular e realizar processamentos com estas partes

3789

Expressotildees regulares ndash exemplos de usos Separar partes de strings

Encontrar linhas em arquivos que tenham nomes valores e comentaacuterios e separar estes pedaccedilos

Escalar com comentaacuterio

SLITPA = 351979 Slit position angle

Array 1D sem comentaacuterio (se extendendo por vaacuterias linhas)

BAND_BIN_CENTER = (03505400358950036629003732200379490 0387900104598)

Escalares em diferentes formatos

Total Mechanical Luminosity 15310E+03resources_usedwalltime=005603

Pedaccedilos de nomes

6063 17836E-20 2456 T FeIX((3Pe)3d(2PE)4p_1Po-3s2_3p6_1Se)

Datas separando ano mecircs dia hora (em vaacuterios formatos diferentes)

DATE-OBS= 2006-12-18 universal date of observationDATE_TIME = 2010-07-19T161032START_TIME = 2006-182T225102850Z

3889

Expressotildees regulares ndash exemplos de usos

Separar partes de strings Separar partes de nomes de arquivos (por significarem algo como identificar o

conteuacutedo)

specdec18s0041fitsscamdec18i0054fits15_7_mts_hmpixselh_mr15sav15_7_mts_hwpixselh_mr15sav16_3_mts_hwpixselb_mr16savreadmodel5l_-1_000010000_10000_r05_030_08196_0100000_005000000_1000eps

Determinar se um string eacute um nuacutemero (inteiro real fixo flutuante)

Encontrar identificadores Exs nomes de cataacutelogos endereccedilos HTTPFTP endereccedilos de email

Separar campos em arquivos sendo lidos onde as linhas natildeo tecircm a mesma formataccedilatildeo algumas linhas com colunas separadas por espaccedilos outras por tabs outras por

siacutembolos ignorando linhas de comentaacuterios e linhas vazias

3989

Expressotildees regulares - usoEx (IDL) encontrar nomes de arquivos com algumas propriedades

IDLgt printfilesformat=(A)CM_1477475933_1_viscubCM_1477476864_1_ircubCM_1477476864_1_irgcubCM_1477476864_1_viscubCM_1477477826_1_ircubCM_1477477826_1_irgcubCM_1477477826_1_viscubmosaic2cub

IDLgt printstregex(files+irgcubboolean) 0 0 1 0 0 1 0 0

A expressatildeo regular eacute +irgcub Especifica uma ou mais ocorrecircncias seguidas (+) de qualquer caractere () seguido de uma ocorrecircncia de irgcub (o ponto vem precedido do caractere de

escape () para ser entendido literalmente como um ponto e natildeo como o seu significado especial (qualquer caractere)

Esta aplicaccedilatildeo do interpretador (stregex) retorna um valor Booleano (verdadeirofalso) para cada elemento do string passado (files) que informa se aquele elemento correspondia agravequela expressatildeo regular

Este eacute um exemplo artificial Seria mais faacutecil ter usado strmatch(filesirgcub)

4089

Expressotildees regulares - uso

Em casos como este tipicamente o resultado de stregex seria usado como filtro para selecionar apenas os elementos do array de strings que satisfazem agravequela expressatildeo regular

IDLgt w=where(stregex(files+irgcubboolean)null)IDLgt printfiles[w]format=(A)CM_1477476864_1_irgcubCM_1477477826_1_irgcub

Ex (IDL) Determinar que strings conteacutem uma data no formato yyyy-mm-dd

IDLgt strs=[201002012010-02-012010-2-1aaaa-mm-ddT2010-02-01J]IDLgt printstregex(strs[0-9]4-[0-9]2-[0-9]2boolean) 0 1 0 0 1

Esta expressatildeo regular especifica quatro repeticcedilotildees (4) de diacutegitos (caracteres na faixa [0-9]) seguido de um (-) seguido de duas repeticcedilotildees (2) de dois diacutegitos ([0-9]) seguido de um (-) seguido de duas repeticcedilotildees (2) de dois diacutegitos ([0-9])

Uma expressatildeo regular apenas um pouco mais elaborada poderia corresponder aos 3 formatos de data no array acima E poderia se impedir que a uacuteltima (com outros caracteres antes e depois da data) seja aceita

4189

Expressotildees regulares - regras - caracteres ldquonormaisrdquo

Uma expressatildeo regular usa caracteres ldquonormaisrdquo e especiais para especificar o que se vai procurar na ordem em que aparecem na expressatildeo

Se um caractere eacute normal (natildeo eacute um dos especiais mostrados adiante) ele especifica uma ocorrecircncia daquele caractere

Ex J eacute uma expressatildeo regular que corresponde a qualquer string onde ocorra J Jaacute JA soacute corresponde a strings que tenham JA dentro

Exs (IDL)

IDLgt strs=[JJJJJJaJAjaJa]

IDLgt printstregex(strsJboolean) 1 1 1 0 1

IDLgt printstregex(strsJAboolean) 0 0 1 0 0

4289

Expressotildees regulares - regras - caracteres especiaisCaracteres especiais tecircm outros significados Para significar literalmente aquele caractere deve ser escapado (escaped) com um

Siacutembolo significado exemplo Corresponde(m) Escape o caractere seguinte deve ser interpretado

literalmente natildeo como especial aa

Qualquer caractere ab ajb aab abb jafbc

+ Uma ou mais repeticcedilotildees do que vem agrave esquerda a+b ab aab bab baabh

() Subexpressatildeo para agrupar termos afetados por um caractere especial (como parecircnteses em notaccedilatildeo matemaacutetica)

(ab)+c abc ababc dabababcg

Zero ou mais repeticcedilotildees dos termos agrave esquerda ab abbaab caaabg

Zero ou uma repeticcedilatildeo dos termos agrave esquerda ab b ab cabd cbd

| Alternaccedilatildeo qualquer um dos dois agrave esquerda a|bc ac bc jacd jbcd

n Exatamente n repeticcedilotildees do termo agrave esquerda a2b aab daaabg

n1n2 De n1 a n2 repeticcedilotildees do termo agrave esquerda a12b ab aab aaab gaaabbd

^ Acircncora (no comeccedilo) nada agrave esquerda ^ab ab abb

$ Acircncora (no fim) nada agrave direita ab$ abaab

[] Conjunto de valores (explicado adiante)

4389

Expressotildees regulares - regras - conjuntos de valores

[] denota um conjunto de valores que pode conter

Uma lista de coisas que devem corresponder Ex [abc] signfica qualquer caractere no conjunto abc Correspondem a esta

expressatildeo abcabha

Uma lista de coisas que natildeo podem corresponder [^abc] significa qualquer coisa que natildeo seja a b ou c Correspondem a esta

expressatildeo d jgs gg

Faixas de valores [0-9] signfica qualquer diacutegito [0-9a-zA-Z] significa qualquer diacutegito ou letra

Classes de valores como algumas faixas e outros conjuntos ocorrem com muita frequumlecircncia haacute nomes

especiais para eles Estes (em IDL) vecircm entre [] ex [[digit] significa o mesmo que [0-9]

4489

Expressotildees regulares - regras - classes de valores

Classe signficado

alnum Caracteres alfanumeacutericos 0-9a-zA-Z

alpha Caracteres alfabeacuteticos a-zA-Z

cntrl Caracteres de controle ASCII (natildeo visiacuteveis coacutedigos 1 a 31 e 127)

digit Diacutegitos (decimais) 0-9

graph Caracteres visiacuteveis ASCII 33 a 126 (natildeo inclui o espaccedilo)

lower Letras minuacutesculas a-z

print Caracteres ldquoimprimiacuteveisrdquo (visiacuteveis e o espaccedilo) ASCII 32 a 126

punct Caracteres de pontuaccedilatildeo $amprsquo()+-lt=gt[]^_lsquo|~

space Os caracteres ldquoem brancordquo (blank) espaccedilo tab tab vertical CR LF (ASCII 32 e 9-13)

upper Letras maiuacutesculas A-Z

xdigit Diacutegitos hexadecimais 0-9A-Fa-f

lt Comeccedilo de palavra (palavra definida como sequumlecircncia de coisas natildeo space)

gt Fim de palavra (palavra definida como sequumlecircncia de coisas natildeo space)

Estas satildeo apenas as principais Algumas implementaccedilotildees tecircm muito mais (em particular nas linguagens que usam Unicode nativamente)

4589

Expressotildees regulares - exemplos

Determinar se strings satildeo nuacutemeros (Ex IDL)

IDLgt str=[9-18 875-812-45913E9-98d7a188d032f5]

Inteiros

IDLgt intexpr=^[-+][0-9]+$

IDLgt printstregex(strintexprboolean) 1 1 0 0 0 0 0 0 0 0

Ponto flutuante

IDLgt fpexpr=^[-+](([0-9][0-9]+)|([0-9]+[0-9]))([eEdD][-+][0-9]+)$

IDLgt printstregex(strfpexprboolean) 1 1 0 1 1 1 1 1 0 0

Sinal opcional

1 ou mais diacutegitos

Sinal opcional

0 ou mais diacutegitos opcionalmente seguidos de um ponto e 1 ou mais diacutegitos

1 ou mais diacutegitos opcionalmente seguidos de um ponto e 0 ou mais diacutegitos

ou Expoente opcional letra do expoente seguida de sinal opcional seguido de um ou mais diacutegitos

4689

Expressotildees regulares ndash extraccedilatildeo

Interpretadores de expressotildees regulares costumam oferecer mais que apenas testar se um string corresponde a uma expressatildeo

Em geral tambeacutem podem retornar que parte(s) do string corresponde(m) agrave expressatildeo

Ex (IDL) Determinar se um string conteacutem uma data incluindo os formatos

IDLgt dates=[2011-01-312011 1 3120110131something done on y2011m1d31 with something]

E extrair a data de dentro do string

IDLgt expr=[0-9]4[0-9]12[0-9]12

(4 diacutegitos)(qualquer separador)(1 a 2 diacutegitos)(qualquer separador)(1 a 2 diacutegitos)

IDLgt printstregex(datesexprextract)format=(A)2011-01-312011 1 31201101312011m1d31

Como agora separar ano mecircs e dia Com uma busca e uma extraccedilatildeo para cada Poderia ser mais eacute mais faacutecil com uma uacutenica expressatildeo regular

4789

Expressotildees regulares - aleacutem de apenas testes

Tambeacutem podem retornar que parte(s) do string correspondem agrave expressatildeo toda e agraves suas subexpressotildees (partes da expressatildeo delimitadas por parecircnteses)

Ex (IDL) Separar pedaccedilos de datas Neste caso para a expressatildeo ficar menor assumindo um formato simples (yyyy-mm-ddThhmmssfff) Mas poderia ser um formato mais livre como no exemplo anterior

IDLgt str=Stuff observed on 2011-01-31T123924983 with some instrumentIDLgt expr=([0-9]4)-([0-9]2)-([0-9]2)T([0-9]2)([0-9]2)([0-9]2[0-9]3)

(quatro diacutegitos)-(2 diacutegitos)-(2 diacutegitos)T(2 diacutegitos)(2 diacutegitos)(2 diacutegitos3 diacutegitos)

IDLgt pieces=stregex(strexprextractsubexpr)IDLgt printpiecesformat=(A)2011-01-31T12392498320110131123924983IDLgt d=julday(pieces[2]pieces[3]pieces[1]pieces[4]pieces[5]pieces[6])IDLgt printdformat=(F166) 2455593027372

Expressatildeo inteiraPrimeira subexpressatildeoSegunda subexpressatildeoTerceira subexpressatildeoQuarta subexpressatildeoQuinta subexpressatildeoSexta subexpressatildeo

4889

Expressotildees regulares - referecircncias httpxkcdcom208

Viacutedeos do Software Carpentry

httpsoftware-carpentryorg4_0regexp

4989

Arquivos

Quase todo programa precisa armazenar dados em arquivos

Podem ser pequenos arquivos de paracircmetros ou enormes arquivos de dados produzidos ou a processar

Apesar do sugerido pela praacutetica comum arquivos texto natildeo satildeo sempre a melhor escolha para armazenar dados - e haacute muitas formas diferentes de os usar

Qual eacute a melhor escolha

Assim como para linguagens ou contecirciners natildeo existe ldquoo melhor formatordquo Cada um tem suas vantagens e desvantagens

Dados diferentes (mesmo se usados pelos mesmos programas) em geral se adequam melhor a formatos diferentes

5089

Arquivos - texto X binaacuterios

Em qualquer formato arquivos satildeo armazenados como diacutegitos binaacuterios

Mas haacute duas formas principais como eles podem ser codificados

Arquivos baseados em texto (text files)

Dados satildeo transformados em caracteres usando alguma formataccedilatildeo (mesmo se impliacutecita) e escritos com alguma codificaccedilatildeo de texto (comumente mas natildeo necessariamente ASCII)

Um arquivo texto eacute um ou mais strings As mesmas conversotildees tecircm que ser feitas depara outros tipos

Arquivos ldquobinaacuteriosrdquo (binary files)

Embora todo arquivo seja binaacuterio este nome costuma ser usado soacute para aqueles em que os dados natildeo estatildeo na forma de texto

Com frequumlecircncia (nem sempre) os dados satildeo gravados de forma idecircntica a como satildeo armazenados na memoacuteria

Muitos formatos usam uma mistura de partes em texto e partes binaacuterias

Um cabeccedilalho (header) de texto que daacute informaccedilotildees (metadados) sobre os dados armazenados na parte binaacuteria que vem depois

O cabeccedilalho conteacutem em especial informaccedilotildees sobre como ler os dados binaacuterios

5189

Arquivos - texto X binaacuterios

Vantagens de arquivos texto

Legiacuteveis por pessoas (human readable)

Podem ser auto-suficientes todo o necessaacuterio para os ler e entender o que conteacutem pode ser obtido olhando o arquivo

Satildeo os menos especiacuteficos a linguagens software normalmente satildeo escritos em ASCII ou Unicode e sempre haacute algum suporte a ler escrever texto em linguagens software

Haacute alguns formatos padratildeo para texto (exs CSV XML) que satildeo suportados em muitas plataformas diferentes

5289

Arquivos - texto X binaacuterios

Vantagens de arquivos binaacuterios

Em geral natildeo haacute conversotildees entre o os dados como armazenados na memoacuteria O que torna o armazenamento mais eficiente e sem alteraccedilotildees nos valores

A maior parte dos formatos padronizados eacute binaacuteria Exs FITS cube CDF NetCDF HDF HDF5 JPEG JPEG2000 TIFF GeoTIFF MPEG etc

Eacute mais comum que haja bibliotecas prontas (ateacute de alto niacutevel) para consulta leitura e gravaccedilatildeo

Os formatos melhor desenhados satildeo autodocumentados (em texto ou binaacuterio) para os ler natildeo eacute necessaacuterio conhecimento preacutevio sobre como os dados foram armazenados

Toda linguagem plataforma costuma ter seu formato binaacuterio mais nativo que costuma ser o mais faacutecil para leitura gravaccedilatildeo Em particular nas de alto niacutevel que tecircm formatos autodocumentados (especialmente

em IDL R Python Java)

Muitos formatos tecircm opccedilatildeo de compressatildeo dos dados

5389

Arquivos - proprietaacuterios X padratildeo

Independente da escolha texto binaacuterio programas devem escolher entre usar um formato proacuteprio ou um formato padronizado

A principal vantagem de formatos proacuteprios eacute que satildeo definidos da forma mais conveniente para a aplicaccedilatildeo que os usa simplificando leitura e gravaccedilatildeo e potencialmente otimizando recursos (acesso ao disco tamanho do arquivo etc)

A principal desvantagem de formatos proacuteprios eacute ser necessaacuterio escrever todo o coacutedigo para os ler gravar

Pode dar mais trabalho que usar um formato geneacuterico que natildeo seja exatamente o que melhor se encaixa na aplicaccedilatildeo

O coacutedigo para processar o formato em geral vai ser menos completo e conveniente de usar que o de um formato bem estabelecido usado por muitos outros em muitos ambientes

Cada novo software que for usar estes arquivos vai precisar compartilhar do mesmo coacutedigo ou precisar de coacutedigo novo (em particular se em outra linguagem) para ler gravar naquele formato

Eacute necessaacuterio documentar o formato e decidir sobre como ele seraacute definido

Se outros jaacute colocaram muito trabalho desenvolvendo bons formatos padratildeo bem suportados em muitos ambientes por que ter o trabalho de reinventar (e reprogramar redocumentar e retestar) a roda

5489

Arquivos - padrotildees comuns em astronomia (exs adiante)

Texto

CSV Comma-separated values - bem suportado por muitos softwares

ldquoColunas fixasrdquo Natildeo eacute um padratildeo bem definido mas eacute praacutetica comum para tabelas (2D)

XML Extensible Markup Language - O padratildeo texto mais flexiacutevel de grande uso em programaccedilatildeo geral para armazenar qualquer coisa com frequumlecircncia de forma hieraacuterquica Bem suportado por linguagens modernas (e modernizadas) e bibliotecas das principais

linguagens gerais Alta complexidade o torna trabalhoso de usar

5589

Arquivos - padrotildees comuns em astronomia (exs adiante)Binaacuterios

FITS Flexible Image Transport System - o mais comum para observaccedilotildees astronocircmicas Conteacutem os dados (em geral arrays 1D 2D ou 3D) e documentaccedilatildeo (nos cabeccedilalhos) sobre a origem e caracteriacutesticas dos dados Tambeacutem usado para armazenar tabelas de dados quaisquer mesmo que natildeo sejam observaccedilotildees (especialmente pelo STSCI) Variam muito em qualidade de documentaccedilatildeo

NetCDF Network Common Data Form - evoluccedilatildeo do CDF autodocumentado eacute comum e bem suportado para vaacuterios arrays de dados

HDF5 Hierarchical Data Format ndash autodocumentado comum e bem suportado permitindo aleacutem de simples arrays estruturas (eacute um formato hieraacuterquico)

Formatos de imagens JPEG JPEG2000 TIFF GeoTIFF etc - voltados para arrays 2D3D de inteiros ou (em alguns casos) reais com ou sem compressatildeo JPEG2000 tem caracteriacutesticas mais avanccediladas como imagens multiresoluccedilatildeo

Formatos vetoriais PS EPS DXF SHP SVG - variados niacuteveis de suporte a armazenamento de vetores e formas em 2D ou 3D

ISIS Cube semelhante em caracteriacutesticas ao FITS mais usado em sensoriamento remoto geociecircncias e ciecircncias planetaacuterias em geral para observaccedilotildees 1D 2D ou 3D

Formatos nativos de linguagens todo o trabalho de leitura e gravaccedilatildeo eacute feito automagicamente pela biblioteca padratildeo em IDL R Python Java

5689

Arquivos texto - newlines

Apesar do que possa parecer arquivos texto natildeo tecircm intrinsecamente vaacuterias linhas Arquivos texto satildeo soacute uma sequumlecircncia 1D de caracteres em alguma codificaccedilatildeo Separaccedilatildeo em linhas (equivalente a interpretar o arquivo como 2D em linhas e colunas) eacute

especificada por convenccedilotildees Natildeo haacute apenas uma convenccedilatildeo para o fim de linhas

A mais primitiva convenccedilatildeo eacute separaccedilatildeo nenhuma estipula-se que linhas tenham um nuacutemero fixo N de caracteres e cabe ao software que lecirc o arquivo entender que uma linha nova ocorre regularmente a cada N caracteres

Eacute a forma menos portaacutevel e mais inconveniente eacute necessaacuterio o conhecimento preacutevio (ou por inspeccedilatildeo do arquivo) de quantos caracteres haacute por linha

A maior parte dos editores de texto natildeo vai saber separar linhas desta forma (por falta deste conhecimento preacutevio) Exemplo (de um FITS real)

SIMPLE = T Fits standard BITPIX = 16 Bits per pixel NAXIS = 0 Number of axes EXTEND = T File may contain extensions

O que com as linhas quebradas nos lugares certos seria

SIMPLE = T Fits standard BITPIX = 16 Bits per pixel NAXIS = 0 Number of axes EXTEND = T File may contain extensions

5789

Arquivos texto - newlines

A forma mais comum de especificar linhas eacute com um marcador do final de linha (newline)

Eacute um caractere especial natildeo normalmente presente no texto que serve para marcar fim de linhas

Mas natildeo haacute soacute um padratildeo de newline Os mais comuns

LF (Line Feed ASCII 10) ndash Unix Linux Mac OS X

CR - (Carriage Return ASCII 13) - Mac OS lt10

CR+LF (CR seguido de LF) - Windows DOS

Eacute o motivo de o Notepad (Windows) natildeo entender as quebras de linha de arquivos escritos com o formato nativo de Linux o arquivo soacute tem LF enquanto o editor espera CR+LF

Alguns sistemas (strings em vaacuterias linguagens por exemplo) usam o coacutedigo de escape n para indicar newline que eacute codificado de acordo com o padratildeo sendo usado

Em geral bibliotecas de leitura e gravaccedilatildeo de arquivos usam (default pelo menos) o newline nativo do sistema em que satildeo usadas

Programas de conversatildeo entre os sistemas satildeo comuns (ex dos2unix)

O Wordpad identifica se for usado soacute LF e quebra as linhas de acordo

5889

Arquivos - texto - CSV

Comma-separated values

O formato mais padronizado para tabelas (arrays 2D) em texto (frequentemente mas natildeo necessariamente ASCII)

Bem suportado por bibliotecas padratildeo de linguagens e outros softwares (Excel Calc Origin Google Docs etc)

Conteacutem Linhas de cabeccedilalho (opcionais mas recomendadas) linhas com qualquer texto geral

descrevendo o arquivo e em geral uma linha de tiacutetulo para as colunas da tabela Uma (apenas uma) tabela onde todas as linhas tecircm o mesmo nuacutemero de colunas

Colunas separadas por viacutergulas (opcionalmente pode ser outro separador) Linhas terminadas por newline (qualquer que seja) Strings delimitados por ldquo ldquo

Ex

NAMECALMPOSFILNAMEECHLPOSDISPPOSTARGNAMEPOSDIRCLASSMJD-OBSITIMECOADDSdec18s00010NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001dec18s00020NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001dec18s00120NIRSPEC-5-AO635800364500itan140NIRSPEC-5-AOp2 TITAN5408763000001dec18s00140NIRSPEC-5-AO626300364500itan140NIRSPEC-5-AOp1 TITAN5408763000001dec18s00151NIRSPEC-5-AO626300364500itan140NIRSPEC-5-AOp1ARC5408764000001dec18s00160NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001

Natildeo eacute necessaacuterio que as colunas tenham largura constante

Cabeccedilalho

5989

Arquivos - texto - CSVHaacute amplo suporte a leitura e gravaccedilatildeo de CSV sem precisar recorrer a procedimentos de baixo niacutevel

Podem ser diretamente importados em Excel Calc Origin Google Docs ou lido facilmente com bibliotecas padratildeo comuns Ex (IDL)

IDLgt c=read_csv(filesearch_scamcsvheader=h)IDLgt printhNAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS

IDLgt helpc Structure ltc8bca508gt 11 tags length=5256 data length=5248 refs=1 FIELD01 STRING Array[41] FIELD02 LONG Array[41] FIELD03 STRING Array[41] FIELD04 DOUBLE Array[41] FIELD05 DOUBLE Array[41] FIELD06 STRING Array[41] FIELD07 STRING Array[41] FIELD08 STRING Array[41] FIELD09 STRING Array[41] FIELD10 DOUBLE Array[41] FIELD11 LONG Array[41]

IDLgt printcfield01[03]dec18s0001 dec18s0002 dec18s0003 dec18s0004

IDLgt printcfield03[03]NIRSPEC-5-AO NIRSPEC-5-AO NIRSPEC-5-AO NIRSPEC-5-AO

6089

Arquivos - texto - CSVEx (IDL) Criaccedilatildeo de um CSV com uma tabela de valores

Criaccedilatildeo de 3 arrays 1D (12 elementos) um para cada coluna

IDLgt x=dindgen(3)IDLgt y=dindgen(4)IDLgt xx=reform(rebin(x34)12)IDLgt yy=reform(rebin(reform(y14)34)12)IDLgt f=xx+yy10IDLgt helpxxyyfXX DOUBLE = Array[12]YY DOUBLE = Array[12]F DOUBLE = Array[12]

Escrita do arquivo

IDLgt write_csvexamplecsvxxyyfheader=[XYX+10Y]

ResultadoXYX+10Y000000000000000000000000100000000000000010000000200000000000000020000000000000001000000010000000100000001000000011000000()

6189

Arquivos - texto - ldquoColunas regularesrdquoFixed column width

Natildeo eacute exatamente um padratildeo Eacute uma praacutetica comum

Armazena uma tabela (array 2D) de forma regular simples de ser interpretada e lida

Costumam ter linha(s) de cabeccedilalho descrevendo o conteuacutedo do arquivo em geral com uma linha para os nomes das colunas

As demais linhas conteacutem os dados sempre ocupando a mesma largura por coluna e escritos no mesmo formato em cada coluna

Costumam ser simples de ler inclusive interativamente (exs Excel Calc Origin read_ascii)

Ex (IDL) Uma simples tabela soacute de nuacutemeros

wavl CH4=33 wavl CH4=25 wavl CH4=10 wavl CH4=08 wavl CH4=05 wavl CH4=026 wavl CH4=02 477330000 0090130 477330000 0091110 477330000 0089250 477330000 0087000 477330000 0087140 477330000 0090080 477330000 0088110 480040000 0090930 480040000 0091930 480040000 0090160 480040000 0087930 480040000 0088110 480040000 0090950 480040000 0089090 482750000 0091710 482750000 0092730 482750000 0091060 482750000 0088850 482750000 0089080 482750000 0091810 482750000 0090060 485450000 0092530 485450000 0093570 485450000 0092000 485450000 0089810 485450000 0090100 485450000 0092730 485450000 0091090

IDLgt a=read_ascii(specs_27s_ntxtdata_start=1header=header)IDLgt printheader wavl CH4=33 wavl CH4=25 wavl CH4=10 wavl CH4=08 wavl CH4=05 wavl CH4=026 wavl CH4=02 IDLgt helpa Structure ltd423c9a8gt 1 tags length=224 data length=224 refs=1 FIELD01 FLOAT Array[14 4]

6289

Arquivos - texto - ldquoColunas regularesrdquoJaacute um arquivo um pouco mais difiacutecil de ler

NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS dec18s0001 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0002 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0003 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 FLAT 5408757812500 460000 5 dec18s0004 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 DARK 5408757812500 460000 5

Por ter colunas de tipos diferentes (strings inteiros reais) natildeo eacute possiacutevel o ler em um simples array Mas eacute faacutecil o colocar em uma estrutura de arrays onde cada campo eacute uma coluna

Especificando interativamente como interpretar as linhasIDLgt templ=ascii_template(filesearch_scamtxt)

Nome do campo (default mostrado)

Tipo do campo (identificado automaticamente)

Posiccedilatildeo (caracter) do comeccedilo (identificada automaticamente)

Linha de exemplo para verificar as colunas

6389

Arquivos - texto - ldquoColunas regularesrdquoDepois de feito o template o arquivo pode ser lido com apenas

IDLgt a=read_ascii(filesearch_scamtxttemplate=templ)IDLgt helpa Structure ltd4ec4608gt 11 tags length=416 data length=416 refs=1 FIELD01 STRING Array[4] FIELD02 LONG Array[4] FIELD03 STRING Array[4] FIELD04 FLOAT Array[4] FIELD05 FLOAT Array[4] FIELD06 STRING Array[4] FIELD07 STRING Array[4] FIELD08 STRING Array[4] FIELD09 FLOAT Array[4] FIELD10 FLOAT Array[4] FIELD11 LONG Array[4]IDLgt printafield01dec18s0001 dec18s0002 dec18s0003 dec18s0004IDLgt printafield04 626300 626300 626300 626300

O template (uma estrutura contendo dados sobre como ler o arquivo) pode ser usado para outros arquivos no mesmo formato No lugar de ter sido criado interativamente poderia ter sido lido de algum arquivo Poderia ter especificado nomes para os campos que seriam mais amigaacuteveis que coias como FIELD11

6489

Arquivos - texto - XML

Extensible Markup Language

Admite grande flexibilidade e por isso pode ter alta complexidade

Valores satildeo colocados dentro de uma estrutura em hieraacuterquica (em uma aacutervore) com os noacutes identificados pelos seus nomes (chaves)

Largamente usado em muitas aacutereas para armazenar conjuntos arbitraacuterios de quaisquer estruturas de dados

A maioria das aplicaccedilotildees usa um formato que eacute um subconjunto do XML especificado por um Schema comumente em um arquivo XML DTD (Document Type Definition)

6589

Arquivos - texto ndash XML ndash exemplos de usos

Armazenamento de dados de aplicaccedilotildees web (comum para exportar importar dados MediaWiki DokuWiki WordPress ADS Lattes etc)

Documentos Office (docx pptx xlsx) OpenOffice (odt opd ods)

Como versotildees de outros formatos FITSML XDF

ldquoScientific Dataset XML NASAs Astronomical Data Center (ADC) sponsors a number of research projects that

use XML for scientific data representation The XML activities at the ADC are sponsored and supported by the NASA Office of Space Science Applied Information Systems Research Program (AISRP)rdquo - httpxmlcoverpagesorgnasa-adchtml

Astronomical Instrument Markup Language (AIML)

SVG ndash Scalable Vector Graphics

Muitas de outras aplicaccedilotildees listadas em httpxmlcoverpagesorgxmlhtmlapplications

6689

Arquivos - texto ndash XML - exemploltxml version=10 gtltDOCTYPE Xdmf SYSTEM Xdmfdtd []gtltXdmf xmlnsxi=httpwwww3org2001XInclude Version=20gt ltDomaingt lt-- Example of Basic Topologies --gt ltInformation Name=Descriptiongt Example of a Polyvertex Topology ltInformationgt ltGrid Name=Polyvertex GridType=Uniformgt ltTopology TopologyType=Polyvertex Dimensions=3 NodesPerElement=3gt ltDataItem Format=XML Dimensions=3 3 NumberType=Floatgt 0 1 2 4 5 6 8 9 10 ltDataItemgt ltTopologygt ltGeometry Type=XYZgt ltDataItem Format=XML Dimensions=4 4 3gt 00 00 00 10 00 00()Que mostra que a interpretaccedilatildeo (parsing) de XML eacute em geral complexa

6789

Arquivos - texto - XML

Haacute muitas bibliotecas de alto niacutevel para fazer o processamento (parsing) e entregar os dados em uma estrutura conveniente

A complexidade em processar XML estaacute em decidir o que fazer com os dados jaacute que os arquivos podem ser muito complexos

As APIs (Application Programming Interfaces) mais comuns para processar XML que satildeo implementadas em muitas linguagens

DOM (Document Object Model) ndash manteacutem todo o conteuacutedo do em uma estrutura de dados (em geral uma aacutervore) em uma variaacutevel (em geral um objeto) Esta pode ser consultada para obter os valores de interesse para os alterar e usada para escrever um arquivo

SAX (Simple API for XML) ndash Interpretador (parser) por objetos O usuaacuterio escreve uma classe herdando da classe SAX provendo os meacutetodos que vatildeo processar os campos agrave medida em que estes satildeo lidos

6889

Arquivos - binaacuterios - FITSFlexible Image Transport System

O formato mais comum para observaccedilotildees astronocircmicas Tambeacutem usado para armazenar quaisquer dados mesmo natildeo relacionados a observaccedilotildees (especialmente tabelas como eacute praacutetica do STSCI)

Conteacutem um (ou mais) cabeccedilalho(s) de texto com metadados (informaccedilotildees sobre os dados como caracteriacutesticas (necessaacuterias para os ler) origem condiccedilotildees em que foram obtidos processamento realizado etc)

SIMPLE = T image conforms to FITS standard BITPIX = 32 bits per data value NAXIS = 2 number of axes NAXIS1 = 1024 NAXIS2 = 1024 BSCALE = 100000 Scaling factor BZERO = 000000 Scaling zero-point TELESCOP= Keck II Telescope SLITNAME= 0041x226 Slit Name SLITPA = 351979 Slit position angle SLITX = 131500 X pixel of the center of the slit LST = 12010446 local apparent sidereal time (()

Depois do cabeccedilalho haacute uma (ou mais) seccedilatildeo(otildees) de dados binaacuterios Costuma(m) ser array(s) 1D (espectros) 2D (imagens) ou 3D (ldquocubos de dadosrdquo)

De inteiros ou reais inteiros satildeo comuns em contagens de instrumentos reais para valores derivados (fluxos intensidades etc)

6989

Arquivos - binaacuterios - FITSNormalmente FITS satildeo lidos escritos por bibliotecas prontas de (relativamente) alto niacutevel usuaacuterio natildeo tem que saber como os dados satildeo armazenados no arquivo nem como os ler escrever Ex (IDL com a biblioteca idlastro)

IDLgt fits_info2dspectrumfits2dspectrumfits has 3 extensionsPrimary header 288 recordsNo dataExtension 1 -- SCI Header 144 records IMAGE ( 1201 1201 )Extension 2 -- ERR Header 72 records IMAGE ( 1201 1201 )Extension 3 -- DQ Header 72 records IMAGE ( 1201 1201 )

IDLgt mydata=readfits(2dspectrumfitsexten_no=1myheader) READFITS Reading FITS extension of type IMAGE READFITS Now reading 1201 by 1201 array

IDLgt extastmyheadermyastIDLgt sz=size(mydatadimensions)IDLgt xy2ad[1sz[0]][1sz[1]]myastcorners_acorners_dIDLgt printcorners_aCorners of the data array from file 2dspectrumfits are at 14487480 33063480

IDLgt printcorners_d -00041264444 00041402222

Obteacutem os dados de coordenadas (WCS) do header

Coloca os dados no array (2D de floats) mydata e o header no array (1D de strings) myheader

Calcula as coordenadas das quinas da imagem atraveacutes do WCS

Provecirc informaccedilotildees sobre o arquivo

7089

Arquivos - binaacuterios - ISIS Cube

Formatos como FITS se adequam muito a ter uma interface de mais alto niacutevel por objetos

Tambeacutem para dados em tabelas FITS muito mais trabalhosos de ler em baixo niacutevel que se adequam muito mais a mapas ou estruturas

Exemplo (de um formato semelhante a FITS ISIS cube)

O objeto ao ser criado lecirc todo o arquivo

cube=pp_editablecube(CM_1553510065_1_ircub)

Meacutetodos fornecem os dados desejados para obter quando necessaacuterio os dados de interesse

Find out the names of the backplanesprintcubegetproperty(backnames)Get the start time of the cubeprintcubegetfromheader(START_TIME)2007-084T100057286Z

Valores no cabeccedilalho podem ser convenientemente fornecidos como um mapa

header=cubeheader_as_hash()printheader[START_TIME]2007-084T100057286Z

7189

Arquivos - binaacuterios ndash ISIS Cube

Os dados satildeo fornecidos como arraysMake a contour plot of the latitudesc=contour(cubegetsuffixbyname(LATITUDE))Get the band with wavelength nearest to 21 (in the units used in the cube)selband=cubegetbandbywavelength(21wavelengths=selwavs)

Interfaces por overload tornam o acesso ainda mais conveniente

selband=cube[21]

selwavs=cube[21]

Retorna um array com a banda de comprimento de onda mais proacuteximo de 21 (microm)

Retorna o comprimento de onda mais proacuteximo de 21 (microm) da banda retornada acima

7289

Arquivos - binaacuterios ndash ISIS Cube Alteraccedilotildees feitas ao conteuacutedo satildeo automaticamente refletidas em todos os

lugares (cabeccedilalho em particular) afetados mantendo o objeto vaacutelido que pode depois ser gravado em um novo arquivo

IDLgt printcubelinescubesamplescubebands 64 64 256

IDLgt helpcubecoreltExpressiongt FLOAT = Array[64 64 256]

IDLgt cubecore=dblarr(100100256)

A linha acima natildeo eacute uma atribuiccedilatildeo eacute uma invocaccedilatildeo de meacutetodo Eacute equivalente acubesetpropertycore=dblarr(100100256)

Eacute o trabalho da funccedilatildeo setproperty decidir se a propriedade passada (core) faz sentido e se fizer fazer todo o trabalho necessaacuterio a esta mudanccedila Para o usuaacuterio eacute tudo automaacutetico e os dados da classe satildeo vaacutelidos o tempo todo

IDLgt helpcubecoreltExpressiongt DOUBLE = Array[100 100 256]

IDLgt printcubelinescubesamplescubebands 100 100 256

IDLgt cubesaveCM_1553510065_1_ir_editedcub

7389

Arquivos - binaacuterios ndash NetCDF e HDF5

Network Common Data Form e Hierarchical Data Format

Os dois uacutenicos formatos bem estabelecidos para dados cientiacuteficos geneacutericos

Armazenam dados como vaacuterias variaacuteveis e seus metadados Para cada variaacutevel haacute (ou pode haver) os metadados

Nome Dimensotildees (do array) Unidades Comentaacuterios

Ambos permitem arrays multidimensionais

Apenas HDF5 permite estruturas (daiacute vem a hierarquia)

Autodocumentados qualquer software que saiba ler um destes formatos lecirc qualquer arquivo sem precisar de conhecimento preacutevio sobre como o arquivo foi gerado

Muito bem suportados em bibliotecas padratildeo e natildeo padratildeo em softwares interativos e visualizadores (inclusive plugins para navegadores)

httpwwwunidataucaredusoftwarenetcdf httpenwikipediaorgwikiHdf5

NetCDF eacute mais simples de usar por natildeo ter hierarquia dando menos trabalho para ler e escrever dados Se hierarquia natildeo eacute necessaacuteria eacute mais conveniente de usar que HDF5

7489

Arquivos - binaacuterios - NetCDF e HDF5Haacute tambeacutem o formato CDL uma versatildeo ASCII do NetCDF A biblioteca padratildeo do NetCDF inclui conversores entre estes formatos

$ ncdump -h refspec_g01_0ncnetcdf refspec_g01_0 dimensions nlay = 51 nwn = 400 nleg = 33 numu = 2 nlev = 52 nphi = 3 ngas = 2 nwnc = 1 scal = 1 v3 = 3 dnl = 1 nk = 1 tdisr = UNLIMITED (0 currently) na = 16

variables float alb(nwn) float z(nlay) float t(nlay) float p(nlay) float wl(nwn) float iof(nwn) float mtau(nwn) float htau(nwn) float hctaus(nwn) float gtau(nwn) float outcos(scal) float phi(nleg) float phic(scal) float umu(numu) float flux(v3 nwn nlev) float mix(nlay ngas) float c(nlay) float psat(nlay) float ga(nwnc) float wlc(nwnc) float inc(scal) int dm(scal) int ord(scal) float fbeam(scal) float wn(nwn) float tautot(nwn nlay) float htaus(nwn nlay) float htaux(nwn nlay) float taug(nwn nlay) float phase(nwn nlay nleg) float ssa(nwn nlay) float uu(nwn nphi nlev numu) float u0u(nwn nlev numu) float tray(nwn nlay) float gtauo(tdisr nwn nlay)

Haacute 14 variaacuteveis usadas como dimensotildees para as 35 variaacuteveis que satildeo arrays

Ex alb(nwn) indica que alb eacute um array 1D de nwn elementos

nwn estaacute armazenado como uma das dimensotildees e eacute 400 portanto alb tem 400 elementos

Parte do conteuacutedo de um arquivo NetCDF em formato CDL (gerado pelo programa ncdump)

7589

Arquivos - binaacuterios - NetCDF e HDF5Conteuacutedo daquele arquivo visualizado com o ncview (acompanha a biblioteca NetCDF padratildeo)

7689

Arquivos - binaacuterios - NetCDF e HDF5O conteuacutedo de todo o arquivo pode ser lido facilmente com as bibliotecas disponiacuteveis e armazenado em contecirciners convenientes Usando um objeto que gera um resultado um pouco mais conveniente

IDLgt h=pp_readncdf(refspec_g01_0nchash)IDLgt printhvar_dims ltObjHeapVar229(HASH)gtvars ltObjHeapVar152(HASH)gtdims ltObjHeapVar118(HASH)gt

IDLgt printh[vars]T 173203 175459 175848 176001 175975 Z 431869 418858 406067 393403 380464 FLUX 300660 145536 0705180 0341669 0165532 PHASE 100000 0779034 0660858 0542052 0449983 TAUTOT0694377 0693420 0693474 0693540 0693636()

IDLgt help(h[vars])[TAUTOT]ltExpressiongt FLOAT = Array[51 400]

IDLgt print(h[var_dims])[TAUTOT]NLAY NWN

IDLgt print(h[dims])[(h[var_dims])[TAUTOT]]NLAY 51NWN 400

7789

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5)

Visualizaccedilatildeo da variaacutevel selecionada

Metadados e alguns valores da variaacutevel selecionada

Variaacutevel a ser criada com o conteuacutedo desta variaacutevel do arquivo

Hierarquia das variaacuteveis do arquivo

7889

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5) Imported variable az

IDLgt helpaz Structure ltd5723f38gt 13 tags length=448 data length=444 refs=1 _NAME STRING az _ICONTYPE STRING binary _TYPE STRING DATASET _FILE STRING INTENSI_test_409OUTh5 _PATH STRING _DATA DOUBLE Array[38] _NDIMENSIONS LONG 1 _DIMENSIONS ULONG64 Array[1] _NELEMENTS ULONG64 38 _DATATYPE STRING H5T_FLOAT _STORAGESIZE ULONG 8 _PRECISION LONG 64 _SIGN STRING

IDLgt printaz_data 00000000 10000000 20000000 30000000 40000000 50000000 60000000 80000000 ()

7989

Arquivos - binaacuterios - imagens

JPEG JPEG200 TIFF GeoTIFF etc

Os formatos comuns de imagens satildeo bem suportados em muacuteltiplas plataformas para uso dentro de programas e interativamente

Alguns formatos tecircm opccedilatildeo de compressatildeo com perda eou sem perda

Armazenam imagens como arrays 2D ou 3D (3D frequumlentemente limitado a 3 ou 4 em uma das dimensotildees uma imagem em 3 ou 4 bandas) de inteiros ou (em alguns formatos) reais

Alguns formatos permitem armazenar metadados para caracterizar as imagens armazenadas

JPEG2000 e GeoTIFF (um subconjunto de TIFF) comuns em astronomia e aacutereas proacuteximas

8089

Arquivos - binaacuterios ndash imagens ndash exemplo (IDL)IDLgt printquery_tiff(issmap_2009tiffinfogeotiff=geo) 1

IDLgt helpinfo Structure ltd4eca4b8gt 18 tags length=144 data length=132 refs=1 CHANNELS LONG 4 DIMENSIONS LONG Array[2] IMAGE_INDEX LONG 0 NUM_IMAGES LONG 1 PIXEL_TYPE INT 1 TYPE STRING TIFF BITS_PER_SAMPLE LONG 8 POSITION FLOAT Array[2] RESOLUTION FLOAT Array[2] UNITS LONG 2 TILE_SIZE LONG Array[2] DESCRIPTION STRING ISS (2009) DATE_TIME STRING 20100218 012436()

IDLgt helpgeo Structure ltd4efa1b8gt 10 tags length=264 data length=262 refs=1 MODELPIXELSCALETAG DOUBLE Array[3] MODELTIEPOINTTAG DOUBLE Array[6 4] GEOGRAPHICTYPEGEOKEY INT 4035 GEOGSEMIMAJORAXISGEOKEY DOUBLE 25750000 GEOGSEMIMINORAXISGEOKEY DOUBLE 25750000()

IDLgt myimage=read_tiff(issmap_2009tiff) Lecirc a imagem para o array myimage

Obteacutem informaccedilotildees sobre o arquivo

8189

Arquivos - binaacuterios ndash formatos nativosLinguagens como IDL R Python Java tecircm seu formato nativo binaacuterio acessado em alto niacutevel Basta mandar salvar ler variaacuteveis no do arquivo a biblioteca padratildeo automagicamente faz todo o trabalho de decidir como gravar ler os dados

Conveniente de usar na proacutepria linguagem Mas raramente existem bibliotecas para ler gravar o formato nativo de uma linguagem a partir de outra Ex (IDL)

IDLgt savefile=2dspectrumsavmydatamyheadercorners_dcorners_averbosecompress SAVE Portable (XDR) compressed SAVERESTORE file SAVE Saved variable MYDATA SAVE Saved variable MYHEADER()

Pode ser lido com apenas (haacute formas mais elaboradas)

IDLgt restore2dspectrumsavverbose RESTORE Portable (XDR) compressed SAVERESTORE file RESTORE Save file written by ltunknowngtltunknowngt Thu Jan 27 191422 2011 RESTORE IDL version 801 (linux x86_64) RESTORE Restored variable MYDATA RESTORE Restored variable MYHEADER()

IDLgt helpmydatamyheadercorners_dcorners_aMYDATA FLOAT = Array[1201 1201]MYHEADER STRING = Array[144]()

8289

Arquivos - processamento em baixo niacutevel

Nem sempre um formato padratildeo eacute a melhor escolha para o problema

Nem sempre haacute escolha (pode-se ter que trabalhar com arquivos que jaacute foram escritos em algum formato proprietaacuterio)

Agraves vezes o formato eacute padratildeo mas natildeo haacute bom suporte a ele disponiacutevel

Em todos estes casos eacute necessaacuterio escrever rotinas em baixo niacutevel que vatildeo ler processar diretamente o conteuacutedo do arquivo

Preferencialmente criando interfaces de alto niacutevel para o programa que vai as usar

8389

Arquivos - processamento em baixo niacutevel - texto

Tomando o exemplo anterior onde as colunas eram de diferentes tipos

NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS dec18s0001 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0002 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0003 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 FLAT 5408757812500 460000 5 dec18s0004 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 DARK 5408757812500 460000 5

A forma mais simples de o ler diretamente eacute definir uma estrutura para receber cada linha e um array destas estruturas para receber todo o arquivo Ex (IDL)

IDLgt record=namecalmpos0filnameechlpos0d0disppos0d0targnameposdirclassmjd_obsitime0d0coadds0IDLgt nlines=file_lines(filesearch_scamtxt)IDLgt mydata=replicate(recordnlines-1)IDLgt header=

Depois de definidas as variaacuteveis que vatildeo receber os dados o arquivo pode ser lido

IDLgt openrunitfilesearch_scamtxtget_lunIDLgt readfunitheaderIDLgt readfunitmydataformat=(A14I8A15F104F104A18A19A15F158F105I15)IDLgt free_lununit

A gravaccedilatildeo de um arquivo texto poderia ser feita de forma semelhante apenas trocando openr por openw (abrir o arquivo para gravaccedilatildeo natildeo leitura) e readf por printf

O arquivo eacute aberto em uma unidade (unit) usada para especificar de onde eacute feita a leitura

Ao final o arquivo eacute fechado

8489

Arquivos - processamento em baixo niacutevel - texto

O que resulta em

IDLgt printheader NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS

IDLgt helpmydataMYDATA STRUCT = -gt ltAnonymousgt Array[4]

IDLgt helpmydata[0] Structure ltd5e38f68gt 11 tags length=136 data length=124 refs=3 NAME STRING dec18s0001 CALMPOS INT 0 FILNAME STRING NIRSPEC-5-AO ECHLPOS DOUBLE 62630000 DISPPOS DOUBLE 36450000 TARGNAME STRING HD85258 POSDIR STRING NIRSPEC-5-AOp1 CLASS STRING STAR MJD_OBS STRING 54087574 ITIME DOUBLE 10000000 COADDS INT 1

Este caso eacute mais complicado que os mais comuns por haver colunas de strings

Se todas fossem de nuacutemeros natildeo teria sido necessaacuterio especificar o formato explicitamente As colunas teriam sido adivinhadas pela biblioteca que lecirc o arquivo Poderia ter sido lido escrito soacute com um array de nuacutemeros sem estruturas

8589

Arquivos - processamento em baixo niacutevel - binaacuterio

Formatos binaacuterios podem ser definidos de qualquer forma O arquivo eacute apenas um conjunto de bytes Cabe ao software saber como os interpretar

Uma escolha comum para que sejam autodocumentados eacute incluir um cabeccedilalho de texto informando as caracteriacutesticas dos dados necessaacuterias para os ler

Ex (IDL) criar um arquivo que armazene um array de doubles com um cabeccedilalho informando as dimensotildees para que o programa que o lecirc saiba como ler os dados

Inventa dados e abre o arquivo

IDLgt data_to_write=dindgen(34)IDLgt openwunitbinary_exampledatget_lun

Escreve as dimensotildees como texto

IDLgt printfunitdimensions of the double array stored belowIDLgt printfunitsize(data_to_writedimensions)

Escreve os dados binaacuterios

IDLgt writeuunitdata_to_write

Fecha o arquivo

IDLgt free_lununit

Escreve em binaacuterio (write unformatted)

8689

Arquivos - processamento em baixo niacutevel - binaacuterio

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

dimensions of the double array stored below 3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

8789

Arquivos - processamento em baixo niacutevel - binaacuterioA leitura deste arquivo eacute igualmente simples

IDLgt header=IDLgt dims=[00]IDLgt openrunitbinary_exampledatget_lun

Lecirc as dimensotildees (armazenadas como texto)

IDLgt readfunitheaderIDLgt readfunitdims

Lecirc a parte binaacuteria depois de saber as dimensotildees

IDLgt data_read=dblarr(dims)IDLgt readuunitdata_read

Fecha o arquivo

IDLgt free_lununit

Verifica que os dados foram gravados e lidos corretamente

IDLgt printarray_equal(data_to_writedata_read) 1

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Lecirc dados binaacuterios (read unformatted)

8889

Sumaacuterio

5 ndash Slides em httpwwwppenteadonetpeapea04_strings_iopdf Strings Expressotildees regulares Arquivos

httpwwwppenteadonetpea

8989

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89

Strings ndash formataccedilatildeo expliacutecita

Estilo Fortran

IDL

IDLgt print1d0+1d-9 10000000

IDLgt print1d0+1d-9format=(E1610)10000000010E+00

IDLgt printx=1d0+1d-9format=(A0F1613)X= 10000000010000

Estilo C (ldquoprintfrdquo)

IDL

IDLgt printformat=(x=1610e)1d0+1d-9x=10000000010e+00

Python

In [20] print(x=1610e (1e0+1e-9))x=10000000010e+00

Nenhum formato expliacutecito (default)

2789

Strings - formatos tipo Fortran

(apenas o principal ver documentaccedilatildeo para detalhes)

Ex (IDL)

IDLgt printx=1d0+1d-9format=(A0F1613)X= 10000000010000

Tambeacutem haacute modificadores para especificar alinhamento (-) se deve haver (ou ser suprimido) avanccedilo para a pŕoxima linha posiccedilatildeo dentro do campo etc

Coacutedigo Significado Exemplo(s)

A String (A) (10A)

I Inteiro decimal (I) (10I)(-2I)

B Inteiro binaacuterio (B) (10B)

Z Inteiro hexadecimal (Z) (10Z)

O Inteiro octal (O) (10O)

F Real ponto fixo (F)(F52)

E D Real ponto flutuante (E)(D1610)

G Real ponto fixo ou flutuante de acordo com o valor (G)(G10)

ldquordquo String literal (ldquox=rdquoI10)

X Caracteres em branco (A10XI)

2889

Strings - formatos tipo C (printf)(apenas o principal ver documentaccedilatildeo para detalhes)String com campos a serem substituiacutedos por valores (passados adiante) marcados por coacutedigos com

Ex (Python)In [20] print(x=1610e (1e0+1e-9))x=10000000010e+00

Haacute modificadores para especificar alinhamento como preencher o espaccedilo que sobra (espaccedilos zeros etc) para imprimir o sinal + etc

Coacutedigo Significado (tipo) Exemplo(s)

di Inteiro decimal (int) d 5d +05d

u Inteiro decimal sem sinal (unsigned int) u 7u

fF Real em ponto fixo (double float) f 136f

eE Real em ponto flutuante (double float) e 1610e

gG Real em ponto fixo ou flutuante decidido pelo valor (double float)

g 73G

xX Inteiro sem sinal hexadecimal (unsigned int) x 10X

o Inteiro sem sinal octal (unsigned int) o 5o

s String (string) s 10s

c Caractere (char) c

p Ponteiro - estilo C - (void ) p

literal

2989

Strings - conversatildeo de strings para outros tipos

Para gerar dados a partir de strings datas identificadores pedaccedilos de nomes valores numeacutericos armazenados em strings

Tambeacutem sempre haacute conversotildees default para os tipos baacutesicos onde o intepretador programa faz o possiacutevel para entender o string como um valor daquele tipo

Tipicamente eacute feito por casts (funccedilotildees de conversatildeo) reads (de strings ou arquivos texto (arquivos texto satildeo strings)) construtores de objetos ou implicitamente

3089

Strings - conversatildeo de strings para outros tipos - impliacutecitas

Exs (IDL)

IDLgt helpfix([17 17 171 -17 9 8])ltExpressiongt INT = Array[5]

IDLgt printfix([17 17 171 -17 9 8]) 17 17 17 -17 9

IDLgt printdouble([17 17 171 -17 9 8]) 17000000 17000000 17100000 -17000000 90000000

IDLgt readfunitabcd

IDLgt a=0d0IDLgt b=00IDLgt c=0IDLgt reads171d0 189d0 -9abcIDLgt helpabcA DOUBLE = 17100000B FLOAT = 189000C INT = -9

Converte o conteuacutedo do string para os tipos das variaacuteveis abcd (explicado adiante)

3189

Strings - conversatildeo de strings para outros tipos

Quando o default natildeo eacute suficiente (ou quando escrevendo o conversor em uma classe) costuma ser possiacutevel o fazer com formatos semelhantes aos formatos para gerar strings Exs (IDL)

IDLgt a=0d0IDLgt b=00IDLgt c=0IDLgt reads171d0 something 189d0-9abc READS Input conversion error Unit 0 File ltstdingt Error occurred at $MAIN$ Execution halted at $MAIN$

Natildeo funcionou porque sozinho ele natildeo conseguiu saber o que fazer com o ldquosomethingrdquo Usando um formato especiacutefico

IDLgt reads171d0 something 189d0-9 abcformat=(D6111XD611XI)

IDLgt helpabcA DOUBLE = 17100000B FLOAT = 189000C INT = -9

Exemplos mais complicados adiante (arquivos texto)

Variaacuteveis tecircm que ser definidas para informar para que tipo seraacute feita a conversatildeo default

3289

Strings - processamento natildeo baacutesicoOperaccedilotildees importantes e muito necessaacuterias mas que natildeo satildeo suportadas em todas as linguagens bibliotecas padratildeo

Testes (ex IDL)

IDLgt str=[afitsaFITSafitsaabfitsabcfits]

IDLgt printstrmatch(strfits) 1 0 0 1 1

IDLgt printstrmatch(strfitsfold_case) 1 1 0 1 1

IDLgt printstrmatch(strfitsfold_case) 1 1 1 1 1

IDLgt printstrmatch(strfits) 1 0 0 0 0

IDLgt printstrmatch(strfits) 0 0 0 1 0

3389

Strings - processamento natildeo baacutesico

Operaccedilotildees importantes e muito necessaacuterias mas que natildeo satildeo suportadas em todas as linguagens bibliotecas padratildeo

Separaccedilatildeo de partes (Ex IDL)

IDLgt printstrsplit(2011- 131 -extract)format=(A)2011131

Processamento de nomes de arquivos diretoacuterios (Ex IDL)

IDLgt printfile_dirname(some_directoryanother_directorysome_filetxt)some_directoryanother_directory

IDLgt printfile_basename(some_directoryanother_directorysome_filetxt)some_filetxt

IDLgt printfile_basename(another_directorysome_filetxttxt)+_alteredtxtsome_file_alteredtxt

3489

Strings - processamento natildeo baacutesico

Codificaccedilotildees (Ex Python 3)

gtgtgt s=infinite money infinNeuro sign

gtgtgt print(s)infinite money infineuro

gtgtgt print(ascii(s))infinite money u221eu20ac

gtgtgt print(sencode(utf-8))binfinite money xe2x88x9exe2x82xac

3589

Strings - processamento natildeo baacutesico

Perl eacute a linguagem mais avanccedilada para processamento de strings tem suporte nativo a muitas outras operaccedilotildees a semacircntica da linguagem eacute voltada principalmente para processar strings expressotildees regulares (de vaacuterios tipos) natildeo satildeo strings fazem parte da semacircntica

Ex (sem o objetivo que seja compreensiacutevel apenas para indicar o estilo)

Ler um arquivo contendo campos com nomes separados de valores por ()

temperature 10008name some modelx_dimension 100y_dimension 100z_dimension 50()

Armazenado-o em um mapa O que pode ser feito com apenas

While (ltgt) Loop over input linesPut pre-colon text into $1 post-colon into $2 if (m (S+) (+) ) Use $1 as key $2 as value $file_data$1 = $2

3689

Expressotildees regulares - definiccedilatildeo

Expressotildees regulares (regular expressions regex) satildeo a mais poderosa ferramenta para fazer buscas e separar substrings

Regex satildeo uma linguagem com o uacutenico objetivo de especificar propriedades de strings

Implementadas em graus diferentes em todas as linguagens modernas e modernizadas facilita encontrar uma expressatildeo jaacute pronta pois satildeo quase iguais em qualquer linguagem

Estatildeo na biblioteca padratildeo em IDL Python R Perl

Em C++ e Java em bibliotecas comuns (Boost Jregex)

Para que servem

Uma expressatildeo regular especifica propriedades de strings

O interpretador de expressotildees regulares (regular expression engine) recebe a expressatildeo e o string a analisar e determina se o string corresponde (matches) agrave expressatildeo regular

Em alguns casos o interpretador pode tambeacutem informar que parte(s) do string corresponde(m) a que parte(s) da expressatildeo regular e realizar processamentos com estas partes

3789

Expressotildees regulares ndash exemplos de usos Separar partes de strings

Encontrar linhas em arquivos que tenham nomes valores e comentaacuterios e separar estes pedaccedilos

Escalar com comentaacuterio

SLITPA = 351979 Slit position angle

Array 1D sem comentaacuterio (se extendendo por vaacuterias linhas)

BAND_BIN_CENTER = (03505400358950036629003732200379490 0387900104598)

Escalares em diferentes formatos

Total Mechanical Luminosity 15310E+03resources_usedwalltime=005603

Pedaccedilos de nomes

6063 17836E-20 2456 T FeIX((3Pe)3d(2PE)4p_1Po-3s2_3p6_1Se)

Datas separando ano mecircs dia hora (em vaacuterios formatos diferentes)

DATE-OBS= 2006-12-18 universal date of observationDATE_TIME = 2010-07-19T161032START_TIME = 2006-182T225102850Z

3889

Expressotildees regulares ndash exemplos de usos

Separar partes de strings Separar partes de nomes de arquivos (por significarem algo como identificar o

conteuacutedo)

specdec18s0041fitsscamdec18i0054fits15_7_mts_hmpixselh_mr15sav15_7_mts_hwpixselh_mr15sav16_3_mts_hwpixselb_mr16savreadmodel5l_-1_000010000_10000_r05_030_08196_0100000_005000000_1000eps

Determinar se um string eacute um nuacutemero (inteiro real fixo flutuante)

Encontrar identificadores Exs nomes de cataacutelogos endereccedilos HTTPFTP endereccedilos de email

Separar campos em arquivos sendo lidos onde as linhas natildeo tecircm a mesma formataccedilatildeo algumas linhas com colunas separadas por espaccedilos outras por tabs outras por

siacutembolos ignorando linhas de comentaacuterios e linhas vazias

3989

Expressotildees regulares - usoEx (IDL) encontrar nomes de arquivos com algumas propriedades

IDLgt printfilesformat=(A)CM_1477475933_1_viscubCM_1477476864_1_ircubCM_1477476864_1_irgcubCM_1477476864_1_viscubCM_1477477826_1_ircubCM_1477477826_1_irgcubCM_1477477826_1_viscubmosaic2cub

IDLgt printstregex(files+irgcubboolean) 0 0 1 0 0 1 0 0

A expressatildeo regular eacute +irgcub Especifica uma ou mais ocorrecircncias seguidas (+) de qualquer caractere () seguido de uma ocorrecircncia de irgcub (o ponto vem precedido do caractere de

escape () para ser entendido literalmente como um ponto e natildeo como o seu significado especial (qualquer caractere)

Esta aplicaccedilatildeo do interpretador (stregex) retorna um valor Booleano (verdadeirofalso) para cada elemento do string passado (files) que informa se aquele elemento correspondia agravequela expressatildeo regular

Este eacute um exemplo artificial Seria mais faacutecil ter usado strmatch(filesirgcub)

4089

Expressotildees regulares - uso

Em casos como este tipicamente o resultado de stregex seria usado como filtro para selecionar apenas os elementos do array de strings que satisfazem agravequela expressatildeo regular

IDLgt w=where(stregex(files+irgcubboolean)null)IDLgt printfiles[w]format=(A)CM_1477476864_1_irgcubCM_1477477826_1_irgcub

Ex (IDL) Determinar que strings conteacutem uma data no formato yyyy-mm-dd

IDLgt strs=[201002012010-02-012010-2-1aaaa-mm-ddT2010-02-01J]IDLgt printstregex(strs[0-9]4-[0-9]2-[0-9]2boolean) 0 1 0 0 1

Esta expressatildeo regular especifica quatro repeticcedilotildees (4) de diacutegitos (caracteres na faixa [0-9]) seguido de um (-) seguido de duas repeticcedilotildees (2) de dois diacutegitos ([0-9]) seguido de um (-) seguido de duas repeticcedilotildees (2) de dois diacutegitos ([0-9])

Uma expressatildeo regular apenas um pouco mais elaborada poderia corresponder aos 3 formatos de data no array acima E poderia se impedir que a uacuteltima (com outros caracteres antes e depois da data) seja aceita

4189

Expressotildees regulares - regras - caracteres ldquonormaisrdquo

Uma expressatildeo regular usa caracteres ldquonormaisrdquo e especiais para especificar o que se vai procurar na ordem em que aparecem na expressatildeo

Se um caractere eacute normal (natildeo eacute um dos especiais mostrados adiante) ele especifica uma ocorrecircncia daquele caractere

Ex J eacute uma expressatildeo regular que corresponde a qualquer string onde ocorra J Jaacute JA soacute corresponde a strings que tenham JA dentro

Exs (IDL)

IDLgt strs=[JJJJJJaJAjaJa]

IDLgt printstregex(strsJboolean) 1 1 1 0 1

IDLgt printstregex(strsJAboolean) 0 0 1 0 0

4289

Expressotildees regulares - regras - caracteres especiaisCaracteres especiais tecircm outros significados Para significar literalmente aquele caractere deve ser escapado (escaped) com um

Siacutembolo significado exemplo Corresponde(m) Escape o caractere seguinte deve ser interpretado

literalmente natildeo como especial aa

Qualquer caractere ab ajb aab abb jafbc

+ Uma ou mais repeticcedilotildees do que vem agrave esquerda a+b ab aab bab baabh

() Subexpressatildeo para agrupar termos afetados por um caractere especial (como parecircnteses em notaccedilatildeo matemaacutetica)

(ab)+c abc ababc dabababcg

Zero ou mais repeticcedilotildees dos termos agrave esquerda ab abbaab caaabg

Zero ou uma repeticcedilatildeo dos termos agrave esquerda ab b ab cabd cbd

| Alternaccedilatildeo qualquer um dos dois agrave esquerda a|bc ac bc jacd jbcd

n Exatamente n repeticcedilotildees do termo agrave esquerda a2b aab daaabg

n1n2 De n1 a n2 repeticcedilotildees do termo agrave esquerda a12b ab aab aaab gaaabbd

^ Acircncora (no comeccedilo) nada agrave esquerda ^ab ab abb

$ Acircncora (no fim) nada agrave direita ab$ abaab

[] Conjunto de valores (explicado adiante)

4389

Expressotildees regulares - regras - conjuntos de valores

[] denota um conjunto de valores que pode conter

Uma lista de coisas que devem corresponder Ex [abc] signfica qualquer caractere no conjunto abc Correspondem a esta

expressatildeo abcabha

Uma lista de coisas que natildeo podem corresponder [^abc] significa qualquer coisa que natildeo seja a b ou c Correspondem a esta

expressatildeo d jgs gg

Faixas de valores [0-9] signfica qualquer diacutegito [0-9a-zA-Z] significa qualquer diacutegito ou letra

Classes de valores como algumas faixas e outros conjuntos ocorrem com muita frequumlecircncia haacute nomes

especiais para eles Estes (em IDL) vecircm entre [] ex [[digit] significa o mesmo que [0-9]

4489

Expressotildees regulares - regras - classes de valores

Classe signficado

alnum Caracteres alfanumeacutericos 0-9a-zA-Z

alpha Caracteres alfabeacuteticos a-zA-Z

cntrl Caracteres de controle ASCII (natildeo visiacuteveis coacutedigos 1 a 31 e 127)

digit Diacutegitos (decimais) 0-9

graph Caracteres visiacuteveis ASCII 33 a 126 (natildeo inclui o espaccedilo)

lower Letras minuacutesculas a-z

print Caracteres ldquoimprimiacuteveisrdquo (visiacuteveis e o espaccedilo) ASCII 32 a 126

punct Caracteres de pontuaccedilatildeo $amprsquo()+-lt=gt[]^_lsquo|~

space Os caracteres ldquoem brancordquo (blank) espaccedilo tab tab vertical CR LF (ASCII 32 e 9-13)

upper Letras maiuacutesculas A-Z

xdigit Diacutegitos hexadecimais 0-9A-Fa-f

lt Comeccedilo de palavra (palavra definida como sequumlecircncia de coisas natildeo space)

gt Fim de palavra (palavra definida como sequumlecircncia de coisas natildeo space)

Estas satildeo apenas as principais Algumas implementaccedilotildees tecircm muito mais (em particular nas linguagens que usam Unicode nativamente)

4589

Expressotildees regulares - exemplos

Determinar se strings satildeo nuacutemeros (Ex IDL)

IDLgt str=[9-18 875-812-45913E9-98d7a188d032f5]

Inteiros

IDLgt intexpr=^[-+][0-9]+$

IDLgt printstregex(strintexprboolean) 1 1 0 0 0 0 0 0 0 0

Ponto flutuante

IDLgt fpexpr=^[-+](([0-9][0-9]+)|([0-9]+[0-9]))([eEdD][-+][0-9]+)$

IDLgt printstregex(strfpexprboolean) 1 1 0 1 1 1 1 1 0 0

Sinal opcional

1 ou mais diacutegitos

Sinal opcional

0 ou mais diacutegitos opcionalmente seguidos de um ponto e 1 ou mais diacutegitos

1 ou mais diacutegitos opcionalmente seguidos de um ponto e 0 ou mais diacutegitos

ou Expoente opcional letra do expoente seguida de sinal opcional seguido de um ou mais diacutegitos

4689

Expressotildees regulares ndash extraccedilatildeo

Interpretadores de expressotildees regulares costumam oferecer mais que apenas testar se um string corresponde a uma expressatildeo

Em geral tambeacutem podem retornar que parte(s) do string corresponde(m) agrave expressatildeo

Ex (IDL) Determinar se um string conteacutem uma data incluindo os formatos

IDLgt dates=[2011-01-312011 1 3120110131something done on y2011m1d31 with something]

E extrair a data de dentro do string

IDLgt expr=[0-9]4[0-9]12[0-9]12

(4 diacutegitos)(qualquer separador)(1 a 2 diacutegitos)(qualquer separador)(1 a 2 diacutegitos)

IDLgt printstregex(datesexprextract)format=(A)2011-01-312011 1 31201101312011m1d31

Como agora separar ano mecircs e dia Com uma busca e uma extraccedilatildeo para cada Poderia ser mais eacute mais faacutecil com uma uacutenica expressatildeo regular

4789

Expressotildees regulares - aleacutem de apenas testes

Tambeacutem podem retornar que parte(s) do string correspondem agrave expressatildeo toda e agraves suas subexpressotildees (partes da expressatildeo delimitadas por parecircnteses)

Ex (IDL) Separar pedaccedilos de datas Neste caso para a expressatildeo ficar menor assumindo um formato simples (yyyy-mm-ddThhmmssfff) Mas poderia ser um formato mais livre como no exemplo anterior

IDLgt str=Stuff observed on 2011-01-31T123924983 with some instrumentIDLgt expr=([0-9]4)-([0-9]2)-([0-9]2)T([0-9]2)([0-9]2)([0-9]2[0-9]3)

(quatro diacutegitos)-(2 diacutegitos)-(2 diacutegitos)T(2 diacutegitos)(2 diacutegitos)(2 diacutegitos3 diacutegitos)

IDLgt pieces=stregex(strexprextractsubexpr)IDLgt printpiecesformat=(A)2011-01-31T12392498320110131123924983IDLgt d=julday(pieces[2]pieces[3]pieces[1]pieces[4]pieces[5]pieces[6])IDLgt printdformat=(F166) 2455593027372

Expressatildeo inteiraPrimeira subexpressatildeoSegunda subexpressatildeoTerceira subexpressatildeoQuarta subexpressatildeoQuinta subexpressatildeoSexta subexpressatildeo

4889

Expressotildees regulares - referecircncias httpxkcdcom208

Viacutedeos do Software Carpentry

httpsoftware-carpentryorg4_0regexp

4989

Arquivos

Quase todo programa precisa armazenar dados em arquivos

Podem ser pequenos arquivos de paracircmetros ou enormes arquivos de dados produzidos ou a processar

Apesar do sugerido pela praacutetica comum arquivos texto natildeo satildeo sempre a melhor escolha para armazenar dados - e haacute muitas formas diferentes de os usar

Qual eacute a melhor escolha

Assim como para linguagens ou contecirciners natildeo existe ldquoo melhor formatordquo Cada um tem suas vantagens e desvantagens

Dados diferentes (mesmo se usados pelos mesmos programas) em geral se adequam melhor a formatos diferentes

5089

Arquivos - texto X binaacuterios

Em qualquer formato arquivos satildeo armazenados como diacutegitos binaacuterios

Mas haacute duas formas principais como eles podem ser codificados

Arquivos baseados em texto (text files)

Dados satildeo transformados em caracteres usando alguma formataccedilatildeo (mesmo se impliacutecita) e escritos com alguma codificaccedilatildeo de texto (comumente mas natildeo necessariamente ASCII)

Um arquivo texto eacute um ou mais strings As mesmas conversotildees tecircm que ser feitas depara outros tipos

Arquivos ldquobinaacuteriosrdquo (binary files)

Embora todo arquivo seja binaacuterio este nome costuma ser usado soacute para aqueles em que os dados natildeo estatildeo na forma de texto

Com frequumlecircncia (nem sempre) os dados satildeo gravados de forma idecircntica a como satildeo armazenados na memoacuteria

Muitos formatos usam uma mistura de partes em texto e partes binaacuterias

Um cabeccedilalho (header) de texto que daacute informaccedilotildees (metadados) sobre os dados armazenados na parte binaacuteria que vem depois

O cabeccedilalho conteacutem em especial informaccedilotildees sobre como ler os dados binaacuterios

5189

Arquivos - texto X binaacuterios

Vantagens de arquivos texto

Legiacuteveis por pessoas (human readable)

Podem ser auto-suficientes todo o necessaacuterio para os ler e entender o que conteacutem pode ser obtido olhando o arquivo

Satildeo os menos especiacuteficos a linguagens software normalmente satildeo escritos em ASCII ou Unicode e sempre haacute algum suporte a ler escrever texto em linguagens software

Haacute alguns formatos padratildeo para texto (exs CSV XML) que satildeo suportados em muitas plataformas diferentes

5289

Arquivos - texto X binaacuterios

Vantagens de arquivos binaacuterios

Em geral natildeo haacute conversotildees entre o os dados como armazenados na memoacuteria O que torna o armazenamento mais eficiente e sem alteraccedilotildees nos valores

A maior parte dos formatos padronizados eacute binaacuteria Exs FITS cube CDF NetCDF HDF HDF5 JPEG JPEG2000 TIFF GeoTIFF MPEG etc

Eacute mais comum que haja bibliotecas prontas (ateacute de alto niacutevel) para consulta leitura e gravaccedilatildeo

Os formatos melhor desenhados satildeo autodocumentados (em texto ou binaacuterio) para os ler natildeo eacute necessaacuterio conhecimento preacutevio sobre como os dados foram armazenados

Toda linguagem plataforma costuma ter seu formato binaacuterio mais nativo que costuma ser o mais faacutecil para leitura gravaccedilatildeo Em particular nas de alto niacutevel que tecircm formatos autodocumentados (especialmente

em IDL R Python Java)

Muitos formatos tecircm opccedilatildeo de compressatildeo dos dados

5389

Arquivos - proprietaacuterios X padratildeo

Independente da escolha texto binaacuterio programas devem escolher entre usar um formato proacuteprio ou um formato padronizado

A principal vantagem de formatos proacuteprios eacute que satildeo definidos da forma mais conveniente para a aplicaccedilatildeo que os usa simplificando leitura e gravaccedilatildeo e potencialmente otimizando recursos (acesso ao disco tamanho do arquivo etc)

A principal desvantagem de formatos proacuteprios eacute ser necessaacuterio escrever todo o coacutedigo para os ler gravar

Pode dar mais trabalho que usar um formato geneacuterico que natildeo seja exatamente o que melhor se encaixa na aplicaccedilatildeo

O coacutedigo para processar o formato em geral vai ser menos completo e conveniente de usar que o de um formato bem estabelecido usado por muitos outros em muitos ambientes

Cada novo software que for usar estes arquivos vai precisar compartilhar do mesmo coacutedigo ou precisar de coacutedigo novo (em particular se em outra linguagem) para ler gravar naquele formato

Eacute necessaacuterio documentar o formato e decidir sobre como ele seraacute definido

Se outros jaacute colocaram muito trabalho desenvolvendo bons formatos padratildeo bem suportados em muitos ambientes por que ter o trabalho de reinventar (e reprogramar redocumentar e retestar) a roda

5489

Arquivos - padrotildees comuns em astronomia (exs adiante)

Texto

CSV Comma-separated values - bem suportado por muitos softwares

ldquoColunas fixasrdquo Natildeo eacute um padratildeo bem definido mas eacute praacutetica comum para tabelas (2D)

XML Extensible Markup Language - O padratildeo texto mais flexiacutevel de grande uso em programaccedilatildeo geral para armazenar qualquer coisa com frequumlecircncia de forma hieraacuterquica Bem suportado por linguagens modernas (e modernizadas) e bibliotecas das principais

linguagens gerais Alta complexidade o torna trabalhoso de usar

5589

Arquivos - padrotildees comuns em astronomia (exs adiante)Binaacuterios

FITS Flexible Image Transport System - o mais comum para observaccedilotildees astronocircmicas Conteacutem os dados (em geral arrays 1D 2D ou 3D) e documentaccedilatildeo (nos cabeccedilalhos) sobre a origem e caracteriacutesticas dos dados Tambeacutem usado para armazenar tabelas de dados quaisquer mesmo que natildeo sejam observaccedilotildees (especialmente pelo STSCI) Variam muito em qualidade de documentaccedilatildeo

NetCDF Network Common Data Form - evoluccedilatildeo do CDF autodocumentado eacute comum e bem suportado para vaacuterios arrays de dados

HDF5 Hierarchical Data Format ndash autodocumentado comum e bem suportado permitindo aleacutem de simples arrays estruturas (eacute um formato hieraacuterquico)

Formatos de imagens JPEG JPEG2000 TIFF GeoTIFF etc - voltados para arrays 2D3D de inteiros ou (em alguns casos) reais com ou sem compressatildeo JPEG2000 tem caracteriacutesticas mais avanccediladas como imagens multiresoluccedilatildeo

Formatos vetoriais PS EPS DXF SHP SVG - variados niacuteveis de suporte a armazenamento de vetores e formas em 2D ou 3D

ISIS Cube semelhante em caracteriacutesticas ao FITS mais usado em sensoriamento remoto geociecircncias e ciecircncias planetaacuterias em geral para observaccedilotildees 1D 2D ou 3D

Formatos nativos de linguagens todo o trabalho de leitura e gravaccedilatildeo eacute feito automagicamente pela biblioteca padratildeo em IDL R Python Java

5689

Arquivos texto - newlines

Apesar do que possa parecer arquivos texto natildeo tecircm intrinsecamente vaacuterias linhas Arquivos texto satildeo soacute uma sequumlecircncia 1D de caracteres em alguma codificaccedilatildeo Separaccedilatildeo em linhas (equivalente a interpretar o arquivo como 2D em linhas e colunas) eacute

especificada por convenccedilotildees Natildeo haacute apenas uma convenccedilatildeo para o fim de linhas

A mais primitiva convenccedilatildeo eacute separaccedilatildeo nenhuma estipula-se que linhas tenham um nuacutemero fixo N de caracteres e cabe ao software que lecirc o arquivo entender que uma linha nova ocorre regularmente a cada N caracteres

Eacute a forma menos portaacutevel e mais inconveniente eacute necessaacuterio o conhecimento preacutevio (ou por inspeccedilatildeo do arquivo) de quantos caracteres haacute por linha

A maior parte dos editores de texto natildeo vai saber separar linhas desta forma (por falta deste conhecimento preacutevio) Exemplo (de um FITS real)

SIMPLE = T Fits standard BITPIX = 16 Bits per pixel NAXIS = 0 Number of axes EXTEND = T File may contain extensions

O que com as linhas quebradas nos lugares certos seria

SIMPLE = T Fits standard BITPIX = 16 Bits per pixel NAXIS = 0 Number of axes EXTEND = T File may contain extensions

5789

Arquivos texto - newlines

A forma mais comum de especificar linhas eacute com um marcador do final de linha (newline)

Eacute um caractere especial natildeo normalmente presente no texto que serve para marcar fim de linhas

Mas natildeo haacute soacute um padratildeo de newline Os mais comuns

LF (Line Feed ASCII 10) ndash Unix Linux Mac OS X

CR - (Carriage Return ASCII 13) - Mac OS lt10

CR+LF (CR seguido de LF) - Windows DOS

Eacute o motivo de o Notepad (Windows) natildeo entender as quebras de linha de arquivos escritos com o formato nativo de Linux o arquivo soacute tem LF enquanto o editor espera CR+LF

Alguns sistemas (strings em vaacuterias linguagens por exemplo) usam o coacutedigo de escape n para indicar newline que eacute codificado de acordo com o padratildeo sendo usado

Em geral bibliotecas de leitura e gravaccedilatildeo de arquivos usam (default pelo menos) o newline nativo do sistema em que satildeo usadas

Programas de conversatildeo entre os sistemas satildeo comuns (ex dos2unix)

O Wordpad identifica se for usado soacute LF e quebra as linhas de acordo

5889

Arquivos - texto - CSV

Comma-separated values

O formato mais padronizado para tabelas (arrays 2D) em texto (frequentemente mas natildeo necessariamente ASCII)

Bem suportado por bibliotecas padratildeo de linguagens e outros softwares (Excel Calc Origin Google Docs etc)

Conteacutem Linhas de cabeccedilalho (opcionais mas recomendadas) linhas com qualquer texto geral

descrevendo o arquivo e em geral uma linha de tiacutetulo para as colunas da tabela Uma (apenas uma) tabela onde todas as linhas tecircm o mesmo nuacutemero de colunas

Colunas separadas por viacutergulas (opcionalmente pode ser outro separador) Linhas terminadas por newline (qualquer que seja) Strings delimitados por ldquo ldquo

Ex

NAMECALMPOSFILNAMEECHLPOSDISPPOSTARGNAMEPOSDIRCLASSMJD-OBSITIMECOADDSdec18s00010NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001dec18s00020NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001dec18s00120NIRSPEC-5-AO635800364500itan140NIRSPEC-5-AOp2 TITAN5408763000001dec18s00140NIRSPEC-5-AO626300364500itan140NIRSPEC-5-AOp1 TITAN5408763000001dec18s00151NIRSPEC-5-AO626300364500itan140NIRSPEC-5-AOp1ARC5408764000001dec18s00160NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001

Natildeo eacute necessaacuterio que as colunas tenham largura constante

Cabeccedilalho

5989

Arquivos - texto - CSVHaacute amplo suporte a leitura e gravaccedilatildeo de CSV sem precisar recorrer a procedimentos de baixo niacutevel

Podem ser diretamente importados em Excel Calc Origin Google Docs ou lido facilmente com bibliotecas padratildeo comuns Ex (IDL)

IDLgt c=read_csv(filesearch_scamcsvheader=h)IDLgt printhNAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS

IDLgt helpc Structure ltc8bca508gt 11 tags length=5256 data length=5248 refs=1 FIELD01 STRING Array[41] FIELD02 LONG Array[41] FIELD03 STRING Array[41] FIELD04 DOUBLE Array[41] FIELD05 DOUBLE Array[41] FIELD06 STRING Array[41] FIELD07 STRING Array[41] FIELD08 STRING Array[41] FIELD09 STRING Array[41] FIELD10 DOUBLE Array[41] FIELD11 LONG Array[41]

IDLgt printcfield01[03]dec18s0001 dec18s0002 dec18s0003 dec18s0004

IDLgt printcfield03[03]NIRSPEC-5-AO NIRSPEC-5-AO NIRSPEC-5-AO NIRSPEC-5-AO

6089

Arquivos - texto - CSVEx (IDL) Criaccedilatildeo de um CSV com uma tabela de valores

Criaccedilatildeo de 3 arrays 1D (12 elementos) um para cada coluna

IDLgt x=dindgen(3)IDLgt y=dindgen(4)IDLgt xx=reform(rebin(x34)12)IDLgt yy=reform(rebin(reform(y14)34)12)IDLgt f=xx+yy10IDLgt helpxxyyfXX DOUBLE = Array[12]YY DOUBLE = Array[12]F DOUBLE = Array[12]

Escrita do arquivo

IDLgt write_csvexamplecsvxxyyfheader=[XYX+10Y]

ResultadoXYX+10Y000000000000000000000000100000000000000010000000200000000000000020000000000000001000000010000000100000001000000011000000()

6189

Arquivos - texto - ldquoColunas regularesrdquoFixed column width

Natildeo eacute exatamente um padratildeo Eacute uma praacutetica comum

Armazena uma tabela (array 2D) de forma regular simples de ser interpretada e lida

Costumam ter linha(s) de cabeccedilalho descrevendo o conteuacutedo do arquivo em geral com uma linha para os nomes das colunas

As demais linhas conteacutem os dados sempre ocupando a mesma largura por coluna e escritos no mesmo formato em cada coluna

Costumam ser simples de ler inclusive interativamente (exs Excel Calc Origin read_ascii)

Ex (IDL) Uma simples tabela soacute de nuacutemeros

wavl CH4=33 wavl CH4=25 wavl CH4=10 wavl CH4=08 wavl CH4=05 wavl CH4=026 wavl CH4=02 477330000 0090130 477330000 0091110 477330000 0089250 477330000 0087000 477330000 0087140 477330000 0090080 477330000 0088110 480040000 0090930 480040000 0091930 480040000 0090160 480040000 0087930 480040000 0088110 480040000 0090950 480040000 0089090 482750000 0091710 482750000 0092730 482750000 0091060 482750000 0088850 482750000 0089080 482750000 0091810 482750000 0090060 485450000 0092530 485450000 0093570 485450000 0092000 485450000 0089810 485450000 0090100 485450000 0092730 485450000 0091090

IDLgt a=read_ascii(specs_27s_ntxtdata_start=1header=header)IDLgt printheader wavl CH4=33 wavl CH4=25 wavl CH4=10 wavl CH4=08 wavl CH4=05 wavl CH4=026 wavl CH4=02 IDLgt helpa Structure ltd423c9a8gt 1 tags length=224 data length=224 refs=1 FIELD01 FLOAT Array[14 4]

6289

Arquivos - texto - ldquoColunas regularesrdquoJaacute um arquivo um pouco mais difiacutecil de ler

NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS dec18s0001 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0002 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0003 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 FLAT 5408757812500 460000 5 dec18s0004 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 DARK 5408757812500 460000 5

Por ter colunas de tipos diferentes (strings inteiros reais) natildeo eacute possiacutevel o ler em um simples array Mas eacute faacutecil o colocar em uma estrutura de arrays onde cada campo eacute uma coluna

Especificando interativamente como interpretar as linhasIDLgt templ=ascii_template(filesearch_scamtxt)

Nome do campo (default mostrado)

Tipo do campo (identificado automaticamente)

Posiccedilatildeo (caracter) do comeccedilo (identificada automaticamente)

Linha de exemplo para verificar as colunas

6389

Arquivos - texto - ldquoColunas regularesrdquoDepois de feito o template o arquivo pode ser lido com apenas

IDLgt a=read_ascii(filesearch_scamtxttemplate=templ)IDLgt helpa Structure ltd4ec4608gt 11 tags length=416 data length=416 refs=1 FIELD01 STRING Array[4] FIELD02 LONG Array[4] FIELD03 STRING Array[4] FIELD04 FLOAT Array[4] FIELD05 FLOAT Array[4] FIELD06 STRING Array[4] FIELD07 STRING Array[4] FIELD08 STRING Array[4] FIELD09 FLOAT Array[4] FIELD10 FLOAT Array[4] FIELD11 LONG Array[4]IDLgt printafield01dec18s0001 dec18s0002 dec18s0003 dec18s0004IDLgt printafield04 626300 626300 626300 626300

O template (uma estrutura contendo dados sobre como ler o arquivo) pode ser usado para outros arquivos no mesmo formato No lugar de ter sido criado interativamente poderia ter sido lido de algum arquivo Poderia ter especificado nomes para os campos que seriam mais amigaacuteveis que coias como FIELD11

6489

Arquivos - texto - XML

Extensible Markup Language

Admite grande flexibilidade e por isso pode ter alta complexidade

Valores satildeo colocados dentro de uma estrutura em hieraacuterquica (em uma aacutervore) com os noacutes identificados pelos seus nomes (chaves)

Largamente usado em muitas aacutereas para armazenar conjuntos arbitraacuterios de quaisquer estruturas de dados

A maioria das aplicaccedilotildees usa um formato que eacute um subconjunto do XML especificado por um Schema comumente em um arquivo XML DTD (Document Type Definition)

6589

Arquivos - texto ndash XML ndash exemplos de usos

Armazenamento de dados de aplicaccedilotildees web (comum para exportar importar dados MediaWiki DokuWiki WordPress ADS Lattes etc)

Documentos Office (docx pptx xlsx) OpenOffice (odt opd ods)

Como versotildees de outros formatos FITSML XDF

ldquoScientific Dataset XML NASAs Astronomical Data Center (ADC) sponsors a number of research projects that

use XML for scientific data representation The XML activities at the ADC are sponsored and supported by the NASA Office of Space Science Applied Information Systems Research Program (AISRP)rdquo - httpxmlcoverpagesorgnasa-adchtml

Astronomical Instrument Markup Language (AIML)

SVG ndash Scalable Vector Graphics

Muitas de outras aplicaccedilotildees listadas em httpxmlcoverpagesorgxmlhtmlapplications

6689

Arquivos - texto ndash XML - exemploltxml version=10 gtltDOCTYPE Xdmf SYSTEM Xdmfdtd []gtltXdmf xmlnsxi=httpwwww3org2001XInclude Version=20gt ltDomaingt lt-- Example of Basic Topologies --gt ltInformation Name=Descriptiongt Example of a Polyvertex Topology ltInformationgt ltGrid Name=Polyvertex GridType=Uniformgt ltTopology TopologyType=Polyvertex Dimensions=3 NodesPerElement=3gt ltDataItem Format=XML Dimensions=3 3 NumberType=Floatgt 0 1 2 4 5 6 8 9 10 ltDataItemgt ltTopologygt ltGeometry Type=XYZgt ltDataItem Format=XML Dimensions=4 4 3gt 00 00 00 10 00 00()Que mostra que a interpretaccedilatildeo (parsing) de XML eacute em geral complexa

6789

Arquivos - texto - XML

Haacute muitas bibliotecas de alto niacutevel para fazer o processamento (parsing) e entregar os dados em uma estrutura conveniente

A complexidade em processar XML estaacute em decidir o que fazer com os dados jaacute que os arquivos podem ser muito complexos

As APIs (Application Programming Interfaces) mais comuns para processar XML que satildeo implementadas em muitas linguagens

DOM (Document Object Model) ndash manteacutem todo o conteuacutedo do em uma estrutura de dados (em geral uma aacutervore) em uma variaacutevel (em geral um objeto) Esta pode ser consultada para obter os valores de interesse para os alterar e usada para escrever um arquivo

SAX (Simple API for XML) ndash Interpretador (parser) por objetos O usuaacuterio escreve uma classe herdando da classe SAX provendo os meacutetodos que vatildeo processar os campos agrave medida em que estes satildeo lidos

6889

Arquivos - binaacuterios - FITSFlexible Image Transport System

O formato mais comum para observaccedilotildees astronocircmicas Tambeacutem usado para armazenar quaisquer dados mesmo natildeo relacionados a observaccedilotildees (especialmente tabelas como eacute praacutetica do STSCI)

Conteacutem um (ou mais) cabeccedilalho(s) de texto com metadados (informaccedilotildees sobre os dados como caracteriacutesticas (necessaacuterias para os ler) origem condiccedilotildees em que foram obtidos processamento realizado etc)

SIMPLE = T image conforms to FITS standard BITPIX = 32 bits per data value NAXIS = 2 number of axes NAXIS1 = 1024 NAXIS2 = 1024 BSCALE = 100000 Scaling factor BZERO = 000000 Scaling zero-point TELESCOP= Keck II Telescope SLITNAME= 0041x226 Slit Name SLITPA = 351979 Slit position angle SLITX = 131500 X pixel of the center of the slit LST = 12010446 local apparent sidereal time (()

Depois do cabeccedilalho haacute uma (ou mais) seccedilatildeo(otildees) de dados binaacuterios Costuma(m) ser array(s) 1D (espectros) 2D (imagens) ou 3D (ldquocubos de dadosrdquo)

De inteiros ou reais inteiros satildeo comuns em contagens de instrumentos reais para valores derivados (fluxos intensidades etc)

6989

Arquivos - binaacuterios - FITSNormalmente FITS satildeo lidos escritos por bibliotecas prontas de (relativamente) alto niacutevel usuaacuterio natildeo tem que saber como os dados satildeo armazenados no arquivo nem como os ler escrever Ex (IDL com a biblioteca idlastro)

IDLgt fits_info2dspectrumfits2dspectrumfits has 3 extensionsPrimary header 288 recordsNo dataExtension 1 -- SCI Header 144 records IMAGE ( 1201 1201 )Extension 2 -- ERR Header 72 records IMAGE ( 1201 1201 )Extension 3 -- DQ Header 72 records IMAGE ( 1201 1201 )

IDLgt mydata=readfits(2dspectrumfitsexten_no=1myheader) READFITS Reading FITS extension of type IMAGE READFITS Now reading 1201 by 1201 array

IDLgt extastmyheadermyastIDLgt sz=size(mydatadimensions)IDLgt xy2ad[1sz[0]][1sz[1]]myastcorners_acorners_dIDLgt printcorners_aCorners of the data array from file 2dspectrumfits are at 14487480 33063480

IDLgt printcorners_d -00041264444 00041402222

Obteacutem os dados de coordenadas (WCS) do header

Coloca os dados no array (2D de floats) mydata e o header no array (1D de strings) myheader

Calcula as coordenadas das quinas da imagem atraveacutes do WCS

Provecirc informaccedilotildees sobre o arquivo

7089

Arquivos - binaacuterios - ISIS Cube

Formatos como FITS se adequam muito a ter uma interface de mais alto niacutevel por objetos

Tambeacutem para dados em tabelas FITS muito mais trabalhosos de ler em baixo niacutevel que se adequam muito mais a mapas ou estruturas

Exemplo (de um formato semelhante a FITS ISIS cube)

O objeto ao ser criado lecirc todo o arquivo

cube=pp_editablecube(CM_1553510065_1_ircub)

Meacutetodos fornecem os dados desejados para obter quando necessaacuterio os dados de interesse

Find out the names of the backplanesprintcubegetproperty(backnames)Get the start time of the cubeprintcubegetfromheader(START_TIME)2007-084T100057286Z

Valores no cabeccedilalho podem ser convenientemente fornecidos como um mapa

header=cubeheader_as_hash()printheader[START_TIME]2007-084T100057286Z

7189

Arquivos - binaacuterios ndash ISIS Cube

Os dados satildeo fornecidos como arraysMake a contour plot of the latitudesc=contour(cubegetsuffixbyname(LATITUDE))Get the band with wavelength nearest to 21 (in the units used in the cube)selband=cubegetbandbywavelength(21wavelengths=selwavs)

Interfaces por overload tornam o acesso ainda mais conveniente

selband=cube[21]

selwavs=cube[21]

Retorna um array com a banda de comprimento de onda mais proacuteximo de 21 (microm)

Retorna o comprimento de onda mais proacuteximo de 21 (microm) da banda retornada acima

7289

Arquivos - binaacuterios ndash ISIS Cube Alteraccedilotildees feitas ao conteuacutedo satildeo automaticamente refletidas em todos os

lugares (cabeccedilalho em particular) afetados mantendo o objeto vaacutelido que pode depois ser gravado em um novo arquivo

IDLgt printcubelinescubesamplescubebands 64 64 256

IDLgt helpcubecoreltExpressiongt FLOAT = Array[64 64 256]

IDLgt cubecore=dblarr(100100256)

A linha acima natildeo eacute uma atribuiccedilatildeo eacute uma invocaccedilatildeo de meacutetodo Eacute equivalente acubesetpropertycore=dblarr(100100256)

Eacute o trabalho da funccedilatildeo setproperty decidir se a propriedade passada (core) faz sentido e se fizer fazer todo o trabalho necessaacuterio a esta mudanccedila Para o usuaacuterio eacute tudo automaacutetico e os dados da classe satildeo vaacutelidos o tempo todo

IDLgt helpcubecoreltExpressiongt DOUBLE = Array[100 100 256]

IDLgt printcubelinescubesamplescubebands 100 100 256

IDLgt cubesaveCM_1553510065_1_ir_editedcub

7389

Arquivos - binaacuterios ndash NetCDF e HDF5

Network Common Data Form e Hierarchical Data Format

Os dois uacutenicos formatos bem estabelecidos para dados cientiacuteficos geneacutericos

Armazenam dados como vaacuterias variaacuteveis e seus metadados Para cada variaacutevel haacute (ou pode haver) os metadados

Nome Dimensotildees (do array) Unidades Comentaacuterios

Ambos permitem arrays multidimensionais

Apenas HDF5 permite estruturas (daiacute vem a hierarquia)

Autodocumentados qualquer software que saiba ler um destes formatos lecirc qualquer arquivo sem precisar de conhecimento preacutevio sobre como o arquivo foi gerado

Muito bem suportados em bibliotecas padratildeo e natildeo padratildeo em softwares interativos e visualizadores (inclusive plugins para navegadores)

httpwwwunidataucaredusoftwarenetcdf httpenwikipediaorgwikiHdf5

NetCDF eacute mais simples de usar por natildeo ter hierarquia dando menos trabalho para ler e escrever dados Se hierarquia natildeo eacute necessaacuteria eacute mais conveniente de usar que HDF5

7489

Arquivos - binaacuterios - NetCDF e HDF5Haacute tambeacutem o formato CDL uma versatildeo ASCII do NetCDF A biblioteca padratildeo do NetCDF inclui conversores entre estes formatos

$ ncdump -h refspec_g01_0ncnetcdf refspec_g01_0 dimensions nlay = 51 nwn = 400 nleg = 33 numu = 2 nlev = 52 nphi = 3 ngas = 2 nwnc = 1 scal = 1 v3 = 3 dnl = 1 nk = 1 tdisr = UNLIMITED (0 currently) na = 16

variables float alb(nwn) float z(nlay) float t(nlay) float p(nlay) float wl(nwn) float iof(nwn) float mtau(nwn) float htau(nwn) float hctaus(nwn) float gtau(nwn) float outcos(scal) float phi(nleg) float phic(scal) float umu(numu) float flux(v3 nwn nlev) float mix(nlay ngas) float c(nlay) float psat(nlay) float ga(nwnc) float wlc(nwnc) float inc(scal) int dm(scal) int ord(scal) float fbeam(scal) float wn(nwn) float tautot(nwn nlay) float htaus(nwn nlay) float htaux(nwn nlay) float taug(nwn nlay) float phase(nwn nlay nleg) float ssa(nwn nlay) float uu(nwn nphi nlev numu) float u0u(nwn nlev numu) float tray(nwn nlay) float gtauo(tdisr nwn nlay)

Haacute 14 variaacuteveis usadas como dimensotildees para as 35 variaacuteveis que satildeo arrays

Ex alb(nwn) indica que alb eacute um array 1D de nwn elementos

nwn estaacute armazenado como uma das dimensotildees e eacute 400 portanto alb tem 400 elementos

Parte do conteuacutedo de um arquivo NetCDF em formato CDL (gerado pelo programa ncdump)

7589

Arquivos - binaacuterios - NetCDF e HDF5Conteuacutedo daquele arquivo visualizado com o ncview (acompanha a biblioteca NetCDF padratildeo)

7689

Arquivos - binaacuterios - NetCDF e HDF5O conteuacutedo de todo o arquivo pode ser lido facilmente com as bibliotecas disponiacuteveis e armazenado em contecirciners convenientes Usando um objeto que gera um resultado um pouco mais conveniente

IDLgt h=pp_readncdf(refspec_g01_0nchash)IDLgt printhvar_dims ltObjHeapVar229(HASH)gtvars ltObjHeapVar152(HASH)gtdims ltObjHeapVar118(HASH)gt

IDLgt printh[vars]T 173203 175459 175848 176001 175975 Z 431869 418858 406067 393403 380464 FLUX 300660 145536 0705180 0341669 0165532 PHASE 100000 0779034 0660858 0542052 0449983 TAUTOT0694377 0693420 0693474 0693540 0693636()

IDLgt help(h[vars])[TAUTOT]ltExpressiongt FLOAT = Array[51 400]

IDLgt print(h[var_dims])[TAUTOT]NLAY NWN

IDLgt print(h[dims])[(h[var_dims])[TAUTOT]]NLAY 51NWN 400

7789

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5)

Visualizaccedilatildeo da variaacutevel selecionada

Metadados e alguns valores da variaacutevel selecionada

Variaacutevel a ser criada com o conteuacutedo desta variaacutevel do arquivo

Hierarquia das variaacuteveis do arquivo

7889

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5) Imported variable az

IDLgt helpaz Structure ltd5723f38gt 13 tags length=448 data length=444 refs=1 _NAME STRING az _ICONTYPE STRING binary _TYPE STRING DATASET _FILE STRING INTENSI_test_409OUTh5 _PATH STRING _DATA DOUBLE Array[38] _NDIMENSIONS LONG 1 _DIMENSIONS ULONG64 Array[1] _NELEMENTS ULONG64 38 _DATATYPE STRING H5T_FLOAT _STORAGESIZE ULONG 8 _PRECISION LONG 64 _SIGN STRING

IDLgt printaz_data 00000000 10000000 20000000 30000000 40000000 50000000 60000000 80000000 ()

7989

Arquivos - binaacuterios - imagens

JPEG JPEG200 TIFF GeoTIFF etc

Os formatos comuns de imagens satildeo bem suportados em muacuteltiplas plataformas para uso dentro de programas e interativamente

Alguns formatos tecircm opccedilatildeo de compressatildeo com perda eou sem perda

Armazenam imagens como arrays 2D ou 3D (3D frequumlentemente limitado a 3 ou 4 em uma das dimensotildees uma imagem em 3 ou 4 bandas) de inteiros ou (em alguns formatos) reais

Alguns formatos permitem armazenar metadados para caracterizar as imagens armazenadas

JPEG2000 e GeoTIFF (um subconjunto de TIFF) comuns em astronomia e aacutereas proacuteximas

8089

Arquivos - binaacuterios ndash imagens ndash exemplo (IDL)IDLgt printquery_tiff(issmap_2009tiffinfogeotiff=geo) 1

IDLgt helpinfo Structure ltd4eca4b8gt 18 tags length=144 data length=132 refs=1 CHANNELS LONG 4 DIMENSIONS LONG Array[2] IMAGE_INDEX LONG 0 NUM_IMAGES LONG 1 PIXEL_TYPE INT 1 TYPE STRING TIFF BITS_PER_SAMPLE LONG 8 POSITION FLOAT Array[2] RESOLUTION FLOAT Array[2] UNITS LONG 2 TILE_SIZE LONG Array[2] DESCRIPTION STRING ISS (2009) DATE_TIME STRING 20100218 012436()

IDLgt helpgeo Structure ltd4efa1b8gt 10 tags length=264 data length=262 refs=1 MODELPIXELSCALETAG DOUBLE Array[3] MODELTIEPOINTTAG DOUBLE Array[6 4] GEOGRAPHICTYPEGEOKEY INT 4035 GEOGSEMIMAJORAXISGEOKEY DOUBLE 25750000 GEOGSEMIMINORAXISGEOKEY DOUBLE 25750000()

IDLgt myimage=read_tiff(issmap_2009tiff) Lecirc a imagem para o array myimage

Obteacutem informaccedilotildees sobre o arquivo

8189

Arquivos - binaacuterios ndash formatos nativosLinguagens como IDL R Python Java tecircm seu formato nativo binaacuterio acessado em alto niacutevel Basta mandar salvar ler variaacuteveis no do arquivo a biblioteca padratildeo automagicamente faz todo o trabalho de decidir como gravar ler os dados

Conveniente de usar na proacutepria linguagem Mas raramente existem bibliotecas para ler gravar o formato nativo de uma linguagem a partir de outra Ex (IDL)

IDLgt savefile=2dspectrumsavmydatamyheadercorners_dcorners_averbosecompress SAVE Portable (XDR) compressed SAVERESTORE file SAVE Saved variable MYDATA SAVE Saved variable MYHEADER()

Pode ser lido com apenas (haacute formas mais elaboradas)

IDLgt restore2dspectrumsavverbose RESTORE Portable (XDR) compressed SAVERESTORE file RESTORE Save file written by ltunknowngtltunknowngt Thu Jan 27 191422 2011 RESTORE IDL version 801 (linux x86_64) RESTORE Restored variable MYDATA RESTORE Restored variable MYHEADER()

IDLgt helpmydatamyheadercorners_dcorners_aMYDATA FLOAT = Array[1201 1201]MYHEADER STRING = Array[144]()

8289

Arquivos - processamento em baixo niacutevel

Nem sempre um formato padratildeo eacute a melhor escolha para o problema

Nem sempre haacute escolha (pode-se ter que trabalhar com arquivos que jaacute foram escritos em algum formato proprietaacuterio)

Agraves vezes o formato eacute padratildeo mas natildeo haacute bom suporte a ele disponiacutevel

Em todos estes casos eacute necessaacuterio escrever rotinas em baixo niacutevel que vatildeo ler processar diretamente o conteuacutedo do arquivo

Preferencialmente criando interfaces de alto niacutevel para o programa que vai as usar

8389

Arquivos - processamento em baixo niacutevel - texto

Tomando o exemplo anterior onde as colunas eram de diferentes tipos

NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS dec18s0001 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0002 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0003 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 FLAT 5408757812500 460000 5 dec18s0004 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 DARK 5408757812500 460000 5

A forma mais simples de o ler diretamente eacute definir uma estrutura para receber cada linha e um array destas estruturas para receber todo o arquivo Ex (IDL)

IDLgt record=namecalmpos0filnameechlpos0d0disppos0d0targnameposdirclassmjd_obsitime0d0coadds0IDLgt nlines=file_lines(filesearch_scamtxt)IDLgt mydata=replicate(recordnlines-1)IDLgt header=

Depois de definidas as variaacuteveis que vatildeo receber os dados o arquivo pode ser lido

IDLgt openrunitfilesearch_scamtxtget_lunIDLgt readfunitheaderIDLgt readfunitmydataformat=(A14I8A15F104F104A18A19A15F158F105I15)IDLgt free_lununit

A gravaccedilatildeo de um arquivo texto poderia ser feita de forma semelhante apenas trocando openr por openw (abrir o arquivo para gravaccedilatildeo natildeo leitura) e readf por printf

O arquivo eacute aberto em uma unidade (unit) usada para especificar de onde eacute feita a leitura

Ao final o arquivo eacute fechado

8489

Arquivos - processamento em baixo niacutevel - texto

O que resulta em

IDLgt printheader NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS

IDLgt helpmydataMYDATA STRUCT = -gt ltAnonymousgt Array[4]

IDLgt helpmydata[0] Structure ltd5e38f68gt 11 tags length=136 data length=124 refs=3 NAME STRING dec18s0001 CALMPOS INT 0 FILNAME STRING NIRSPEC-5-AO ECHLPOS DOUBLE 62630000 DISPPOS DOUBLE 36450000 TARGNAME STRING HD85258 POSDIR STRING NIRSPEC-5-AOp1 CLASS STRING STAR MJD_OBS STRING 54087574 ITIME DOUBLE 10000000 COADDS INT 1

Este caso eacute mais complicado que os mais comuns por haver colunas de strings

Se todas fossem de nuacutemeros natildeo teria sido necessaacuterio especificar o formato explicitamente As colunas teriam sido adivinhadas pela biblioteca que lecirc o arquivo Poderia ter sido lido escrito soacute com um array de nuacutemeros sem estruturas

8589

Arquivos - processamento em baixo niacutevel - binaacuterio

Formatos binaacuterios podem ser definidos de qualquer forma O arquivo eacute apenas um conjunto de bytes Cabe ao software saber como os interpretar

Uma escolha comum para que sejam autodocumentados eacute incluir um cabeccedilalho de texto informando as caracteriacutesticas dos dados necessaacuterias para os ler

Ex (IDL) criar um arquivo que armazene um array de doubles com um cabeccedilalho informando as dimensotildees para que o programa que o lecirc saiba como ler os dados

Inventa dados e abre o arquivo

IDLgt data_to_write=dindgen(34)IDLgt openwunitbinary_exampledatget_lun

Escreve as dimensotildees como texto

IDLgt printfunitdimensions of the double array stored belowIDLgt printfunitsize(data_to_writedimensions)

Escreve os dados binaacuterios

IDLgt writeuunitdata_to_write

Fecha o arquivo

IDLgt free_lununit

Escreve em binaacuterio (write unformatted)

8689

Arquivos - processamento em baixo niacutevel - binaacuterio

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

dimensions of the double array stored below 3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

8789

Arquivos - processamento em baixo niacutevel - binaacuterioA leitura deste arquivo eacute igualmente simples

IDLgt header=IDLgt dims=[00]IDLgt openrunitbinary_exampledatget_lun

Lecirc as dimensotildees (armazenadas como texto)

IDLgt readfunitheaderIDLgt readfunitdims

Lecirc a parte binaacuteria depois de saber as dimensotildees

IDLgt data_read=dblarr(dims)IDLgt readuunitdata_read

Fecha o arquivo

IDLgt free_lununit

Verifica que os dados foram gravados e lidos corretamente

IDLgt printarray_equal(data_to_writedata_read) 1

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Lecirc dados binaacuterios (read unformatted)

8889

Sumaacuterio

5 ndash Slides em httpwwwppenteadonetpeapea04_strings_iopdf Strings Expressotildees regulares Arquivos

httpwwwppenteadonetpea

8989

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89

Strings - formatos tipo Fortran

(apenas o principal ver documentaccedilatildeo para detalhes)

Ex (IDL)

IDLgt printx=1d0+1d-9format=(A0F1613)X= 10000000010000

Tambeacutem haacute modificadores para especificar alinhamento (-) se deve haver (ou ser suprimido) avanccedilo para a pŕoxima linha posiccedilatildeo dentro do campo etc

Coacutedigo Significado Exemplo(s)

A String (A) (10A)

I Inteiro decimal (I) (10I)(-2I)

B Inteiro binaacuterio (B) (10B)

Z Inteiro hexadecimal (Z) (10Z)

O Inteiro octal (O) (10O)

F Real ponto fixo (F)(F52)

E D Real ponto flutuante (E)(D1610)

G Real ponto fixo ou flutuante de acordo com o valor (G)(G10)

ldquordquo String literal (ldquox=rdquoI10)

X Caracteres em branco (A10XI)

2889

Strings - formatos tipo C (printf)(apenas o principal ver documentaccedilatildeo para detalhes)String com campos a serem substituiacutedos por valores (passados adiante) marcados por coacutedigos com

Ex (Python)In [20] print(x=1610e (1e0+1e-9))x=10000000010e+00

Haacute modificadores para especificar alinhamento como preencher o espaccedilo que sobra (espaccedilos zeros etc) para imprimir o sinal + etc

Coacutedigo Significado (tipo) Exemplo(s)

di Inteiro decimal (int) d 5d +05d

u Inteiro decimal sem sinal (unsigned int) u 7u

fF Real em ponto fixo (double float) f 136f

eE Real em ponto flutuante (double float) e 1610e

gG Real em ponto fixo ou flutuante decidido pelo valor (double float)

g 73G

xX Inteiro sem sinal hexadecimal (unsigned int) x 10X

o Inteiro sem sinal octal (unsigned int) o 5o

s String (string) s 10s

c Caractere (char) c

p Ponteiro - estilo C - (void ) p

literal

2989

Strings - conversatildeo de strings para outros tipos

Para gerar dados a partir de strings datas identificadores pedaccedilos de nomes valores numeacutericos armazenados em strings

Tambeacutem sempre haacute conversotildees default para os tipos baacutesicos onde o intepretador programa faz o possiacutevel para entender o string como um valor daquele tipo

Tipicamente eacute feito por casts (funccedilotildees de conversatildeo) reads (de strings ou arquivos texto (arquivos texto satildeo strings)) construtores de objetos ou implicitamente

3089

Strings - conversatildeo de strings para outros tipos - impliacutecitas

Exs (IDL)

IDLgt helpfix([17 17 171 -17 9 8])ltExpressiongt INT = Array[5]

IDLgt printfix([17 17 171 -17 9 8]) 17 17 17 -17 9

IDLgt printdouble([17 17 171 -17 9 8]) 17000000 17000000 17100000 -17000000 90000000

IDLgt readfunitabcd

IDLgt a=0d0IDLgt b=00IDLgt c=0IDLgt reads171d0 189d0 -9abcIDLgt helpabcA DOUBLE = 17100000B FLOAT = 189000C INT = -9

Converte o conteuacutedo do string para os tipos das variaacuteveis abcd (explicado adiante)

3189

Strings - conversatildeo de strings para outros tipos

Quando o default natildeo eacute suficiente (ou quando escrevendo o conversor em uma classe) costuma ser possiacutevel o fazer com formatos semelhantes aos formatos para gerar strings Exs (IDL)

IDLgt a=0d0IDLgt b=00IDLgt c=0IDLgt reads171d0 something 189d0-9abc READS Input conversion error Unit 0 File ltstdingt Error occurred at $MAIN$ Execution halted at $MAIN$

Natildeo funcionou porque sozinho ele natildeo conseguiu saber o que fazer com o ldquosomethingrdquo Usando um formato especiacutefico

IDLgt reads171d0 something 189d0-9 abcformat=(D6111XD611XI)

IDLgt helpabcA DOUBLE = 17100000B FLOAT = 189000C INT = -9

Exemplos mais complicados adiante (arquivos texto)

Variaacuteveis tecircm que ser definidas para informar para que tipo seraacute feita a conversatildeo default

3289

Strings - processamento natildeo baacutesicoOperaccedilotildees importantes e muito necessaacuterias mas que natildeo satildeo suportadas em todas as linguagens bibliotecas padratildeo

Testes (ex IDL)

IDLgt str=[afitsaFITSafitsaabfitsabcfits]

IDLgt printstrmatch(strfits) 1 0 0 1 1

IDLgt printstrmatch(strfitsfold_case) 1 1 0 1 1

IDLgt printstrmatch(strfitsfold_case) 1 1 1 1 1

IDLgt printstrmatch(strfits) 1 0 0 0 0

IDLgt printstrmatch(strfits) 0 0 0 1 0

3389

Strings - processamento natildeo baacutesico

Operaccedilotildees importantes e muito necessaacuterias mas que natildeo satildeo suportadas em todas as linguagens bibliotecas padratildeo

Separaccedilatildeo de partes (Ex IDL)

IDLgt printstrsplit(2011- 131 -extract)format=(A)2011131

Processamento de nomes de arquivos diretoacuterios (Ex IDL)

IDLgt printfile_dirname(some_directoryanother_directorysome_filetxt)some_directoryanother_directory

IDLgt printfile_basename(some_directoryanother_directorysome_filetxt)some_filetxt

IDLgt printfile_basename(another_directorysome_filetxttxt)+_alteredtxtsome_file_alteredtxt

3489

Strings - processamento natildeo baacutesico

Codificaccedilotildees (Ex Python 3)

gtgtgt s=infinite money infinNeuro sign

gtgtgt print(s)infinite money infineuro

gtgtgt print(ascii(s))infinite money u221eu20ac

gtgtgt print(sencode(utf-8))binfinite money xe2x88x9exe2x82xac

3589

Strings - processamento natildeo baacutesico

Perl eacute a linguagem mais avanccedilada para processamento de strings tem suporte nativo a muitas outras operaccedilotildees a semacircntica da linguagem eacute voltada principalmente para processar strings expressotildees regulares (de vaacuterios tipos) natildeo satildeo strings fazem parte da semacircntica

Ex (sem o objetivo que seja compreensiacutevel apenas para indicar o estilo)

Ler um arquivo contendo campos com nomes separados de valores por ()

temperature 10008name some modelx_dimension 100y_dimension 100z_dimension 50()

Armazenado-o em um mapa O que pode ser feito com apenas

While (ltgt) Loop over input linesPut pre-colon text into $1 post-colon into $2 if (m (S+) (+) ) Use $1 as key $2 as value $file_data$1 = $2

3689

Expressotildees regulares - definiccedilatildeo

Expressotildees regulares (regular expressions regex) satildeo a mais poderosa ferramenta para fazer buscas e separar substrings

Regex satildeo uma linguagem com o uacutenico objetivo de especificar propriedades de strings

Implementadas em graus diferentes em todas as linguagens modernas e modernizadas facilita encontrar uma expressatildeo jaacute pronta pois satildeo quase iguais em qualquer linguagem

Estatildeo na biblioteca padratildeo em IDL Python R Perl

Em C++ e Java em bibliotecas comuns (Boost Jregex)

Para que servem

Uma expressatildeo regular especifica propriedades de strings

O interpretador de expressotildees regulares (regular expression engine) recebe a expressatildeo e o string a analisar e determina se o string corresponde (matches) agrave expressatildeo regular

Em alguns casos o interpretador pode tambeacutem informar que parte(s) do string corresponde(m) a que parte(s) da expressatildeo regular e realizar processamentos com estas partes

3789

Expressotildees regulares ndash exemplos de usos Separar partes de strings

Encontrar linhas em arquivos que tenham nomes valores e comentaacuterios e separar estes pedaccedilos

Escalar com comentaacuterio

SLITPA = 351979 Slit position angle

Array 1D sem comentaacuterio (se extendendo por vaacuterias linhas)

BAND_BIN_CENTER = (03505400358950036629003732200379490 0387900104598)

Escalares em diferentes formatos

Total Mechanical Luminosity 15310E+03resources_usedwalltime=005603

Pedaccedilos de nomes

6063 17836E-20 2456 T FeIX((3Pe)3d(2PE)4p_1Po-3s2_3p6_1Se)

Datas separando ano mecircs dia hora (em vaacuterios formatos diferentes)

DATE-OBS= 2006-12-18 universal date of observationDATE_TIME = 2010-07-19T161032START_TIME = 2006-182T225102850Z

3889

Expressotildees regulares ndash exemplos de usos

Separar partes de strings Separar partes de nomes de arquivos (por significarem algo como identificar o

conteuacutedo)

specdec18s0041fitsscamdec18i0054fits15_7_mts_hmpixselh_mr15sav15_7_mts_hwpixselh_mr15sav16_3_mts_hwpixselb_mr16savreadmodel5l_-1_000010000_10000_r05_030_08196_0100000_005000000_1000eps

Determinar se um string eacute um nuacutemero (inteiro real fixo flutuante)

Encontrar identificadores Exs nomes de cataacutelogos endereccedilos HTTPFTP endereccedilos de email

Separar campos em arquivos sendo lidos onde as linhas natildeo tecircm a mesma formataccedilatildeo algumas linhas com colunas separadas por espaccedilos outras por tabs outras por

siacutembolos ignorando linhas de comentaacuterios e linhas vazias

3989

Expressotildees regulares - usoEx (IDL) encontrar nomes de arquivos com algumas propriedades

IDLgt printfilesformat=(A)CM_1477475933_1_viscubCM_1477476864_1_ircubCM_1477476864_1_irgcubCM_1477476864_1_viscubCM_1477477826_1_ircubCM_1477477826_1_irgcubCM_1477477826_1_viscubmosaic2cub

IDLgt printstregex(files+irgcubboolean) 0 0 1 0 0 1 0 0

A expressatildeo regular eacute +irgcub Especifica uma ou mais ocorrecircncias seguidas (+) de qualquer caractere () seguido de uma ocorrecircncia de irgcub (o ponto vem precedido do caractere de

escape () para ser entendido literalmente como um ponto e natildeo como o seu significado especial (qualquer caractere)

Esta aplicaccedilatildeo do interpretador (stregex) retorna um valor Booleano (verdadeirofalso) para cada elemento do string passado (files) que informa se aquele elemento correspondia agravequela expressatildeo regular

Este eacute um exemplo artificial Seria mais faacutecil ter usado strmatch(filesirgcub)

4089

Expressotildees regulares - uso

Em casos como este tipicamente o resultado de stregex seria usado como filtro para selecionar apenas os elementos do array de strings que satisfazem agravequela expressatildeo regular

IDLgt w=where(stregex(files+irgcubboolean)null)IDLgt printfiles[w]format=(A)CM_1477476864_1_irgcubCM_1477477826_1_irgcub

Ex (IDL) Determinar que strings conteacutem uma data no formato yyyy-mm-dd

IDLgt strs=[201002012010-02-012010-2-1aaaa-mm-ddT2010-02-01J]IDLgt printstregex(strs[0-9]4-[0-9]2-[0-9]2boolean) 0 1 0 0 1

Esta expressatildeo regular especifica quatro repeticcedilotildees (4) de diacutegitos (caracteres na faixa [0-9]) seguido de um (-) seguido de duas repeticcedilotildees (2) de dois diacutegitos ([0-9]) seguido de um (-) seguido de duas repeticcedilotildees (2) de dois diacutegitos ([0-9])

Uma expressatildeo regular apenas um pouco mais elaborada poderia corresponder aos 3 formatos de data no array acima E poderia se impedir que a uacuteltima (com outros caracteres antes e depois da data) seja aceita

4189

Expressotildees regulares - regras - caracteres ldquonormaisrdquo

Uma expressatildeo regular usa caracteres ldquonormaisrdquo e especiais para especificar o que se vai procurar na ordem em que aparecem na expressatildeo

Se um caractere eacute normal (natildeo eacute um dos especiais mostrados adiante) ele especifica uma ocorrecircncia daquele caractere

Ex J eacute uma expressatildeo regular que corresponde a qualquer string onde ocorra J Jaacute JA soacute corresponde a strings que tenham JA dentro

Exs (IDL)

IDLgt strs=[JJJJJJaJAjaJa]

IDLgt printstregex(strsJboolean) 1 1 1 0 1

IDLgt printstregex(strsJAboolean) 0 0 1 0 0

4289

Expressotildees regulares - regras - caracteres especiaisCaracteres especiais tecircm outros significados Para significar literalmente aquele caractere deve ser escapado (escaped) com um

Siacutembolo significado exemplo Corresponde(m) Escape o caractere seguinte deve ser interpretado

literalmente natildeo como especial aa

Qualquer caractere ab ajb aab abb jafbc

+ Uma ou mais repeticcedilotildees do que vem agrave esquerda a+b ab aab bab baabh

() Subexpressatildeo para agrupar termos afetados por um caractere especial (como parecircnteses em notaccedilatildeo matemaacutetica)

(ab)+c abc ababc dabababcg

Zero ou mais repeticcedilotildees dos termos agrave esquerda ab abbaab caaabg

Zero ou uma repeticcedilatildeo dos termos agrave esquerda ab b ab cabd cbd

| Alternaccedilatildeo qualquer um dos dois agrave esquerda a|bc ac bc jacd jbcd

n Exatamente n repeticcedilotildees do termo agrave esquerda a2b aab daaabg

n1n2 De n1 a n2 repeticcedilotildees do termo agrave esquerda a12b ab aab aaab gaaabbd

^ Acircncora (no comeccedilo) nada agrave esquerda ^ab ab abb

$ Acircncora (no fim) nada agrave direita ab$ abaab

[] Conjunto de valores (explicado adiante)

4389

Expressotildees regulares - regras - conjuntos de valores

[] denota um conjunto de valores que pode conter

Uma lista de coisas que devem corresponder Ex [abc] signfica qualquer caractere no conjunto abc Correspondem a esta

expressatildeo abcabha

Uma lista de coisas que natildeo podem corresponder [^abc] significa qualquer coisa que natildeo seja a b ou c Correspondem a esta

expressatildeo d jgs gg

Faixas de valores [0-9] signfica qualquer diacutegito [0-9a-zA-Z] significa qualquer diacutegito ou letra

Classes de valores como algumas faixas e outros conjuntos ocorrem com muita frequumlecircncia haacute nomes

especiais para eles Estes (em IDL) vecircm entre [] ex [[digit] significa o mesmo que [0-9]

4489

Expressotildees regulares - regras - classes de valores

Classe signficado

alnum Caracteres alfanumeacutericos 0-9a-zA-Z

alpha Caracteres alfabeacuteticos a-zA-Z

cntrl Caracteres de controle ASCII (natildeo visiacuteveis coacutedigos 1 a 31 e 127)

digit Diacutegitos (decimais) 0-9

graph Caracteres visiacuteveis ASCII 33 a 126 (natildeo inclui o espaccedilo)

lower Letras minuacutesculas a-z

print Caracteres ldquoimprimiacuteveisrdquo (visiacuteveis e o espaccedilo) ASCII 32 a 126

punct Caracteres de pontuaccedilatildeo $amprsquo()+-lt=gt[]^_lsquo|~

space Os caracteres ldquoem brancordquo (blank) espaccedilo tab tab vertical CR LF (ASCII 32 e 9-13)

upper Letras maiuacutesculas A-Z

xdigit Diacutegitos hexadecimais 0-9A-Fa-f

lt Comeccedilo de palavra (palavra definida como sequumlecircncia de coisas natildeo space)

gt Fim de palavra (palavra definida como sequumlecircncia de coisas natildeo space)

Estas satildeo apenas as principais Algumas implementaccedilotildees tecircm muito mais (em particular nas linguagens que usam Unicode nativamente)

4589

Expressotildees regulares - exemplos

Determinar se strings satildeo nuacutemeros (Ex IDL)

IDLgt str=[9-18 875-812-45913E9-98d7a188d032f5]

Inteiros

IDLgt intexpr=^[-+][0-9]+$

IDLgt printstregex(strintexprboolean) 1 1 0 0 0 0 0 0 0 0

Ponto flutuante

IDLgt fpexpr=^[-+](([0-9][0-9]+)|([0-9]+[0-9]))([eEdD][-+][0-9]+)$

IDLgt printstregex(strfpexprboolean) 1 1 0 1 1 1 1 1 0 0

Sinal opcional

1 ou mais diacutegitos

Sinal opcional

0 ou mais diacutegitos opcionalmente seguidos de um ponto e 1 ou mais diacutegitos

1 ou mais diacutegitos opcionalmente seguidos de um ponto e 0 ou mais diacutegitos

ou Expoente opcional letra do expoente seguida de sinal opcional seguido de um ou mais diacutegitos

4689

Expressotildees regulares ndash extraccedilatildeo

Interpretadores de expressotildees regulares costumam oferecer mais que apenas testar se um string corresponde a uma expressatildeo

Em geral tambeacutem podem retornar que parte(s) do string corresponde(m) agrave expressatildeo

Ex (IDL) Determinar se um string conteacutem uma data incluindo os formatos

IDLgt dates=[2011-01-312011 1 3120110131something done on y2011m1d31 with something]

E extrair a data de dentro do string

IDLgt expr=[0-9]4[0-9]12[0-9]12

(4 diacutegitos)(qualquer separador)(1 a 2 diacutegitos)(qualquer separador)(1 a 2 diacutegitos)

IDLgt printstregex(datesexprextract)format=(A)2011-01-312011 1 31201101312011m1d31

Como agora separar ano mecircs e dia Com uma busca e uma extraccedilatildeo para cada Poderia ser mais eacute mais faacutecil com uma uacutenica expressatildeo regular

4789

Expressotildees regulares - aleacutem de apenas testes

Tambeacutem podem retornar que parte(s) do string correspondem agrave expressatildeo toda e agraves suas subexpressotildees (partes da expressatildeo delimitadas por parecircnteses)

Ex (IDL) Separar pedaccedilos de datas Neste caso para a expressatildeo ficar menor assumindo um formato simples (yyyy-mm-ddThhmmssfff) Mas poderia ser um formato mais livre como no exemplo anterior

IDLgt str=Stuff observed on 2011-01-31T123924983 with some instrumentIDLgt expr=([0-9]4)-([0-9]2)-([0-9]2)T([0-9]2)([0-9]2)([0-9]2[0-9]3)

(quatro diacutegitos)-(2 diacutegitos)-(2 diacutegitos)T(2 diacutegitos)(2 diacutegitos)(2 diacutegitos3 diacutegitos)

IDLgt pieces=stregex(strexprextractsubexpr)IDLgt printpiecesformat=(A)2011-01-31T12392498320110131123924983IDLgt d=julday(pieces[2]pieces[3]pieces[1]pieces[4]pieces[5]pieces[6])IDLgt printdformat=(F166) 2455593027372

Expressatildeo inteiraPrimeira subexpressatildeoSegunda subexpressatildeoTerceira subexpressatildeoQuarta subexpressatildeoQuinta subexpressatildeoSexta subexpressatildeo

4889

Expressotildees regulares - referecircncias httpxkcdcom208

Viacutedeos do Software Carpentry

httpsoftware-carpentryorg4_0regexp

4989

Arquivos

Quase todo programa precisa armazenar dados em arquivos

Podem ser pequenos arquivos de paracircmetros ou enormes arquivos de dados produzidos ou a processar

Apesar do sugerido pela praacutetica comum arquivos texto natildeo satildeo sempre a melhor escolha para armazenar dados - e haacute muitas formas diferentes de os usar

Qual eacute a melhor escolha

Assim como para linguagens ou contecirciners natildeo existe ldquoo melhor formatordquo Cada um tem suas vantagens e desvantagens

Dados diferentes (mesmo se usados pelos mesmos programas) em geral se adequam melhor a formatos diferentes

5089

Arquivos - texto X binaacuterios

Em qualquer formato arquivos satildeo armazenados como diacutegitos binaacuterios

Mas haacute duas formas principais como eles podem ser codificados

Arquivos baseados em texto (text files)

Dados satildeo transformados em caracteres usando alguma formataccedilatildeo (mesmo se impliacutecita) e escritos com alguma codificaccedilatildeo de texto (comumente mas natildeo necessariamente ASCII)

Um arquivo texto eacute um ou mais strings As mesmas conversotildees tecircm que ser feitas depara outros tipos

Arquivos ldquobinaacuteriosrdquo (binary files)

Embora todo arquivo seja binaacuterio este nome costuma ser usado soacute para aqueles em que os dados natildeo estatildeo na forma de texto

Com frequumlecircncia (nem sempre) os dados satildeo gravados de forma idecircntica a como satildeo armazenados na memoacuteria

Muitos formatos usam uma mistura de partes em texto e partes binaacuterias

Um cabeccedilalho (header) de texto que daacute informaccedilotildees (metadados) sobre os dados armazenados na parte binaacuteria que vem depois

O cabeccedilalho conteacutem em especial informaccedilotildees sobre como ler os dados binaacuterios

5189

Arquivos - texto X binaacuterios

Vantagens de arquivos texto

Legiacuteveis por pessoas (human readable)

Podem ser auto-suficientes todo o necessaacuterio para os ler e entender o que conteacutem pode ser obtido olhando o arquivo

Satildeo os menos especiacuteficos a linguagens software normalmente satildeo escritos em ASCII ou Unicode e sempre haacute algum suporte a ler escrever texto em linguagens software

Haacute alguns formatos padratildeo para texto (exs CSV XML) que satildeo suportados em muitas plataformas diferentes

5289

Arquivos - texto X binaacuterios

Vantagens de arquivos binaacuterios

Em geral natildeo haacute conversotildees entre o os dados como armazenados na memoacuteria O que torna o armazenamento mais eficiente e sem alteraccedilotildees nos valores

A maior parte dos formatos padronizados eacute binaacuteria Exs FITS cube CDF NetCDF HDF HDF5 JPEG JPEG2000 TIFF GeoTIFF MPEG etc

Eacute mais comum que haja bibliotecas prontas (ateacute de alto niacutevel) para consulta leitura e gravaccedilatildeo

Os formatos melhor desenhados satildeo autodocumentados (em texto ou binaacuterio) para os ler natildeo eacute necessaacuterio conhecimento preacutevio sobre como os dados foram armazenados

Toda linguagem plataforma costuma ter seu formato binaacuterio mais nativo que costuma ser o mais faacutecil para leitura gravaccedilatildeo Em particular nas de alto niacutevel que tecircm formatos autodocumentados (especialmente

em IDL R Python Java)

Muitos formatos tecircm opccedilatildeo de compressatildeo dos dados

5389

Arquivos - proprietaacuterios X padratildeo

Independente da escolha texto binaacuterio programas devem escolher entre usar um formato proacuteprio ou um formato padronizado

A principal vantagem de formatos proacuteprios eacute que satildeo definidos da forma mais conveniente para a aplicaccedilatildeo que os usa simplificando leitura e gravaccedilatildeo e potencialmente otimizando recursos (acesso ao disco tamanho do arquivo etc)

A principal desvantagem de formatos proacuteprios eacute ser necessaacuterio escrever todo o coacutedigo para os ler gravar

Pode dar mais trabalho que usar um formato geneacuterico que natildeo seja exatamente o que melhor se encaixa na aplicaccedilatildeo

O coacutedigo para processar o formato em geral vai ser menos completo e conveniente de usar que o de um formato bem estabelecido usado por muitos outros em muitos ambientes

Cada novo software que for usar estes arquivos vai precisar compartilhar do mesmo coacutedigo ou precisar de coacutedigo novo (em particular se em outra linguagem) para ler gravar naquele formato

Eacute necessaacuterio documentar o formato e decidir sobre como ele seraacute definido

Se outros jaacute colocaram muito trabalho desenvolvendo bons formatos padratildeo bem suportados em muitos ambientes por que ter o trabalho de reinventar (e reprogramar redocumentar e retestar) a roda

5489

Arquivos - padrotildees comuns em astronomia (exs adiante)

Texto

CSV Comma-separated values - bem suportado por muitos softwares

ldquoColunas fixasrdquo Natildeo eacute um padratildeo bem definido mas eacute praacutetica comum para tabelas (2D)

XML Extensible Markup Language - O padratildeo texto mais flexiacutevel de grande uso em programaccedilatildeo geral para armazenar qualquer coisa com frequumlecircncia de forma hieraacuterquica Bem suportado por linguagens modernas (e modernizadas) e bibliotecas das principais

linguagens gerais Alta complexidade o torna trabalhoso de usar

5589

Arquivos - padrotildees comuns em astronomia (exs adiante)Binaacuterios

FITS Flexible Image Transport System - o mais comum para observaccedilotildees astronocircmicas Conteacutem os dados (em geral arrays 1D 2D ou 3D) e documentaccedilatildeo (nos cabeccedilalhos) sobre a origem e caracteriacutesticas dos dados Tambeacutem usado para armazenar tabelas de dados quaisquer mesmo que natildeo sejam observaccedilotildees (especialmente pelo STSCI) Variam muito em qualidade de documentaccedilatildeo

NetCDF Network Common Data Form - evoluccedilatildeo do CDF autodocumentado eacute comum e bem suportado para vaacuterios arrays de dados

HDF5 Hierarchical Data Format ndash autodocumentado comum e bem suportado permitindo aleacutem de simples arrays estruturas (eacute um formato hieraacuterquico)

Formatos de imagens JPEG JPEG2000 TIFF GeoTIFF etc - voltados para arrays 2D3D de inteiros ou (em alguns casos) reais com ou sem compressatildeo JPEG2000 tem caracteriacutesticas mais avanccediladas como imagens multiresoluccedilatildeo

Formatos vetoriais PS EPS DXF SHP SVG - variados niacuteveis de suporte a armazenamento de vetores e formas em 2D ou 3D

ISIS Cube semelhante em caracteriacutesticas ao FITS mais usado em sensoriamento remoto geociecircncias e ciecircncias planetaacuterias em geral para observaccedilotildees 1D 2D ou 3D

Formatos nativos de linguagens todo o trabalho de leitura e gravaccedilatildeo eacute feito automagicamente pela biblioteca padratildeo em IDL R Python Java

5689

Arquivos texto - newlines

Apesar do que possa parecer arquivos texto natildeo tecircm intrinsecamente vaacuterias linhas Arquivos texto satildeo soacute uma sequumlecircncia 1D de caracteres em alguma codificaccedilatildeo Separaccedilatildeo em linhas (equivalente a interpretar o arquivo como 2D em linhas e colunas) eacute

especificada por convenccedilotildees Natildeo haacute apenas uma convenccedilatildeo para o fim de linhas

A mais primitiva convenccedilatildeo eacute separaccedilatildeo nenhuma estipula-se que linhas tenham um nuacutemero fixo N de caracteres e cabe ao software que lecirc o arquivo entender que uma linha nova ocorre regularmente a cada N caracteres

Eacute a forma menos portaacutevel e mais inconveniente eacute necessaacuterio o conhecimento preacutevio (ou por inspeccedilatildeo do arquivo) de quantos caracteres haacute por linha

A maior parte dos editores de texto natildeo vai saber separar linhas desta forma (por falta deste conhecimento preacutevio) Exemplo (de um FITS real)

SIMPLE = T Fits standard BITPIX = 16 Bits per pixel NAXIS = 0 Number of axes EXTEND = T File may contain extensions

O que com as linhas quebradas nos lugares certos seria

SIMPLE = T Fits standard BITPIX = 16 Bits per pixel NAXIS = 0 Number of axes EXTEND = T File may contain extensions

5789

Arquivos texto - newlines

A forma mais comum de especificar linhas eacute com um marcador do final de linha (newline)

Eacute um caractere especial natildeo normalmente presente no texto que serve para marcar fim de linhas

Mas natildeo haacute soacute um padratildeo de newline Os mais comuns

LF (Line Feed ASCII 10) ndash Unix Linux Mac OS X

CR - (Carriage Return ASCII 13) - Mac OS lt10

CR+LF (CR seguido de LF) - Windows DOS

Eacute o motivo de o Notepad (Windows) natildeo entender as quebras de linha de arquivos escritos com o formato nativo de Linux o arquivo soacute tem LF enquanto o editor espera CR+LF

Alguns sistemas (strings em vaacuterias linguagens por exemplo) usam o coacutedigo de escape n para indicar newline que eacute codificado de acordo com o padratildeo sendo usado

Em geral bibliotecas de leitura e gravaccedilatildeo de arquivos usam (default pelo menos) o newline nativo do sistema em que satildeo usadas

Programas de conversatildeo entre os sistemas satildeo comuns (ex dos2unix)

O Wordpad identifica se for usado soacute LF e quebra as linhas de acordo

5889

Arquivos - texto - CSV

Comma-separated values

O formato mais padronizado para tabelas (arrays 2D) em texto (frequentemente mas natildeo necessariamente ASCII)

Bem suportado por bibliotecas padratildeo de linguagens e outros softwares (Excel Calc Origin Google Docs etc)

Conteacutem Linhas de cabeccedilalho (opcionais mas recomendadas) linhas com qualquer texto geral

descrevendo o arquivo e em geral uma linha de tiacutetulo para as colunas da tabela Uma (apenas uma) tabela onde todas as linhas tecircm o mesmo nuacutemero de colunas

Colunas separadas por viacutergulas (opcionalmente pode ser outro separador) Linhas terminadas por newline (qualquer que seja) Strings delimitados por ldquo ldquo

Ex

NAMECALMPOSFILNAMEECHLPOSDISPPOSTARGNAMEPOSDIRCLASSMJD-OBSITIMECOADDSdec18s00010NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001dec18s00020NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001dec18s00120NIRSPEC-5-AO635800364500itan140NIRSPEC-5-AOp2 TITAN5408763000001dec18s00140NIRSPEC-5-AO626300364500itan140NIRSPEC-5-AOp1 TITAN5408763000001dec18s00151NIRSPEC-5-AO626300364500itan140NIRSPEC-5-AOp1ARC5408764000001dec18s00160NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001

Natildeo eacute necessaacuterio que as colunas tenham largura constante

Cabeccedilalho

5989

Arquivos - texto - CSVHaacute amplo suporte a leitura e gravaccedilatildeo de CSV sem precisar recorrer a procedimentos de baixo niacutevel

Podem ser diretamente importados em Excel Calc Origin Google Docs ou lido facilmente com bibliotecas padratildeo comuns Ex (IDL)

IDLgt c=read_csv(filesearch_scamcsvheader=h)IDLgt printhNAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS

IDLgt helpc Structure ltc8bca508gt 11 tags length=5256 data length=5248 refs=1 FIELD01 STRING Array[41] FIELD02 LONG Array[41] FIELD03 STRING Array[41] FIELD04 DOUBLE Array[41] FIELD05 DOUBLE Array[41] FIELD06 STRING Array[41] FIELD07 STRING Array[41] FIELD08 STRING Array[41] FIELD09 STRING Array[41] FIELD10 DOUBLE Array[41] FIELD11 LONG Array[41]

IDLgt printcfield01[03]dec18s0001 dec18s0002 dec18s0003 dec18s0004

IDLgt printcfield03[03]NIRSPEC-5-AO NIRSPEC-5-AO NIRSPEC-5-AO NIRSPEC-5-AO

6089

Arquivos - texto - CSVEx (IDL) Criaccedilatildeo de um CSV com uma tabela de valores

Criaccedilatildeo de 3 arrays 1D (12 elementos) um para cada coluna

IDLgt x=dindgen(3)IDLgt y=dindgen(4)IDLgt xx=reform(rebin(x34)12)IDLgt yy=reform(rebin(reform(y14)34)12)IDLgt f=xx+yy10IDLgt helpxxyyfXX DOUBLE = Array[12]YY DOUBLE = Array[12]F DOUBLE = Array[12]

Escrita do arquivo

IDLgt write_csvexamplecsvxxyyfheader=[XYX+10Y]

ResultadoXYX+10Y000000000000000000000000100000000000000010000000200000000000000020000000000000001000000010000000100000001000000011000000()

6189

Arquivos - texto - ldquoColunas regularesrdquoFixed column width

Natildeo eacute exatamente um padratildeo Eacute uma praacutetica comum

Armazena uma tabela (array 2D) de forma regular simples de ser interpretada e lida

Costumam ter linha(s) de cabeccedilalho descrevendo o conteuacutedo do arquivo em geral com uma linha para os nomes das colunas

As demais linhas conteacutem os dados sempre ocupando a mesma largura por coluna e escritos no mesmo formato em cada coluna

Costumam ser simples de ler inclusive interativamente (exs Excel Calc Origin read_ascii)

Ex (IDL) Uma simples tabela soacute de nuacutemeros

wavl CH4=33 wavl CH4=25 wavl CH4=10 wavl CH4=08 wavl CH4=05 wavl CH4=026 wavl CH4=02 477330000 0090130 477330000 0091110 477330000 0089250 477330000 0087000 477330000 0087140 477330000 0090080 477330000 0088110 480040000 0090930 480040000 0091930 480040000 0090160 480040000 0087930 480040000 0088110 480040000 0090950 480040000 0089090 482750000 0091710 482750000 0092730 482750000 0091060 482750000 0088850 482750000 0089080 482750000 0091810 482750000 0090060 485450000 0092530 485450000 0093570 485450000 0092000 485450000 0089810 485450000 0090100 485450000 0092730 485450000 0091090

IDLgt a=read_ascii(specs_27s_ntxtdata_start=1header=header)IDLgt printheader wavl CH4=33 wavl CH4=25 wavl CH4=10 wavl CH4=08 wavl CH4=05 wavl CH4=026 wavl CH4=02 IDLgt helpa Structure ltd423c9a8gt 1 tags length=224 data length=224 refs=1 FIELD01 FLOAT Array[14 4]

6289

Arquivos - texto - ldquoColunas regularesrdquoJaacute um arquivo um pouco mais difiacutecil de ler

NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS dec18s0001 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0002 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0003 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 FLAT 5408757812500 460000 5 dec18s0004 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 DARK 5408757812500 460000 5

Por ter colunas de tipos diferentes (strings inteiros reais) natildeo eacute possiacutevel o ler em um simples array Mas eacute faacutecil o colocar em uma estrutura de arrays onde cada campo eacute uma coluna

Especificando interativamente como interpretar as linhasIDLgt templ=ascii_template(filesearch_scamtxt)

Nome do campo (default mostrado)

Tipo do campo (identificado automaticamente)

Posiccedilatildeo (caracter) do comeccedilo (identificada automaticamente)

Linha de exemplo para verificar as colunas

6389

Arquivos - texto - ldquoColunas regularesrdquoDepois de feito o template o arquivo pode ser lido com apenas

IDLgt a=read_ascii(filesearch_scamtxttemplate=templ)IDLgt helpa Structure ltd4ec4608gt 11 tags length=416 data length=416 refs=1 FIELD01 STRING Array[4] FIELD02 LONG Array[4] FIELD03 STRING Array[4] FIELD04 FLOAT Array[4] FIELD05 FLOAT Array[4] FIELD06 STRING Array[4] FIELD07 STRING Array[4] FIELD08 STRING Array[4] FIELD09 FLOAT Array[4] FIELD10 FLOAT Array[4] FIELD11 LONG Array[4]IDLgt printafield01dec18s0001 dec18s0002 dec18s0003 dec18s0004IDLgt printafield04 626300 626300 626300 626300

O template (uma estrutura contendo dados sobre como ler o arquivo) pode ser usado para outros arquivos no mesmo formato No lugar de ter sido criado interativamente poderia ter sido lido de algum arquivo Poderia ter especificado nomes para os campos que seriam mais amigaacuteveis que coias como FIELD11

6489

Arquivos - texto - XML

Extensible Markup Language

Admite grande flexibilidade e por isso pode ter alta complexidade

Valores satildeo colocados dentro de uma estrutura em hieraacuterquica (em uma aacutervore) com os noacutes identificados pelos seus nomes (chaves)

Largamente usado em muitas aacutereas para armazenar conjuntos arbitraacuterios de quaisquer estruturas de dados

A maioria das aplicaccedilotildees usa um formato que eacute um subconjunto do XML especificado por um Schema comumente em um arquivo XML DTD (Document Type Definition)

6589

Arquivos - texto ndash XML ndash exemplos de usos

Armazenamento de dados de aplicaccedilotildees web (comum para exportar importar dados MediaWiki DokuWiki WordPress ADS Lattes etc)

Documentos Office (docx pptx xlsx) OpenOffice (odt opd ods)

Como versotildees de outros formatos FITSML XDF

ldquoScientific Dataset XML NASAs Astronomical Data Center (ADC) sponsors a number of research projects that

use XML for scientific data representation The XML activities at the ADC are sponsored and supported by the NASA Office of Space Science Applied Information Systems Research Program (AISRP)rdquo - httpxmlcoverpagesorgnasa-adchtml

Astronomical Instrument Markup Language (AIML)

SVG ndash Scalable Vector Graphics

Muitas de outras aplicaccedilotildees listadas em httpxmlcoverpagesorgxmlhtmlapplications

6689

Arquivos - texto ndash XML - exemploltxml version=10 gtltDOCTYPE Xdmf SYSTEM Xdmfdtd []gtltXdmf xmlnsxi=httpwwww3org2001XInclude Version=20gt ltDomaingt lt-- Example of Basic Topologies --gt ltInformation Name=Descriptiongt Example of a Polyvertex Topology ltInformationgt ltGrid Name=Polyvertex GridType=Uniformgt ltTopology TopologyType=Polyvertex Dimensions=3 NodesPerElement=3gt ltDataItem Format=XML Dimensions=3 3 NumberType=Floatgt 0 1 2 4 5 6 8 9 10 ltDataItemgt ltTopologygt ltGeometry Type=XYZgt ltDataItem Format=XML Dimensions=4 4 3gt 00 00 00 10 00 00()Que mostra que a interpretaccedilatildeo (parsing) de XML eacute em geral complexa

6789

Arquivos - texto - XML

Haacute muitas bibliotecas de alto niacutevel para fazer o processamento (parsing) e entregar os dados em uma estrutura conveniente

A complexidade em processar XML estaacute em decidir o que fazer com os dados jaacute que os arquivos podem ser muito complexos

As APIs (Application Programming Interfaces) mais comuns para processar XML que satildeo implementadas em muitas linguagens

DOM (Document Object Model) ndash manteacutem todo o conteuacutedo do em uma estrutura de dados (em geral uma aacutervore) em uma variaacutevel (em geral um objeto) Esta pode ser consultada para obter os valores de interesse para os alterar e usada para escrever um arquivo

SAX (Simple API for XML) ndash Interpretador (parser) por objetos O usuaacuterio escreve uma classe herdando da classe SAX provendo os meacutetodos que vatildeo processar os campos agrave medida em que estes satildeo lidos

6889

Arquivos - binaacuterios - FITSFlexible Image Transport System

O formato mais comum para observaccedilotildees astronocircmicas Tambeacutem usado para armazenar quaisquer dados mesmo natildeo relacionados a observaccedilotildees (especialmente tabelas como eacute praacutetica do STSCI)

Conteacutem um (ou mais) cabeccedilalho(s) de texto com metadados (informaccedilotildees sobre os dados como caracteriacutesticas (necessaacuterias para os ler) origem condiccedilotildees em que foram obtidos processamento realizado etc)

SIMPLE = T image conforms to FITS standard BITPIX = 32 bits per data value NAXIS = 2 number of axes NAXIS1 = 1024 NAXIS2 = 1024 BSCALE = 100000 Scaling factor BZERO = 000000 Scaling zero-point TELESCOP= Keck II Telescope SLITNAME= 0041x226 Slit Name SLITPA = 351979 Slit position angle SLITX = 131500 X pixel of the center of the slit LST = 12010446 local apparent sidereal time (()

Depois do cabeccedilalho haacute uma (ou mais) seccedilatildeo(otildees) de dados binaacuterios Costuma(m) ser array(s) 1D (espectros) 2D (imagens) ou 3D (ldquocubos de dadosrdquo)

De inteiros ou reais inteiros satildeo comuns em contagens de instrumentos reais para valores derivados (fluxos intensidades etc)

6989

Arquivos - binaacuterios - FITSNormalmente FITS satildeo lidos escritos por bibliotecas prontas de (relativamente) alto niacutevel usuaacuterio natildeo tem que saber como os dados satildeo armazenados no arquivo nem como os ler escrever Ex (IDL com a biblioteca idlastro)

IDLgt fits_info2dspectrumfits2dspectrumfits has 3 extensionsPrimary header 288 recordsNo dataExtension 1 -- SCI Header 144 records IMAGE ( 1201 1201 )Extension 2 -- ERR Header 72 records IMAGE ( 1201 1201 )Extension 3 -- DQ Header 72 records IMAGE ( 1201 1201 )

IDLgt mydata=readfits(2dspectrumfitsexten_no=1myheader) READFITS Reading FITS extension of type IMAGE READFITS Now reading 1201 by 1201 array

IDLgt extastmyheadermyastIDLgt sz=size(mydatadimensions)IDLgt xy2ad[1sz[0]][1sz[1]]myastcorners_acorners_dIDLgt printcorners_aCorners of the data array from file 2dspectrumfits are at 14487480 33063480

IDLgt printcorners_d -00041264444 00041402222

Obteacutem os dados de coordenadas (WCS) do header

Coloca os dados no array (2D de floats) mydata e o header no array (1D de strings) myheader

Calcula as coordenadas das quinas da imagem atraveacutes do WCS

Provecirc informaccedilotildees sobre o arquivo

7089

Arquivos - binaacuterios - ISIS Cube

Formatos como FITS se adequam muito a ter uma interface de mais alto niacutevel por objetos

Tambeacutem para dados em tabelas FITS muito mais trabalhosos de ler em baixo niacutevel que se adequam muito mais a mapas ou estruturas

Exemplo (de um formato semelhante a FITS ISIS cube)

O objeto ao ser criado lecirc todo o arquivo

cube=pp_editablecube(CM_1553510065_1_ircub)

Meacutetodos fornecem os dados desejados para obter quando necessaacuterio os dados de interesse

Find out the names of the backplanesprintcubegetproperty(backnames)Get the start time of the cubeprintcubegetfromheader(START_TIME)2007-084T100057286Z

Valores no cabeccedilalho podem ser convenientemente fornecidos como um mapa

header=cubeheader_as_hash()printheader[START_TIME]2007-084T100057286Z

7189

Arquivos - binaacuterios ndash ISIS Cube

Os dados satildeo fornecidos como arraysMake a contour plot of the latitudesc=contour(cubegetsuffixbyname(LATITUDE))Get the band with wavelength nearest to 21 (in the units used in the cube)selband=cubegetbandbywavelength(21wavelengths=selwavs)

Interfaces por overload tornam o acesso ainda mais conveniente

selband=cube[21]

selwavs=cube[21]

Retorna um array com a banda de comprimento de onda mais proacuteximo de 21 (microm)

Retorna o comprimento de onda mais proacuteximo de 21 (microm) da banda retornada acima

7289

Arquivos - binaacuterios ndash ISIS Cube Alteraccedilotildees feitas ao conteuacutedo satildeo automaticamente refletidas em todos os

lugares (cabeccedilalho em particular) afetados mantendo o objeto vaacutelido que pode depois ser gravado em um novo arquivo

IDLgt printcubelinescubesamplescubebands 64 64 256

IDLgt helpcubecoreltExpressiongt FLOAT = Array[64 64 256]

IDLgt cubecore=dblarr(100100256)

A linha acima natildeo eacute uma atribuiccedilatildeo eacute uma invocaccedilatildeo de meacutetodo Eacute equivalente acubesetpropertycore=dblarr(100100256)

Eacute o trabalho da funccedilatildeo setproperty decidir se a propriedade passada (core) faz sentido e se fizer fazer todo o trabalho necessaacuterio a esta mudanccedila Para o usuaacuterio eacute tudo automaacutetico e os dados da classe satildeo vaacutelidos o tempo todo

IDLgt helpcubecoreltExpressiongt DOUBLE = Array[100 100 256]

IDLgt printcubelinescubesamplescubebands 100 100 256

IDLgt cubesaveCM_1553510065_1_ir_editedcub

7389

Arquivos - binaacuterios ndash NetCDF e HDF5

Network Common Data Form e Hierarchical Data Format

Os dois uacutenicos formatos bem estabelecidos para dados cientiacuteficos geneacutericos

Armazenam dados como vaacuterias variaacuteveis e seus metadados Para cada variaacutevel haacute (ou pode haver) os metadados

Nome Dimensotildees (do array) Unidades Comentaacuterios

Ambos permitem arrays multidimensionais

Apenas HDF5 permite estruturas (daiacute vem a hierarquia)

Autodocumentados qualquer software que saiba ler um destes formatos lecirc qualquer arquivo sem precisar de conhecimento preacutevio sobre como o arquivo foi gerado

Muito bem suportados em bibliotecas padratildeo e natildeo padratildeo em softwares interativos e visualizadores (inclusive plugins para navegadores)

httpwwwunidataucaredusoftwarenetcdf httpenwikipediaorgwikiHdf5

NetCDF eacute mais simples de usar por natildeo ter hierarquia dando menos trabalho para ler e escrever dados Se hierarquia natildeo eacute necessaacuteria eacute mais conveniente de usar que HDF5

7489

Arquivos - binaacuterios - NetCDF e HDF5Haacute tambeacutem o formato CDL uma versatildeo ASCII do NetCDF A biblioteca padratildeo do NetCDF inclui conversores entre estes formatos

$ ncdump -h refspec_g01_0ncnetcdf refspec_g01_0 dimensions nlay = 51 nwn = 400 nleg = 33 numu = 2 nlev = 52 nphi = 3 ngas = 2 nwnc = 1 scal = 1 v3 = 3 dnl = 1 nk = 1 tdisr = UNLIMITED (0 currently) na = 16

variables float alb(nwn) float z(nlay) float t(nlay) float p(nlay) float wl(nwn) float iof(nwn) float mtau(nwn) float htau(nwn) float hctaus(nwn) float gtau(nwn) float outcos(scal) float phi(nleg) float phic(scal) float umu(numu) float flux(v3 nwn nlev) float mix(nlay ngas) float c(nlay) float psat(nlay) float ga(nwnc) float wlc(nwnc) float inc(scal) int dm(scal) int ord(scal) float fbeam(scal) float wn(nwn) float tautot(nwn nlay) float htaus(nwn nlay) float htaux(nwn nlay) float taug(nwn nlay) float phase(nwn nlay nleg) float ssa(nwn nlay) float uu(nwn nphi nlev numu) float u0u(nwn nlev numu) float tray(nwn nlay) float gtauo(tdisr nwn nlay)

Haacute 14 variaacuteveis usadas como dimensotildees para as 35 variaacuteveis que satildeo arrays

Ex alb(nwn) indica que alb eacute um array 1D de nwn elementos

nwn estaacute armazenado como uma das dimensotildees e eacute 400 portanto alb tem 400 elementos

Parte do conteuacutedo de um arquivo NetCDF em formato CDL (gerado pelo programa ncdump)

7589

Arquivos - binaacuterios - NetCDF e HDF5Conteuacutedo daquele arquivo visualizado com o ncview (acompanha a biblioteca NetCDF padratildeo)

7689

Arquivos - binaacuterios - NetCDF e HDF5O conteuacutedo de todo o arquivo pode ser lido facilmente com as bibliotecas disponiacuteveis e armazenado em contecirciners convenientes Usando um objeto que gera um resultado um pouco mais conveniente

IDLgt h=pp_readncdf(refspec_g01_0nchash)IDLgt printhvar_dims ltObjHeapVar229(HASH)gtvars ltObjHeapVar152(HASH)gtdims ltObjHeapVar118(HASH)gt

IDLgt printh[vars]T 173203 175459 175848 176001 175975 Z 431869 418858 406067 393403 380464 FLUX 300660 145536 0705180 0341669 0165532 PHASE 100000 0779034 0660858 0542052 0449983 TAUTOT0694377 0693420 0693474 0693540 0693636()

IDLgt help(h[vars])[TAUTOT]ltExpressiongt FLOAT = Array[51 400]

IDLgt print(h[var_dims])[TAUTOT]NLAY NWN

IDLgt print(h[dims])[(h[var_dims])[TAUTOT]]NLAY 51NWN 400

7789

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5)

Visualizaccedilatildeo da variaacutevel selecionada

Metadados e alguns valores da variaacutevel selecionada

Variaacutevel a ser criada com o conteuacutedo desta variaacutevel do arquivo

Hierarquia das variaacuteveis do arquivo

7889

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5) Imported variable az

IDLgt helpaz Structure ltd5723f38gt 13 tags length=448 data length=444 refs=1 _NAME STRING az _ICONTYPE STRING binary _TYPE STRING DATASET _FILE STRING INTENSI_test_409OUTh5 _PATH STRING _DATA DOUBLE Array[38] _NDIMENSIONS LONG 1 _DIMENSIONS ULONG64 Array[1] _NELEMENTS ULONG64 38 _DATATYPE STRING H5T_FLOAT _STORAGESIZE ULONG 8 _PRECISION LONG 64 _SIGN STRING

IDLgt printaz_data 00000000 10000000 20000000 30000000 40000000 50000000 60000000 80000000 ()

7989

Arquivos - binaacuterios - imagens

JPEG JPEG200 TIFF GeoTIFF etc

Os formatos comuns de imagens satildeo bem suportados em muacuteltiplas plataformas para uso dentro de programas e interativamente

Alguns formatos tecircm opccedilatildeo de compressatildeo com perda eou sem perda

Armazenam imagens como arrays 2D ou 3D (3D frequumlentemente limitado a 3 ou 4 em uma das dimensotildees uma imagem em 3 ou 4 bandas) de inteiros ou (em alguns formatos) reais

Alguns formatos permitem armazenar metadados para caracterizar as imagens armazenadas

JPEG2000 e GeoTIFF (um subconjunto de TIFF) comuns em astronomia e aacutereas proacuteximas

8089

Arquivos - binaacuterios ndash imagens ndash exemplo (IDL)IDLgt printquery_tiff(issmap_2009tiffinfogeotiff=geo) 1

IDLgt helpinfo Structure ltd4eca4b8gt 18 tags length=144 data length=132 refs=1 CHANNELS LONG 4 DIMENSIONS LONG Array[2] IMAGE_INDEX LONG 0 NUM_IMAGES LONG 1 PIXEL_TYPE INT 1 TYPE STRING TIFF BITS_PER_SAMPLE LONG 8 POSITION FLOAT Array[2] RESOLUTION FLOAT Array[2] UNITS LONG 2 TILE_SIZE LONG Array[2] DESCRIPTION STRING ISS (2009) DATE_TIME STRING 20100218 012436()

IDLgt helpgeo Structure ltd4efa1b8gt 10 tags length=264 data length=262 refs=1 MODELPIXELSCALETAG DOUBLE Array[3] MODELTIEPOINTTAG DOUBLE Array[6 4] GEOGRAPHICTYPEGEOKEY INT 4035 GEOGSEMIMAJORAXISGEOKEY DOUBLE 25750000 GEOGSEMIMINORAXISGEOKEY DOUBLE 25750000()

IDLgt myimage=read_tiff(issmap_2009tiff) Lecirc a imagem para o array myimage

Obteacutem informaccedilotildees sobre o arquivo

8189

Arquivos - binaacuterios ndash formatos nativosLinguagens como IDL R Python Java tecircm seu formato nativo binaacuterio acessado em alto niacutevel Basta mandar salvar ler variaacuteveis no do arquivo a biblioteca padratildeo automagicamente faz todo o trabalho de decidir como gravar ler os dados

Conveniente de usar na proacutepria linguagem Mas raramente existem bibliotecas para ler gravar o formato nativo de uma linguagem a partir de outra Ex (IDL)

IDLgt savefile=2dspectrumsavmydatamyheadercorners_dcorners_averbosecompress SAVE Portable (XDR) compressed SAVERESTORE file SAVE Saved variable MYDATA SAVE Saved variable MYHEADER()

Pode ser lido com apenas (haacute formas mais elaboradas)

IDLgt restore2dspectrumsavverbose RESTORE Portable (XDR) compressed SAVERESTORE file RESTORE Save file written by ltunknowngtltunknowngt Thu Jan 27 191422 2011 RESTORE IDL version 801 (linux x86_64) RESTORE Restored variable MYDATA RESTORE Restored variable MYHEADER()

IDLgt helpmydatamyheadercorners_dcorners_aMYDATA FLOAT = Array[1201 1201]MYHEADER STRING = Array[144]()

8289

Arquivos - processamento em baixo niacutevel

Nem sempre um formato padratildeo eacute a melhor escolha para o problema

Nem sempre haacute escolha (pode-se ter que trabalhar com arquivos que jaacute foram escritos em algum formato proprietaacuterio)

Agraves vezes o formato eacute padratildeo mas natildeo haacute bom suporte a ele disponiacutevel

Em todos estes casos eacute necessaacuterio escrever rotinas em baixo niacutevel que vatildeo ler processar diretamente o conteuacutedo do arquivo

Preferencialmente criando interfaces de alto niacutevel para o programa que vai as usar

8389

Arquivos - processamento em baixo niacutevel - texto

Tomando o exemplo anterior onde as colunas eram de diferentes tipos

NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS dec18s0001 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0002 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0003 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 FLAT 5408757812500 460000 5 dec18s0004 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 DARK 5408757812500 460000 5

A forma mais simples de o ler diretamente eacute definir uma estrutura para receber cada linha e um array destas estruturas para receber todo o arquivo Ex (IDL)

IDLgt record=namecalmpos0filnameechlpos0d0disppos0d0targnameposdirclassmjd_obsitime0d0coadds0IDLgt nlines=file_lines(filesearch_scamtxt)IDLgt mydata=replicate(recordnlines-1)IDLgt header=

Depois de definidas as variaacuteveis que vatildeo receber os dados o arquivo pode ser lido

IDLgt openrunitfilesearch_scamtxtget_lunIDLgt readfunitheaderIDLgt readfunitmydataformat=(A14I8A15F104F104A18A19A15F158F105I15)IDLgt free_lununit

A gravaccedilatildeo de um arquivo texto poderia ser feita de forma semelhante apenas trocando openr por openw (abrir o arquivo para gravaccedilatildeo natildeo leitura) e readf por printf

O arquivo eacute aberto em uma unidade (unit) usada para especificar de onde eacute feita a leitura

Ao final o arquivo eacute fechado

8489

Arquivos - processamento em baixo niacutevel - texto

O que resulta em

IDLgt printheader NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS

IDLgt helpmydataMYDATA STRUCT = -gt ltAnonymousgt Array[4]

IDLgt helpmydata[0] Structure ltd5e38f68gt 11 tags length=136 data length=124 refs=3 NAME STRING dec18s0001 CALMPOS INT 0 FILNAME STRING NIRSPEC-5-AO ECHLPOS DOUBLE 62630000 DISPPOS DOUBLE 36450000 TARGNAME STRING HD85258 POSDIR STRING NIRSPEC-5-AOp1 CLASS STRING STAR MJD_OBS STRING 54087574 ITIME DOUBLE 10000000 COADDS INT 1

Este caso eacute mais complicado que os mais comuns por haver colunas de strings

Se todas fossem de nuacutemeros natildeo teria sido necessaacuterio especificar o formato explicitamente As colunas teriam sido adivinhadas pela biblioteca que lecirc o arquivo Poderia ter sido lido escrito soacute com um array de nuacutemeros sem estruturas

8589

Arquivos - processamento em baixo niacutevel - binaacuterio

Formatos binaacuterios podem ser definidos de qualquer forma O arquivo eacute apenas um conjunto de bytes Cabe ao software saber como os interpretar

Uma escolha comum para que sejam autodocumentados eacute incluir um cabeccedilalho de texto informando as caracteriacutesticas dos dados necessaacuterias para os ler

Ex (IDL) criar um arquivo que armazene um array de doubles com um cabeccedilalho informando as dimensotildees para que o programa que o lecirc saiba como ler os dados

Inventa dados e abre o arquivo

IDLgt data_to_write=dindgen(34)IDLgt openwunitbinary_exampledatget_lun

Escreve as dimensotildees como texto

IDLgt printfunitdimensions of the double array stored belowIDLgt printfunitsize(data_to_writedimensions)

Escreve os dados binaacuterios

IDLgt writeuunitdata_to_write

Fecha o arquivo

IDLgt free_lununit

Escreve em binaacuterio (write unformatted)

8689

Arquivos - processamento em baixo niacutevel - binaacuterio

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

dimensions of the double array stored below 3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

8789

Arquivos - processamento em baixo niacutevel - binaacuterioA leitura deste arquivo eacute igualmente simples

IDLgt header=IDLgt dims=[00]IDLgt openrunitbinary_exampledatget_lun

Lecirc as dimensotildees (armazenadas como texto)

IDLgt readfunitheaderIDLgt readfunitdims

Lecirc a parte binaacuteria depois de saber as dimensotildees

IDLgt data_read=dblarr(dims)IDLgt readuunitdata_read

Fecha o arquivo

IDLgt free_lununit

Verifica que os dados foram gravados e lidos corretamente

IDLgt printarray_equal(data_to_writedata_read) 1

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Lecirc dados binaacuterios (read unformatted)

8889

Sumaacuterio

5 ndash Slides em httpwwwppenteadonetpeapea04_strings_iopdf Strings Expressotildees regulares Arquivos

httpwwwppenteadonetpea

8989

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89

Strings - formatos tipo C (printf)(apenas o principal ver documentaccedilatildeo para detalhes)String com campos a serem substituiacutedos por valores (passados adiante) marcados por coacutedigos com

Ex (Python)In [20] print(x=1610e (1e0+1e-9))x=10000000010e+00

Haacute modificadores para especificar alinhamento como preencher o espaccedilo que sobra (espaccedilos zeros etc) para imprimir o sinal + etc

Coacutedigo Significado (tipo) Exemplo(s)

di Inteiro decimal (int) d 5d +05d

u Inteiro decimal sem sinal (unsigned int) u 7u

fF Real em ponto fixo (double float) f 136f

eE Real em ponto flutuante (double float) e 1610e

gG Real em ponto fixo ou flutuante decidido pelo valor (double float)

g 73G

xX Inteiro sem sinal hexadecimal (unsigned int) x 10X

o Inteiro sem sinal octal (unsigned int) o 5o

s String (string) s 10s

c Caractere (char) c

p Ponteiro - estilo C - (void ) p

literal

2989

Strings - conversatildeo de strings para outros tipos

Para gerar dados a partir de strings datas identificadores pedaccedilos de nomes valores numeacutericos armazenados em strings

Tambeacutem sempre haacute conversotildees default para os tipos baacutesicos onde o intepretador programa faz o possiacutevel para entender o string como um valor daquele tipo

Tipicamente eacute feito por casts (funccedilotildees de conversatildeo) reads (de strings ou arquivos texto (arquivos texto satildeo strings)) construtores de objetos ou implicitamente

3089

Strings - conversatildeo de strings para outros tipos - impliacutecitas

Exs (IDL)

IDLgt helpfix([17 17 171 -17 9 8])ltExpressiongt INT = Array[5]

IDLgt printfix([17 17 171 -17 9 8]) 17 17 17 -17 9

IDLgt printdouble([17 17 171 -17 9 8]) 17000000 17000000 17100000 -17000000 90000000

IDLgt readfunitabcd

IDLgt a=0d0IDLgt b=00IDLgt c=0IDLgt reads171d0 189d0 -9abcIDLgt helpabcA DOUBLE = 17100000B FLOAT = 189000C INT = -9

Converte o conteuacutedo do string para os tipos das variaacuteveis abcd (explicado adiante)

3189

Strings - conversatildeo de strings para outros tipos

Quando o default natildeo eacute suficiente (ou quando escrevendo o conversor em uma classe) costuma ser possiacutevel o fazer com formatos semelhantes aos formatos para gerar strings Exs (IDL)

IDLgt a=0d0IDLgt b=00IDLgt c=0IDLgt reads171d0 something 189d0-9abc READS Input conversion error Unit 0 File ltstdingt Error occurred at $MAIN$ Execution halted at $MAIN$

Natildeo funcionou porque sozinho ele natildeo conseguiu saber o que fazer com o ldquosomethingrdquo Usando um formato especiacutefico

IDLgt reads171d0 something 189d0-9 abcformat=(D6111XD611XI)

IDLgt helpabcA DOUBLE = 17100000B FLOAT = 189000C INT = -9

Exemplos mais complicados adiante (arquivos texto)

Variaacuteveis tecircm que ser definidas para informar para que tipo seraacute feita a conversatildeo default

3289

Strings - processamento natildeo baacutesicoOperaccedilotildees importantes e muito necessaacuterias mas que natildeo satildeo suportadas em todas as linguagens bibliotecas padratildeo

Testes (ex IDL)

IDLgt str=[afitsaFITSafitsaabfitsabcfits]

IDLgt printstrmatch(strfits) 1 0 0 1 1

IDLgt printstrmatch(strfitsfold_case) 1 1 0 1 1

IDLgt printstrmatch(strfitsfold_case) 1 1 1 1 1

IDLgt printstrmatch(strfits) 1 0 0 0 0

IDLgt printstrmatch(strfits) 0 0 0 1 0

3389

Strings - processamento natildeo baacutesico

Operaccedilotildees importantes e muito necessaacuterias mas que natildeo satildeo suportadas em todas as linguagens bibliotecas padratildeo

Separaccedilatildeo de partes (Ex IDL)

IDLgt printstrsplit(2011- 131 -extract)format=(A)2011131

Processamento de nomes de arquivos diretoacuterios (Ex IDL)

IDLgt printfile_dirname(some_directoryanother_directorysome_filetxt)some_directoryanother_directory

IDLgt printfile_basename(some_directoryanother_directorysome_filetxt)some_filetxt

IDLgt printfile_basename(another_directorysome_filetxttxt)+_alteredtxtsome_file_alteredtxt

3489

Strings - processamento natildeo baacutesico

Codificaccedilotildees (Ex Python 3)

gtgtgt s=infinite money infinNeuro sign

gtgtgt print(s)infinite money infineuro

gtgtgt print(ascii(s))infinite money u221eu20ac

gtgtgt print(sencode(utf-8))binfinite money xe2x88x9exe2x82xac

3589

Strings - processamento natildeo baacutesico

Perl eacute a linguagem mais avanccedilada para processamento de strings tem suporte nativo a muitas outras operaccedilotildees a semacircntica da linguagem eacute voltada principalmente para processar strings expressotildees regulares (de vaacuterios tipos) natildeo satildeo strings fazem parte da semacircntica

Ex (sem o objetivo que seja compreensiacutevel apenas para indicar o estilo)

Ler um arquivo contendo campos com nomes separados de valores por ()

temperature 10008name some modelx_dimension 100y_dimension 100z_dimension 50()

Armazenado-o em um mapa O que pode ser feito com apenas

While (ltgt) Loop over input linesPut pre-colon text into $1 post-colon into $2 if (m (S+) (+) ) Use $1 as key $2 as value $file_data$1 = $2

3689

Expressotildees regulares - definiccedilatildeo

Expressotildees regulares (regular expressions regex) satildeo a mais poderosa ferramenta para fazer buscas e separar substrings

Regex satildeo uma linguagem com o uacutenico objetivo de especificar propriedades de strings

Implementadas em graus diferentes em todas as linguagens modernas e modernizadas facilita encontrar uma expressatildeo jaacute pronta pois satildeo quase iguais em qualquer linguagem

Estatildeo na biblioteca padratildeo em IDL Python R Perl

Em C++ e Java em bibliotecas comuns (Boost Jregex)

Para que servem

Uma expressatildeo regular especifica propriedades de strings

O interpretador de expressotildees regulares (regular expression engine) recebe a expressatildeo e o string a analisar e determina se o string corresponde (matches) agrave expressatildeo regular

Em alguns casos o interpretador pode tambeacutem informar que parte(s) do string corresponde(m) a que parte(s) da expressatildeo regular e realizar processamentos com estas partes

3789

Expressotildees regulares ndash exemplos de usos Separar partes de strings

Encontrar linhas em arquivos que tenham nomes valores e comentaacuterios e separar estes pedaccedilos

Escalar com comentaacuterio

SLITPA = 351979 Slit position angle

Array 1D sem comentaacuterio (se extendendo por vaacuterias linhas)

BAND_BIN_CENTER = (03505400358950036629003732200379490 0387900104598)

Escalares em diferentes formatos

Total Mechanical Luminosity 15310E+03resources_usedwalltime=005603

Pedaccedilos de nomes

6063 17836E-20 2456 T FeIX((3Pe)3d(2PE)4p_1Po-3s2_3p6_1Se)

Datas separando ano mecircs dia hora (em vaacuterios formatos diferentes)

DATE-OBS= 2006-12-18 universal date of observationDATE_TIME = 2010-07-19T161032START_TIME = 2006-182T225102850Z

3889

Expressotildees regulares ndash exemplos de usos

Separar partes de strings Separar partes de nomes de arquivos (por significarem algo como identificar o

conteuacutedo)

specdec18s0041fitsscamdec18i0054fits15_7_mts_hmpixselh_mr15sav15_7_mts_hwpixselh_mr15sav16_3_mts_hwpixselb_mr16savreadmodel5l_-1_000010000_10000_r05_030_08196_0100000_005000000_1000eps

Determinar se um string eacute um nuacutemero (inteiro real fixo flutuante)

Encontrar identificadores Exs nomes de cataacutelogos endereccedilos HTTPFTP endereccedilos de email

Separar campos em arquivos sendo lidos onde as linhas natildeo tecircm a mesma formataccedilatildeo algumas linhas com colunas separadas por espaccedilos outras por tabs outras por

siacutembolos ignorando linhas de comentaacuterios e linhas vazias

3989

Expressotildees regulares - usoEx (IDL) encontrar nomes de arquivos com algumas propriedades

IDLgt printfilesformat=(A)CM_1477475933_1_viscubCM_1477476864_1_ircubCM_1477476864_1_irgcubCM_1477476864_1_viscubCM_1477477826_1_ircubCM_1477477826_1_irgcubCM_1477477826_1_viscubmosaic2cub

IDLgt printstregex(files+irgcubboolean) 0 0 1 0 0 1 0 0

A expressatildeo regular eacute +irgcub Especifica uma ou mais ocorrecircncias seguidas (+) de qualquer caractere () seguido de uma ocorrecircncia de irgcub (o ponto vem precedido do caractere de

escape () para ser entendido literalmente como um ponto e natildeo como o seu significado especial (qualquer caractere)

Esta aplicaccedilatildeo do interpretador (stregex) retorna um valor Booleano (verdadeirofalso) para cada elemento do string passado (files) que informa se aquele elemento correspondia agravequela expressatildeo regular

Este eacute um exemplo artificial Seria mais faacutecil ter usado strmatch(filesirgcub)

4089

Expressotildees regulares - uso

Em casos como este tipicamente o resultado de stregex seria usado como filtro para selecionar apenas os elementos do array de strings que satisfazem agravequela expressatildeo regular

IDLgt w=where(stregex(files+irgcubboolean)null)IDLgt printfiles[w]format=(A)CM_1477476864_1_irgcubCM_1477477826_1_irgcub

Ex (IDL) Determinar que strings conteacutem uma data no formato yyyy-mm-dd

IDLgt strs=[201002012010-02-012010-2-1aaaa-mm-ddT2010-02-01J]IDLgt printstregex(strs[0-9]4-[0-9]2-[0-9]2boolean) 0 1 0 0 1

Esta expressatildeo regular especifica quatro repeticcedilotildees (4) de diacutegitos (caracteres na faixa [0-9]) seguido de um (-) seguido de duas repeticcedilotildees (2) de dois diacutegitos ([0-9]) seguido de um (-) seguido de duas repeticcedilotildees (2) de dois diacutegitos ([0-9])

Uma expressatildeo regular apenas um pouco mais elaborada poderia corresponder aos 3 formatos de data no array acima E poderia se impedir que a uacuteltima (com outros caracteres antes e depois da data) seja aceita

4189

Expressotildees regulares - regras - caracteres ldquonormaisrdquo

Uma expressatildeo regular usa caracteres ldquonormaisrdquo e especiais para especificar o que se vai procurar na ordem em que aparecem na expressatildeo

Se um caractere eacute normal (natildeo eacute um dos especiais mostrados adiante) ele especifica uma ocorrecircncia daquele caractere

Ex J eacute uma expressatildeo regular que corresponde a qualquer string onde ocorra J Jaacute JA soacute corresponde a strings que tenham JA dentro

Exs (IDL)

IDLgt strs=[JJJJJJaJAjaJa]

IDLgt printstregex(strsJboolean) 1 1 1 0 1

IDLgt printstregex(strsJAboolean) 0 0 1 0 0

4289

Expressotildees regulares - regras - caracteres especiaisCaracteres especiais tecircm outros significados Para significar literalmente aquele caractere deve ser escapado (escaped) com um

Siacutembolo significado exemplo Corresponde(m) Escape o caractere seguinte deve ser interpretado

literalmente natildeo como especial aa

Qualquer caractere ab ajb aab abb jafbc

+ Uma ou mais repeticcedilotildees do que vem agrave esquerda a+b ab aab bab baabh

() Subexpressatildeo para agrupar termos afetados por um caractere especial (como parecircnteses em notaccedilatildeo matemaacutetica)

(ab)+c abc ababc dabababcg

Zero ou mais repeticcedilotildees dos termos agrave esquerda ab abbaab caaabg

Zero ou uma repeticcedilatildeo dos termos agrave esquerda ab b ab cabd cbd

| Alternaccedilatildeo qualquer um dos dois agrave esquerda a|bc ac bc jacd jbcd

n Exatamente n repeticcedilotildees do termo agrave esquerda a2b aab daaabg

n1n2 De n1 a n2 repeticcedilotildees do termo agrave esquerda a12b ab aab aaab gaaabbd

^ Acircncora (no comeccedilo) nada agrave esquerda ^ab ab abb

$ Acircncora (no fim) nada agrave direita ab$ abaab

[] Conjunto de valores (explicado adiante)

4389

Expressotildees regulares - regras - conjuntos de valores

[] denota um conjunto de valores que pode conter

Uma lista de coisas que devem corresponder Ex [abc] signfica qualquer caractere no conjunto abc Correspondem a esta

expressatildeo abcabha

Uma lista de coisas que natildeo podem corresponder [^abc] significa qualquer coisa que natildeo seja a b ou c Correspondem a esta

expressatildeo d jgs gg

Faixas de valores [0-9] signfica qualquer diacutegito [0-9a-zA-Z] significa qualquer diacutegito ou letra

Classes de valores como algumas faixas e outros conjuntos ocorrem com muita frequumlecircncia haacute nomes

especiais para eles Estes (em IDL) vecircm entre [] ex [[digit] significa o mesmo que [0-9]

4489

Expressotildees regulares - regras - classes de valores

Classe signficado

alnum Caracteres alfanumeacutericos 0-9a-zA-Z

alpha Caracteres alfabeacuteticos a-zA-Z

cntrl Caracteres de controle ASCII (natildeo visiacuteveis coacutedigos 1 a 31 e 127)

digit Diacutegitos (decimais) 0-9

graph Caracteres visiacuteveis ASCII 33 a 126 (natildeo inclui o espaccedilo)

lower Letras minuacutesculas a-z

print Caracteres ldquoimprimiacuteveisrdquo (visiacuteveis e o espaccedilo) ASCII 32 a 126

punct Caracteres de pontuaccedilatildeo $amprsquo()+-lt=gt[]^_lsquo|~

space Os caracteres ldquoem brancordquo (blank) espaccedilo tab tab vertical CR LF (ASCII 32 e 9-13)

upper Letras maiuacutesculas A-Z

xdigit Diacutegitos hexadecimais 0-9A-Fa-f

lt Comeccedilo de palavra (palavra definida como sequumlecircncia de coisas natildeo space)

gt Fim de palavra (palavra definida como sequumlecircncia de coisas natildeo space)

Estas satildeo apenas as principais Algumas implementaccedilotildees tecircm muito mais (em particular nas linguagens que usam Unicode nativamente)

4589

Expressotildees regulares - exemplos

Determinar se strings satildeo nuacutemeros (Ex IDL)

IDLgt str=[9-18 875-812-45913E9-98d7a188d032f5]

Inteiros

IDLgt intexpr=^[-+][0-9]+$

IDLgt printstregex(strintexprboolean) 1 1 0 0 0 0 0 0 0 0

Ponto flutuante

IDLgt fpexpr=^[-+](([0-9][0-9]+)|([0-9]+[0-9]))([eEdD][-+][0-9]+)$

IDLgt printstregex(strfpexprboolean) 1 1 0 1 1 1 1 1 0 0

Sinal opcional

1 ou mais diacutegitos

Sinal opcional

0 ou mais diacutegitos opcionalmente seguidos de um ponto e 1 ou mais diacutegitos

1 ou mais diacutegitos opcionalmente seguidos de um ponto e 0 ou mais diacutegitos

ou Expoente opcional letra do expoente seguida de sinal opcional seguido de um ou mais diacutegitos

4689

Expressotildees regulares ndash extraccedilatildeo

Interpretadores de expressotildees regulares costumam oferecer mais que apenas testar se um string corresponde a uma expressatildeo

Em geral tambeacutem podem retornar que parte(s) do string corresponde(m) agrave expressatildeo

Ex (IDL) Determinar se um string conteacutem uma data incluindo os formatos

IDLgt dates=[2011-01-312011 1 3120110131something done on y2011m1d31 with something]

E extrair a data de dentro do string

IDLgt expr=[0-9]4[0-9]12[0-9]12

(4 diacutegitos)(qualquer separador)(1 a 2 diacutegitos)(qualquer separador)(1 a 2 diacutegitos)

IDLgt printstregex(datesexprextract)format=(A)2011-01-312011 1 31201101312011m1d31

Como agora separar ano mecircs e dia Com uma busca e uma extraccedilatildeo para cada Poderia ser mais eacute mais faacutecil com uma uacutenica expressatildeo regular

4789

Expressotildees regulares - aleacutem de apenas testes

Tambeacutem podem retornar que parte(s) do string correspondem agrave expressatildeo toda e agraves suas subexpressotildees (partes da expressatildeo delimitadas por parecircnteses)

Ex (IDL) Separar pedaccedilos de datas Neste caso para a expressatildeo ficar menor assumindo um formato simples (yyyy-mm-ddThhmmssfff) Mas poderia ser um formato mais livre como no exemplo anterior

IDLgt str=Stuff observed on 2011-01-31T123924983 with some instrumentIDLgt expr=([0-9]4)-([0-9]2)-([0-9]2)T([0-9]2)([0-9]2)([0-9]2[0-9]3)

(quatro diacutegitos)-(2 diacutegitos)-(2 diacutegitos)T(2 diacutegitos)(2 diacutegitos)(2 diacutegitos3 diacutegitos)

IDLgt pieces=stregex(strexprextractsubexpr)IDLgt printpiecesformat=(A)2011-01-31T12392498320110131123924983IDLgt d=julday(pieces[2]pieces[3]pieces[1]pieces[4]pieces[5]pieces[6])IDLgt printdformat=(F166) 2455593027372

Expressatildeo inteiraPrimeira subexpressatildeoSegunda subexpressatildeoTerceira subexpressatildeoQuarta subexpressatildeoQuinta subexpressatildeoSexta subexpressatildeo

4889

Expressotildees regulares - referecircncias httpxkcdcom208

Viacutedeos do Software Carpentry

httpsoftware-carpentryorg4_0regexp

4989

Arquivos

Quase todo programa precisa armazenar dados em arquivos

Podem ser pequenos arquivos de paracircmetros ou enormes arquivos de dados produzidos ou a processar

Apesar do sugerido pela praacutetica comum arquivos texto natildeo satildeo sempre a melhor escolha para armazenar dados - e haacute muitas formas diferentes de os usar

Qual eacute a melhor escolha

Assim como para linguagens ou contecirciners natildeo existe ldquoo melhor formatordquo Cada um tem suas vantagens e desvantagens

Dados diferentes (mesmo se usados pelos mesmos programas) em geral se adequam melhor a formatos diferentes

5089

Arquivos - texto X binaacuterios

Em qualquer formato arquivos satildeo armazenados como diacutegitos binaacuterios

Mas haacute duas formas principais como eles podem ser codificados

Arquivos baseados em texto (text files)

Dados satildeo transformados em caracteres usando alguma formataccedilatildeo (mesmo se impliacutecita) e escritos com alguma codificaccedilatildeo de texto (comumente mas natildeo necessariamente ASCII)

Um arquivo texto eacute um ou mais strings As mesmas conversotildees tecircm que ser feitas depara outros tipos

Arquivos ldquobinaacuteriosrdquo (binary files)

Embora todo arquivo seja binaacuterio este nome costuma ser usado soacute para aqueles em que os dados natildeo estatildeo na forma de texto

Com frequumlecircncia (nem sempre) os dados satildeo gravados de forma idecircntica a como satildeo armazenados na memoacuteria

Muitos formatos usam uma mistura de partes em texto e partes binaacuterias

Um cabeccedilalho (header) de texto que daacute informaccedilotildees (metadados) sobre os dados armazenados na parte binaacuteria que vem depois

O cabeccedilalho conteacutem em especial informaccedilotildees sobre como ler os dados binaacuterios

5189

Arquivos - texto X binaacuterios

Vantagens de arquivos texto

Legiacuteveis por pessoas (human readable)

Podem ser auto-suficientes todo o necessaacuterio para os ler e entender o que conteacutem pode ser obtido olhando o arquivo

Satildeo os menos especiacuteficos a linguagens software normalmente satildeo escritos em ASCII ou Unicode e sempre haacute algum suporte a ler escrever texto em linguagens software

Haacute alguns formatos padratildeo para texto (exs CSV XML) que satildeo suportados em muitas plataformas diferentes

5289

Arquivos - texto X binaacuterios

Vantagens de arquivos binaacuterios

Em geral natildeo haacute conversotildees entre o os dados como armazenados na memoacuteria O que torna o armazenamento mais eficiente e sem alteraccedilotildees nos valores

A maior parte dos formatos padronizados eacute binaacuteria Exs FITS cube CDF NetCDF HDF HDF5 JPEG JPEG2000 TIFF GeoTIFF MPEG etc

Eacute mais comum que haja bibliotecas prontas (ateacute de alto niacutevel) para consulta leitura e gravaccedilatildeo

Os formatos melhor desenhados satildeo autodocumentados (em texto ou binaacuterio) para os ler natildeo eacute necessaacuterio conhecimento preacutevio sobre como os dados foram armazenados

Toda linguagem plataforma costuma ter seu formato binaacuterio mais nativo que costuma ser o mais faacutecil para leitura gravaccedilatildeo Em particular nas de alto niacutevel que tecircm formatos autodocumentados (especialmente

em IDL R Python Java)

Muitos formatos tecircm opccedilatildeo de compressatildeo dos dados

5389

Arquivos - proprietaacuterios X padratildeo

Independente da escolha texto binaacuterio programas devem escolher entre usar um formato proacuteprio ou um formato padronizado

A principal vantagem de formatos proacuteprios eacute que satildeo definidos da forma mais conveniente para a aplicaccedilatildeo que os usa simplificando leitura e gravaccedilatildeo e potencialmente otimizando recursos (acesso ao disco tamanho do arquivo etc)

A principal desvantagem de formatos proacuteprios eacute ser necessaacuterio escrever todo o coacutedigo para os ler gravar

Pode dar mais trabalho que usar um formato geneacuterico que natildeo seja exatamente o que melhor se encaixa na aplicaccedilatildeo

O coacutedigo para processar o formato em geral vai ser menos completo e conveniente de usar que o de um formato bem estabelecido usado por muitos outros em muitos ambientes

Cada novo software que for usar estes arquivos vai precisar compartilhar do mesmo coacutedigo ou precisar de coacutedigo novo (em particular se em outra linguagem) para ler gravar naquele formato

Eacute necessaacuterio documentar o formato e decidir sobre como ele seraacute definido

Se outros jaacute colocaram muito trabalho desenvolvendo bons formatos padratildeo bem suportados em muitos ambientes por que ter o trabalho de reinventar (e reprogramar redocumentar e retestar) a roda

5489

Arquivos - padrotildees comuns em astronomia (exs adiante)

Texto

CSV Comma-separated values - bem suportado por muitos softwares

ldquoColunas fixasrdquo Natildeo eacute um padratildeo bem definido mas eacute praacutetica comum para tabelas (2D)

XML Extensible Markup Language - O padratildeo texto mais flexiacutevel de grande uso em programaccedilatildeo geral para armazenar qualquer coisa com frequumlecircncia de forma hieraacuterquica Bem suportado por linguagens modernas (e modernizadas) e bibliotecas das principais

linguagens gerais Alta complexidade o torna trabalhoso de usar

5589

Arquivos - padrotildees comuns em astronomia (exs adiante)Binaacuterios

FITS Flexible Image Transport System - o mais comum para observaccedilotildees astronocircmicas Conteacutem os dados (em geral arrays 1D 2D ou 3D) e documentaccedilatildeo (nos cabeccedilalhos) sobre a origem e caracteriacutesticas dos dados Tambeacutem usado para armazenar tabelas de dados quaisquer mesmo que natildeo sejam observaccedilotildees (especialmente pelo STSCI) Variam muito em qualidade de documentaccedilatildeo

NetCDF Network Common Data Form - evoluccedilatildeo do CDF autodocumentado eacute comum e bem suportado para vaacuterios arrays de dados

HDF5 Hierarchical Data Format ndash autodocumentado comum e bem suportado permitindo aleacutem de simples arrays estruturas (eacute um formato hieraacuterquico)

Formatos de imagens JPEG JPEG2000 TIFF GeoTIFF etc - voltados para arrays 2D3D de inteiros ou (em alguns casos) reais com ou sem compressatildeo JPEG2000 tem caracteriacutesticas mais avanccediladas como imagens multiresoluccedilatildeo

Formatos vetoriais PS EPS DXF SHP SVG - variados niacuteveis de suporte a armazenamento de vetores e formas em 2D ou 3D

ISIS Cube semelhante em caracteriacutesticas ao FITS mais usado em sensoriamento remoto geociecircncias e ciecircncias planetaacuterias em geral para observaccedilotildees 1D 2D ou 3D

Formatos nativos de linguagens todo o trabalho de leitura e gravaccedilatildeo eacute feito automagicamente pela biblioteca padratildeo em IDL R Python Java

5689

Arquivos texto - newlines

Apesar do que possa parecer arquivos texto natildeo tecircm intrinsecamente vaacuterias linhas Arquivos texto satildeo soacute uma sequumlecircncia 1D de caracteres em alguma codificaccedilatildeo Separaccedilatildeo em linhas (equivalente a interpretar o arquivo como 2D em linhas e colunas) eacute

especificada por convenccedilotildees Natildeo haacute apenas uma convenccedilatildeo para o fim de linhas

A mais primitiva convenccedilatildeo eacute separaccedilatildeo nenhuma estipula-se que linhas tenham um nuacutemero fixo N de caracteres e cabe ao software que lecirc o arquivo entender que uma linha nova ocorre regularmente a cada N caracteres

Eacute a forma menos portaacutevel e mais inconveniente eacute necessaacuterio o conhecimento preacutevio (ou por inspeccedilatildeo do arquivo) de quantos caracteres haacute por linha

A maior parte dos editores de texto natildeo vai saber separar linhas desta forma (por falta deste conhecimento preacutevio) Exemplo (de um FITS real)

SIMPLE = T Fits standard BITPIX = 16 Bits per pixel NAXIS = 0 Number of axes EXTEND = T File may contain extensions

O que com as linhas quebradas nos lugares certos seria

SIMPLE = T Fits standard BITPIX = 16 Bits per pixel NAXIS = 0 Number of axes EXTEND = T File may contain extensions

5789

Arquivos texto - newlines

A forma mais comum de especificar linhas eacute com um marcador do final de linha (newline)

Eacute um caractere especial natildeo normalmente presente no texto que serve para marcar fim de linhas

Mas natildeo haacute soacute um padratildeo de newline Os mais comuns

LF (Line Feed ASCII 10) ndash Unix Linux Mac OS X

CR - (Carriage Return ASCII 13) - Mac OS lt10

CR+LF (CR seguido de LF) - Windows DOS

Eacute o motivo de o Notepad (Windows) natildeo entender as quebras de linha de arquivos escritos com o formato nativo de Linux o arquivo soacute tem LF enquanto o editor espera CR+LF

Alguns sistemas (strings em vaacuterias linguagens por exemplo) usam o coacutedigo de escape n para indicar newline que eacute codificado de acordo com o padratildeo sendo usado

Em geral bibliotecas de leitura e gravaccedilatildeo de arquivos usam (default pelo menos) o newline nativo do sistema em que satildeo usadas

Programas de conversatildeo entre os sistemas satildeo comuns (ex dos2unix)

O Wordpad identifica se for usado soacute LF e quebra as linhas de acordo

5889

Arquivos - texto - CSV

Comma-separated values

O formato mais padronizado para tabelas (arrays 2D) em texto (frequentemente mas natildeo necessariamente ASCII)

Bem suportado por bibliotecas padratildeo de linguagens e outros softwares (Excel Calc Origin Google Docs etc)

Conteacutem Linhas de cabeccedilalho (opcionais mas recomendadas) linhas com qualquer texto geral

descrevendo o arquivo e em geral uma linha de tiacutetulo para as colunas da tabela Uma (apenas uma) tabela onde todas as linhas tecircm o mesmo nuacutemero de colunas

Colunas separadas por viacutergulas (opcionalmente pode ser outro separador) Linhas terminadas por newline (qualquer que seja) Strings delimitados por ldquo ldquo

Ex

NAMECALMPOSFILNAMEECHLPOSDISPPOSTARGNAMEPOSDIRCLASSMJD-OBSITIMECOADDSdec18s00010NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001dec18s00020NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001dec18s00120NIRSPEC-5-AO635800364500itan140NIRSPEC-5-AOp2 TITAN5408763000001dec18s00140NIRSPEC-5-AO626300364500itan140NIRSPEC-5-AOp1 TITAN5408763000001dec18s00151NIRSPEC-5-AO626300364500itan140NIRSPEC-5-AOp1ARC5408764000001dec18s00160NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001

Natildeo eacute necessaacuterio que as colunas tenham largura constante

Cabeccedilalho

5989

Arquivos - texto - CSVHaacute amplo suporte a leitura e gravaccedilatildeo de CSV sem precisar recorrer a procedimentos de baixo niacutevel

Podem ser diretamente importados em Excel Calc Origin Google Docs ou lido facilmente com bibliotecas padratildeo comuns Ex (IDL)

IDLgt c=read_csv(filesearch_scamcsvheader=h)IDLgt printhNAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS

IDLgt helpc Structure ltc8bca508gt 11 tags length=5256 data length=5248 refs=1 FIELD01 STRING Array[41] FIELD02 LONG Array[41] FIELD03 STRING Array[41] FIELD04 DOUBLE Array[41] FIELD05 DOUBLE Array[41] FIELD06 STRING Array[41] FIELD07 STRING Array[41] FIELD08 STRING Array[41] FIELD09 STRING Array[41] FIELD10 DOUBLE Array[41] FIELD11 LONG Array[41]

IDLgt printcfield01[03]dec18s0001 dec18s0002 dec18s0003 dec18s0004

IDLgt printcfield03[03]NIRSPEC-5-AO NIRSPEC-5-AO NIRSPEC-5-AO NIRSPEC-5-AO

6089

Arquivos - texto - CSVEx (IDL) Criaccedilatildeo de um CSV com uma tabela de valores

Criaccedilatildeo de 3 arrays 1D (12 elementos) um para cada coluna

IDLgt x=dindgen(3)IDLgt y=dindgen(4)IDLgt xx=reform(rebin(x34)12)IDLgt yy=reform(rebin(reform(y14)34)12)IDLgt f=xx+yy10IDLgt helpxxyyfXX DOUBLE = Array[12]YY DOUBLE = Array[12]F DOUBLE = Array[12]

Escrita do arquivo

IDLgt write_csvexamplecsvxxyyfheader=[XYX+10Y]

ResultadoXYX+10Y000000000000000000000000100000000000000010000000200000000000000020000000000000001000000010000000100000001000000011000000()

6189

Arquivos - texto - ldquoColunas regularesrdquoFixed column width

Natildeo eacute exatamente um padratildeo Eacute uma praacutetica comum

Armazena uma tabela (array 2D) de forma regular simples de ser interpretada e lida

Costumam ter linha(s) de cabeccedilalho descrevendo o conteuacutedo do arquivo em geral com uma linha para os nomes das colunas

As demais linhas conteacutem os dados sempre ocupando a mesma largura por coluna e escritos no mesmo formato em cada coluna

Costumam ser simples de ler inclusive interativamente (exs Excel Calc Origin read_ascii)

Ex (IDL) Uma simples tabela soacute de nuacutemeros

wavl CH4=33 wavl CH4=25 wavl CH4=10 wavl CH4=08 wavl CH4=05 wavl CH4=026 wavl CH4=02 477330000 0090130 477330000 0091110 477330000 0089250 477330000 0087000 477330000 0087140 477330000 0090080 477330000 0088110 480040000 0090930 480040000 0091930 480040000 0090160 480040000 0087930 480040000 0088110 480040000 0090950 480040000 0089090 482750000 0091710 482750000 0092730 482750000 0091060 482750000 0088850 482750000 0089080 482750000 0091810 482750000 0090060 485450000 0092530 485450000 0093570 485450000 0092000 485450000 0089810 485450000 0090100 485450000 0092730 485450000 0091090

IDLgt a=read_ascii(specs_27s_ntxtdata_start=1header=header)IDLgt printheader wavl CH4=33 wavl CH4=25 wavl CH4=10 wavl CH4=08 wavl CH4=05 wavl CH4=026 wavl CH4=02 IDLgt helpa Structure ltd423c9a8gt 1 tags length=224 data length=224 refs=1 FIELD01 FLOAT Array[14 4]

6289

Arquivos - texto - ldquoColunas regularesrdquoJaacute um arquivo um pouco mais difiacutecil de ler

NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS dec18s0001 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0002 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0003 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 FLAT 5408757812500 460000 5 dec18s0004 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 DARK 5408757812500 460000 5

Por ter colunas de tipos diferentes (strings inteiros reais) natildeo eacute possiacutevel o ler em um simples array Mas eacute faacutecil o colocar em uma estrutura de arrays onde cada campo eacute uma coluna

Especificando interativamente como interpretar as linhasIDLgt templ=ascii_template(filesearch_scamtxt)

Nome do campo (default mostrado)

Tipo do campo (identificado automaticamente)

Posiccedilatildeo (caracter) do comeccedilo (identificada automaticamente)

Linha de exemplo para verificar as colunas

6389

Arquivos - texto - ldquoColunas regularesrdquoDepois de feito o template o arquivo pode ser lido com apenas

IDLgt a=read_ascii(filesearch_scamtxttemplate=templ)IDLgt helpa Structure ltd4ec4608gt 11 tags length=416 data length=416 refs=1 FIELD01 STRING Array[4] FIELD02 LONG Array[4] FIELD03 STRING Array[4] FIELD04 FLOAT Array[4] FIELD05 FLOAT Array[4] FIELD06 STRING Array[4] FIELD07 STRING Array[4] FIELD08 STRING Array[4] FIELD09 FLOAT Array[4] FIELD10 FLOAT Array[4] FIELD11 LONG Array[4]IDLgt printafield01dec18s0001 dec18s0002 dec18s0003 dec18s0004IDLgt printafield04 626300 626300 626300 626300

O template (uma estrutura contendo dados sobre como ler o arquivo) pode ser usado para outros arquivos no mesmo formato No lugar de ter sido criado interativamente poderia ter sido lido de algum arquivo Poderia ter especificado nomes para os campos que seriam mais amigaacuteveis que coias como FIELD11

6489

Arquivos - texto - XML

Extensible Markup Language

Admite grande flexibilidade e por isso pode ter alta complexidade

Valores satildeo colocados dentro de uma estrutura em hieraacuterquica (em uma aacutervore) com os noacutes identificados pelos seus nomes (chaves)

Largamente usado em muitas aacutereas para armazenar conjuntos arbitraacuterios de quaisquer estruturas de dados

A maioria das aplicaccedilotildees usa um formato que eacute um subconjunto do XML especificado por um Schema comumente em um arquivo XML DTD (Document Type Definition)

6589

Arquivos - texto ndash XML ndash exemplos de usos

Armazenamento de dados de aplicaccedilotildees web (comum para exportar importar dados MediaWiki DokuWiki WordPress ADS Lattes etc)

Documentos Office (docx pptx xlsx) OpenOffice (odt opd ods)

Como versotildees de outros formatos FITSML XDF

ldquoScientific Dataset XML NASAs Astronomical Data Center (ADC) sponsors a number of research projects that

use XML for scientific data representation The XML activities at the ADC are sponsored and supported by the NASA Office of Space Science Applied Information Systems Research Program (AISRP)rdquo - httpxmlcoverpagesorgnasa-adchtml

Astronomical Instrument Markup Language (AIML)

SVG ndash Scalable Vector Graphics

Muitas de outras aplicaccedilotildees listadas em httpxmlcoverpagesorgxmlhtmlapplications

6689

Arquivos - texto ndash XML - exemploltxml version=10 gtltDOCTYPE Xdmf SYSTEM Xdmfdtd []gtltXdmf xmlnsxi=httpwwww3org2001XInclude Version=20gt ltDomaingt lt-- Example of Basic Topologies --gt ltInformation Name=Descriptiongt Example of a Polyvertex Topology ltInformationgt ltGrid Name=Polyvertex GridType=Uniformgt ltTopology TopologyType=Polyvertex Dimensions=3 NodesPerElement=3gt ltDataItem Format=XML Dimensions=3 3 NumberType=Floatgt 0 1 2 4 5 6 8 9 10 ltDataItemgt ltTopologygt ltGeometry Type=XYZgt ltDataItem Format=XML Dimensions=4 4 3gt 00 00 00 10 00 00()Que mostra que a interpretaccedilatildeo (parsing) de XML eacute em geral complexa

6789

Arquivos - texto - XML

Haacute muitas bibliotecas de alto niacutevel para fazer o processamento (parsing) e entregar os dados em uma estrutura conveniente

A complexidade em processar XML estaacute em decidir o que fazer com os dados jaacute que os arquivos podem ser muito complexos

As APIs (Application Programming Interfaces) mais comuns para processar XML que satildeo implementadas em muitas linguagens

DOM (Document Object Model) ndash manteacutem todo o conteuacutedo do em uma estrutura de dados (em geral uma aacutervore) em uma variaacutevel (em geral um objeto) Esta pode ser consultada para obter os valores de interesse para os alterar e usada para escrever um arquivo

SAX (Simple API for XML) ndash Interpretador (parser) por objetos O usuaacuterio escreve uma classe herdando da classe SAX provendo os meacutetodos que vatildeo processar os campos agrave medida em que estes satildeo lidos

6889

Arquivos - binaacuterios - FITSFlexible Image Transport System

O formato mais comum para observaccedilotildees astronocircmicas Tambeacutem usado para armazenar quaisquer dados mesmo natildeo relacionados a observaccedilotildees (especialmente tabelas como eacute praacutetica do STSCI)

Conteacutem um (ou mais) cabeccedilalho(s) de texto com metadados (informaccedilotildees sobre os dados como caracteriacutesticas (necessaacuterias para os ler) origem condiccedilotildees em que foram obtidos processamento realizado etc)

SIMPLE = T image conforms to FITS standard BITPIX = 32 bits per data value NAXIS = 2 number of axes NAXIS1 = 1024 NAXIS2 = 1024 BSCALE = 100000 Scaling factor BZERO = 000000 Scaling zero-point TELESCOP= Keck II Telescope SLITNAME= 0041x226 Slit Name SLITPA = 351979 Slit position angle SLITX = 131500 X pixel of the center of the slit LST = 12010446 local apparent sidereal time (()

Depois do cabeccedilalho haacute uma (ou mais) seccedilatildeo(otildees) de dados binaacuterios Costuma(m) ser array(s) 1D (espectros) 2D (imagens) ou 3D (ldquocubos de dadosrdquo)

De inteiros ou reais inteiros satildeo comuns em contagens de instrumentos reais para valores derivados (fluxos intensidades etc)

6989

Arquivos - binaacuterios - FITSNormalmente FITS satildeo lidos escritos por bibliotecas prontas de (relativamente) alto niacutevel usuaacuterio natildeo tem que saber como os dados satildeo armazenados no arquivo nem como os ler escrever Ex (IDL com a biblioteca idlastro)

IDLgt fits_info2dspectrumfits2dspectrumfits has 3 extensionsPrimary header 288 recordsNo dataExtension 1 -- SCI Header 144 records IMAGE ( 1201 1201 )Extension 2 -- ERR Header 72 records IMAGE ( 1201 1201 )Extension 3 -- DQ Header 72 records IMAGE ( 1201 1201 )

IDLgt mydata=readfits(2dspectrumfitsexten_no=1myheader) READFITS Reading FITS extension of type IMAGE READFITS Now reading 1201 by 1201 array

IDLgt extastmyheadermyastIDLgt sz=size(mydatadimensions)IDLgt xy2ad[1sz[0]][1sz[1]]myastcorners_acorners_dIDLgt printcorners_aCorners of the data array from file 2dspectrumfits are at 14487480 33063480

IDLgt printcorners_d -00041264444 00041402222

Obteacutem os dados de coordenadas (WCS) do header

Coloca os dados no array (2D de floats) mydata e o header no array (1D de strings) myheader

Calcula as coordenadas das quinas da imagem atraveacutes do WCS

Provecirc informaccedilotildees sobre o arquivo

7089

Arquivos - binaacuterios - ISIS Cube

Formatos como FITS se adequam muito a ter uma interface de mais alto niacutevel por objetos

Tambeacutem para dados em tabelas FITS muito mais trabalhosos de ler em baixo niacutevel que se adequam muito mais a mapas ou estruturas

Exemplo (de um formato semelhante a FITS ISIS cube)

O objeto ao ser criado lecirc todo o arquivo

cube=pp_editablecube(CM_1553510065_1_ircub)

Meacutetodos fornecem os dados desejados para obter quando necessaacuterio os dados de interesse

Find out the names of the backplanesprintcubegetproperty(backnames)Get the start time of the cubeprintcubegetfromheader(START_TIME)2007-084T100057286Z

Valores no cabeccedilalho podem ser convenientemente fornecidos como um mapa

header=cubeheader_as_hash()printheader[START_TIME]2007-084T100057286Z

7189

Arquivos - binaacuterios ndash ISIS Cube

Os dados satildeo fornecidos como arraysMake a contour plot of the latitudesc=contour(cubegetsuffixbyname(LATITUDE))Get the band with wavelength nearest to 21 (in the units used in the cube)selband=cubegetbandbywavelength(21wavelengths=selwavs)

Interfaces por overload tornam o acesso ainda mais conveniente

selband=cube[21]

selwavs=cube[21]

Retorna um array com a banda de comprimento de onda mais proacuteximo de 21 (microm)

Retorna o comprimento de onda mais proacuteximo de 21 (microm) da banda retornada acima

7289

Arquivos - binaacuterios ndash ISIS Cube Alteraccedilotildees feitas ao conteuacutedo satildeo automaticamente refletidas em todos os

lugares (cabeccedilalho em particular) afetados mantendo o objeto vaacutelido que pode depois ser gravado em um novo arquivo

IDLgt printcubelinescubesamplescubebands 64 64 256

IDLgt helpcubecoreltExpressiongt FLOAT = Array[64 64 256]

IDLgt cubecore=dblarr(100100256)

A linha acima natildeo eacute uma atribuiccedilatildeo eacute uma invocaccedilatildeo de meacutetodo Eacute equivalente acubesetpropertycore=dblarr(100100256)

Eacute o trabalho da funccedilatildeo setproperty decidir se a propriedade passada (core) faz sentido e se fizer fazer todo o trabalho necessaacuterio a esta mudanccedila Para o usuaacuterio eacute tudo automaacutetico e os dados da classe satildeo vaacutelidos o tempo todo

IDLgt helpcubecoreltExpressiongt DOUBLE = Array[100 100 256]

IDLgt printcubelinescubesamplescubebands 100 100 256

IDLgt cubesaveCM_1553510065_1_ir_editedcub

7389

Arquivos - binaacuterios ndash NetCDF e HDF5

Network Common Data Form e Hierarchical Data Format

Os dois uacutenicos formatos bem estabelecidos para dados cientiacuteficos geneacutericos

Armazenam dados como vaacuterias variaacuteveis e seus metadados Para cada variaacutevel haacute (ou pode haver) os metadados

Nome Dimensotildees (do array) Unidades Comentaacuterios

Ambos permitem arrays multidimensionais

Apenas HDF5 permite estruturas (daiacute vem a hierarquia)

Autodocumentados qualquer software que saiba ler um destes formatos lecirc qualquer arquivo sem precisar de conhecimento preacutevio sobre como o arquivo foi gerado

Muito bem suportados em bibliotecas padratildeo e natildeo padratildeo em softwares interativos e visualizadores (inclusive plugins para navegadores)

httpwwwunidataucaredusoftwarenetcdf httpenwikipediaorgwikiHdf5

NetCDF eacute mais simples de usar por natildeo ter hierarquia dando menos trabalho para ler e escrever dados Se hierarquia natildeo eacute necessaacuteria eacute mais conveniente de usar que HDF5

7489

Arquivos - binaacuterios - NetCDF e HDF5Haacute tambeacutem o formato CDL uma versatildeo ASCII do NetCDF A biblioteca padratildeo do NetCDF inclui conversores entre estes formatos

$ ncdump -h refspec_g01_0ncnetcdf refspec_g01_0 dimensions nlay = 51 nwn = 400 nleg = 33 numu = 2 nlev = 52 nphi = 3 ngas = 2 nwnc = 1 scal = 1 v3 = 3 dnl = 1 nk = 1 tdisr = UNLIMITED (0 currently) na = 16

variables float alb(nwn) float z(nlay) float t(nlay) float p(nlay) float wl(nwn) float iof(nwn) float mtau(nwn) float htau(nwn) float hctaus(nwn) float gtau(nwn) float outcos(scal) float phi(nleg) float phic(scal) float umu(numu) float flux(v3 nwn nlev) float mix(nlay ngas) float c(nlay) float psat(nlay) float ga(nwnc) float wlc(nwnc) float inc(scal) int dm(scal) int ord(scal) float fbeam(scal) float wn(nwn) float tautot(nwn nlay) float htaus(nwn nlay) float htaux(nwn nlay) float taug(nwn nlay) float phase(nwn nlay nleg) float ssa(nwn nlay) float uu(nwn nphi nlev numu) float u0u(nwn nlev numu) float tray(nwn nlay) float gtauo(tdisr nwn nlay)

Haacute 14 variaacuteveis usadas como dimensotildees para as 35 variaacuteveis que satildeo arrays

Ex alb(nwn) indica que alb eacute um array 1D de nwn elementos

nwn estaacute armazenado como uma das dimensotildees e eacute 400 portanto alb tem 400 elementos

Parte do conteuacutedo de um arquivo NetCDF em formato CDL (gerado pelo programa ncdump)

7589

Arquivos - binaacuterios - NetCDF e HDF5Conteuacutedo daquele arquivo visualizado com o ncview (acompanha a biblioteca NetCDF padratildeo)

7689

Arquivos - binaacuterios - NetCDF e HDF5O conteuacutedo de todo o arquivo pode ser lido facilmente com as bibliotecas disponiacuteveis e armazenado em contecirciners convenientes Usando um objeto que gera um resultado um pouco mais conveniente

IDLgt h=pp_readncdf(refspec_g01_0nchash)IDLgt printhvar_dims ltObjHeapVar229(HASH)gtvars ltObjHeapVar152(HASH)gtdims ltObjHeapVar118(HASH)gt

IDLgt printh[vars]T 173203 175459 175848 176001 175975 Z 431869 418858 406067 393403 380464 FLUX 300660 145536 0705180 0341669 0165532 PHASE 100000 0779034 0660858 0542052 0449983 TAUTOT0694377 0693420 0693474 0693540 0693636()

IDLgt help(h[vars])[TAUTOT]ltExpressiongt FLOAT = Array[51 400]

IDLgt print(h[var_dims])[TAUTOT]NLAY NWN

IDLgt print(h[dims])[(h[var_dims])[TAUTOT]]NLAY 51NWN 400

7789

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5)

Visualizaccedilatildeo da variaacutevel selecionada

Metadados e alguns valores da variaacutevel selecionada

Variaacutevel a ser criada com o conteuacutedo desta variaacutevel do arquivo

Hierarquia das variaacuteveis do arquivo

7889

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5) Imported variable az

IDLgt helpaz Structure ltd5723f38gt 13 tags length=448 data length=444 refs=1 _NAME STRING az _ICONTYPE STRING binary _TYPE STRING DATASET _FILE STRING INTENSI_test_409OUTh5 _PATH STRING _DATA DOUBLE Array[38] _NDIMENSIONS LONG 1 _DIMENSIONS ULONG64 Array[1] _NELEMENTS ULONG64 38 _DATATYPE STRING H5T_FLOAT _STORAGESIZE ULONG 8 _PRECISION LONG 64 _SIGN STRING

IDLgt printaz_data 00000000 10000000 20000000 30000000 40000000 50000000 60000000 80000000 ()

7989

Arquivos - binaacuterios - imagens

JPEG JPEG200 TIFF GeoTIFF etc

Os formatos comuns de imagens satildeo bem suportados em muacuteltiplas plataformas para uso dentro de programas e interativamente

Alguns formatos tecircm opccedilatildeo de compressatildeo com perda eou sem perda

Armazenam imagens como arrays 2D ou 3D (3D frequumlentemente limitado a 3 ou 4 em uma das dimensotildees uma imagem em 3 ou 4 bandas) de inteiros ou (em alguns formatos) reais

Alguns formatos permitem armazenar metadados para caracterizar as imagens armazenadas

JPEG2000 e GeoTIFF (um subconjunto de TIFF) comuns em astronomia e aacutereas proacuteximas

8089

Arquivos - binaacuterios ndash imagens ndash exemplo (IDL)IDLgt printquery_tiff(issmap_2009tiffinfogeotiff=geo) 1

IDLgt helpinfo Structure ltd4eca4b8gt 18 tags length=144 data length=132 refs=1 CHANNELS LONG 4 DIMENSIONS LONG Array[2] IMAGE_INDEX LONG 0 NUM_IMAGES LONG 1 PIXEL_TYPE INT 1 TYPE STRING TIFF BITS_PER_SAMPLE LONG 8 POSITION FLOAT Array[2] RESOLUTION FLOAT Array[2] UNITS LONG 2 TILE_SIZE LONG Array[2] DESCRIPTION STRING ISS (2009) DATE_TIME STRING 20100218 012436()

IDLgt helpgeo Structure ltd4efa1b8gt 10 tags length=264 data length=262 refs=1 MODELPIXELSCALETAG DOUBLE Array[3] MODELTIEPOINTTAG DOUBLE Array[6 4] GEOGRAPHICTYPEGEOKEY INT 4035 GEOGSEMIMAJORAXISGEOKEY DOUBLE 25750000 GEOGSEMIMINORAXISGEOKEY DOUBLE 25750000()

IDLgt myimage=read_tiff(issmap_2009tiff) Lecirc a imagem para o array myimage

Obteacutem informaccedilotildees sobre o arquivo

8189

Arquivos - binaacuterios ndash formatos nativosLinguagens como IDL R Python Java tecircm seu formato nativo binaacuterio acessado em alto niacutevel Basta mandar salvar ler variaacuteveis no do arquivo a biblioteca padratildeo automagicamente faz todo o trabalho de decidir como gravar ler os dados

Conveniente de usar na proacutepria linguagem Mas raramente existem bibliotecas para ler gravar o formato nativo de uma linguagem a partir de outra Ex (IDL)

IDLgt savefile=2dspectrumsavmydatamyheadercorners_dcorners_averbosecompress SAVE Portable (XDR) compressed SAVERESTORE file SAVE Saved variable MYDATA SAVE Saved variable MYHEADER()

Pode ser lido com apenas (haacute formas mais elaboradas)

IDLgt restore2dspectrumsavverbose RESTORE Portable (XDR) compressed SAVERESTORE file RESTORE Save file written by ltunknowngtltunknowngt Thu Jan 27 191422 2011 RESTORE IDL version 801 (linux x86_64) RESTORE Restored variable MYDATA RESTORE Restored variable MYHEADER()

IDLgt helpmydatamyheadercorners_dcorners_aMYDATA FLOAT = Array[1201 1201]MYHEADER STRING = Array[144]()

8289

Arquivos - processamento em baixo niacutevel

Nem sempre um formato padratildeo eacute a melhor escolha para o problema

Nem sempre haacute escolha (pode-se ter que trabalhar com arquivos que jaacute foram escritos em algum formato proprietaacuterio)

Agraves vezes o formato eacute padratildeo mas natildeo haacute bom suporte a ele disponiacutevel

Em todos estes casos eacute necessaacuterio escrever rotinas em baixo niacutevel que vatildeo ler processar diretamente o conteuacutedo do arquivo

Preferencialmente criando interfaces de alto niacutevel para o programa que vai as usar

8389

Arquivos - processamento em baixo niacutevel - texto

Tomando o exemplo anterior onde as colunas eram de diferentes tipos

NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS dec18s0001 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0002 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0003 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 FLAT 5408757812500 460000 5 dec18s0004 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 DARK 5408757812500 460000 5

A forma mais simples de o ler diretamente eacute definir uma estrutura para receber cada linha e um array destas estruturas para receber todo o arquivo Ex (IDL)

IDLgt record=namecalmpos0filnameechlpos0d0disppos0d0targnameposdirclassmjd_obsitime0d0coadds0IDLgt nlines=file_lines(filesearch_scamtxt)IDLgt mydata=replicate(recordnlines-1)IDLgt header=

Depois de definidas as variaacuteveis que vatildeo receber os dados o arquivo pode ser lido

IDLgt openrunitfilesearch_scamtxtget_lunIDLgt readfunitheaderIDLgt readfunitmydataformat=(A14I8A15F104F104A18A19A15F158F105I15)IDLgt free_lununit

A gravaccedilatildeo de um arquivo texto poderia ser feita de forma semelhante apenas trocando openr por openw (abrir o arquivo para gravaccedilatildeo natildeo leitura) e readf por printf

O arquivo eacute aberto em uma unidade (unit) usada para especificar de onde eacute feita a leitura

Ao final o arquivo eacute fechado

8489

Arquivos - processamento em baixo niacutevel - texto

O que resulta em

IDLgt printheader NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS

IDLgt helpmydataMYDATA STRUCT = -gt ltAnonymousgt Array[4]

IDLgt helpmydata[0] Structure ltd5e38f68gt 11 tags length=136 data length=124 refs=3 NAME STRING dec18s0001 CALMPOS INT 0 FILNAME STRING NIRSPEC-5-AO ECHLPOS DOUBLE 62630000 DISPPOS DOUBLE 36450000 TARGNAME STRING HD85258 POSDIR STRING NIRSPEC-5-AOp1 CLASS STRING STAR MJD_OBS STRING 54087574 ITIME DOUBLE 10000000 COADDS INT 1

Este caso eacute mais complicado que os mais comuns por haver colunas de strings

Se todas fossem de nuacutemeros natildeo teria sido necessaacuterio especificar o formato explicitamente As colunas teriam sido adivinhadas pela biblioteca que lecirc o arquivo Poderia ter sido lido escrito soacute com um array de nuacutemeros sem estruturas

8589

Arquivos - processamento em baixo niacutevel - binaacuterio

Formatos binaacuterios podem ser definidos de qualquer forma O arquivo eacute apenas um conjunto de bytes Cabe ao software saber como os interpretar

Uma escolha comum para que sejam autodocumentados eacute incluir um cabeccedilalho de texto informando as caracteriacutesticas dos dados necessaacuterias para os ler

Ex (IDL) criar um arquivo que armazene um array de doubles com um cabeccedilalho informando as dimensotildees para que o programa que o lecirc saiba como ler os dados

Inventa dados e abre o arquivo

IDLgt data_to_write=dindgen(34)IDLgt openwunitbinary_exampledatget_lun

Escreve as dimensotildees como texto

IDLgt printfunitdimensions of the double array stored belowIDLgt printfunitsize(data_to_writedimensions)

Escreve os dados binaacuterios

IDLgt writeuunitdata_to_write

Fecha o arquivo

IDLgt free_lununit

Escreve em binaacuterio (write unformatted)

8689

Arquivos - processamento em baixo niacutevel - binaacuterio

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

dimensions of the double array stored below 3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

8789

Arquivos - processamento em baixo niacutevel - binaacuterioA leitura deste arquivo eacute igualmente simples

IDLgt header=IDLgt dims=[00]IDLgt openrunitbinary_exampledatget_lun

Lecirc as dimensotildees (armazenadas como texto)

IDLgt readfunitheaderIDLgt readfunitdims

Lecirc a parte binaacuteria depois de saber as dimensotildees

IDLgt data_read=dblarr(dims)IDLgt readuunitdata_read

Fecha o arquivo

IDLgt free_lununit

Verifica que os dados foram gravados e lidos corretamente

IDLgt printarray_equal(data_to_writedata_read) 1

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Lecirc dados binaacuterios (read unformatted)

8889

Sumaacuterio

5 ndash Slides em httpwwwppenteadonetpeapea04_strings_iopdf Strings Expressotildees regulares Arquivos

httpwwwppenteadonetpea

8989

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89

Strings - conversatildeo de strings para outros tipos

Para gerar dados a partir de strings datas identificadores pedaccedilos de nomes valores numeacutericos armazenados em strings

Tambeacutem sempre haacute conversotildees default para os tipos baacutesicos onde o intepretador programa faz o possiacutevel para entender o string como um valor daquele tipo

Tipicamente eacute feito por casts (funccedilotildees de conversatildeo) reads (de strings ou arquivos texto (arquivos texto satildeo strings)) construtores de objetos ou implicitamente

3089

Strings - conversatildeo de strings para outros tipos - impliacutecitas

Exs (IDL)

IDLgt helpfix([17 17 171 -17 9 8])ltExpressiongt INT = Array[5]

IDLgt printfix([17 17 171 -17 9 8]) 17 17 17 -17 9

IDLgt printdouble([17 17 171 -17 9 8]) 17000000 17000000 17100000 -17000000 90000000

IDLgt readfunitabcd

IDLgt a=0d0IDLgt b=00IDLgt c=0IDLgt reads171d0 189d0 -9abcIDLgt helpabcA DOUBLE = 17100000B FLOAT = 189000C INT = -9

Converte o conteuacutedo do string para os tipos das variaacuteveis abcd (explicado adiante)

3189

Strings - conversatildeo de strings para outros tipos

Quando o default natildeo eacute suficiente (ou quando escrevendo o conversor em uma classe) costuma ser possiacutevel o fazer com formatos semelhantes aos formatos para gerar strings Exs (IDL)

IDLgt a=0d0IDLgt b=00IDLgt c=0IDLgt reads171d0 something 189d0-9abc READS Input conversion error Unit 0 File ltstdingt Error occurred at $MAIN$ Execution halted at $MAIN$

Natildeo funcionou porque sozinho ele natildeo conseguiu saber o que fazer com o ldquosomethingrdquo Usando um formato especiacutefico

IDLgt reads171d0 something 189d0-9 abcformat=(D6111XD611XI)

IDLgt helpabcA DOUBLE = 17100000B FLOAT = 189000C INT = -9

Exemplos mais complicados adiante (arquivos texto)

Variaacuteveis tecircm que ser definidas para informar para que tipo seraacute feita a conversatildeo default

3289

Strings - processamento natildeo baacutesicoOperaccedilotildees importantes e muito necessaacuterias mas que natildeo satildeo suportadas em todas as linguagens bibliotecas padratildeo

Testes (ex IDL)

IDLgt str=[afitsaFITSafitsaabfitsabcfits]

IDLgt printstrmatch(strfits) 1 0 0 1 1

IDLgt printstrmatch(strfitsfold_case) 1 1 0 1 1

IDLgt printstrmatch(strfitsfold_case) 1 1 1 1 1

IDLgt printstrmatch(strfits) 1 0 0 0 0

IDLgt printstrmatch(strfits) 0 0 0 1 0

3389

Strings - processamento natildeo baacutesico

Operaccedilotildees importantes e muito necessaacuterias mas que natildeo satildeo suportadas em todas as linguagens bibliotecas padratildeo

Separaccedilatildeo de partes (Ex IDL)

IDLgt printstrsplit(2011- 131 -extract)format=(A)2011131

Processamento de nomes de arquivos diretoacuterios (Ex IDL)

IDLgt printfile_dirname(some_directoryanother_directorysome_filetxt)some_directoryanother_directory

IDLgt printfile_basename(some_directoryanother_directorysome_filetxt)some_filetxt

IDLgt printfile_basename(another_directorysome_filetxttxt)+_alteredtxtsome_file_alteredtxt

3489

Strings - processamento natildeo baacutesico

Codificaccedilotildees (Ex Python 3)

gtgtgt s=infinite money infinNeuro sign

gtgtgt print(s)infinite money infineuro

gtgtgt print(ascii(s))infinite money u221eu20ac

gtgtgt print(sencode(utf-8))binfinite money xe2x88x9exe2x82xac

3589

Strings - processamento natildeo baacutesico

Perl eacute a linguagem mais avanccedilada para processamento de strings tem suporte nativo a muitas outras operaccedilotildees a semacircntica da linguagem eacute voltada principalmente para processar strings expressotildees regulares (de vaacuterios tipos) natildeo satildeo strings fazem parte da semacircntica

Ex (sem o objetivo que seja compreensiacutevel apenas para indicar o estilo)

Ler um arquivo contendo campos com nomes separados de valores por ()

temperature 10008name some modelx_dimension 100y_dimension 100z_dimension 50()

Armazenado-o em um mapa O que pode ser feito com apenas

While (ltgt) Loop over input linesPut pre-colon text into $1 post-colon into $2 if (m (S+) (+) ) Use $1 as key $2 as value $file_data$1 = $2

3689

Expressotildees regulares - definiccedilatildeo

Expressotildees regulares (regular expressions regex) satildeo a mais poderosa ferramenta para fazer buscas e separar substrings

Regex satildeo uma linguagem com o uacutenico objetivo de especificar propriedades de strings

Implementadas em graus diferentes em todas as linguagens modernas e modernizadas facilita encontrar uma expressatildeo jaacute pronta pois satildeo quase iguais em qualquer linguagem

Estatildeo na biblioteca padratildeo em IDL Python R Perl

Em C++ e Java em bibliotecas comuns (Boost Jregex)

Para que servem

Uma expressatildeo regular especifica propriedades de strings

O interpretador de expressotildees regulares (regular expression engine) recebe a expressatildeo e o string a analisar e determina se o string corresponde (matches) agrave expressatildeo regular

Em alguns casos o interpretador pode tambeacutem informar que parte(s) do string corresponde(m) a que parte(s) da expressatildeo regular e realizar processamentos com estas partes

3789

Expressotildees regulares ndash exemplos de usos Separar partes de strings

Encontrar linhas em arquivos que tenham nomes valores e comentaacuterios e separar estes pedaccedilos

Escalar com comentaacuterio

SLITPA = 351979 Slit position angle

Array 1D sem comentaacuterio (se extendendo por vaacuterias linhas)

BAND_BIN_CENTER = (03505400358950036629003732200379490 0387900104598)

Escalares em diferentes formatos

Total Mechanical Luminosity 15310E+03resources_usedwalltime=005603

Pedaccedilos de nomes

6063 17836E-20 2456 T FeIX((3Pe)3d(2PE)4p_1Po-3s2_3p6_1Se)

Datas separando ano mecircs dia hora (em vaacuterios formatos diferentes)

DATE-OBS= 2006-12-18 universal date of observationDATE_TIME = 2010-07-19T161032START_TIME = 2006-182T225102850Z

3889

Expressotildees regulares ndash exemplos de usos

Separar partes de strings Separar partes de nomes de arquivos (por significarem algo como identificar o

conteuacutedo)

specdec18s0041fitsscamdec18i0054fits15_7_mts_hmpixselh_mr15sav15_7_mts_hwpixselh_mr15sav16_3_mts_hwpixselb_mr16savreadmodel5l_-1_000010000_10000_r05_030_08196_0100000_005000000_1000eps

Determinar se um string eacute um nuacutemero (inteiro real fixo flutuante)

Encontrar identificadores Exs nomes de cataacutelogos endereccedilos HTTPFTP endereccedilos de email

Separar campos em arquivos sendo lidos onde as linhas natildeo tecircm a mesma formataccedilatildeo algumas linhas com colunas separadas por espaccedilos outras por tabs outras por

siacutembolos ignorando linhas de comentaacuterios e linhas vazias

3989

Expressotildees regulares - usoEx (IDL) encontrar nomes de arquivos com algumas propriedades

IDLgt printfilesformat=(A)CM_1477475933_1_viscubCM_1477476864_1_ircubCM_1477476864_1_irgcubCM_1477476864_1_viscubCM_1477477826_1_ircubCM_1477477826_1_irgcubCM_1477477826_1_viscubmosaic2cub

IDLgt printstregex(files+irgcubboolean) 0 0 1 0 0 1 0 0

A expressatildeo regular eacute +irgcub Especifica uma ou mais ocorrecircncias seguidas (+) de qualquer caractere () seguido de uma ocorrecircncia de irgcub (o ponto vem precedido do caractere de

escape () para ser entendido literalmente como um ponto e natildeo como o seu significado especial (qualquer caractere)

Esta aplicaccedilatildeo do interpretador (stregex) retorna um valor Booleano (verdadeirofalso) para cada elemento do string passado (files) que informa se aquele elemento correspondia agravequela expressatildeo regular

Este eacute um exemplo artificial Seria mais faacutecil ter usado strmatch(filesirgcub)

4089

Expressotildees regulares - uso

Em casos como este tipicamente o resultado de stregex seria usado como filtro para selecionar apenas os elementos do array de strings que satisfazem agravequela expressatildeo regular

IDLgt w=where(stregex(files+irgcubboolean)null)IDLgt printfiles[w]format=(A)CM_1477476864_1_irgcubCM_1477477826_1_irgcub

Ex (IDL) Determinar que strings conteacutem uma data no formato yyyy-mm-dd

IDLgt strs=[201002012010-02-012010-2-1aaaa-mm-ddT2010-02-01J]IDLgt printstregex(strs[0-9]4-[0-9]2-[0-9]2boolean) 0 1 0 0 1

Esta expressatildeo regular especifica quatro repeticcedilotildees (4) de diacutegitos (caracteres na faixa [0-9]) seguido de um (-) seguido de duas repeticcedilotildees (2) de dois diacutegitos ([0-9]) seguido de um (-) seguido de duas repeticcedilotildees (2) de dois diacutegitos ([0-9])

Uma expressatildeo regular apenas um pouco mais elaborada poderia corresponder aos 3 formatos de data no array acima E poderia se impedir que a uacuteltima (com outros caracteres antes e depois da data) seja aceita

4189

Expressotildees regulares - regras - caracteres ldquonormaisrdquo

Uma expressatildeo regular usa caracteres ldquonormaisrdquo e especiais para especificar o que se vai procurar na ordem em que aparecem na expressatildeo

Se um caractere eacute normal (natildeo eacute um dos especiais mostrados adiante) ele especifica uma ocorrecircncia daquele caractere

Ex J eacute uma expressatildeo regular que corresponde a qualquer string onde ocorra J Jaacute JA soacute corresponde a strings que tenham JA dentro

Exs (IDL)

IDLgt strs=[JJJJJJaJAjaJa]

IDLgt printstregex(strsJboolean) 1 1 1 0 1

IDLgt printstregex(strsJAboolean) 0 0 1 0 0

4289

Expressotildees regulares - regras - caracteres especiaisCaracteres especiais tecircm outros significados Para significar literalmente aquele caractere deve ser escapado (escaped) com um

Siacutembolo significado exemplo Corresponde(m) Escape o caractere seguinte deve ser interpretado

literalmente natildeo como especial aa

Qualquer caractere ab ajb aab abb jafbc

+ Uma ou mais repeticcedilotildees do que vem agrave esquerda a+b ab aab bab baabh

() Subexpressatildeo para agrupar termos afetados por um caractere especial (como parecircnteses em notaccedilatildeo matemaacutetica)

(ab)+c abc ababc dabababcg

Zero ou mais repeticcedilotildees dos termos agrave esquerda ab abbaab caaabg

Zero ou uma repeticcedilatildeo dos termos agrave esquerda ab b ab cabd cbd

| Alternaccedilatildeo qualquer um dos dois agrave esquerda a|bc ac bc jacd jbcd

n Exatamente n repeticcedilotildees do termo agrave esquerda a2b aab daaabg

n1n2 De n1 a n2 repeticcedilotildees do termo agrave esquerda a12b ab aab aaab gaaabbd

^ Acircncora (no comeccedilo) nada agrave esquerda ^ab ab abb

$ Acircncora (no fim) nada agrave direita ab$ abaab

[] Conjunto de valores (explicado adiante)

4389

Expressotildees regulares - regras - conjuntos de valores

[] denota um conjunto de valores que pode conter

Uma lista de coisas que devem corresponder Ex [abc] signfica qualquer caractere no conjunto abc Correspondem a esta

expressatildeo abcabha

Uma lista de coisas que natildeo podem corresponder [^abc] significa qualquer coisa que natildeo seja a b ou c Correspondem a esta

expressatildeo d jgs gg

Faixas de valores [0-9] signfica qualquer diacutegito [0-9a-zA-Z] significa qualquer diacutegito ou letra

Classes de valores como algumas faixas e outros conjuntos ocorrem com muita frequumlecircncia haacute nomes

especiais para eles Estes (em IDL) vecircm entre [] ex [[digit] significa o mesmo que [0-9]

4489

Expressotildees regulares - regras - classes de valores

Classe signficado

alnum Caracteres alfanumeacutericos 0-9a-zA-Z

alpha Caracteres alfabeacuteticos a-zA-Z

cntrl Caracteres de controle ASCII (natildeo visiacuteveis coacutedigos 1 a 31 e 127)

digit Diacutegitos (decimais) 0-9

graph Caracteres visiacuteveis ASCII 33 a 126 (natildeo inclui o espaccedilo)

lower Letras minuacutesculas a-z

print Caracteres ldquoimprimiacuteveisrdquo (visiacuteveis e o espaccedilo) ASCII 32 a 126

punct Caracteres de pontuaccedilatildeo $amprsquo()+-lt=gt[]^_lsquo|~

space Os caracteres ldquoem brancordquo (blank) espaccedilo tab tab vertical CR LF (ASCII 32 e 9-13)

upper Letras maiuacutesculas A-Z

xdigit Diacutegitos hexadecimais 0-9A-Fa-f

lt Comeccedilo de palavra (palavra definida como sequumlecircncia de coisas natildeo space)

gt Fim de palavra (palavra definida como sequumlecircncia de coisas natildeo space)

Estas satildeo apenas as principais Algumas implementaccedilotildees tecircm muito mais (em particular nas linguagens que usam Unicode nativamente)

4589

Expressotildees regulares - exemplos

Determinar se strings satildeo nuacutemeros (Ex IDL)

IDLgt str=[9-18 875-812-45913E9-98d7a188d032f5]

Inteiros

IDLgt intexpr=^[-+][0-9]+$

IDLgt printstregex(strintexprboolean) 1 1 0 0 0 0 0 0 0 0

Ponto flutuante

IDLgt fpexpr=^[-+](([0-9][0-9]+)|([0-9]+[0-9]))([eEdD][-+][0-9]+)$

IDLgt printstregex(strfpexprboolean) 1 1 0 1 1 1 1 1 0 0

Sinal opcional

1 ou mais diacutegitos

Sinal opcional

0 ou mais diacutegitos opcionalmente seguidos de um ponto e 1 ou mais diacutegitos

1 ou mais diacutegitos opcionalmente seguidos de um ponto e 0 ou mais diacutegitos

ou Expoente opcional letra do expoente seguida de sinal opcional seguido de um ou mais diacutegitos

4689

Expressotildees regulares ndash extraccedilatildeo

Interpretadores de expressotildees regulares costumam oferecer mais que apenas testar se um string corresponde a uma expressatildeo

Em geral tambeacutem podem retornar que parte(s) do string corresponde(m) agrave expressatildeo

Ex (IDL) Determinar se um string conteacutem uma data incluindo os formatos

IDLgt dates=[2011-01-312011 1 3120110131something done on y2011m1d31 with something]

E extrair a data de dentro do string

IDLgt expr=[0-9]4[0-9]12[0-9]12

(4 diacutegitos)(qualquer separador)(1 a 2 diacutegitos)(qualquer separador)(1 a 2 diacutegitos)

IDLgt printstregex(datesexprextract)format=(A)2011-01-312011 1 31201101312011m1d31

Como agora separar ano mecircs e dia Com uma busca e uma extraccedilatildeo para cada Poderia ser mais eacute mais faacutecil com uma uacutenica expressatildeo regular

4789

Expressotildees regulares - aleacutem de apenas testes

Tambeacutem podem retornar que parte(s) do string correspondem agrave expressatildeo toda e agraves suas subexpressotildees (partes da expressatildeo delimitadas por parecircnteses)

Ex (IDL) Separar pedaccedilos de datas Neste caso para a expressatildeo ficar menor assumindo um formato simples (yyyy-mm-ddThhmmssfff) Mas poderia ser um formato mais livre como no exemplo anterior

IDLgt str=Stuff observed on 2011-01-31T123924983 with some instrumentIDLgt expr=([0-9]4)-([0-9]2)-([0-9]2)T([0-9]2)([0-9]2)([0-9]2[0-9]3)

(quatro diacutegitos)-(2 diacutegitos)-(2 diacutegitos)T(2 diacutegitos)(2 diacutegitos)(2 diacutegitos3 diacutegitos)

IDLgt pieces=stregex(strexprextractsubexpr)IDLgt printpiecesformat=(A)2011-01-31T12392498320110131123924983IDLgt d=julday(pieces[2]pieces[3]pieces[1]pieces[4]pieces[5]pieces[6])IDLgt printdformat=(F166) 2455593027372

Expressatildeo inteiraPrimeira subexpressatildeoSegunda subexpressatildeoTerceira subexpressatildeoQuarta subexpressatildeoQuinta subexpressatildeoSexta subexpressatildeo

4889

Expressotildees regulares - referecircncias httpxkcdcom208

Viacutedeos do Software Carpentry

httpsoftware-carpentryorg4_0regexp

4989

Arquivos

Quase todo programa precisa armazenar dados em arquivos

Podem ser pequenos arquivos de paracircmetros ou enormes arquivos de dados produzidos ou a processar

Apesar do sugerido pela praacutetica comum arquivos texto natildeo satildeo sempre a melhor escolha para armazenar dados - e haacute muitas formas diferentes de os usar

Qual eacute a melhor escolha

Assim como para linguagens ou contecirciners natildeo existe ldquoo melhor formatordquo Cada um tem suas vantagens e desvantagens

Dados diferentes (mesmo se usados pelos mesmos programas) em geral se adequam melhor a formatos diferentes

5089

Arquivos - texto X binaacuterios

Em qualquer formato arquivos satildeo armazenados como diacutegitos binaacuterios

Mas haacute duas formas principais como eles podem ser codificados

Arquivos baseados em texto (text files)

Dados satildeo transformados em caracteres usando alguma formataccedilatildeo (mesmo se impliacutecita) e escritos com alguma codificaccedilatildeo de texto (comumente mas natildeo necessariamente ASCII)

Um arquivo texto eacute um ou mais strings As mesmas conversotildees tecircm que ser feitas depara outros tipos

Arquivos ldquobinaacuteriosrdquo (binary files)

Embora todo arquivo seja binaacuterio este nome costuma ser usado soacute para aqueles em que os dados natildeo estatildeo na forma de texto

Com frequumlecircncia (nem sempre) os dados satildeo gravados de forma idecircntica a como satildeo armazenados na memoacuteria

Muitos formatos usam uma mistura de partes em texto e partes binaacuterias

Um cabeccedilalho (header) de texto que daacute informaccedilotildees (metadados) sobre os dados armazenados na parte binaacuteria que vem depois

O cabeccedilalho conteacutem em especial informaccedilotildees sobre como ler os dados binaacuterios

5189

Arquivos - texto X binaacuterios

Vantagens de arquivos texto

Legiacuteveis por pessoas (human readable)

Podem ser auto-suficientes todo o necessaacuterio para os ler e entender o que conteacutem pode ser obtido olhando o arquivo

Satildeo os menos especiacuteficos a linguagens software normalmente satildeo escritos em ASCII ou Unicode e sempre haacute algum suporte a ler escrever texto em linguagens software

Haacute alguns formatos padratildeo para texto (exs CSV XML) que satildeo suportados em muitas plataformas diferentes

5289

Arquivos - texto X binaacuterios

Vantagens de arquivos binaacuterios

Em geral natildeo haacute conversotildees entre o os dados como armazenados na memoacuteria O que torna o armazenamento mais eficiente e sem alteraccedilotildees nos valores

A maior parte dos formatos padronizados eacute binaacuteria Exs FITS cube CDF NetCDF HDF HDF5 JPEG JPEG2000 TIFF GeoTIFF MPEG etc

Eacute mais comum que haja bibliotecas prontas (ateacute de alto niacutevel) para consulta leitura e gravaccedilatildeo

Os formatos melhor desenhados satildeo autodocumentados (em texto ou binaacuterio) para os ler natildeo eacute necessaacuterio conhecimento preacutevio sobre como os dados foram armazenados

Toda linguagem plataforma costuma ter seu formato binaacuterio mais nativo que costuma ser o mais faacutecil para leitura gravaccedilatildeo Em particular nas de alto niacutevel que tecircm formatos autodocumentados (especialmente

em IDL R Python Java)

Muitos formatos tecircm opccedilatildeo de compressatildeo dos dados

5389

Arquivos - proprietaacuterios X padratildeo

Independente da escolha texto binaacuterio programas devem escolher entre usar um formato proacuteprio ou um formato padronizado

A principal vantagem de formatos proacuteprios eacute que satildeo definidos da forma mais conveniente para a aplicaccedilatildeo que os usa simplificando leitura e gravaccedilatildeo e potencialmente otimizando recursos (acesso ao disco tamanho do arquivo etc)

A principal desvantagem de formatos proacuteprios eacute ser necessaacuterio escrever todo o coacutedigo para os ler gravar

Pode dar mais trabalho que usar um formato geneacuterico que natildeo seja exatamente o que melhor se encaixa na aplicaccedilatildeo

O coacutedigo para processar o formato em geral vai ser menos completo e conveniente de usar que o de um formato bem estabelecido usado por muitos outros em muitos ambientes

Cada novo software que for usar estes arquivos vai precisar compartilhar do mesmo coacutedigo ou precisar de coacutedigo novo (em particular se em outra linguagem) para ler gravar naquele formato

Eacute necessaacuterio documentar o formato e decidir sobre como ele seraacute definido

Se outros jaacute colocaram muito trabalho desenvolvendo bons formatos padratildeo bem suportados em muitos ambientes por que ter o trabalho de reinventar (e reprogramar redocumentar e retestar) a roda

5489

Arquivos - padrotildees comuns em astronomia (exs adiante)

Texto

CSV Comma-separated values - bem suportado por muitos softwares

ldquoColunas fixasrdquo Natildeo eacute um padratildeo bem definido mas eacute praacutetica comum para tabelas (2D)

XML Extensible Markup Language - O padratildeo texto mais flexiacutevel de grande uso em programaccedilatildeo geral para armazenar qualquer coisa com frequumlecircncia de forma hieraacuterquica Bem suportado por linguagens modernas (e modernizadas) e bibliotecas das principais

linguagens gerais Alta complexidade o torna trabalhoso de usar

5589

Arquivos - padrotildees comuns em astronomia (exs adiante)Binaacuterios

FITS Flexible Image Transport System - o mais comum para observaccedilotildees astronocircmicas Conteacutem os dados (em geral arrays 1D 2D ou 3D) e documentaccedilatildeo (nos cabeccedilalhos) sobre a origem e caracteriacutesticas dos dados Tambeacutem usado para armazenar tabelas de dados quaisquer mesmo que natildeo sejam observaccedilotildees (especialmente pelo STSCI) Variam muito em qualidade de documentaccedilatildeo

NetCDF Network Common Data Form - evoluccedilatildeo do CDF autodocumentado eacute comum e bem suportado para vaacuterios arrays de dados

HDF5 Hierarchical Data Format ndash autodocumentado comum e bem suportado permitindo aleacutem de simples arrays estruturas (eacute um formato hieraacuterquico)

Formatos de imagens JPEG JPEG2000 TIFF GeoTIFF etc - voltados para arrays 2D3D de inteiros ou (em alguns casos) reais com ou sem compressatildeo JPEG2000 tem caracteriacutesticas mais avanccediladas como imagens multiresoluccedilatildeo

Formatos vetoriais PS EPS DXF SHP SVG - variados niacuteveis de suporte a armazenamento de vetores e formas em 2D ou 3D

ISIS Cube semelhante em caracteriacutesticas ao FITS mais usado em sensoriamento remoto geociecircncias e ciecircncias planetaacuterias em geral para observaccedilotildees 1D 2D ou 3D

Formatos nativos de linguagens todo o trabalho de leitura e gravaccedilatildeo eacute feito automagicamente pela biblioteca padratildeo em IDL R Python Java

5689

Arquivos texto - newlines

Apesar do que possa parecer arquivos texto natildeo tecircm intrinsecamente vaacuterias linhas Arquivos texto satildeo soacute uma sequumlecircncia 1D de caracteres em alguma codificaccedilatildeo Separaccedilatildeo em linhas (equivalente a interpretar o arquivo como 2D em linhas e colunas) eacute

especificada por convenccedilotildees Natildeo haacute apenas uma convenccedilatildeo para o fim de linhas

A mais primitiva convenccedilatildeo eacute separaccedilatildeo nenhuma estipula-se que linhas tenham um nuacutemero fixo N de caracteres e cabe ao software que lecirc o arquivo entender que uma linha nova ocorre regularmente a cada N caracteres

Eacute a forma menos portaacutevel e mais inconveniente eacute necessaacuterio o conhecimento preacutevio (ou por inspeccedilatildeo do arquivo) de quantos caracteres haacute por linha

A maior parte dos editores de texto natildeo vai saber separar linhas desta forma (por falta deste conhecimento preacutevio) Exemplo (de um FITS real)

SIMPLE = T Fits standard BITPIX = 16 Bits per pixel NAXIS = 0 Number of axes EXTEND = T File may contain extensions

O que com as linhas quebradas nos lugares certos seria

SIMPLE = T Fits standard BITPIX = 16 Bits per pixel NAXIS = 0 Number of axes EXTEND = T File may contain extensions

5789

Arquivos texto - newlines

A forma mais comum de especificar linhas eacute com um marcador do final de linha (newline)

Eacute um caractere especial natildeo normalmente presente no texto que serve para marcar fim de linhas

Mas natildeo haacute soacute um padratildeo de newline Os mais comuns

LF (Line Feed ASCII 10) ndash Unix Linux Mac OS X

CR - (Carriage Return ASCII 13) - Mac OS lt10

CR+LF (CR seguido de LF) - Windows DOS

Eacute o motivo de o Notepad (Windows) natildeo entender as quebras de linha de arquivos escritos com o formato nativo de Linux o arquivo soacute tem LF enquanto o editor espera CR+LF

Alguns sistemas (strings em vaacuterias linguagens por exemplo) usam o coacutedigo de escape n para indicar newline que eacute codificado de acordo com o padratildeo sendo usado

Em geral bibliotecas de leitura e gravaccedilatildeo de arquivos usam (default pelo menos) o newline nativo do sistema em que satildeo usadas

Programas de conversatildeo entre os sistemas satildeo comuns (ex dos2unix)

O Wordpad identifica se for usado soacute LF e quebra as linhas de acordo

5889

Arquivos - texto - CSV

Comma-separated values

O formato mais padronizado para tabelas (arrays 2D) em texto (frequentemente mas natildeo necessariamente ASCII)

Bem suportado por bibliotecas padratildeo de linguagens e outros softwares (Excel Calc Origin Google Docs etc)

Conteacutem Linhas de cabeccedilalho (opcionais mas recomendadas) linhas com qualquer texto geral

descrevendo o arquivo e em geral uma linha de tiacutetulo para as colunas da tabela Uma (apenas uma) tabela onde todas as linhas tecircm o mesmo nuacutemero de colunas

Colunas separadas por viacutergulas (opcionalmente pode ser outro separador) Linhas terminadas por newline (qualquer que seja) Strings delimitados por ldquo ldquo

Ex

NAMECALMPOSFILNAMEECHLPOSDISPPOSTARGNAMEPOSDIRCLASSMJD-OBSITIMECOADDSdec18s00010NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001dec18s00020NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001dec18s00120NIRSPEC-5-AO635800364500itan140NIRSPEC-5-AOp2 TITAN5408763000001dec18s00140NIRSPEC-5-AO626300364500itan140NIRSPEC-5-AOp1 TITAN5408763000001dec18s00151NIRSPEC-5-AO626300364500itan140NIRSPEC-5-AOp1ARC5408764000001dec18s00160NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001

Natildeo eacute necessaacuterio que as colunas tenham largura constante

Cabeccedilalho

5989

Arquivos - texto - CSVHaacute amplo suporte a leitura e gravaccedilatildeo de CSV sem precisar recorrer a procedimentos de baixo niacutevel

Podem ser diretamente importados em Excel Calc Origin Google Docs ou lido facilmente com bibliotecas padratildeo comuns Ex (IDL)

IDLgt c=read_csv(filesearch_scamcsvheader=h)IDLgt printhNAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS

IDLgt helpc Structure ltc8bca508gt 11 tags length=5256 data length=5248 refs=1 FIELD01 STRING Array[41] FIELD02 LONG Array[41] FIELD03 STRING Array[41] FIELD04 DOUBLE Array[41] FIELD05 DOUBLE Array[41] FIELD06 STRING Array[41] FIELD07 STRING Array[41] FIELD08 STRING Array[41] FIELD09 STRING Array[41] FIELD10 DOUBLE Array[41] FIELD11 LONG Array[41]

IDLgt printcfield01[03]dec18s0001 dec18s0002 dec18s0003 dec18s0004

IDLgt printcfield03[03]NIRSPEC-5-AO NIRSPEC-5-AO NIRSPEC-5-AO NIRSPEC-5-AO

6089

Arquivos - texto - CSVEx (IDL) Criaccedilatildeo de um CSV com uma tabela de valores

Criaccedilatildeo de 3 arrays 1D (12 elementos) um para cada coluna

IDLgt x=dindgen(3)IDLgt y=dindgen(4)IDLgt xx=reform(rebin(x34)12)IDLgt yy=reform(rebin(reform(y14)34)12)IDLgt f=xx+yy10IDLgt helpxxyyfXX DOUBLE = Array[12]YY DOUBLE = Array[12]F DOUBLE = Array[12]

Escrita do arquivo

IDLgt write_csvexamplecsvxxyyfheader=[XYX+10Y]

ResultadoXYX+10Y000000000000000000000000100000000000000010000000200000000000000020000000000000001000000010000000100000001000000011000000()

6189

Arquivos - texto - ldquoColunas regularesrdquoFixed column width

Natildeo eacute exatamente um padratildeo Eacute uma praacutetica comum

Armazena uma tabela (array 2D) de forma regular simples de ser interpretada e lida

Costumam ter linha(s) de cabeccedilalho descrevendo o conteuacutedo do arquivo em geral com uma linha para os nomes das colunas

As demais linhas conteacutem os dados sempre ocupando a mesma largura por coluna e escritos no mesmo formato em cada coluna

Costumam ser simples de ler inclusive interativamente (exs Excel Calc Origin read_ascii)

Ex (IDL) Uma simples tabela soacute de nuacutemeros

wavl CH4=33 wavl CH4=25 wavl CH4=10 wavl CH4=08 wavl CH4=05 wavl CH4=026 wavl CH4=02 477330000 0090130 477330000 0091110 477330000 0089250 477330000 0087000 477330000 0087140 477330000 0090080 477330000 0088110 480040000 0090930 480040000 0091930 480040000 0090160 480040000 0087930 480040000 0088110 480040000 0090950 480040000 0089090 482750000 0091710 482750000 0092730 482750000 0091060 482750000 0088850 482750000 0089080 482750000 0091810 482750000 0090060 485450000 0092530 485450000 0093570 485450000 0092000 485450000 0089810 485450000 0090100 485450000 0092730 485450000 0091090

IDLgt a=read_ascii(specs_27s_ntxtdata_start=1header=header)IDLgt printheader wavl CH4=33 wavl CH4=25 wavl CH4=10 wavl CH4=08 wavl CH4=05 wavl CH4=026 wavl CH4=02 IDLgt helpa Structure ltd423c9a8gt 1 tags length=224 data length=224 refs=1 FIELD01 FLOAT Array[14 4]

6289

Arquivos - texto - ldquoColunas regularesrdquoJaacute um arquivo um pouco mais difiacutecil de ler

NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS dec18s0001 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0002 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0003 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 FLAT 5408757812500 460000 5 dec18s0004 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 DARK 5408757812500 460000 5

Por ter colunas de tipos diferentes (strings inteiros reais) natildeo eacute possiacutevel o ler em um simples array Mas eacute faacutecil o colocar em uma estrutura de arrays onde cada campo eacute uma coluna

Especificando interativamente como interpretar as linhasIDLgt templ=ascii_template(filesearch_scamtxt)

Nome do campo (default mostrado)

Tipo do campo (identificado automaticamente)

Posiccedilatildeo (caracter) do comeccedilo (identificada automaticamente)

Linha de exemplo para verificar as colunas

6389

Arquivos - texto - ldquoColunas regularesrdquoDepois de feito o template o arquivo pode ser lido com apenas

IDLgt a=read_ascii(filesearch_scamtxttemplate=templ)IDLgt helpa Structure ltd4ec4608gt 11 tags length=416 data length=416 refs=1 FIELD01 STRING Array[4] FIELD02 LONG Array[4] FIELD03 STRING Array[4] FIELD04 FLOAT Array[4] FIELD05 FLOAT Array[4] FIELD06 STRING Array[4] FIELD07 STRING Array[4] FIELD08 STRING Array[4] FIELD09 FLOAT Array[4] FIELD10 FLOAT Array[4] FIELD11 LONG Array[4]IDLgt printafield01dec18s0001 dec18s0002 dec18s0003 dec18s0004IDLgt printafield04 626300 626300 626300 626300

O template (uma estrutura contendo dados sobre como ler o arquivo) pode ser usado para outros arquivos no mesmo formato No lugar de ter sido criado interativamente poderia ter sido lido de algum arquivo Poderia ter especificado nomes para os campos que seriam mais amigaacuteveis que coias como FIELD11

6489

Arquivos - texto - XML

Extensible Markup Language

Admite grande flexibilidade e por isso pode ter alta complexidade

Valores satildeo colocados dentro de uma estrutura em hieraacuterquica (em uma aacutervore) com os noacutes identificados pelos seus nomes (chaves)

Largamente usado em muitas aacutereas para armazenar conjuntos arbitraacuterios de quaisquer estruturas de dados

A maioria das aplicaccedilotildees usa um formato que eacute um subconjunto do XML especificado por um Schema comumente em um arquivo XML DTD (Document Type Definition)

6589

Arquivos - texto ndash XML ndash exemplos de usos

Armazenamento de dados de aplicaccedilotildees web (comum para exportar importar dados MediaWiki DokuWiki WordPress ADS Lattes etc)

Documentos Office (docx pptx xlsx) OpenOffice (odt opd ods)

Como versotildees de outros formatos FITSML XDF

ldquoScientific Dataset XML NASAs Astronomical Data Center (ADC) sponsors a number of research projects that

use XML for scientific data representation The XML activities at the ADC are sponsored and supported by the NASA Office of Space Science Applied Information Systems Research Program (AISRP)rdquo - httpxmlcoverpagesorgnasa-adchtml

Astronomical Instrument Markup Language (AIML)

SVG ndash Scalable Vector Graphics

Muitas de outras aplicaccedilotildees listadas em httpxmlcoverpagesorgxmlhtmlapplications

6689

Arquivos - texto ndash XML - exemploltxml version=10 gtltDOCTYPE Xdmf SYSTEM Xdmfdtd []gtltXdmf xmlnsxi=httpwwww3org2001XInclude Version=20gt ltDomaingt lt-- Example of Basic Topologies --gt ltInformation Name=Descriptiongt Example of a Polyvertex Topology ltInformationgt ltGrid Name=Polyvertex GridType=Uniformgt ltTopology TopologyType=Polyvertex Dimensions=3 NodesPerElement=3gt ltDataItem Format=XML Dimensions=3 3 NumberType=Floatgt 0 1 2 4 5 6 8 9 10 ltDataItemgt ltTopologygt ltGeometry Type=XYZgt ltDataItem Format=XML Dimensions=4 4 3gt 00 00 00 10 00 00()Que mostra que a interpretaccedilatildeo (parsing) de XML eacute em geral complexa

6789

Arquivos - texto - XML

Haacute muitas bibliotecas de alto niacutevel para fazer o processamento (parsing) e entregar os dados em uma estrutura conveniente

A complexidade em processar XML estaacute em decidir o que fazer com os dados jaacute que os arquivos podem ser muito complexos

As APIs (Application Programming Interfaces) mais comuns para processar XML que satildeo implementadas em muitas linguagens

DOM (Document Object Model) ndash manteacutem todo o conteuacutedo do em uma estrutura de dados (em geral uma aacutervore) em uma variaacutevel (em geral um objeto) Esta pode ser consultada para obter os valores de interesse para os alterar e usada para escrever um arquivo

SAX (Simple API for XML) ndash Interpretador (parser) por objetos O usuaacuterio escreve uma classe herdando da classe SAX provendo os meacutetodos que vatildeo processar os campos agrave medida em que estes satildeo lidos

6889

Arquivos - binaacuterios - FITSFlexible Image Transport System

O formato mais comum para observaccedilotildees astronocircmicas Tambeacutem usado para armazenar quaisquer dados mesmo natildeo relacionados a observaccedilotildees (especialmente tabelas como eacute praacutetica do STSCI)

Conteacutem um (ou mais) cabeccedilalho(s) de texto com metadados (informaccedilotildees sobre os dados como caracteriacutesticas (necessaacuterias para os ler) origem condiccedilotildees em que foram obtidos processamento realizado etc)

SIMPLE = T image conforms to FITS standard BITPIX = 32 bits per data value NAXIS = 2 number of axes NAXIS1 = 1024 NAXIS2 = 1024 BSCALE = 100000 Scaling factor BZERO = 000000 Scaling zero-point TELESCOP= Keck II Telescope SLITNAME= 0041x226 Slit Name SLITPA = 351979 Slit position angle SLITX = 131500 X pixel of the center of the slit LST = 12010446 local apparent sidereal time (()

Depois do cabeccedilalho haacute uma (ou mais) seccedilatildeo(otildees) de dados binaacuterios Costuma(m) ser array(s) 1D (espectros) 2D (imagens) ou 3D (ldquocubos de dadosrdquo)

De inteiros ou reais inteiros satildeo comuns em contagens de instrumentos reais para valores derivados (fluxos intensidades etc)

6989

Arquivos - binaacuterios - FITSNormalmente FITS satildeo lidos escritos por bibliotecas prontas de (relativamente) alto niacutevel usuaacuterio natildeo tem que saber como os dados satildeo armazenados no arquivo nem como os ler escrever Ex (IDL com a biblioteca idlastro)

IDLgt fits_info2dspectrumfits2dspectrumfits has 3 extensionsPrimary header 288 recordsNo dataExtension 1 -- SCI Header 144 records IMAGE ( 1201 1201 )Extension 2 -- ERR Header 72 records IMAGE ( 1201 1201 )Extension 3 -- DQ Header 72 records IMAGE ( 1201 1201 )

IDLgt mydata=readfits(2dspectrumfitsexten_no=1myheader) READFITS Reading FITS extension of type IMAGE READFITS Now reading 1201 by 1201 array

IDLgt extastmyheadermyastIDLgt sz=size(mydatadimensions)IDLgt xy2ad[1sz[0]][1sz[1]]myastcorners_acorners_dIDLgt printcorners_aCorners of the data array from file 2dspectrumfits are at 14487480 33063480

IDLgt printcorners_d -00041264444 00041402222

Obteacutem os dados de coordenadas (WCS) do header

Coloca os dados no array (2D de floats) mydata e o header no array (1D de strings) myheader

Calcula as coordenadas das quinas da imagem atraveacutes do WCS

Provecirc informaccedilotildees sobre o arquivo

7089

Arquivos - binaacuterios - ISIS Cube

Formatos como FITS se adequam muito a ter uma interface de mais alto niacutevel por objetos

Tambeacutem para dados em tabelas FITS muito mais trabalhosos de ler em baixo niacutevel que se adequam muito mais a mapas ou estruturas

Exemplo (de um formato semelhante a FITS ISIS cube)

O objeto ao ser criado lecirc todo o arquivo

cube=pp_editablecube(CM_1553510065_1_ircub)

Meacutetodos fornecem os dados desejados para obter quando necessaacuterio os dados de interesse

Find out the names of the backplanesprintcubegetproperty(backnames)Get the start time of the cubeprintcubegetfromheader(START_TIME)2007-084T100057286Z

Valores no cabeccedilalho podem ser convenientemente fornecidos como um mapa

header=cubeheader_as_hash()printheader[START_TIME]2007-084T100057286Z

7189

Arquivos - binaacuterios ndash ISIS Cube

Os dados satildeo fornecidos como arraysMake a contour plot of the latitudesc=contour(cubegetsuffixbyname(LATITUDE))Get the band with wavelength nearest to 21 (in the units used in the cube)selband=cubegetbandbywavelength(21wavelengths=selwavs)

Interfaces por overload tornam o acesso ainda mais conveniente

selband=cube[21]

selwavs=cube[21]

Retorna um array com a banda de comprimento de onda mais proacuteximo de 21 (microm)

Retorna o comprimento de onda mais proacuteximo de 21 (microm) da banda retornada acima

7289

Arquivos - binaacuterios ndash ISIS Cube Alteraccedilotildees feitas ao conteuacutedo satildeo automaticamente refletidas em todos os

lugares (cabeccedilalho em particular) afetados mantendo o objeto vaacutelido que pode depois ser gravado em um novo arquivo

IDLgt printcubelinescubesamplescubebands 64 64 256

IDLgt helpcubecoreltExpressiongt FLOAT = Array[64 64 256]

IDLgt cubecore=dblarr(100100256)

A linha acima natildeo eacute uma atribuiccedilatildeo eacute uma invocaccedilatildeo de meacutetodo Eacute equivalente acubesetpropertycore=dblarr(100100256)

Eacute o trabalho da funccedilatildeo setproperty decidir se a propriedade passada (core) faz sentido e se fizer fazer todo o trabalho necessaacuterio a esta mudanccedila Para o usuaacuterio eacute tudo automaacutetico e os dados da classe satildeo vaacutelidos o tempo todo

IDLgt helpcubecoreltExpressiongt DOUBLE = Array[100 100 256]

IDLgt printcubelinescubesamplescubebands 100 100 256

IDLgt cubesaveCM_1553510065_1_ir_editedcub

7389

Arquivos - binaacuterios ndash NetCDF e HDF5

Network Common Data Form e Hierarchical Data Format

Os dois uacutenicos formatos bem estabelecidos para dados cientiacuteficos geneacutericos

Armazenam dados como vaacuterias variaacuteveis e seus metadados Para cada variaacutevel haacute (ou pode haver) os metadados

Nome Dimensotildees (do array) Unidades Comentaacuterios

Ambos permitem arrays multidimensionais

Apenas HDF5 permite estruturas (daiacute vem a hierarquia)

Autodocumentados qualquer software que saiba ler um destes formatos lecirc qualquer arquivo sem precisar de conhecimento preacutevio sobre como o arquivo foi gerado

Muito bem suportados em bibliotecas padratildeo e natildeo padratildeo em softwares interativos e visualizadores (inclusive plugins para navegadores)

httpwwwunidataucaredusoftwarenetcdf httpenwikipediaorgwikiHdf5

NetCDF eacute mais simples de usar por natildeo ter hierarquia dando menos trabalho para ler e escrever dados Se hierarquia natildeo eacute necessaacuteria eacute mais conveniente de usar que HDF5

7489

Arquivos - binaacuterios - NetCDF e HDF5Haacute tambeacutem o formato CDL uma versatildeo ASCII do NetCDF A biblioteca padratildeo do NetCDF inclui conversores entre estes formatos

$ ncdump -h refspec_g01_0ncnetcdf refspec_g01_0 dimensions nlay = 51 nwn = 400 nleg = 33 numu = 2 nlev = 52 nphi = 3 ngas = 2 nwnc = 1 scal = 1 v3 = 3 dnl = 1 nk = 1 tdisr = UNLIMITED (0 currently) na = 16

variables float alb(nwn) float z(nlay) float t(nlay) float p(nlay) float wl(nwn) float iof(nwn) float mtau(nwn) float htau(nwn) float hctaus(nwn) float gtau(nwn) float outcos(scal) float phi(nleg) float phic(scal) float umu(numu) float flux(v3 nwn nlev) float mix(nlay ngas) float c(nlay) float psat(nlay) float ga(nwnc) float wlc(nwnc) float inc(scal) int dm(scal) int ord(scal) float fbeam(scal) float wn(nwn) float tautot(nwn nlay) float htaus(nwn nlay) float htaux(nwn nlay) float taug(nwn nlay) float phase(nwn nlay nleg) float ssa(nwn nlay) float uu(nwn nphi nlev numu) float u0u(nwn nlev numu) float tray(nwn nlay) float gtauo(tdisr nwn nlay)

Haacute 14 variaacuteveis usadas como dimensotildees para as 35 variaacuteveis que satildeo arrays

Ex alb(nwn) indica que alb eacute um array 1D de nwn elementos

nwn estaacute armazenado como uma das dimensotildees e eacute 400 portanto alb tem 400 elementos

Parte do conteuacutedo de um arquivo NetCDF em formato CDL (gerado pelo programa ncdump)

7589

Arquivos - binaacuterios - NetCDF e HDF5Conteuacutedo daquele arquivo visualizado com o ncview (acompanha a biblioteca NetCDF padratildeo)

7689

Arquivos - binaacuterios - NetCDF e HDF5O conteuacutedo de todo o arquivo pode ser lido facilmente com as bibliotecas disponiacuteveis e armazenado em contecirciners convenientes Usando um objeto que gera um resultado um pouco mais conveniente

IDLgt h=pp_readncdf(refspec_g01_0nchash)IDLgt printhvar_dims ltObjHeapVar229(HASH)gtvars ltObjHeapVar152(HASH)gtdims ltObjHeapVar118(HASH)gt

IDLgt printh[vars]T 173203 175459 175848 176001 175975 Z 431869 418858 406067 393403 380464 FLUX 300660 145536 0705180 0341669 0165532 PHASE 100000 0779034 0660858 0542052 0449983 TAUTOT0694377 0693420 0693474 0693540 0693636()

IDLgt help(h[vars])[TAUTOT]ltExpressiongt FLOAT = Array[51 400]

IDLgt print(h[var_dims])[TAUTOT]NLAY NWN

IDLgt print(h[dims])[(h[var_dims])[TAUTOT]]NLAY 51NWN 400

7789

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5)

Visualizaccedilatildeo da variaacutevel selecionada

Metadados e alguns valores da variaacutevel selecionada

Variaacutevel a ser criada com o conteuacutedo desta variaacutevel do arquivo

Hierarquia das variaacuteveis do arquivo

7889

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5) Imported variable az

IDLgt helpaz Structure ltd5723f38gt 13 tags length=448 data length=444 refs=1 _NAME STRING az _ICONTYPE STRING binary _TYPE STRING DATASET _FILE STRING INTENSI_test_409OUTh5 _PATH STRING _DATA DOUBLE Array[38] _NDIMENSIONS LONG 1 _DIMENSIONS ULONG64 Array[1] _NELEMENTS ULONG64 38 _DATATYPE STRING H5T_FLOAT _STORAGESIZE ULONG 8 _PRECISION LONG 64 _SIGN STRING

IDLgt printaz_data 00000000 10000000 20000000 30000000 40000000 50000000 60000000 80000000 ()

7989

Arquivos - binaacuterios - imagens

JPEG JPEG200 TIFF GeoTIFF etc

Os formatos comuns de imagens satildeo bem suportados em muacuteltiplas plataformas para uso dentro de programas e interativamente

Alguns formatos tecircm opccedilatildeo de compressatildeo com perda eou sem perda

Armazenam imagens como arrays 2D ou 3D (3D frequumlentemente limitado a 3 ou 4 em uma das dimensotildees uma imagem em 3 ou 4 bandas) de inteiros ou (em alguns formatos) reais

Alguns formatos permitem armazenar metadados para caracterizar as imagens armazenadas

JPEG2000 e GeoTIFF (um subconjunto de TIFF) comuns em astronomia e aacutereas proacuteximas

8089

Arquivos - binaacuterios ndash imagens ndash exemplo (IDL)IDLgt printquery_tiff(issmap_2009tiffinfogeotiff=geo) 1

IDLgt helpinfo Structure ltd4eca4b8gt 18 tags length=144 data length=132 refs=1 CHANNELS LONG 4 DIMENSIONS LONG Array[2] IMAGE_INDEX LONG 0 NUM_IMAGES LONG 1 PIXEL_TYPE INT 1 TYPE STRING TIFF BITS_PER_SAMPLE LONG 8 POSITION FLOAT Array[2] RESOLUTION FLOAT Array[2] UNITS LONG 2 TILE_SIZE LONG Array[2] DESCRIPTION STRING ISS (2009) DATE_TIME STRING 20100218 012436()

IDLgt helpgeo Structure ltd4efa1b8gt 10 tags length=264 data length=262 refs=1 MODELPIXELSCALETAG DOUBLE Array[3] MODELTIEPOINTTAG DOUBLE Array[6 4] GEOGRAPHICTYPEGEOKEY INT 4035 GEOGSEMIMAJORAXISGEOKEY DOUBLE 25750000 GEOGSEMIMINORAXISGEOKEY DOUBLE 25750000()

IDLgt myimage=read_tiff(issmap_2009tiff) Lecirc a imagem para o array myimage

Obteacutem informaccedilotildees sobre o arquivo

8189

Arquivos - binaacuterios ndash formatos nativosLinguagens como IDL R Python Java tecircm seu formato nativo binaacuterio acessado em alto niacutevel Basta mandar salvar ler variaacuteveis no do arquivo a biblioteca padratildeo automagicamente faz todo o trabalho de decidir como gravar ler os dados

Conveniente de usar na proacutepria linguagem Mas raramente existem bibliotecas para ler gravar o formato nativo de uma linguagem a partir de outra Ex (IDL)

IDLgt savefile=2dspectrumsavmydatamyheadercorners_dcorners_averbosecompress SAVE Portable (XDR) compressed SAVERESTORE file SAVE Saved variable MYDATA SAVE Saved variable MYHEADER()

Pode ser lido com apenas (haacute formas mais elaboradas)

IDLgt restore2dspectrumsavverbose RESTORE Portable (XDR) compressed SAVERESTORE file RESTORE Save file written by ltunknowngtltunknowngt Thu Jan 27 191422 2011 RESTORE IDL version 801 (linux x86_64) RESTORE Restored variable MYDATA RESTORE Restored variable MYHEADER()

IDLgt helpmydatamyheadercorners_dcorners_aMYDATA FLOAT = Array[1201 1201]MYHEADER STRING = Array[144]()

8289

Arquivos - processamento em baixo niacutevel

Nem sempre um formato padratildeo eacute a melhor escolha para o problema

Nem sempre haacute escolha (pode-se ter que trabalhar com arquivos que jaacute foram escritos em algum formato proprietaacuterio)

Agraves vezes o formato eacute padratildeo mas natildeo haacute bom suporte a ele disponiacutevel

Em todos estes casos eacute necessaacuterio escrever rotinas em baixo niacutevel que vatildeo ler processar diretamente o conteuacutedo do arquivo

Preferencialmente criando interfaces de alto niacutevel para o programa que vai as usar

8389

Arquivos - processamento em baixo niacutevel - texto

Tomando o exemplo anterior onde as colunas eram de diferentes tipos

NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS dec18s0001 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0002 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0003 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 FLAT 5408757812500 460000 5 dec18s0004 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 DARK 5408757812500 460000 5

A forma mais simples de o ler diretamente eacute definir uma estrutura para receber cada linha e um array destas estruturas para receber todo o arquivo Ex (IDL)

IDLgt record=namecalmpos0filnameechlpos0d0disppos0d0targnameposdirclassmjd_obsitime0d0coadds0IDLgt nlines=file_lines(filesearch_scamtxt)IDLgt mydata=replicate(recordnlines-1)IDLgt header=

Depois de definidas as variaacuteveis que vatildeo receber os dados o arquivo pode ser lido

IDLgt openrunitfilesearch_scamtxtget_lunIDLgt readfunitheaderIDLgt readfunitmydataformat=(A14I8A15F104F104A18A19A15F158F105I15)IDLgt free_lununit

A gravaccedilatildeo de um arquivo texto poderia ser feita de forma semelhante apenas trocando openr por openw (abrir o arquivo para gravaccedilatildeo natildeo leitura) e readf por printf

O arquivo eacute aberto em uma unidade (unit) usada para especificar de onde eacute feita a leitura

Ao final o arquivo eacute fechado

8489

Arquivos - processamento em baixo niacutevel - texto

O que resulta em

IDLgt printheader NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS

IDLgt helpmydataMYDATA STRUCT = -gt ltAnonymousgt Array[4]

IDLgt helpmydata[0] Structure ltd5e38f68gt 11 tags length=136 data length=124 refs=3 NAME STRING dec18s0001 CALMPOS INT 0 FILNAME STRING NIRSPEC-5-AO ECHLPOS DOUBLE 62630000 DISPPOS DOUBLE 36450000 TARGNAME STRING HD85258 POSDIR STRING NIRSPEC-5-AOp1 CLASS STRING STAR MJD_OBS STRING 54087574 ITIME DOUBLE 10000000 COADDS INT 1

Este caso eacute mais complicado que os mais comuns por haver colunas de strings

Se todas fossem de nuacutemeros natildeo teria sido necessaacuterio especificar o formato explicitamente As colunas teriam sido adivinhadas pela biblioteca que lecirc o arquivo Poderia ter sido lido escrito soacute com um array de nuacutemeros sem estruturas

8589

Arquivos - processamento em baixo niacutevel - binaacuterio

Formatos binaacuterios podem ser definidos de qualquer forma O arquivo eacute apenas um conjunto de bytes Cabe ao software saber como os interpretar

Uma escolha comum para que sejam autodocumentados eacute incluir um cabeccedilalho de texto informando as caracteriacutesticas dos dados necessaacuterias para os ler

Ex (IDL) criar um arquivo que armazene um array de doubles com um cabeccedilalho informando as dimensotildees para que o programa que o lecirc saiba como ler os dados

Inventa dados e abre o arquivo

IDLgt data_to_write=dindgen(34)IDLgt openwunitbinary_exampledatget_lun

Escreve as dimensotildees como texto

IDLgt printfunitdimensions of the double array stored belowIDLgt printfunitsize(data_to_writedimensions)

Escreve os dados binaacuterios

IDLgt writeuunitdata_to_write

Fecha o arquivo

IDLgt free_lununit

Escreve em binaacuterio (write unformatted)

8689

Arquivos - processamento em baixo niacutevel - binaacuterio

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

dimensions of the double array stored below 3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

8789

Arquivos - processamento em baixo niacutevel - binaacuterioA leitura deste arquivo eacute igualmente simples

IDLgt header=IDLgt dims=[00]IDLgt openrunitbinary_exampledatget_lun

Lecirc as dimensotildees (armazenadas como texto)

IDLgt readfunitheaderIDLgt readfunitdims

Lecirc a parte binaacuteria depois de saber as dimensotildees

IDLgt data_read=dblarr(dims)IDLgt readuunitdata_read

Fecha o arquivo

IDLgt free_lununit

Verifica que os dados foram gravados e lidos corretamente

IDLgt printarray_equal(data_to_writedata_read) 1

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Lecirc dados binaacuterios (read unformatted)

8889

Sumaacuterio

5 ndash Slides em httpwwwppenteadonetpeapea04_strings_iopdf Strings Expressotildees regulares Arquivos

httpwwwppenteadonetpea

8989

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89

Strings - conversatildeo de strings para outros tipos - impliacutecitas

Exs (IDL)

IDLgt helpfix([17 17 171 -17 9 8])ltExpressiongt INT = Array[5]

IDLgt printfix([17 17 171 -17 9 8]) 17 17 17 -17 9

IDLgt printdouble([17 17 171 -17 9 8]) 17000000 17000000 17100000 -17000000 90000000

IDLgt readfunitabcd

IDLgt a=0d0IDLgt b=00IDLgt c=0IDLgt reads171d0 189d0 -9abcIDLgt helpabcA DOUBLE = 17100000B FLOAT = 189000C INT = -9

Converte o conteuacutedo do string para os tipos das variaacuteveis abcd (explicado adiante)

3189

Strings - conversatildeo de strings para outros tipos

Quando o default natildeo eacute suficiente (ou quando escrevendo o conversor em uma classe) costuma ser possiacutevel o fazer com formatos semelhantes aos formatos para gerar strings Exs (IDL)

IDLgt a=0d0IDLgt b=00IDLgt c=0IDLgt reads171d0 something 189d0-9abc READS Input conversion error Unit 0 File ltstdingt Error occurred at $MAIN$ Execution halted at $MAIN$

Natildeo funcionou porque sozinho ele natildeo conseguiu saber o que fazer com o ldquosomethingrdquo Usando um formato especiacutefico

IDLgt reads171d0 something 189d0-9 abcformat=(D6111XD611XI)

IDLgt helpabcA DOUBLE = 17100000B FLOAT = 189000C INT = -9

Exemplos mais complicados adiante (arquivos texto)

Variaacuteveis tecircm que ser definidas para informar para que tipo seraacute feita a conversatildeo default

3289

Strings - processamento natildeo baacutesicoOperaccedilotildees importantes e muito necessaacuterias mas que natildeo satildeo suportadas em todas as linguagens bibliotecas padratildeo

Testes (ex IDL)

IDLgt str=[afitsaFITSafitsaabfitsabcfits]

IDLgt printstrmatch(strfits) 1 0 0 1 1

IDLgt printstrmatch(strfitsfold_case) 1 1 0 1 1

IDLgt printstrmatch(strfitsfold_case) 1 1 1 1 1

IDLgt printstrmatch(strfits) 1 0 0 0 0

IDLgt printstrmatch(strfits) 0 0 0 1 0

3389

Strings - processamento natildeo baacutesico

Operaccedilotildees importantes e muito necessaacuterias mas que natildeo satildeo suportadas em todas as linguagens bibliotecas padratildeo

Separaccedilatildeo de partes (Ex IDL)

IDLgt printstrsplit(2011- 131 -extract)format=(A)2011131

Processamento de nomes de arquivos diretoacuterios (Ex IDL)

IDLgt printfile_dirname(some_directoryanother_directorysome_filetxt)some_directoryanother_directory

IDLgt printfile_basename(some_directoryanother_directorysome_filetxt)some_filetxt

IDLgt printfile_basename(another_directorysome_filetxttxt)+_alteredtxtsome_file_alteredtxt

3489

Strings - processamento natildeo baacutesico

Codificaccedilotildees (Ex Python 3)

gtgtgt s=infinite money infinNeuro sign

gtgtgt print(s)infinite money infineuro

gtgtgt print(ascii(s))infinite money u221eu20ac

gtgtgt print(sencode(utf-8))binfinite money xe2x88x9exe2x82xac

3589

Strings - processamento natildeo baacutesico

Perl eacute a linguagem mais avanccedilada para processamento de strings tem suporte nativo a muitas outras operaccedilotildees a semacircntica da linguagem eacute voltada principalmente para processar strings expressotildees regulares (de vaacuterios tipos) natildeo satildeo strings fazem parte da semacircntica

Ex (sem o objetivo que seja compreensiacutevel apenas para indicar o estilo)

Ler um arquivo contendo campos com nomes separados de valores por ()

temperature 10008name some modelx_dimension 100y_dimension 100z_dimension 50()

Armazenado-o em um mapa O que pode ser feito com apenas

While (ltgt) Loop over input linesPut pre-colon text into $1 post-colon into $2 if (m (S+) (+) ) Use $1 as key $2 as value $file_data$1 = $2

3689

Expressotildees regulares - definiccedilatildeo

Expressotildees regulares (regular expressions regex) satildeo a mais poderosa ferramenta para fazer buscas e separar substrings

Regex satildeo uma linguagem com o uacutenico objetivo de especificar propriedades de strings

Implementadas em graus diferentes em todas as linguagens modernas e modernizadas facilita encontrar uma expressatildeo jaacute pronta pois satildeo quase iguais em qualquer linguagem

Estatildeo na biblioteca padratildeo em IDL Python R Perl

Em C++ e Java em bibliotecas comuns (Boost Jregex)

Para que servem

Uma expressatildeo regular especifica propriedades de strings

O interpretador de expressotildees regulares (regular expression engine) recebe a expressatildeo e o string a analisar e determina se o string corresponde (matches) agrave expressatildeo regular

Em alguns casos o interpretador pode tambeacutem informar que parte(s) do string corresponde(m) a que parte(s) da expressatildeo regular e realizar processamentos com estas partes

3789

Expressotildees regulares ndash exemplos de usos Separar partes de strings

Encontrar linhas em arquivos que tenham nomes valores e comentaacuterios e separar estes pedaccedilos

Escalar com comentaacuterio

SLITPA = 351979 Slit position angle

Array 1D sem comentaacuterio (se extendendo por vaacuterias linhas)

BAND_BIN_CENTER = (03505400358950036629003732200379490 0387900104598)

Escalares em diferentes formatos

Total Mechanical Luminosity 15310E+03resources_usedwalltime=005603

Pedaccedilos de nomes

6063 17836E-20 2456 T FeIX((3Pe)3d(2PE)4p_1Po-3s2_3p6_1Se)

Datas separando ano mecircs dia hora (em vaacuterios formatos diferentes)

DATE-OBS= 2006-12-18 universal date of observationDATE_TIME = 2010-07-19T161032START_TIME = 2006-182T225102850Z

3889

Expressotildees regulares ndash exemplos de usos

Separar partes de strings Separar partes de nomes de arquivos (por significarem algo como identificar o

conteuacutedo)

specdec18s0041fitsscamdec18i0054fits15_7_mts_hmpixselh_mr15sav15_7_mts_hwpixselh_mr15sav16_3_mts_hwpixselb_mr16savreadmodel5l_-1_000010000_10000_r05_030_08196_0100000_005000000_1000eps

Determinar se um string eacute um nuacutemero (inteiro real fixo flutuante)

Encontrar identificadores Exs nomes de cataacutelogos endereccedilos HTTPFTP endereccedilos de email

Separar campos em arquivos sendo lidos onde as linhas natildeo tecircm a mesma formataccedilatildeo algumas linhas com colunas separadas por espaccedilos outras por tabs outras por

siacutembolos ignorando linhas de comentaacuterios e linhas vazias

3989

Expressotildees regulares - usoEx (IDL) encontrar nomes de arquivos com algumas propriedades

IDLgt printfilesformat=(A)CM_1477475933_1_viscubCM_1477476864_1_ircubCM_1477476864_1_irgcubCM_1477476864_1_viscubCM_1477477826_1_ircubCM_1477477826_1_irgcubCM_1477477826_1_viscubmosaic2cub

IDLgt printstregex(files+irgcubboolean) 0 0 1 0 0 1 0 0

A expressatildeo regular eacute +irgcub Especifica uma ou mais ocorrecircncias seguidas (+) de qualquer caractere () seguido de uma ocorrecircncia de irgcub (o ponto vem precedido do caractere de

escape () para ser entendido literalmente como um ponto e natildeo como o seu significado especial (qualquer caractere)

Esta aplicaccedilatildeo do interpretador (stregex) retorna um valor Booleano (verdadeirofalso) para cada elemento do string passado (files) que informa se aquele elemento correspondia agravequela expressatildeo regular

Este eacute um exemplo artificial Seria mais faacutecil ter usado strmatch(filesirgcub)

4089

Expressotildees regulares - uso

Em casos como este tipicamente o resultado de stregex seria usado como filtro para selecionar apenas os elementos do array de strings que satisfazem agravequela expressatildeo regular

IDLgt w=where(stregex(files+irgcubboolean)null)IDLgt printfiles[w]format=(A)CM_1477476864_1_irgcubCM_1477477826_1_irgcub

Ex (IDL) Determinar que strings conteacutem uma data no formato yyyy-mm-dd

IDLgt strs=[201002012010-02-012010-2-1aaaa-mm-ddT2010-02-01J]IDLgt printstregex(strs[0-9]4-[0-9]2-[0-9]2boolean) 0 1 0 0 1

Esta expressatildeo regular especifica quatro repeticcedilotildees (4) de diacutegitos (caracteres na faixa [0-9]) seguido de um (-) seguido de duas repeticcedilotildees (2) de dois diacutegitos ([0-9]) seguido de um (-) seguido de duas repeticcedilotildees (2) de dois diacutegitos ([0-9])

Uma expressatildeo regular apenas um pouco mais elaborada poderia corresponder aos 3 formatos de data no array acima E poderia se impedir que a uacuteltima (com outros caracteres antes e depois da data) seja aceita

4189

Expressotildees regulares - regras - caracteres ldquonormaisrdquo

Uma expressatildeo regular usa caracteres ldquonormaisrdquo e especiais para especificar o que se vai procurar na ordem em que aparecem na expressatildeo

Se um caractere eacute normal (natildeo eacute um dos especiais mostrados adiante) ele especifica uma ocorrecircncia daquele caractere

Ex J eacute uma expressatildeo regular que corresponde a qualquer string onde ocorra J Jaacute JA soacute corresponde a strings que tenham JA dentro

Exs (IDL)

IDLgt strs=[JJJJJJaJAjaJa]

IDLgt printstregex(strsJboolean) 1 1 1 0 1

IDLgt printstregex(strsJAboolean) 0 0 1 0 0

4289

Expressotildees regulares - regras - caracteres especiaisCaracteres especiais tecircm outros significados Para significar literalmente aquele caractere deve ser escapado (escaped) com um

Siacutembolo significado exemplo Corresponde(m) Escape o caractere seguinte deve ser interpretado

literalmente natildeo como especial aa

Qualquer caractere ab ajb aab abb jafbc

+ Uma ou mais repeticcedilotildees do que vem agrave esquerda a+b ab aab bab baabh

() Subexpressatildeo para agrupar termos afetados por um caractere especial (como parecircnteses em notaccedilatildeo matemaacutetica)

(ab)+c abc ababc dabababcg

Zero ou mais repeticcedilotildees dos termos agrave esquerda ab abbaab caaabg

Zero ou uma repeticcedilatildeo dos termos agrave esquerda ab b ab cabd cbd

| Alternaccedilatildeo qualquer um dos dois agrave esquerda a|bc ac bc jacd jbcd

n Exatamente n repeticcedilotildees do termo agrave esquerda a2b aab daaabg

n1n2 De n1 a n2 repeticcedilotildees do termo agrave esquerda a12b ab aab aaab gaaabbd

^ Acircncora (no comeccedilo) nada agrave esquerda ^ab ab abb

$ Acircncora (no fim) nada agrave direita ab$ abaab

[] Conjunto de valores (explicado adiante)

4389

Expressotildees regulares - regras - conjuntos de valores

[] denota um conjunto de valores que pode conter

Uma lista de coisas que devem corresponder Ex [abc] signfica qualquer caractere no conjunto abc Correspondem a esta

expressatildeo abcabha

Uma lista de coisas que natildeo podem corresponder [^abc] significa qualquer coisa que natildeo seja a b ou c Correspondem a esta

expressatildeo d jgs gg

Faixas de valores [0-9] signfica qualquer diacutegito [0-9a-zA-Z] significa qualquer diacutegito ou letra

Classes de valores como algumas faixas e outros conjuntos ocorrem com muita frequumlecircncia haacute nomes

especiais para eles Estes (em IDL) vecircm entre [] ex [[digit] significa o mesmo que [0-9]

4489

Expressotildees regulares - regras - classes de valores

Classe signficado

alnum Caracteres alfanumeacutericos 0-9a-zA-Z

alpha Caracteres alfabeacuteticos a-zA-Z

cntrl Caracteres de controle ASCII (natildeo visiacuteveis coacutedigos 1 a 31 e 127)

digit Diacutegitos (decimais) 0-9

graph Caracteres visiacuteveis ASCII 33 a 126 (natildeo inclui o espaccedilo)

lower Letras minuacutesculas a-z

print Caracteres ldquoimprimiacuteveisrdquo (visiacuteveis e o espaccedilo) ASCII 32 a 126

punct Caracteres de pontuaccedilatildeo $amprsquo()+-lt=gt[]^_lsquo|~

space Os caracteres ldquoem brancordquo (blank) espaccedilo tab tab vertical CR LF (ASCII 32 e 9-13)

upper Letras maiuacutesculas A-Z

xdigit Diacutegitos hexadecimais 0-9A-Fa-f

lt Comeccedilo de palavra (palavra definida como sequumlecircncia de coisas natildeo space)

gt Fim de palavra (palavra definida como sequumlecircncia de coisas natildeo space)

Estas satildeo apenas as principais Algumas implementaccedilotildees tecircm muito mais (em particular nas linguagens que usam Unicode nativamente)

4589

Expressotildees regulares - exemplos

Determinar se strings satildeo nuacutemeros (Ex IDL)

IDLgt str=[9-18 875-812-45913E9-98d7a188d032f5]

Inteiros

IDLgt intexpr=^[-+][0-9]+$

IDLgt printstregex(strintexprboolean) 1 1 0 0 0 0 0 0 0 0

Ponto flutuante

IDLgt fpexpr=^[-+](([0-9][0-9]+)|([0-9]+[0-9]))([eEdD][-+][0-9]+)$

IDLgt printstregex(strfpexprboolean) 1 1 0 1 1 1 1 1 0 0

Sinal opcional

1 ou mais diacutegitos

Sinal opcional

0 ou mais diacutegitos opcionalmente seguidos de um ponto e 1 ou mais diacutegitos

1 ou mais diacutegitos opcionalmente seguidos de um ponto e 0 ou mais diacutegitos

ou Expoente opcional letra do expoente seguida de sinal opcional seguido de um ou mais diacutegitos

4689

Expressotildees regulares ndash extraccedilatildeo

Interpretadores de expressotildees regulares costumam oferecer mais que apenas testar se um string corresponde a uma expressatildeo

Em geral tambeacutem podem retornar que parte(s) do string corresponde(m) agrave expressatildeo

Ex (IDL) Determinar se um string conteacutem uma data incluindo os formatos

IDLgt dates=[2011-01-312011 1 3120110131something done on y2011m1d31 with something]

E extrair a data de dentro do string

IDLgt expr=[0-9]4[0-9]12[0-9]12

(4 diacutegitos)(qualquer separador)(1 a 2 diacutegitos)(qualquer separador)(1 a 2 diacutegitos)

IDLgt printstregex(datesexprextract)format=(A)2011-01-312011 1 31201101312011m1d31

Como agora separar ano mecircs e dia Com uma busca e uma extraccedilatildeo para cada Poderia ser mais eacute mais faacutecil com uma uacutenica expressatildeo regular

4789

Expressotildees regulares - aleacutem de apenas testes

Tambeacutem podem retornar que parte(s) do string correspondem agrave expressatildeo toda e agraves suas subexpressotildees (partes da expressatildeo delimitadas por parecircnteses)

Ex (IDL) Separar pedaccedilos de datas Neste caso para a expressatildeo ficar menor assumindo um formato simples (yyyy-mm-ddThhmmssfff) Mas poderia ser um formato mais livre como no exemplo anterior

IDLgt str=Stuff observed on 2011-01-31T123924983 with some instrumentIDLgt expr=([0-9]4)-([0-9]2)-([0-9]2)T([0-9]2)([0-9]2)([0-9]2[0-9]3)

(quatro diacutegitos)-(2 diacutegitos)-(2 diacutegitos)T(2 diacutegitos)(2 diacutegitos)(2 diacutegitos3 diacutegitos)

IDLgt pieces=stregex(strexprextractsubexpr)IDLgt printpiecesformat=(A)2011-01-31T12392498320110131123924983IDLgt d=julday(pieces[2]pieces[3]pieces[1]pieces[4]pieces[5]pieces[6])IDLgt printdformat=(F166) 2455593027372

Expressatildeo inteiraPrimeira subexpressatildeoSegunda subexpressatildeoTerceira subexpressatildeoQuarta subexpressatildeoQuinta subexpressatildeoSexta subexpressatildeo

4889

Expressotildees regulares - referecircncias httpxkcdcom208

Viacutedeos do Software Carpentry

httpsoftware-carpentryorg4_0regexp

4989

Arquivos

Quase todo programa precisa armazenar dados em arquivos

Podem ser pequenos arquivos de paracircmetros ou enormes arquivos de dados produzidos ou a processar

Apesar do sugerido pela praacutetica comum arquivos texto natildeo satildeo sempre a melhor escolha para armazenar dados - e haacute muitas formas diferentes de os usar

Qual eacute a melhor escolha

Assim como para linguagens ou contecirciners natildeo existe ldquoo melhor formatordquo Cada um tem suas vantagens e desvantagens

Dados diferentes (mesmo se usados pelos mesmos programas) em geral se adequam melhor a formatos diferentes

5089

Arquivos - texto X binaacuterios

Em qualquer formato arquivos satildeo armazenados como diacutegitos binaacuterios

Mas haacute duas formas principais como eles podem ser codificados

Arquivos baseados em texto (text files)

Dados satildeo transformados em caracteres usando alguma formataccedilatildeo (mesmo se impliacutecita) e escritos com alguma codificaccedilatildeo de texto (comumente mas natildeo necessariamente ASCII)

Um arquivo texto eacute um ou mais strings As mesmas conversotildees tecircm que ser feitas depara outros tipos

Arquivos ldquobinaacuteriosrdquo (binary files)

Embora todo arquivo seja binaacuterio este nome costuma ser usado soacute para aqueles em que os dados natildeo estatildeo na forma de texto

Com frequumlecircncia (nem sempre) os dados satildeo gravados de forma idecircntica a como satildeo armazenados na memoacuteria

Muitos formatos usam uma mistura de partes em texto e partes binaacuterias

Um cabeccedilalho (header) de texto que daacute informaccedilotildees (metadados) sobre os dados armazenados na parte binaacuteria que vem depois

O cabeccedilalho conteacutem em especial informaccedilotildees sobre como ler os dados binaacuterios

5189

Arquivos - texto X binaacuterios

Vantagens de arquivos texto

Legiacuteveis por pessoas (human readable)

Podem ser auto-suficientes todo o necessaacuterio para os ler e entender o que conteacutem pode ser obtido olhando o arquivo

Satildeo os menos especiacuteficos a linguagens software normalmente satildeo escritos em ASCII ou Unicode e sempre haacute algum suporte a ler escrever texto em linguagens software

Haacute alguns formatos padratildeo para texto (exs CSV XML) que satildeo suportados em muitas plataformas diferentes

5289

Arquivos - texto X binaacuterios

Vantagens de arquivos binaacuterios

Em geral natildeo haacute conversotildees entre o os dados como armazenados na memoacuteria O que torna o armazenamento mais eficiente e sem alteraccedilotildees nos valores

A maior parte dos formatos padronizados eacute binaacuteria Exs FITS cube CDF NetCDF HDF HDF5 JPEG JPEG2000 TIFF GeoTIFF MPEG etc

Eacute mais comum que haja bibliotecas prontas (ateacute de alto niacutevel) para consulta leitura e gravaccedilatildeo

Os formatos melhor desenhados satildeo autodocumentados (em texto ou binaacuterio) para os ler natildeo eacute necessaacuterio conhecimento preacutevio sobre como os dados foram armazenados

Toda linguagem plataforma costuma ter seu formato binaacuterio mais nativo que costuma ser o mais faacutecil para leitura gravaccedilatildeo Em particular nas de alto niacutevel que tecircm formatos autodocumentados (especialmente

em IDL R Python Java)

Muitos formatos tecircm opccedilatildeo de compressatildeo dos dados

5389

Arquivos - proprietaacuterios X padratildeo

Independente da escolha texto binaacuterio programas devem escolher entre usar um formato proacuteprio ou um formato padronizado

A principal vantagem de formatos proacuteprios eacute que satildeo definidos da forma mais conveniente para a aplicaccedilatildeo que os usa simplificando leitura e gravaccedilatildeo e potencialmente otimizando recursos (acesso ao disco tamanho do arquivo etc)

A principal desvantagem de formatos proacuteprios eacute ser necessaacuterio escrever todo o coacutedigo para os ler gravar

Pode dar mais trabalho que usar um formato geneacuterico que natildeo seja exatamente o que melhor se encaixa na aplicaccedilatildeo

O coacutedigo para processar o formato em geral vai ser menos completo e conveniente de usar que o de um formato bem estabelecido usado por muitos outros em muitos ambientes

Cada novo software que for usar estes arquivos vai precisar compartilhar do mesmo coacutedigo ou precisar de coacutedigo novo (em particular se em outra linguagem) para ler gravar naquele formato

Eacute necessaacuterio documentar o formato e decidir sobre como ele seraacute definido

Se outros jaacute colocaram muito trabalho desenvolvendo bons formatos padratildeo bem suportados em muitos ambientes por que ter o trabalho de reinventar (e reprogramar redocumentar e retestar) a roda

5489

Arquivos - padrotildees comuns em astronomia (exs adiante)

Texto

CSV Comma-separated values - bem suportado por muitos softwares

ldquoColunas fixasrdquo Natildeo eacute um padratildeo bem definido mas eacute praacutetica comum para tabelas (2D)

XML Extensible Markup Language - O padratildeo texto mais flexiacutevel de grande uso em programaccedilatildeo geral para armazenar qualquer coisa com frequumlecircncia de forma hieraacuterquica Bem suportado por linguagens modernas (e modernizadas) e bibliotecas das principais

linguagens gerais Alta complexidade o torna trabalhoso de usar

5589

Arquivos - padrotildees comuns em astronomia (exs adiante)Binaacuterios

FITS Flexible Image Transport System - o mais comum para observaccedilotildees astronocircmicas Conteacutem os dados (em geral arrays 1D 2D ou 3D) e documentaccedilatildeo (nos cabeccedilalhos) sobre a origem e caracteriacutesticas dos dados Tambeacutem usado para armazenar tabelas de dados quaisquer mesmo que natildeo sejam observaccedilotildees (especialmente pelo STSCI) Variam muito em qualidade de documentaccedilatildeo

NetCDF Network Common Data Form - evoluccedilatildeo do CDF autodocumentado eacute comum e bem suportado para vaacuterios arrays de dados

HDF5 Hierarchical Data Format ndash autodocumentado comum e bem suportado permitindo aleacutem de simples arrays estruturas (eacute um formato hieraacuterquico)

Formatos de imagens JPEG JPEG2000 TIFF GeoTIFF etc - voltados para arrays 2D3D de inteiros ou (em alguns casos) reais com ou sem compressatildeo JPEG2000 tem caracteriacutesticas mais avanccediladas como imagens multiresoluccedilatildeo

Formatos vetoriais PS EPS DXF SHP SVG - variados niacuteveis de suporte a armazenamento de vetores e formas em 2D ou 3D

ISIS Cube semelhante em caracteriacutesticas ao FITS mais usado em sensoriamento remoto geociecircncias e ciecircncias planetaacuterias em geral para observaccedilotildees 1D 2D ou 3D

Formatos nativos de linguagens todo o trabalho de leitura e gravaccedilatildeo eacute feito automagicamente pela biblioteca padratildeo em IDL R Python Java

5689

Arquivos texto - newlines

Apesar do que possa parecer arquivos texto natildeo tecircm intrinsecamente vaacuterias linhas Arquivos texto satildeo soacute uma sequumlecircncia 1D de caracteres em alguma codificaccedilatildeo Separaccedilatildeo em linhas (equivalente a interpretar o arquivo como 2D em linhas e colunas) eacute

especificada por convenccedilotildees Natildeo haacute apenas uma convenccedilatildeo para o fim de linhas

A mais primitiva convenccedilatildeo eacute separaccedilatildeo nenhuma estipula-se que linhas tenham um nuacutemero fixo N de caracteres e cabe ao software que lecirc o arquivo entender que uma linha nova ocorre regularmente a cada N caracteres

Eacute a forma menos portaacutevel e mais inconveniente eacute necessaacuterio o conhecimento preacutevio (ou por inspeccedilatildeo do arquivo) de quantos caracteres haacute por linha

A maior parte dos editores de texto natildeo vai saber separar linhas desta forma (por falta deste conhecimento preacutevio) Exemplo (de um FITS real)

SIMPLE = T Fits standard BITPIX = 16 Bits per pixel NAXIS = 0 Number of axes EXTEND = T File may contain extensions

O que com as linhas quebradas nos lugares certos seria

SIMPLE = T Fits standard BITPIX = 16 Bits per pixel NAXIS = 0 Number of axes EXTEND = T File may contain extensions

5789

Arquivos texto - newlines

A forma mais comum de especificar linhas eacute com um marcador do final de linha (newline)

Eacute um caractere especial natildeo normalmente presente no texto que serve para marcar fim de linhas

Mas natildeo haacute soacute um padratildeo de newline Os mais comuns

LF (Line Feed ASCII 10) ndash Unix Linux Mac OS X

CR - (Carriage Return ASCII 13) - Mac OS lt10

CR+LF (CR seguido de LF) - Windows DOS

Eacute o motivo de o Notepad (Windows) natildeo entender as quebras de linha de arquivos escritos com o formato nativo de Linux o arquivo soacute tem LF enquanto o editor espera CR+LF

Alguns sistemas (strings em vaacuterias linguagens por exemplo) usam o coacutedigo de escape n para indicar newline que eacute codificado de acordo com o padratildeo sendo usado

Em geral bibliotecas de leitura e gravaccedilatildeo de arquivos usam (default pelo menos) o newline nativo do sistema em que satildeo usadas

Programas de conversatildeo entre os sistemas satildeo comuns (ex dos2unix)

O Wordpad identifica se for usado soacute LF e quebra as linhas de acordo

5889

Arquivos - texto - CSV

Comma-separated values

O formato mais padronizado para tabelas (arrays 2D) em texto (frequentemente mas natildeo necessariamente ASCII)

Bem suportado por bibliotecas padratildeo de linguagens e outros softwares (Excel Calc Origin Google Docs etc)

Conteacutem Linhas de cabeccedilalho (opcionais mas recomendadas) linhas com qualquer texto geral

descrevendo o arquivo e em geral uma linha de tiacutetulo para as colunas da tabela Uma (apenas uma) tabela onde todas as linhas tecircm o mesmo nuacutemero de colunas

Colunas separadas por viacutergulas (opcionalmente pode ser outro separador) Linhas terminadas por newline (qualquer que seja) Strings delimitados por ldquo ldquo

Ex

NAMECALMPOSFILNAMEECHLPOSDISPPOSTARGNAMEPOSDIRCLASSMJD-OBSITIMECOADDSdec18s00010NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001dec18s00020NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001dec18s00120NIRSPEC-5-AO635800364500itan140NIRSPEC-5-AOp2 TITAN5408763000001dec18s00140NIRSPEC-5-AO626300364500itan140NIRSPEC-5-AOp1 TITAN5408763000001dec18s00151NIRSPEC-5-AO626300364500itan140NIRSPEC-5-AOp1ARC5408764000001dec18s00160NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001

Natildeo eacute necessaacuterio que as colunas tenham largura constante

Cabeccedilalho

5989

Arquivos - texto - CSVHaacute amplo suporte a leitura e gravaccedilatildeo de CSV sem precisar recorrer a procedimentos de baixo niacutevel

Podem ser diretamente importados em Excel Calc Origin Google Docs ou lido facilmente com bibliotecas padratildeo comuns Ex (IDL)

IDLgt c=read_csv(filesearch_scamcsvheader=h)IDLgt printhNAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS

IDLgt helpc Structure ltc8bca508gt 11 tags length=5256 data length=5248 refs=1 FIELD01 STRING Array[41] FIELD02 LONG Array[41] FIELD03 STRING Array[41] FIELD04 DOUBLE Array[41] FIELD05 DOUBLE Array[41] FIELD06 STRING Array[41] FIELD07 STRING Array[41] FIELD08 STRING Array[41] FIELD09 STRING Array[41] FIELD10 DOUBLE Array[41] FIELD11 LONG Array[41]

IDLgt printcfield01[03]dec18s0001 dec18s0002 dec18s0003 dec18s0004

IDLgt printcfield03[03]NIRSPEC-5-AO NIRSPEC-5-AO NIRSPEC-5-AO NIRSPEC-5-AO

6089

Arquivos - texto - CSVEx (IDL) Criaccedilatildeo de um CSV com uma tabela de valores

Criaccedilatildeo de 3 arrays 1D (12 elementos) um para cada coluna

IDLgt x=dindgen(3)IDLgt y=dindgen(4)IDLgt xx=reform(rebin(x34)12)IDLgt yy=reform(rebin(reform(y14)34)12)IDLgt f=xx+yy10IDLgt helpxxyyfXX DOUBLE = Array[12]YY DOUBLE = Array[12]F DOUBLE = Array[12]

Escrita do arquivo

IDLgt write_csvexamplecsvxxyyfheader=[XYX+10Y]

ResultadoXYX+10Y000000000000000000000000100000000000000010000000200000000000000020000000000000001000000010000000100000001000000011000000()

6189

Arquivos - texto - ldquoColunas regularesrdquoFixed column width

Natildeo eacute exatamente um padratildeo Eacute uma praacutetica comum

Armazena uma tabela (array 2D) de forma regular simples de ser interpretada e lida

Costumam ter linha(s) de cabeccedilalho descrevendo o conteuacutedo do arquivo em geral com uma linha para os nomes das colunas

As demais linhas conteacutem os dados sempre ocupando a mesma largura por coluna e escritos no mesmo formato em cada coluna

Costumam ser simples de ler inclusive interativamente (exs Excel Calc Origin read_ascii)

Ex (IDL) Uma simples tabela soacute de nuacutemeros

wavl CH4=33 wavl CH4=25 wavl CH4=10 wavl CH4=08 wavl CH4=05 wavl CH4=026 wavl CH4=02 477330000 0090130 477330000 0091110 477330000 0089250 477330000 0087000 477330000 0087140 477330000 0090080 477330000 0088110 480040000 0090930 480040000 0091930 480040000 0090160 480040000 0087930 480040000 0088110 480040000 0090950 480040000 0089090 482750000 0091710 482750000 0092730 482750000 0091060 482750000 0088850 482750000 0089080 482750000 0091810 482750000 0090060 485450000 0092530 485450000 0093570 485450000 0092000 485450000 0089810 485450000 0090100 485450000 0092730 485450000 0091090

IDLgt a=read_ascii(specs_27s_ntxtdata_start=1header=header)IDLgt printheader wavl CH4=33 wavl CH4=25 wavl CH4=10 wavl CH4=08 wavl CH4=05 wavl CH4=026 wavl CH4=02 IDLgt helpa Structure ltd423c9a8gt 1 tags length=224 data length=224 refs=1 FIELD01 FLOAT Array[14 4]

6289

Arquivos - texto - ldquoColunas regularesrdquoJaacute um arquivo um pouco mais difiacutecil de ler

NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS dec18s0001 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0002 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0003 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 FLAT 5408757812500 460000 5 dec18s0004 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 DARK 5408757812500 460000 5

Por ter colunas de tipos diferentes (strings inteiros reais) natildeo eacute possiacutevel o ler em um simples array Mas eacute faacutecil o colocar em uma estrutura de arrays onde cada campo eacute uma coluna

Especificando interativamente como interpretar as linhasIDLgt templ=ascii_template(filesearch_scamtxt)

Nome do campo (default mostrado)

Tipo do campo (identificado automaticamente)

Posiccedilatildeo (caracter) do comeccedilo (identificada automaticamente)

Linha de exemplo para verificar as colunas

6389

Arquivos - texto - ldquoColunas regularesrdquoDepois de feito o template o arquivo pode ser lido com apenas

IDLgt a=read_ascii(filesearch_scamtxttemplate=templ)IDLgt helpa Structure ltd4ec4608gt 11 tags length=416 data length=416 refs=1 FIELD01 STRING Array[4] FIELD02 LONG Array[4] FIELD03 STRING Array[4] FIELD04 FLOAT Array[4] FIELD05 FLOAT Array[4] FIELD06 STRING Array[4] FIELD07 STRING Array[4] FIELD08 STRING Array[4] FIELD09 FLOAT Array[4] FIELD10 FLOAT Array[4] FIELD11 LONG Array[4]IDLgt printafield01dec18s0001 dec18s0002 dec18s0003 dec18s0004IDLgt printafield04 626300 626300 626300 626300

O template (uma estrutura contendo dados sobre como ler o arquivo) pode ser usado para outros arquivos no mesmo formato No lugar de ter sido criado interativamente poderia ter sido lido de algum arquivo Poderia ter especificado nomes para os campos que seriam mais amigaacuteveis que coias como FIELD11

6489

Arquivos - texto - XML

Extensible Markup Language

Admite grande flexibilidade e por isso pode ter alta complexidade

Valores satildeo colocados dentro de uma estrutura em hieraacuterquica (em uma aacutervore) com os noacutes identificados pelos seus nomes (chaves)

Largamente usado em muitas aacutereas para armazenar conjuntos arbitraacuterios de quaisquer estruturas de dados

A maioria das aplicaccedilotildees usa um formato que eacute um subconjunto do XML especificado por um Schema comumente em um arquivo XML DTD (Document Type Definition)

6589

Arquivos - texto ndash XML ndash exemplos de usos

Armazenamento de dados de aplicaccedilotildees web (comum para exportar importar dados MediaWiki DokuWiki WordPress ADS Lattes etc)

Documentos Office (docx pptx xlsx) OpenOffice (odt opd ods)

Como versotildees de outros formatos FITSML XDF

ldquoScientific Dataset XML NASAs Astronomical Data Center (ADC) sponsors a number of research projects that

use XML for scientific data representation The XML activities at the ADC are sponsored and supported by the NASA Office of Space Science Applied Information Systems Research Program (AISRP)rdquo - httpxmlcoverpagesorgnasa-adchtml

Astronomical Instrument Markup Language (AIML)

SVG ndash Scalable Vector Graphics

Muitas de outras aplicaccedilotildees listadas em httpxmlcoverpagesorgxmlhtmlapplications

6689

Arquivos - texto ndash XML - exemploltxml version=10 gtltDOCTYPE Xdmf SYSTEM Xdmfdtd []gtltXdmf xmlnsxi=httpwwww3org2001XInclude Version=20gt ltDomaingt lt-- Example of Basic Topologies --gt ltInformation Name=Descriptiongt Example of a Polyvertex Topology ltInformationgt ltGrid Name=Polyvertex GridType=Uniformgt ltTopology TopologyType=Polyvertex Dimensions=3 NodesPerElement=3gt ltDataItem Format=XML Dimensions=3 3 NumberType=Floatgt 0 1 2 4 5 6 8 9 10 ltDataItemgt ltTopologygt ltGeometry Type=XYZgt ltDataItem Format=XML Dimensions=4 4 3gt 00 00 00 10 00 00()Que mostra que a interpretaccedilatildeo (parsing) de XML eacute em geral complexa

6789

Arquivos - texto - XML

Haacute muitas bibliotecas de alto niacutevel para fazer o processamento (parsing) e entregar os dados em uma estrutura conveniente

A complexidade em processar XML estaacute em decidir o que fazer com os dados jaacute que os arquivos podem ser muito complexos

As APIs (Application Programming Interfaces) mais comuns para processar XML que satildeo implementadas em muitas linguagens

DOM (Document Object Model) ndash manteacutem todo o conteuacutedo do em uma estrutura de dados (em geral uma aacutervore) em uma variaacutevel (em geral um objeto) Esta pode ser consultada para obter os valores de interesse para os alterar e usada para escrever um arquivo

SAX (Simple API for XML) ndash Interpretador (parser) por objetos O usuaacuterio escreve uma classe herdando da classe SAX provendo os meacutetodos que vatildeo processar os campos agrave medida em que estes satildeo lidos

6889

Arquivos - binaacuterios - FITSFlexible Image Transport System

O formato mais comum para observaccedilotildees astronocircmicas Tambeacutem usado para armazenar quaisquer dados mesmo natildeo relacionados a observaccedilotildees (especialmente tabelas como eacute praacutetica do STSCI)

Conteacutem um (ou mais) cabeccedilalho(s) de texto com metadados (informaccedilotildees sobre os dados como caracteriacutesticas (necessaacuterias para os ler) origem condiccedilotildees em que foram obtidos processamento realizado etc)

SIMPLE = T image conforms to FITS standard BITPIX = 32 bits per data value NAXIS = 2 number of axes NAXIS1 = 1024 NAXIS2 = 1024 BSCALE = 100000 Scaling factor BZERO = 000000 Scaling zero-point TELESCOP= Keck II Telescope SLITNAME= 0041x226 Slit Name SLITPA = 351979 Slit position angle SLITX = 131500 X pixel of the center of the slit LST = 12010446 local apparent sidereal time (()

Depois do cabeccedilalho haacute uma (ou mais) seccedilatildeo(otildees) de dados binaacuterios Costuma(m) ser array(s) 1D (espectros) 2D (imagens) ou 3D (ldquocubos de dadosrdquo)

De inteiros ou reais inteiros satildeo comuns em contagens de instrumentos reais para valores derivados (fluxos intensidades etc)

6989

Arquivos - binaacuterios - FITSNormalmente FITS satildeo lidos escritos por bibliotecas prontas de (relativamente) alto niacutevel usuaacuterio natildeo tem que saber como os dados satildeo armazenados no arquivo nem como os ler escrever Ex (IDL com a biblioteca idlastro)

IDLgt fits_info2dspectrumfits2dspectrumfits has 3 extensionsPrimary header 288 recordsNo dataExtension 1 -- SCI Header 144 records IMAGE ( 1201 1201 )Extension 2 -- ERR Header 72 records IMAGE ( 1201 1201 )Extension 3 -- DQ Header 72 records IMAGE ( 1201 1201 )

IDLgt mydata=readfits(2dspectrumfitsexten_no=1myheader) READFITS Reading FITS extension of type IMAGE READFITS Now reading 1201 by 1201 array

IDLgt extastmyheadermyastIDLgt sz=size(mydatadimensions)IDLgt xy2ad[1sz[0]][1sz[1]]myastcorners_acorners_dIDLgt printcorners_aCorners of the data array from file 2dspectrumfits are at 14487480 33063480

IDLgt printcorners_d -00041264444 00041402222

Obteacutem os dados de coordenadas (WCS) do header

Coloca os dados no array (2D de floats) mydata e o header no array (1D de strings) myheader

Calcula as coordenadas das quinas da imagem atraveacutes do WCS

Provecirc informaccedilotildees sobre o arquivo

7089

Arquivos - binaacuterios - ISIS Cube

Formatos como FITS se adequam muito a ter uma interface de mais alto niacutevel por objetos

Tambeacutem para dados em tabelas FITS muito mais trabalhosos de ler em baixo niacutevel que se adequam muito mais a mapas ou estruturas

Exemplo (de um formato semelhante a FITS ISIS cube)

O objeto ao ser criado lecirc todo o arquivo

cube=pp_editablecube(CM_1553510065_1_ircub)

Meacutetodos fornecem os dados desejados para obter quando necessaacuterio os dados de interesse

Find out the names of the backplanesprintcubegetproperty(backnames)Get the start time of the cubeprintcubegetfromheader(START_TIME)2007-084T100057286Z

Valores no cabeccedilalho podem ser convenientemente fornecidos como um mapa

header=cubeheader_as_hash()printheader[START_TIME]2007-084T100057286Z

7189

Arquivos - binaacuterios ndash ISIS Cube

Os dados satildeo fornecidos como arraysMake a contour plot of the latitudesc=contour(cubegetsuffixbyname(LATITUDE))Get the band with wavelength nearest to 21 (in the units used in the cube)selband=cubegetbandbywavelength(21wavelengths=selwavs)

Interfaces por overload tornam o acesso ainda mais conveniente

selband=cube[21]

selwavs=cube[21]

Retorna um array com a banda de comprimento de onda mais proacuteximo de 21 (microm)

Retorna o comprimento de onda mais proacuteximo de 21 (microm) da banda retornada acima

7289

Arquivos - binaacuterios ndash ISIS Cube Alteraccedilotildees feitas ao conteuacutedo satildeo automaticamente refletidas em todos os

lugares (cabeccedilalho em particular) afetados mantendo o objeto vaacutelido que pode depois ser gravado em um novo arquivo

IDLgt printcubelinescubesamplescubebands 64 64 256

IDLgt helpcubecoreltExpressiongt FLOAT = Array[64 64 256]

IDLgt cubecore=dblarr(100100256)

A linha acima natildeo eacute uma atribuiccedilatildeo eacute uma invocaccedilatildeo de meacutetodo Eacute equivalente acubesetpropertycore=dblarr(100100256)

Eacute o trabalho da funccedilatildeo setproperty decidir se a propriedade passada (core) faz sentido e se fizer fazer todo o trabalho necessaacuterio a esta mudanccedila Para o usuaacuterio eacute tudo automaacutetico e os dados da classe satildeo vaacutelidos o tempo todo

IDLgt helpcubecoreltExpressiongt DOUBLE = Array[100 100 256]

IDLgt printcubelinescubesamplescubebands 100 100 256

IDLgt cubesaveCM_1553510065_1_ir_editedcub

7389

Arquivos - binaacuterios ndash NetCDF e HDF5

Network Common Data Form e Hierarchical Data Format

Os dois uacutenicos formatos bem estabelecidos para dados cientiacuteficos geneacutericos

Armazenam dados como vaacuterias variaacuteveis e seus metadados Para cada variaacutevel haacute (ou pode haver) os metadados

Nome Dimensotildees (do array) Unidades Comentaacuterios

Ambos permitem arrays multidimensionais

Apenas HDF5 permite estruturas (daiacute vem a hierarquia)

Autodocumentados qualquer software que saiba ler um destes formatos lecirc qualquer arquivo sem precisar de conhecimento preacutevio sobre como o arquivo foi gerado

Muito bem suportados em bibliotecas padratildeo e natildeo padratildeo em softwares interativos e visualizadores (inclusive plugins para navegadores)

httpwwwunidataucaredusoftwarenetcdf httpenwikipediaorgwikiHdf5

NetCDF eacute mais simples de usar por natildeo ter hierarquia dando menos trabalho para ler e escrever dados Se hierarquia natildeo eacute necessaacuteria eacute mais conveniente de usar que HDF5

7489

Arquivos - binaacuterios - NetCDF e HDF5Haacute tambeacutem o formato CDL uma versatildeo ASCII do NetCDF A biblioteca padratildeo do NetCDF inclui conversores entre estes formatos

$ ncdump -h refspec_g01_0ncnetcdf refspec_g01_0 dimensions nlay = 51 nwn = 400 nleg = 33 numu = 2 nlev = 52 nphi = 3 ngas = 2 nwnc = 1 scal = 1 v3 = 3 dnl = 1 nk = 1 tdisr = UNLIMITED (0 currently) na = 16

variables float alb(nwn) float z(nlay) float t(nlay) float p(nlay) float wl(nwn) float iof(nwn) float mtau(nwn) float htau(nwn) float hctaus(nwn) float gtau(nwn) float outcos(scal) float phi(nleg) float phic(scal) float umu(numu) float flux(v3 nwn nlev) float mix(nlay ngas) float c(nlay) float psat(nlay) float ga(nwnc) float wlc(nwnc) float inc(scal) int dm(scal) int ord(scal) float fbeam(scal) float wn(nwn) float tautot(nwn nlay) float htaus(nwn nlay) float htaux(nwn nlay) float taug(nwn nlay) float phase(nwn nlay nleg) float ssa(nwn nlay) float uu(nwn nphi nlev numu) float u0u(nwn nlev numu) float tray(nwn nlay) float gtauo(tdisr nwn nlay)

Haacute 14 variaacuteveis usadas como dimensotildees para as 35 variaacuteveis que satildeo arrays

Ex alb(nwn) indica que alb eacute um array 1D de nwn elementos

nwn estaacute armazenado como uma das dimensotildees e eacute 400 portanto alb tem 400 elementos

Parte do conteuacutedo de um arquivo NetCDF em formato CDL (gerado pelo programa ncdump)

7589

Arquivos - binaacuterios - NetCDF e HDF5Conteuacutedo daquele arquivo visualizado com o ncview (acompanha a biblioteca NetCDF padratildeo)

7689

Arquivos - binaacuterios - NetCDF e HDF5O conteuacutedo de todo o arquivo pode ser lido facilmente com as bibliotecas disponiacuteveis e armazenado em contecirciners convenientes Usando um objeto que gera um resultado um pouco mais conveniente

IDLgt h=pp_readncdf(refspec_g01_0nchash)IDLgt printhvar_dims ltObjHeapVar229(HASH)gtvars ltObjHeapVar152(HASH)gtdims ltObjHeapVar118(HASH)gt

IDLgt printh[vars]T 173203 175459 175848 176001 175975 Z 431869 418858 406067 393403 380464 FLUX 300660 145536 0705180 0341669 0165532 PHASE 100000 0779034 0660858 0542052 0449983 TAUTOT0694377 0693420 0693474 0693540 0693636()

IDLgt help(h[vars])[TAUTOT]ltExpressiongt FLOAT = Array[51 400]

IDLgt print(h[var_dims])[TAUTOT]NLAY NWN

IDLgt print(h[dims])[(h[var_dims])[TAUTOT]]NLAY 51NWN 400

7789

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5)

Visualizaccedilatildeo da variaacutevel selecionada

Metadados e alguns valores da variaacutevel selecionada

Variaacutevel a ser criada com o conteuacutedo desta variaacutevel do arquivo

Hierarquia das variaacuteveis do arquivo

7889

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5) Imported variable az

IDLgt helpaz Structure ltd5723f38gt 13 tags length=448 data length=444 refs=1 _NAME STRING az _ICONTYPE STRING binary _TYPE STRING DATASET _FILE STRING INTENSI_test_409OUTh5 _PATH STRING _DATA DOUBLE Array[38] _NDIMENSIONS LONG 1 _DIMENSIONS ULONG64 Array[1] _NELEMENTS ULONG64 38 _DATATYPE STRING H5T_FLOAT _STORAGESIZE ULONG 8 _PRECISION LONG 64 _SIGN STRING

IDLgt printaz_data 00000000 10000000 20000000 30000000 40000000 50000000 60000000 80000000 ()

7989

Arquivos - binaacuterios - imagens

JPEG JPEG200 TIFF GeoTIFF etc

Os formatos comuns de imagens satildeo bem suportados em muacuteltiplas plataformas para uso dentro de programas e interativamente

Alguns formatos tecircm opccedilatildeo de compressatildeo com perda eou sem perda

Armazenam imagens como arrays 2D ou 3D (3D frequumlentemente limitado a 3 ou 4 em uma das dimensotildees uma imagem em 3 ou 4 bandas) de inteiros ou (em alguns formatos) reais

Alguns formatos permitem armazenar metadados para caracterizar as imagens armazenadas

JPEG2000 e GeoTIFF (um subconjunto de TIFF) comuns em astronomia e aacutereas proacuteximas

8089

Arquivos - binaacuterios ndash imagens ndash exemplo (IDL)IDLgt printquery_tiff(issmap_2009tiffinfogeotiff=geo) 1

IDLgt helpinfo Structure ltd4eca4b8gt 18 tags length=144 data length=132 refs=1 CHANNELS LONG 4 DIMENSIONS LONG Array[2] IMAGE_INDEX LONG 0 NUM_IMAGES LONG 1 PIXEL_TYPE INT 1 TYPE STRING TIFF BITS_PER_SAMPLE LONG 8 POSITION FLOAT Array[2] RESOLUTION FLOAT Array[2] UNITS LONG 2 TILE_SIZE LONG Array[2] DESCRIPTION STRING ISS (2009) DATE_TIME STRING 20100218 012436()

IDLgt helpgeo Structure ltd4efa1b8gt 10 tags length=264 data length=262 refs=1 MODELPIXELSCALETAG DOUBLE Array[3] MODELTIEPOINTTAG DOUBLE Array[6 4] GEOGRAPHICTYPEGEOKEY INT 4035 GEOGSEMIMAJORAXISGEOKEY DOUBLE 25750000 GEOGSEMIMINORAXISGEOKEY DOUBLE 25750000()

IDLgt myimage=read_tiff(issmap_2009tiff) Lecirc a imagem para o array myimage

Obteacutem informaccedilotildees sobre o arquivo

8189

Arquivos - binaacuterios ndash formatos nativosLinguagens como IDL R Python Java tecircm seu formato nativo binaacuterio acessado em alto niacutevel Basta mandar salvar ler variaacuteveis no do arquivo a biblioteca padratildeo automagicamente faz todo o trabalho de decidir como gravar ler os dados

Conveniente de usar na proacutepria linguagem Mas raramente existem bibliotecas para ler gravar o formato nativo de uma linguagem a partir de outra Ex (IDL)

IDLgt savefile=2dspectrumsavmydatamyheadercorners_dcorners_averbosecompress SAVE Portable (XDR) compressed SAVERESTORE file SAVE Saved variable MYDATA SAVE Saved variable MYHEADER()

Pode ser lido com apenas (haacute formas mais elaboradas)

IDLgt restore2dspectrumsavverbose RESTORE Portable (XDR) compressed SAVERESTORE file RESTORE Save file written by ltunknowngtltunknowngt Thu Jan 27 191422 2011 RESTORE IDL version 801 (linux x86_64) RESTORE Restored variable MYDATA RESTORE Restored variable MYHEADER()

IDLgt helpmydatamyheadercorners_dcorners_aMYDATA FLOAT = Array[1201 1201]MYHEADER STRING = Array[144]()

8289

Arquivos - processamento em baixo niacutevel

Nem sempre um formato padratildeo eacute a melhor escolha para o problema

Nem sempre haacute escolha (pode-se ter que trabalhar com arquivos que jaacute foram escritos em algum formato proprietaacuterio)

Agraves vezes o formato eacute padratildeo mas natildeo haacute bom suporte a ele disponiacutevel

Em todos estes casos eacute necessaacuterio escrever rotinas em baixo niacutevel que vatildeo ler processar diretamente o conteuacutedo do arquivo

Preferencialmente criando interfaces de alto niacutevel para o programa que vai as usar

8389

Arquivos - processamento em baixo niacutevel - texto

Tomando o exemplo anterior onde as colunas eram de diferentes tipos

NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS dec18s0001 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0002 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0003 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 FLAT 5408757812500 460000 5 dec18s0004 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 DARK 5408757812500 460000 5

A forma mais simples de o ler diretamente eacute definir uma estrutura para receber cada linha e um array destas estruturas para receber todo o arquivo Ex (IDL)

IDLgt record=namecalmpos0filnameechlpos0d0disppos0d0targnameposdirclassmjd_obsitime0d0coadds0IDLgt nlines=file_lines(filesearch_scamtxt)IDLgt mydata=replicate(recordnlines-1)IDLgt header=

Depois de definidas as variaacuteveis que vatildeo receber os dados o arquivo pode ser lido

IDLgt openrunitfilesearch_scamtxtget_lunIDLgt readfunitheaderIDLgt readfunitmydataformat=(A14I8A15F104F104A18A19A15F158F105I15)IDLgt free_lununit

A gravaccedilatildeo de um arquivo texto poderia ser feita de forma semelhante apenas trocando openr por openw (abrir o arquivo para gravaccedilatildeo natildeo leitura) e readf por printf

O arquivo eacute aberto em uma unidade (unit) usada para especificar de onde eacute feita a leitura

Ao final o arquivo eacute fechado

8489

Arquivos - processamento em baixo niacutevel - texto

O que resulta em

IDLgt printheader NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS

IDLgt helpmydataMYDATA STRUCT = -gt ltAnonymousgt Array[4]

IDLgt helpmydata[0] Structure ltd5e38f68gt 11 tags length=136 data length=124 refs=3 NAME STRING dec18s0001 CALMPOS INT 0 FILNAME STRING NIRSPEC-5-AO ECHLPOS DOUBLE 62630000 DISPPOS DOUBLE 36450000 TARGNAME STRING HD85258 POSDIR STRING NIRSPEC-5-AOp1 CLASS STRING STAR MJD_OBS STRING 54087574 ITIME DOUBLE 10000000 COADDS INT 1

Este caso eacute mais complicado que os mais comuns por haver colunas de strings

Se todas fossem de nuacutemeros natildeo teria sido necessaacuterio especificar o formato explicitamente As colunas teriam sido adivinhadas pela biblioteca que lecirc o arquivo Poderia ter sido lido escrito soacute com um array de nuacutemeros sem estruturas

8589

Arquivos - processamento em baixo niacutevel - binaacuterio

Formatos binaacuterios podem ser definidos de qualquer forma O arquivo eacute apenas um conjunto de bytes Cabe ao software saber como os interpretar

Uma escolha comum para que sejam autodocumentados eacute incluir um cabeccedilalho de texto informando as caracteriacutesticas dos dados necessaacuterias para os ler

Ex (IDL) criar um arquivo que armazene um array de doubles com um cabeccedilalho informando as dimensotildees para que o programa que o lecirc saiba como ler os dados

Inventa dados e abre o arquivo

IDLgt data_to_write=dindgen(34)IDLgt openwunitbinary_exampledatget_lun

Escreve as dimensotildees como texto

IDLgt printfunitdimensions of the double array stored belowIDLgt printfunitsize(data_to_writedimensions)

Escreve os dados binaacuterios

IDLgt writeuunitdata_to_write

Fecha o arquivo

IDLgt free_lununit

Escreve em binaacuterio (write unformatted)

8689

Arquivos - processamento em baixo niacutevel - binaacuterio

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

dimensions of the double array stored below 3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

8789

Arquivos - processamento em baixo niacutevel - binaacuterioA leitura deste arquivo eacute igualmente simples

IDLgt header=IDLgt dims=[00]IDLgt openrunitbinary_exampledatget_lun

Lecirc as dimensotildees (armazenadas como texto)

IDLgt readfunitheaderIDLgt readfunitdims

Lecirc a parte binaacuteria depois de saber as dimensotildees

IDLgt data_read=dblarr(dims)IDLgt readuunitdata_read

Fecha o arquivo

IDLgt free_lununit

Verifica que os dados foram gravados e lidos corretamente

IDLgt printarray_equal(data_to_writedata_read) 1

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Lecirc dados binaacuterios (read unformatted)

8889

Sumaacuterio

5 ndash Slides em httpwwwppenteadonetpeapea04_strings_iopdf Strings Expressotildees regulares Arquivos

httpwwwppenteadonetpea

8989

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89

Strings - conversatildeo de strings para outros tipos

Quando o default natildeo eacute suficiente (ou quando escrevendo o conversor em uma classe) costuma ser possiacutevel o fazer com formatos semelhantes aos formatos para gerar strings Exs (IDL)

IDLgt a=0d0IDLgt b=00IDLgt c=0IDLgt reads171d0 something 189d0-9abc READS Input conversion error Unit 0 File ltstdingt Error occurred at $MAIN$ Execution halted at $MAIN$

Natildeo funcionou porque sozinho ele natildeo conseguiu saber o que fazer com o ldquosomethingrdquo Usando um formato especiacutefico

IDLgt reads171d0 something 189d0-9 abcformat=(D6111XD611XI)

IDLgt helpabcA DOUBLE = 17100000B FLOAT = 189000C INT = -9

Exemplos mais complicados adiante (arquivos texto)

Variaacuteveis tecircm que ser definidas para informar para que tipo seraacute feita a conversatildeo default

3289

Strings - processamento natildeo baacutesicoOperaccedilotildees importantes e muito necessaacuterias mas que natildeo satildeo suportadas em todas as linguagens bibliotecas padratildeo

Testes (ex IDL)

IDLgt str=[afitsaFITSafitsaabfitsabcfits]

IDLgt printstrmatch(strfits) 1 0 0 1 1

IDLgt printstrmatch(strfitsfold_case) 1 1 0 1 1

IDLgt printstrmatch(strfitsfold_case) 1 1 1 1 1

IDLgt printstrmatch(strfits) 1 0 0 0 0

IDLgt printstrmatch(strfits) 0 0 0 1 0

3389

Strings - processamento natildeo baacutesico

Operaccedilotildees importantes e muito necessaacuterias mas que natildeo satildeo suportadas em todas as linguagens bibliotecas padratildeo

Separaccedilatildeo de partes (Ex IDL)

IDLgt printstrsplit(2011- 131 -extract)format=(A)2011131

Processamento de nomes de arquivos diretoacuterios (Ex IDL)

IDLgt printfile_dirname(some_directoryanother_directorysome_filetxt)some_directoryanother_directory

IDLgt printfile_basename(some_directoryanother_directorysome_filetxt)some_filetxt

IDLgt printfile_basename(another_directorysome_filetxttxt)+_alteredtxtsome_file_alteredtxt

3489

Strings - processamento natildeo baacutesico

Codificaccedilotildees (Ex Python 3)

gtgtgt s=infinite money infinNeuro sign

gtgtgt print(s)infinite money infineuro

gtgtgt print(ascii(s))infinite money u221eu20ac

gtgtgt print(sencode(utf-8))binfinite money xe2x88x9exe2x82xac

3589

Strings - processamento natildeo baacutesico

Perl eacute a linguagem mais avanccedilada para processamento de strings tem suporte nativo a muitas outras operaccedilotildees a semacircntica da linguagem eacute voltada principalmente para processar strings expressotildees regulares (de vaacuterios tipos) natildeo satildeo strings fazem parte da semacircntica

Ex (sem o objetivo que seja compreensiacutevel apenas para indicar o estilo)

Ler um arquivo contendo campos com nomes separados de valores por ()

temperature 10008name some modelx_dimension 100y_dimension 100z_dimension 50()

Armazenado-o em um mapa O que pode ser feito com apenas

While (ltgt) Loop over input linesPut pre-colon text into $1 post-colon into $2 if (m (S+) (+) ) Use $1 as key $2 as value $file_data$1 = $2

3689

Expressotildees regulares - definiccedilatildeo

Expressotildees regulares (regular expressions regex) satildeo a mais poderosa ferramenta para fazer buscas e separar substrings

Regex satildeo uma linguagem com o uacutenico objetivo de especificar propriedades de strings

Implementadas em graus diferentes em todas as linguagens modernas e modernizadas facilita encontrar uma expressatildeo jaacute pronta pois satildeo quase iguais em qualquer linguagem

Estatildeo na biblioteca padratildeo em IDL Python R Perl

Em C++ e Java em bibliotecas comuns (Boost Jregex)

Para que servem

Uma expressatildeo regular especifica propriedades de strings

O interpretador de expressotildees regulares (regular expression engine) recebe a expressatildeo e o string a analisar e determina se o string corresponde (matches) agrave expressatildeo regular

Em alguns casos o interpretador pode tambeacutem informar que parte(s) do string corresponde(m) a que parte(s) da expressatildeo regular e realizar processamentos com estas partes

3789

Expressotildees regulares ndash exemplos de usos Separar partes de strings

Encontrar linhas em arquivos que tenham nomes valores e comentaacuterios e separar estes pedaccedilos

Escalar com comentaacuterio

SLITPA = 351979 Slit position angle

Array 1D sem comentaacuterio (se extendendo por vaacuterias linhas)

BAND_BIN_CENTER = (03505400358950036629003732200379490 0387900104598)

Escalares em diferentes formatos

Total Mechanical Luminosity 15310E+03resources_usedwalltime=005603

Pedaccedilos de nomes

6063 17836E-20 2456 T FeIX((3Pe)3d(2PE)4p_1Po-3s2_3p6_1Se)

Datas separando ano mecircs dia hora (em vaacuterios formatos diferentes)

DATE-OBS= 2006-12-18 universal date of observationDATE_TIME = 2010-07-19T161032START_TIME = 2006-182T225102850Z

3889

Expressotildees regulares ndash exemplos de usos

Separar partes de strings Separar partes de nomes de arquivos (por significarem algo como identificar o

conteuacutedo)

specdec18s0041fitsscamdec18i0054fits15_7_mts_hmpixselh_mr15sav15_7_mts_hwpixselh_mr15sav16_3_mts_hwpixselb_mr16savreadmodel5l_-1_000010000_10000_r05_030_08196_0100000_005000000_1000eps

Determinar se um string eacute um nuacutemero (inteiro real fixo flutuante)

Encontrar identificadores Exs nomes de cataacutelogos endereccedilos HTTPFTP endereccedilos de email

Separar campos em arquivos sendo lidos onde as linhas natildeo tecircm a mesma formataccedilatildeo algumas linhas com colunas separadas por espaccedilos outras por tabs outras por

siacutembolos ignorando linhas de comentaacuterios e linhas vazias

3989

Expressotildees regulares - usoEx (IDL) encontrar nomes de arquivos com algumas propriedades

IDLgt printfilesformat=(A)CM_1477475933_1_viscubCM_1477476864_1_ircubCM_1477476864_1_irgcubCM_1477476864_1_viscubCM_1477477826_1_ircubCM_1477477826_1_irgcubCM_1477477826_1_viscubmosaic2cub

IDLgt printstregex(files+irgcubboolean) 0 0 1 0 0 1 0 0

A expressatildeo regular eacute +irgcub Especifica uma ou mais ocorrecircncias seguidas (+) de qualquer caractere () seguido de uma ocorrecircncia de irgcub (o ponto vem precedido do caractere de

escape () para ser entendido literalmente como um ponto e natildeo como o seu significado especial (qualquer caractere)

Esta aplicaccedilatildeo do interpretador (stregex) retorna um valor Booleano (verdadeirofalso) para cada elemento do string passado (files) que informa se aquele elemento correspondia agravequela expressatildeo regular

Este eacute um exemplo artificial Seria mais faacutecil ter usado strmatch(filesirgcub)

4089

Expressotildees regulares - uso

Em casos como este tipicamente o resultado de stregex seria usado como filtro para selecionar apenas os elementos do array de strings que satisfazem agravequela expressatildeo regular

IDLgt w=where(stregex(files+irgcubboolean)null)IDLgt printfiles[w]format=(A)CM_1477476864_1_irgcubCM_1477477826_1_irgcub

Ex (IDL) Determinar que strings conteacutem uma data no formato yyyy-mm-dd

IDLgt strs=[201002012010-02-012010-2-1aaaa-mm-ddT2010-02-01J]IDLgt printstregex(strs[0-9]4-[0-9]2-[0-9]2boolean) 0 1 0 0 1

Esta expressatildeo regular especifica quatro repeticcedilotildees (4) de diacutegitos (caracteres na faixa [0-9]) seguido de um (-) seguido de duas repeticcedilotildees (2) de dois diacutegitos ([0-9]) seguido de um (-) seguido de duas repeticcedilotildees (2) de dois diacutegitos ([0-9])

Uma expressatildeo regular apenas um pouco mais elaborada poderia corresponder aos 3 formatos de data no array acima E poderia se impedir que a uacuteltima (com outros caracteres antes e depois da data) seja aceita

4189

Expressotildees regulares - regras - caracteres ldquonormaisrdquo

Uma expressatildeo regular usa caracteres ldquonormaisrdquo e especiais para especificar o que se vai procurar na ordem em que aparecem na expressatildeo

Se um caractere eacute normal (natildeo eacute um dos especiais mostrados adiante) ele especifica uma ocorrecircncia daquele caractere

Ex J eacute uma expressatildeo regular que corresponde a qualquer string onde ocorra J Jaacute JA soacute corresponde a strings que tenham JA dentro

Exs (IDL)

IDLgt strs=[JJJJJJaJAjaJa]

IDLgt printstregex(strsJboolean) 1 1 1 0 1

IDLgt printstregex(strsJAboolean) 0 0 1 0 0

4289

Expressotildees regulares - regras - caracteres especiaisCaracteres especiais tecircm outros significados Para significar literalmente aquele caractere deve ser escapado (escaped) com um

Siacutembolo significado exemplo Corresponde(m) Escape o caractere seguinte deve ser interpretado

literalmente natildeo como especial aa

Qualquer caractere ab ajb aab abb jafbc

+ Uma ou mais repeticcedilotildees do que vem agrave esquerda a+b ab aab bab baabh

() Subexpressatildeo para agrupar termos afetados por um caractere especial (como parecircnteses em notaccedilatildeo matemaacutetica)

(ab)+c abc ababc dabababcg

Zero ou mais repeticcedilotildees dos termos agrave esquerda ab abbaab caaabg

Zero ou uma repeticcedilatildeo dos termos agrave esquerda ab b ab cabd cbd

| Alternaccedilatildeo qualquer um dos dois agrave esquerda a|bc ac bc jacd jbcd

n Exatamente n repeticcedilotildees do termo agrave esquerda a2b aab daaabg

n1n2 De n1 a n2 repeticcedilotildees do termo agrave esquerda a12b ab aab aaab gaaabbd

^ Acircncora (no comeccedilo) nada agrave esquerda ^ab ab abb

$ Acircncora (no fim) nada agrave direita ab$ abaab

[] Conjunto de valores (explicado adiante)

4389

Expressotildees regulares - regras - conjuntos de valores

[] denota um conjunto de valores que pode conter

Uma lista de coisas que devem corresponder Ex [abc] signfica qualquer caractere no conjunto abc Correspondem a esta

expressatildeo abcabha

Uma lista de coisas que natildeo podem corresponder [^abc] significa qualquer coisa que natildeo seja a b ou c Correspondem a esta

expressatildeo d jgs gg

Faixas de valores [0-9] signfica qualquer diacutegito [0-9a-zA-Z] significa qualquer diacutegito ou letra

Classes de valores como algumas faixas e outros conjuntos ocorrem com muita frequumlecircncia haacute nomes

especiais para eles Estes (em IDL) vecircm entre [] ex [[digit] significa o mesmo que [0-9]

4489

Expressotildees regulares - regras - classes de valores

Classe signficado

alnum Caracteres alfanumeacutericos 0-9a-zA-Z

alpha Caracteres alfabeacuteticos a-zA-Z

cntrl Caracteres de controle ASCII (natildeo visiacuteveis coacutedigos 1 a 31 e 127)

digit Diacutegitos (decimais) 0-9

graph Caracteres visiacuteveis ASCII 33 a 126 (natildeo inclui o espaccedilo)

lower Letras minuacutesculas a-z

print Caracteres ldquoimprimiacuteveisrdquo (visiacuteveis e o espaccedilo) ASCII 32 a 126

punct Caracteres de pontuaccedilatildeo $amprsquo()+-lt=gt[]^_lsquo|~

space Os caracteres ldquoem brancordquo (blank) espaccedilo tab tab vertical CR LF (ASCII 32 e 9-13)

upper Letras maiuacutesculas A-Z

xdigit Diacutegitos hexadecimais 0-9A-Fa-f

lt Comeccedilo de palavra (palavra definida como sequumlecircncia de coisas natildeo space)

gt Fim de palavra (palavra definida como sequumlecircncia de coisas natildeo space)

Estas satildeo apenas as principais Algumas implementaccedilotildees tecircm muito mais (em particular nas linguagens que usam Unicode nativamente)

4589

Expressotildees regulares - exemplos

Determinar se strings satildeo nuacutemeros (Ex IDL)

IDLgt str=[9-18 875-812-45913E9-98d7a188d032f5]

Inteiros

IDLgt intexpr=^[-+][0-9]+$

IDLgt printstregex(strintexprboolean) 1 1 0 0 0 0 0 0 0 0

Ponto flutuante

IDLgt fpexpr=^[-+](([0-9][0-9]+)|([0-9]+[0-9]))([eEdD][-+][0-9]+)$

IDLgt printstregex(strfpexprboolean) 1 1 0 1 1 1 1 1 0 0

Sinal opcional

1 ou mais diacutegitos

Sinal opcional

0 ou mais diacutegitos opcionalmente seguidos de um ponto e 1 ou mais diacutegitos

1 ou mais diacutegitos opcionalmente seguidos de um ponto e 0 ou mais diacutegitos

ou Expoente opcional letra do expoente seguida de sinal opcional seguido de um ou mais diacutegitos

4689

Expressotildees regulares ndash extraccedilatildeo

Interpretadores de expressotildees regulares costumam oferecer mais que apenas testar se um string corresponde a uma expressatildeo

Em geral tambeacutem podem retornar que parte(s) do string corresponde(m) agrave expressatildeo

Ex (IDL) Determinar se um string conteacutem uma data incluindo os formatos

IDLgt dates=[2011-01-312011 1 3120110131something done on y2011m1d31 with something]

E extrair a data de dentro do string

IDLgt expr=[0-9]4[0-9]12[0-9]12

(4 diacutegitos)(qualquer separador)(1 a 2 diacutegitos)(qualquer separador)(1 a 2 diacutegitos)

IDLgt printstregex(datesexprextract)format=(A)2011-01-312011 1 31201101312011m1d31

Como agora separar ano mecircs e dia Com uma busca e uma extraccedilatildeo para cada Poderia ser mais eacute mais faacutecil com uma uacutenica expressatildeo regular

4789

Expressotildees regulares - aleacutem de apenas testes

Tambeacutem podem retornar que parte(s) do string correspondem agrave expressatildeo toda e agraves suas subexpressotildees (partes da expressatildeo delimitadas por parecircnteses)

Ex (IDL) Separar pedaccedilos de datas Neste caso para a expressatildeo ficar menor assumindo um formato simples (yyyy-mm-ddThhmmssfff) Mas poderia ser um formato mais livre como no exemplo anterior

IDLgt str=Stuff observed on 2011-01-31T123924983 with some instrumentIDLgt expr=([0-9]4)-([0-9]2)-([0-9]2)T([0-9]2)([0-9]2)([0-9]2[0-9]3)

(quatro diacutegitos)-(2 diacutegitos)-(2 diacutegitos)T(2 diacutegitos)(2 diacutegitos)(2 diacutegitos3 diacutegitos)

IDLgt pieces=stregex(strexprextractsubexpr)IDLgt printpiecesformat=(A)2011-01-31T12392498320110131123924983IDLgt d=julday(pieces[2]pieces[3]pieces[1]pieces[4]pieces[5]pieces[6])IDLgt printdformat=(F166) 2455593027372

Expressatildeo inteiraPrimeira subexpressatildeoSegunda subexpressatildeoTerceira subexpressatildeoQuarta subexpressatildeoQuinta subexpressatildeoSexta subexpressatildeo

4889

Expressotildees regulares - referecircncias httpxkcdcom208

Viacutedeos do Software Carpentry

httpsoftware-carpentryorg4_0regexp

4989

Arquivos

Quase todo programa precisa armazenar dados em arquivos

Podem ser pequenos arquivos de paracircmetros ou enormes arquivos de dados produzidos ou a processar

Apesar do sugerido pela praacutetica comum arquivos texto natildeo satildeo sempre a melhor escolha para armazenar dados - e haacute muitas formas diferentes de os usar

Qual eacute a melhor escolha

Assim como para linguagens ou contecirciners natildeo existe ldquoo melhor formatordquo Cada um tem suas vantagens e desvantagens

Dados diferentes (mesmo se usados pelos mesmos programas) em geral se adequam melhor a formatos diferentes

5089

Arquivos - texto X binaacuterios

Em qualquer formato arquivos satildeo armazenados como diacutegitos binaacuterios

Mas haacute duas formas principais como eles podem ser codificados

Arquivos baseados em texto (text files)

Dados satildeo transformados em caracteres usando alguma formataccedilatildeo (mesmo se impliacutecita) e escritos com alguma codificaccedilatildeo de texto (comumente mas natildeo necessariamente ASCII)

Um arquivo texto eacute um ou mais strings As mesmas conversotildees tecircm que ser feitas depara outros tipos

Arquivos ldquobinaacuteriosrdquo (binary files)

Embora todo arquivo seja binaacuterio este nome costuma ser usado soacute para aqueles em que os dados natildeo estatildeo na forma de texto

Com frequumlecircncia (nem sempre) os dados satildeo gravados de forma idecircntica a como satildeo armazenados na memoacuteria

Muitos formatos usam uma mistura de partes em texto e partes binaacuterias

Um cabeccedilalho (header) de texto que daacute informaccedilotildees (metadados) sobre os dados armazenados na parte binaacuteria que vem depois

O cabeccedilalho conteacutem em especial informaccedilotildees sobre como ler os dados binaacuterios

5189

Arquivos - texto X binaacuterios

Vantagens de arquivos texto

Legiacuteveis por pessoas (human readable)

Podem ser auto-suficientes todo o necessaacuterio para os ler e entender o que conteacutem pode ser obtido olhando o arquivo

Satildeo os menos especiacuteficos a linguagens software normalmente satildeo escritos em ASCII ou Unicode e sempre haacute algum suporte a ler escrever texto em linguagens software

Haacute alguns formatos padratildeo para texto (exs CSV XML) que satildeo suportados em muitas plataformas diferentes

5289

Arquivos - texto X binaacuterios

Vantagens de arquivos binaacuterios

Em geral natildeo haacute conversotildees entre o os dados como armazenados na memoacuteria O que torna o armazenamento mais eficiente e sem alteraccedilotildees nos valores

A maior parte dos formatos padronizados eacute binaacuteria Exs FITS cube CDF NetCDF HDF HDF5 JPEG JPEG2000 TIFF GeoTIFF MPEG etc

Eacute mais comum que haja bibliotecas prontas (ateacute de alto niacutevel) para consulta leitura e gravaccedilatildeo

Os formatos melhor desenhados satildeo autodocumentados (em texto ou binaacuterio) para os ler natildeo eacute necessaacuterio conhecimento preacutevio sobre como os dados foram armazenados

Toda linguagem plataforma costuma ter seu formato binaacuterio mais nativo que costuma ser o mais faacutecil para leitura gravaccedilatildeo Em particular nas de alto niacutevel que tecircm formatos autodocumentados (especialmente

em IDL R Python Java)

Muitos formatos tecircm opccedilatildeo de compressatildeo dos dados

5389

Arquivos - proprietaacuterios X padratildeo

Independente da escolha texto binaacuterio programas devem escolher entre usar um formato proacuteprio ou um formato padronizado

A principal vantagem de formatos proacuteprios eacute que satildeo definidos da forma mais conveniente para a aplicaccedilatildeo que os usa simplificando leitura e gravaccedilatildeo e potencialmente otimizando recursos (acesso ao disco tamanho do arquivo etc)

A principal desvantagem de formatos proacuteprios eacute ser necessaacuterio escrever todo o coacutedigo para os ler gravar

Pode dar mais trabalho que usar um formato geneacuterico que natildeo seja exatamente o que melhor se encaixa na aplicaccedilatildeo

O coacutedigo para processar o formato em geral vai ser menos completo e conveniente de usar que o de um formato bem estabelecido usado por muitos outros em muitos ambientes

Cada novo software que for usar estes arquivos vai precisar compartilhar do mesmo coacutedigo ou precisar de coacutedigo novo (em particular se em outra linguagem) para ler gravar naquele formato

Eacute necessaacuterio documentar o formato e decidir sobre como ele seraacute definido

Se outros jaacute colocaram muito trabalho desenvolvendo bons formatos padratildeo bem suportados em muitos ambientes por que ter o trabalho de reinventar (e reprogramar redocumentar e retestar) a roda

5489

Arquivos - padrotildees comuns em astronomia (exs adiante)

Texto

CSV Comma-separated values - bem suportado por muitos softwares

ldquoColunas fixasrdquo Natildeo eacute um padratildeo bem definido mas eacute praacutetica comum para tabelas (2D)

XML Extensible Markup Language - O padratildeo texto mais flexiacutevel de grande uso em programaccedilatildeo geral para armazenar qualquer coisa com frequumlecircncia de forma hieraacuterquica Bem suportado por linguagens modernas (e modernizadas) e bibliotecas das principais

linguagens gerais Alta complexidade o torna trabalhoso de usar

5589

Arquivos - padrotildees comuns em astronomia (exs adiante)Binaacuterios

FITS Flexible Image Transport System - o mais comum para observaccedilotildees astronocircmicas Conteacutem os dados (em geral arrays 1D 2D ou 3D) e documentaccedilatildeo (nos cabeccedilalhos) sobre a origem e caracteriacutesticas dos dados Tambeacutem usado para armazenar tabelas de dados quaisquer mesmo que natildeo sejam observaccedilotildees (especialmente pelo STSCI) Variam muito em qualidade de documentaccedilatildeo

NetCDF Network Common Data Form - evoluccedilatildeo do CDF autodocumentado eacute comum e bem suportado para vaacuterios arrays de dados

HDF5 Hierarchical Data Format ndash autodocumentado comum e bem suportado permitindo aleacutem de simples arrays estruturas (eacute um formato hieraacuterquico)

Formatos de imagens JPEG JPEG2000 TIFF GeoTIFF etc - voltados para arrays 2D3D de inteiros ou (em alguns casos) reais com ou sem compressatildeo JPEG2000 tem caracteriacutesticas mais avanccediladas como imagens multiresoluccedilatildeo

Formatos vetoriais PS EPS DXF SHP SVG - variados niacuteveis de suporte a armazenamento de vetores e formas em 2D ou 3D

ISIS Cube semelhante em caracteriacutesticas ao FITS mais usado em sensoriamento remoto geociecircncias e ciecircncias planetaacuterias em geral para observaccedilotildees 1D 2D ou 3D

Formatos nativos de linguagens todo o trabalho de leitura e gravaccedilatildeo eacute feito automagicamente pela biblioteca padratildeo em IDL R Python Java

5689

Arquivos texto - newlines

Apesar do que possa parecer arquivos texto natildeo tecircm intrinsecamente vaacuterias linhas Arquivos texto satildeo soacute uma sequumlecircncia 1D de caracteres em alguma codificaccedilatildeo Separaccedilatildeo em linhas (equivalente a interpretar o arquivo como 2D em linhas e colunas) eacute

especificada por convenccedilotildees Natildeo haacute apenas uma convenccedilatildeo para o fim de linhas

A mais primitiva convenccedilatildeo eacute separaccedilatildeo nenhuma estipula-se que linhas tenham um nuacutemero fixo N de caracteres e cabe ao software que lecirc o arquivo entender que uma linha nova ocorre regularmente a cada N caracteres

Eacute a forma menos portaacutevel e mais inconveniente eacute necessaacuterio o conhecimento preacutevio (ou por inspeccedilatildeo do arquivo) de quantos caracteres haacute por linha

A maior parte dos editores de texto natildeo vai saber separar linhas desta forma (por falta deste conhecimento preacutevio) Exemplo (de um FITS real)

SIMPLE = T Fits standard BITPIX = 16 Bits per pixel NAXIS = 0 Number of axes EXTEND = T File may contain extensions

O que com as linhas quebradas nos lugares certos seria

SIMPLE = T Fits standard BITPIX = 16 Bits per pixel NAXIS = 0 Number of axes EXTEND = T File may contain extensions

5789

Arquivos texto - newlines

A forma mais comum de especificar linhas eacute com um marcador do final de linha (newline)

Eacute um caractere especial natildeo normalmente presente no texto que serve para marcar fim de linhas

Mas natildeo haacute soacute um padratildeo de newline Os mais comuns

LF (Line Feed ASCII 10) ndash Unix Linux Mac OS X

CR - (Carriage Return ASCII 13) - Mac OS lt10

CR+LF (CR seguido de LF) - Windows DOS

Eacute o motivo de o Notepad (Windows) natildeo entender as quebras de linha de arquivos escritos com o formato nativo de Linux o arquivo soacute tem LF enquanto o editor espera CR+LF

Alguns sistemas (strings em vaacuterias linguagens por exemplo) usam o coacutedigo de escape n para indicar newline que eacute codificado de acordo com o padratildeo sendo usado

Em geral bibliotecas de leitura e gravaccedilatildeo de arquivos usam (default pelo menos) o newline nativo do sistema em que satildeo usadas

Programas de conversatildeo entre os sistemas satildeo comuns (ex dos2unix)

O Wordpad identifica se for usado soacute LF e quebra as linhas de acordo

5889

Arquivos - texto - CSV

Comma-separated values

O formato mais padronizado para tabelas (arrays 2D) em texto (frequentemente mas natildeo necessariamente ASCII)

Bem suportado por bibliotecas padratildeo de linguagens e outros softwares (Excel Calc Origin Google Docs etc)

Conteacutem Linhas de cabeccedilalho (opcionais mas recomendadas) linhas com qualquer texto geral

descrevendo o arquivo e em geral uma linha de tiacutetulo para as colunas da tabela Uma (apenas uma) tabela onde todas as linhas tecircm o mesmo nuacutemero de colunas

Colunas separadas por viacutergulas (opcionalmente pode ser outro separador) Linhas terminadas por newline (qualquer que seja) Strings delimitados por ldquo ldquo

Ex

NAMECALMPOSFILNAMEECHLPOSDISPPOSTARGNAMEPOSDIRCLASSMJD-OBSITIMECOADDSdec18s00010NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001dec18s00020NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001dec18s00120NIRSPEC-5-AO635800364500itan140NIRSPEC-5-AOp2 TITAN5408763000001dec18s00140NIRSPEC-5-AO626300364500itan140NIRSPEC-5-AOp1 TITAN5408763000001dec18s00151NIRSPEC-5-AO626300364500itan140NIRSPEC-5-AOp1ARC5408764000001dec18s00160NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001

Natildeo eacute necessaacuterio que as colunas tenham largura constante

Cabeccedilalho

5989

Arquivos - texto - CSVHaacute amplo suporte a leitura e gravaccedilatildeo de CSV sem precisar recorrer a procedimentos de baixo niacutevel

Podem ser diretamente importados em Excel Calc Origin Google Docs ou lido facilmente com bibliotecas padratildeo comuns Ex (IDL)

IDLgt c=read_csv(filesearch_scamcsvheader=h)IDLgt printhNAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS

IDLgt helpc Structure ltc8bca508gt 11 tags length=5256 data length=5248 refs=1 FIELD01 STRING Array[41] FIELD02 LONG Array[41] FIELD03 STRING Array[41] FIELD04 DOUBLE Array[41] FIELD05 DOUBLE Array[41] FIELD06 STRING Array[41] FIELD07 STRING Array[41] FIELD08 STRING Array[41] FIELD09 STRING Array[41] FIELD10 DOUBLE Array[41] FIELD11 LONG Array[41]

IDLgt printcfield01[03]dec18s0001 dec18s0002 dec18s0003 dec18s0004

IDLgt printcfield03[03]NIRSPEC-5-AO NIRSPEC-5-AO NIRSPEC-5-AO NIRSPEC-5-AO

6089

Arquivos - texto - CSVEx (IDL) Criaccedilatildeo de um CSV com uma tabela de valores

Criaccedilatildeo de 3 arrays 1D (12 elementos) um para cada coluna

IDLgt x=dindgen(3)IDLgt y=dindgen(4)IDLgt xx=reform(rebin(x34)12)IDLgt yy=reform(rebin(reform(y14)34)12)IDLgt f=xx+yy10IDLgt helpxxyyfXX DOUBLE = Array[12]YY DOUBLE = Array[12]F DOUBLE = Array[12]

Escrita do arquivo

IDLgt write_csvexamplecsvxxyyfheader=[XYX+10Y]

ResultadoXYX+10Y000000000000000000000000100000000000000010000000200000000000000020000000000000001000000010000000100000001000000011000000()

6189

Arquivos - texto - ldquoColunas regularesrdquoFixed column width

Natildeo eacute exatamente um padratildeo Eacute uma praacutetica comum

Armazena uma tabela (array 2D) de forma regular simples de ser interpretada e lida

Costumam ter linha(s) de cabeccedilalho descrevendo o conteuacutedo do arquivo em geral com uma linha para os nomes das colunas

As demais linhas conteacutem os dados sempre ocupando a mesma largura por coluna e escritos no mesmo formato em cada coluna

Costumam ser simples de ler inclusive interativamente (exs Excel Calc Origin read_ascii)

Ex (IDL) Uma simples tabela soacute de nuacutemeros

wavl CH4=33 wavl CH4=25 wavl CH4=10 wavl CH4=08 wavl CH4=05 wavl CH4=026 wavl CH4=02 477330000 0090130 477330000 0091110 477330000 0089250 477330000 0087000 477330000 0087140 477330000 0090080 477330000 0088110 480040000 0090930 480040000 0091930 480040000 0090160 480040000 0087930 480040000 0088110 480040000 0090950 480040000 0089090 482750000 0091710 482750000 0092730 482750000 0091060 482750000 0088850 482750000 0089080 482750000 0091810 482750000 0090060 485450000 0092530 485450000 0093570 485450000 0092000 485450000 0089810 485450000 0090100 485450000 0092730 485450000 0091090

IDLgt a=read_ascii(specs_27s_ntxtdata_start=1header=header)IDLgt printheader wavl CH4=33 wavl CH4=25 wavl CH4=10 wavl CH4=08 wavl CH4=05 wavl CH4=026 wavl CH4=02 IDLgt helpa Structure ltd423c9a8gt 1 tags length=224 data length=224 refs=1 FIELD01 FLOAT Array[14 4]

6289

Arquivos - texto - ldquoColunas regularesrdquoJaacute um arquivo um pouco mais difiacutecil de ler

NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS dec18s0001 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0002 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0003 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 FLAT 5408757812500 460000 5 dec18s0004 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 DARK 5408757812500 460000 5

Por ter colunas de tipos diferentes (strings inteiros reais) natildeo eacute possiacutevel o ler em um simples array Mas eacute faacutecil o colocar em uma estrutura de arrays onde cada campo eacute uma coluna

Especificando interativamente como interpretar as linhasIDLgt templ=ascii_template(filesearch_scamtxt)

Nome do campo (default mostrado)

Tipo do campo (identificado automaticamente)

Posiccedilatildeo (caracter) do comeccedilo (identificada automaticamente)

Linha de exemplo para verificar as colunas

6389

Arquivos - texto - ldquoColunas regularesrdquoDepois de feito o template o arquivo pode ser lido com apenas

IDLgt a=read_ascii(filesearch_scamtxttemplate=templ)IDLgt helpa Structure ltd4ec4608gt 11 tags length=416 data length=416 refs=1 FIELD01 STRING Array[4] FIELD02 LONG Array[4] FIELD03 STRING Array[4] FIELD04 FLOAT Array[4] FIELD05 FLOAT Array[4] FIELD06 STRING Array[4] FIELD07 STRING Array[4] FIELD08 STRING Array[4] FIELD09 FLOAT Array[4] FIELD10 FLOAT Array[4] FIELD11 LONG Array[4]IDLgt printafield01dec18s0001 dec18s0002 dec18s0003 dec18s0004IDLgt printafield04 626300 626300 626300 626300

O template (uma estrutura contendo dados sobre como ler o arquivo) pode ser usado para outros arquivos no mesmo formato No lugar de ter sido criado interativamente poderia ter sido lido de algum arquivo Poderia ter especificado nomes para os campos que seriam mais amigaacuteveis que coias como FIELD11

6489

Arquivos - texto - XML

Extensible Markup Language

Admite grande flexibilidade e por isso pode ter alta complexidade

Valores satildeo colocados dentro de uma estrutura em hieraacuterquica (em uma aacutervore) com os noacutes identificados pelos seus nomes (chaves)

Largamente usado em muitas aacutereas para armazenar conjuntos arbitraacuterios de quaisquer estruturas de dados

A maioria das aplicaccedilotildees usa um formato que eacute um subconjunto do XML especificado por um Schema comumente em um arquivo XML DTD (Document Type Definition)

6589

Arquivos - texto ndash XML ndash exemplos de usos

Armazenamento de dados de aplicaccedilotildees web (comum para exportar importar dados MediaWiki DokuWiki WordPress ADS Lattes etc)

Documentos Office (docx pptx xlsx) OpenOffice (odt opd ods)

Como versotildees de outros formatos FITSML XDF

ldquoScientific Dataset XML NASAs Astronomical Data Center (ADC) sponsors a number of research projects that

use XML for scientific data representation The XML activities at the ADC are sponsored and supported by the NASA Office of Space Science Applied Information Systems Research Program (AISRP)rdquo - httpxmlcoverpagesorgnasa-adchtml

Astronomical Instrument Markup Language (AIML)

SVG ndash Scalable Vector Graphics

Muitas de outras aplicaccedilotildees listadas em httpxmlcoverpagesorgxmlhtmlapplications

6689

Arquivos - texto ndash XML - exemploltxml version=10 gtltDOCTYPE Xdmf SYSTEM Xdmfdtd []gtltXdmf xmlnsxi=httpwwww3org2001XInclude Version=20gt ltDomaingt lt-- Example of Basic Topologies --gt ltInformation Name=Descriptiongt Example of a Polyvertex Topology ltInformationgt ltGrid Name=Polyvertex GridType=Uniformgt ltTopology TopologyType=Polyvertex Dimensions=3 NodesPerElement=3gt ltDataItem Format=XML Dimensions=3 3 NumberType=Floatgt 0 1 2 4 5 6 8 9 10 ltDataItemgt ltTopologygt ltGeometry Type=XYZgt ltDataItem Format=XML Dimensions=4 4 3gt 00 00 00 10 00 00()Que mostra que a interpretaccedilatildeo (parsing) de XML eacute em geral complexa

6789

Arquivos - texto - XML

Haacute muitas bibliotecas de alto niacutevel para fazer o processamento (parsing) e entregar os dados em uma estrutura conveniente

A complexidade em processar XML estaacute em decidir o que fazer com os dados jaacute que os arquivos podem ser muito complexos

As APIs (Application Programming Interfaces) mais comuns para processar XML que satildeo implementadas em muitas linguagens

DOM (Document Object Model) ndash manteacutem todo o conteuacutedo do em uma estrutura de dados (em geral uma aacutervore) em uma variaacutevel (em geral um objeto) Esta pode ser consultada para obter os valores de interesse para os alterar e usada para escrever um arquivo

SAX (Simple API for XML) ndash Interpretador (parser) por objetos O usuaacuterio escreve uma classe herdando da classe SAX provendo os meacutetodos que vatildeo processar os campos agrave medida em que estes satildeo lidos

6889

Arquivos - binaacuterios - FITSFlexible Image Transport System

O formato mais comum para observaccedilotildees astronocircmicas Tambeacutem usado para armazenar quaisquer dados mesmo natildeo relacionados a observaccedilotildees (especialmente tabelas como eacute praacutetica do STSCI)

Conteacutem um (ou mais) cabeccedilalho(s) de texto com metadados (informaccedilotildees sobre os dados como caracteriacutesticas (necessaacuterias para os ler) origem condiccedilotildees em que foram obtidos processamento realizado etc)

SIMPLE = T image conforms to FITS standard BITPIX = 32 bits per data value NAXIS = 2 number of axes NAXIS1 = 1024 NAXIS2 = 1024 BSCALE = 100000 Scaling factor BZERO = 000000 Scaling zero-point TELESCOP= Keck II Telescope SLITNAME= 0041x226 Slit Name SLITPA = 351979 Slit position angle SLITX = 131500 X pixel of the center of the slit LST = 12010446 local apparent sidereal time (()

Depois do cabeccedilalho haacute uma (ou mais) seccedilatildeo(otildees) de dados binaacuterios Costuma(m) ser array(s) 1D (espectros) 2D (imagens) ou 3D (ldquocubos de dadosrdquo)

De inteiros ou reais inteiros satildeo comuns em contagens de instrumentos reais para valores derivados (fluxos intensidades etc)

6989

Arquivos - binaacuterios - FITSNormalmente FITS satildeo lidos escritos por bibliotecas prontas de (relativamente) alto niacutevel usuaacuterio natildeo tem que saber como os dados satildeo armazenados no arquivo nem como os ler escrever Ex (IDL com a biblioteca idlastro)

IDLgt fits_info2dspectrumfits2dspectrumfits has 3 extensionsPrimary header 288 recordsNo dataExtension 1 -- SCI Header 144 records IMAGE ( 1201 1201 )Extension 2 -- ERR Header 72 records IMAGE ( 1201 1201 )Extension 3 -- DQ Header 72 records IMAGE ( 1201 1201 )

IDLgt mydata=readfits(2dspectrumfitsexten_no=1myheader) READFITS Reading FITS extension of type IMAGE READFITS Now reading 1201 by 1201 array

IDLgt extastmyheadermyastIDLgt sz=size(mydatadimensions)IDLgt xy2ad[1sz[0]][1sz[1]]myastcorners_acorners_dIDLgt printcorners_aCorners of the data array from file 2dspectrumfits are at 14487480 33063480

IDLgt printcorners_d -00041264444 00041402222

Obteacutem os dados de coordenadas (WCS) do header

Coloca os dados no array (2D de floats) mydata e o header no array (1D de strings) myheader

Calcula as coordenadas das quinas da imagem atraveacutes do WCS

Provecirc informaccedilotildees sobre o arquivo

7089

Arquivos - binaacuterios - ISIS Cube

Formatos como FITS se adequam muito a ter uma interface de mais alto niacutevel por objetos

Tambeacutem para dados em tabelas FITS muito mais trabalhosos de ler em baixo niacutevel que se adequam muito mais a mapas ou estruturas

Exemplo (de um formato semelhante a FITS ISIS cube)

O objeto ao ser criado lecirc todo o arquivo

cube=pp_editablecube(CM_1553510065_1_ircub)

Meacutetodos fornecem os dados desejados para obter quando necessaacuterio os dados de interesse

Find out the names of the backplanesprintcubegetproperty(backnames)Get the start time of the cubeprintcubegetfromheader(START_TIME)2007-084T100057286Z

Valores no cabeccedilalho podem ser convenientemente fornecidos como um mapa

header=cubeheader_as_hash()printheader[START_TIME]2007-084T100057286Z

7189

Arquivos - binaacuterios ndash ISIS Cube

Os dados satildeo fornecidos como arraysMake a contour plot of the latitudesc=contour(cubegetsuffixbyname(LATITUDE))Get the band with wavelength nearest to 21 (in the units used in the cube)selband=cubegetbandbywavelength(21wavelengths=selwavs)

Interfaces por overload tornam o acesso ainda mais conveniente

selband=cube[21]

selwavs=cube[21]

Retorna um array com a banda de comprimento de onda mais proacuteximo de 21 (microm)

Retorna o comprimento de onda mais proacuteximo de 21 (microm) da banda retornada acima

7289

Arquivos - binaacuterios ndash ISIS Cube Alteraccedilotildees feitas ao conteuacutedo satildeo automaticamente refletidas em todos os

lugares (cabeccedilalho em particular) afetados mantendo o objeto vaacutelido que pode depois ser gravado em um novo arquivo

IDLgt printcubelinescubesamplescubebands 64 64 256

IDLgt helpcubecoreltExpressiongt FLOAT = Array[64 64 256]

IDLgt cubecore=dblarr(100100256)

A linha acima natildeo eacute uma atribuiccedilatildeo eacute uma invocaccedilatildeo de meacutetodo Eacute equivalente acubesetpropertycore=dblarr(100100256)

Eacute o trabalho da funccedilatildeo setproperty decidir se a propriedade passada (core) faz sentido e se fizer fazer todo o trabalho necessaacuterio a esta mudanccedila Para o usuaacuterio eacute tudo automaacutetico e os dados da classe satildeo vaacutelidos o tempo todo

IDLgt helpcubecoreltExpressiongt DOUBLE = Array[100 100 256]

IDLgt printcubelinescubesamplescubebands 100 100 256

IDLgt cubesaveCM_1553510065_1_ir_editedcub

7389

Arquivos - binaacuterios ndash NetCDF e HDF5

Network Common Data Form e Hierarchical Data Format

Os dois uacutenicos formatos bem estabelecidos para dados cientiacuteficos geneacutericos

Armazenam dados como vaacuterias variaacuteveis e seus metadados Para cada variaacutevel haacute (ou pode haver) os metadados

Nome Dimensotildees (do array) Unidades Comentaacuterios

Ambos permitem arrays multidimensionais

Apenas HDF5 permite estruturas (daiacute vem a hierarquia)

Autodocumentados qualquer software que saiba ler um destes formatos lecirc qualquer arquivo sem precisar de conhecimento preacutevio sobre como o arquivo foi gerado

Muito bem suportados em bibliotecas padratildeo e natildeo padratildeo em softwares interativos e visualizadores (inclusive plugins para navegadores)

httpwwwunidataucaredusoftwarenetcdf httpenwikipediaorgwikiHdf5

NetCDF eacute mais simples de usar por natildeo ter hierarquia dando menos trabalho para ler e escrever dados Se hierarquia natildeo eacute necessaacuteria eacute mais conveniente de usar que HDF5

7489

Arquivos - binaacuterios - NetCDF e HDF5Haacute tambeacutem o formato CDL uma versatildeo ASCII do NetCDF A biblioteca padratildeo do NetCDF inclui conversores entre estes formatos

$ ncdump -h refspec_g01_0ncnetcdf refspec_g01_0 dimensions nlay = 51 nwn = 400 nleg = 33 numu = 2 nlev = 52 nphi = 3 ngas = 2 nwnc = 1 scal = 1 v3 = 3 dnl = 1 nk = 1 tdisr = UNLIMITED (0 currently) na = 16

variables float alb(nwn) float z(nlay) float t(nlay) float p(nlay) float wl(nwn) float iof(nwn) float mtau(nwn) float htau(nwn) float hctaus(nwn) float gtau(nwn) float outcos(scal) float phi(nleg) float phic(scal) float umu(numu) float flux(v3 nwn nlev) float mix(nlay ngas) float c(nlay) float psat(nlay) float ga(nwnc) float wlc(nwnc) float inc(scal) int dm(scal) int ord(scal) float fbeam(scal) float wn(nwn) float tautot(nwn nlay) float htaus(nwn nlay) float htaux(nwn nlay) float taug(nwn nlay) float phase(nwn nlay nleg) float ssa(nwn nlay) float uu(nwn nphi nlev numu) float u0u(nwn nlev numu) float tray(nwn nlay) float gtauo(tdisr nwn nlay)

Haacute 14 variaacuteveis usadas como dimensotildees para as 35 variaacuteveis que satildeo arrays

Ex alb(nwn) indica que alb eacute um array 1D de nwn elementos

nwn estaacute armazenado como uma das dimensotildees e eacute 400 portanto alb tem 400 elementos

Parte do conteuacutedo de um arquivo NetCDF em formato CDL (gerado pelo programa ncdump)

7589

Arquivos - binaacuterios - NetCDF e HDF5Conteuacutedo daquele arquivo visualizado com o ncview (acompanha a biblioteca NetCDF padratildeo)

7689

Arquivos - binaacuterios - NetCDF e HDF5O conteuacutedo de todo o arquivo pode ser lido facilmente com as bibliotecas disponiacuteveis e armazenado em contecirciners convenientes Usando um objeto que gera um resultado um pouco mais conveniente

IDLgt h=pp_readncdf(refspec_g01_0nchash)IDLgt printhvar_dims ltObjHeapVar229(HASH)gtvars ltObjHeapVar152(HASH)gtdims ltObjHeapVar118(HASH)gt

IDLgt printh[vars]T 173203 175459 175848 176001 175975 Z 431869 418858 406067 393403 380464 FLUX 300660 145536 0705180 0341669 0165532 PHASE 100000 0779034 0660858 0542052 0449983 TAUTOT0694377 0693420 0693474 0693540 0693636()

IDLgt help(h[vars])[TAUTOT]ltExpressiongt FLOAT = Array[51 400]

IDLgt print(h[var_dims])[TAUTOT]NLAY NWN

IDLgt print(h[dims])[(h[var_dims])[TAUTOT]]NLAY 51NWN 400

7789

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5)

Visualizaccedilatildeo da variaacutevel selecionada

Metadados e alguns valores da variaacutevel selecionada

Variaacutevel a ser criada com o conteuacutedo desta variaacutevel do arquivo

Hierarquia das variaacuteveis do arquivo

7889

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5) Imported variable az

IDLgt helpaz Structure ltd5723f38gt 13 tags length=448 data length=444 refs=1 _NAME STRING az _ICONTYPE STRING binary _TYPE STRING DATASET _FILE STRING INTENSI_test_409OUTh5 _PATH STRING _DATA DOUBLE Array[38] _NDIMENSIONS LONG 1 _DIMENSIONS ULONG64 Array[1] _NELEMENTS ULONG64 38 _DATATYPE STRING H5T_FLOAT _STORAGESIZE ULONG 8 _PRECISION LONG 64 _SIGN STRING

IDLgt printaz_data 00000000 10000000 20000000 30000000 40000000 50000000 60000000 80000000 ()

7989

Arquivos - binaacuterios - imagens

JPEG JPEG200 TIFF GeoTIFF etc

Os formatos comuns de imagens satildeo bem suportados em muacuteltiplas plataformas para uso dentro de programas e interativamente

Alguns formatos tecircm opccedilatildeo de compressatildeo com perda eou sem perda

Armazenam imagens como arrays 2D ou 3D (3D frequumlentemente limitado a 3 ou 4 em uma das dimensotildees uma imagem em 3 ou 4 bandas) de inteiros ou (em alguns formatos) reais

Alguns formatos permitem armazenar metadados para caracterizar as imagens armazenadas

JPEG2000 e GeoTIFF (um subconjunto de TIFF) comuns em astronomia e aacutereas proacuteximas

8089

Arquivos - binaacuterios ndash imagens ndash exemplo (IDL)IDLgt printquery_tiff(issmap_2009tiffinfogeotiff=geo) 1

IDLgt helpinfo Structure ltd4eca4b8gt 18 tags length=144 data length=132 refs=1 CHANNELS LONG 4 DIMENSIONS LONG Array[2] IMAGE_INDEX LONG 0 NUM_IMAGES LONG 1 PIXEL_TYPE INT 1 TYPE STRING TIFF BITS_PER_SAMPLE LONG 8 POSITION FLOAT Array[2] RESOLUTION FLOAT Array[2] UNITS LONG 2 TILE_SIZE LONG Array[2] DESCRIPTION STRING ISS (2009) DATE_TIME STRING 20100218 012436()

IDLgt helpgeo Structure ltd4efa1b8gt 10 tags length=264 data length=262 refs=1 MODELPIXELSCALETAG DOUBLE Array[3] MODELTIEPOINTTAG DOUBLE Array[6 4] GEOGRAPHICTYPEGEOKEY INT 4035 GEOGSEMIMAJORAXISGEOKEY DOUBLE 25750000 GEOGSEMIMINORAXISGEOKEY DOUBLE 25750000()

IDLgt myimage=read_tiff(issmap_2009tiff) Lecirc a imagem para o array myimage

Obteacutem informaccedilotildees sobre o arquivo

8189

Arquivos - binaacuterios ndash formatos nativosLinguagens como IDL R Python Java tecircm seu formato nativo binaacuterio acessado em alto niacutevel Basta mandar salvar ler variaacuteveis no do arquivo a biblioteca padratildeo automagicamente faz todo o trabalho de decidir como gravar ler os dados

Conveniente de usar na proacutepria linguagem Mas raramente existem bibliotecas para ler gravar o formato nativo de uma linguagem a partir de outra Ex (IDL)

IDLgt savefile=2dspectrumsavmydatamyheadercorners_dcorners_averbosecompress SAVE Portable (XDR) compressed SAVERESTORE file SAVE Saved variable MYDATA SAVE Saved variable MYHEADER()

Pode ser lido com apenas (haacute formas mais elaboradas)

IDLgt restore2dspectrumsavverbose RESTORE Portable (XDR) compressed SAVERESTORE file RESTORE Save file written by ltunknowngtltunknowngt Thu Jan 27 191422 2011 RESTORE IDL version 801 (linux x86_64) RESTORE Restored variable MYDATA RESTORE Restored variable MYHEADER()

IDLgt helpmydatamyheadercorners_dcorners_aMYDATA FLOAT = Array[1201 1201]MYHEADER STRING = Array[144]()

8289

Arquivos - processamento em baixo niacutevel

Nem sempre um formato padratildeo eacute a melhor escolha para o problema

Nem sempre haacute escolha (pode-se ter que trabalhar com arquivos que jaacute foram escritos em algum formato proprietaacuterio)

Agraves vezes o formato eacute padratildeo mas natildeo haacute bom suporte a ele disponiacutevel

Em todos estes casos eacute necessaacuterio escrever rotinas em baixo niacutevel que vatildeo ler processar diretamente o conteuacutedo do arquivo

Preferencialmente criando interfaces de alto niacutevel para o programa que vai as usar

8389

Arquivos - processamento em baixo niacutevel - texto

Tomando o exemplo anterior onde as colunas eram de diferentes tipos

NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS dec18s0001 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0002 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0003 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 FLAT 5408757812500 460000 5 dec18s0004 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 DARK 5408757812500 460000 5

A forma mais simples de o ler diretamente eacute definir uma estrutura para receber cada linha e um array destas estruturas para receber todo o arquivo Ex (IDL)

IDLgt record=namecalmpos0filnameechlpos0d0disppos0d0targnameposdirclassmjd_obsitime0d0coadds0IDLgt nlines=file_lines(filesearch_scamtxt)IDLgt mydata=replicate(recordnlines-1)IDLgt header=

Depois de definidas as variaacuteveis que vatildeo receber os dados o arquivo pode ser lido

IDLgt openrunitfilesearch_scamtxtget_lunIDLgt readfunitheaderIDLgt readfunitmydataformat=(A14I8A15F104F104A18A19A15F158F105I15)IDLgt free_lununit

A gravaccedilatildeo de um arquivo texto poderia ser feita de forma semelhante apenas trocando openr por openw (abrir o arquivo para gravaccedilatildeo natildeo leitura) e readf por printf

O arquivo eacute aberto em uma unidade (unit) usada para especificar de onde eacute feita a leitura

Ao final o arquivo eacute fechado

8489

Arquivos - processamento em baixo niacutevel - texto

O que resulta em

IDLgt printheader NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS

IDLgt helpmydataMYDATA STRUCT = -gt ltAnonymousgt Array[4]

IDLgt helpmydata[0] Structure ltd5e38f68gt 11 tags length=136 data length=124 refs=3 NAME STRING dec18s0001 CALMPOS INT 0 FILNAME STRING NIRSPEC-5-AO ECHLPOS DOUBLE 62630000 DISPPOS DOUBLE 36450000 TARGNAME STRING HD85258 POSDIR STRING NIRSPEC-5-AOp1 CLASS STRING STAR MJD_OBS STRING 54087574 ITIME DOUBLE 10000000 COADDS INT 1

Este caso eacute mais complicado que os mais comuns por haver colunas de strings

Se todas fossem de nuacutemeros natildeo teria sido necessaacuterio especificar o formato explicitamente As colunas teriam sido adivinhadas pela biblioteca que lecirc o arquivo Poderia ter sido lido escrito soacute com um array de nuacutemeros sem estruturas

8589

Arquivos - processamento em baixo niacutevel - binaacuterio

Formatos binaacuterios podem ser definidos de qualquer forma O arquivo eacute apenas um conjunto de bytes Cabe ao software saber como os interpretar

Uma escolha comum para que sejam autodocumentados eacute incluir um cabeccedilalho de texto informando as caracteriacutesticas dos dados necessaacuterias para os ler

Ex (IDL) criar um arquivo que armazene um array de doubles com um cabeccedilalho informando as dimensotildees para que o programa que o lecirc saiba como ler os dados

Inventa dados e abre o arquivo

IDLgt data_to_write=dindgen(34)IDLgt openwunitbinary_exampledatget_lun

Escreve as dimensotildees como texto

IDLgt printfunitdimensions of the double array stored belowIDLgt printfunitsize(data_to_writedimensions)

Escreve os dados binaacuterios

IDLgt writeuunitdata_to_write

Fecha o arquivo

IDLgt free_lununit

Escreve em binaacuterio (write unformatted)

8689

Arquivos - processamento em baixo niacutevel - binaacuterio

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

dimensions of the double array stored below 3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

8789

Arquivos - processamento em baixo niacutevel - binaacuterioA leitura deste arquivo eacute igualmente simples

IDLgt header=IDLgt dims=[00]IDLgt openrunitbinary_exampledatget_lun

Lecirc as dimensotildees (armazenadas como texto)

IDLgt readfunitheaderIDLgt readfunitdims

Lecirc a parte binaacuteria depois de saber as dimensotildees

IDLgt data_read=dblarr(dims)IDLgt readuunitdata_read

Fecha o arquivo

IDLgt free_lununit

Verifica que os dados foram gravados e lidos corretamente

IDLgt printarray_equal(data_to_writedata_read) 1

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Lecirc dados binaacuterios (read unformatted)

8889

Sumaacuterio

5 ndash Slides em httpwwwppenteadonetpeapea04_strings_iopdf Strings Expressotildees regulares Arquivos

httpwwwppenteadonetpea

8989

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89

Strings - processamento natildeo baacutesicoOperaccedilotildees importantes e muito necessaacuterias mas que natildeo satildeo suportadas em todas as linguagens bibliotecas padratildeo

Testes (ex IDL)

IDLgt str=[afitsaFITSafitsaabfitsabcfits]

IDLgt printstrmatch(strfits) 1 0 0 1 1

IDLgt printstrmatch(strfitsfold_case) 1 1 0 1 1

IDLgt printstrmatch(strfitsfold_case) 1 1 1 1 1

IDLgt printstrmatch(strfits) 1 0 0 0 0

IDLgt printstrmatch(strfits) 0 0 0 1 0

3389

Strings - processamento natildeo baacutesico

Operaccedilotildees importantes e muito necessaacuterias mas que natildeo satildeo suportadas em todas as linguagens bibliotecas padratildeo

Separaccedilatildeo de partes (Ex IDL)

IDLgt printstrsplit(2011- 131 -extract)format=(A)2011131

Processamento de nomes de arquivos diretoacuterios (Ex IDL)

IDLgt printfile_dirname(some_directoryanother_directorysome_filetxt)some_directoryanother_directory

IDLgt printfile_basename(some_directoryanother_directorysome_filetxt)some_filetxt

IDLgt printfile_basename(another_directorysome_filetxttxt)+_alteredtxtsome_file_alteredtxt

3489

Strings - processamento natildeo baacutesico

Codificaccedilotildees (Ex Python 3)

gtgtgt s=infinite money infinNeuro sign

gtgtgt print(s)infinite money infineuro

gtgtgt print(ascii(s))infinite money u221eu20ac

gtgtgt print(sencode(utf-8))binfinite money xe2x88x9exe2x82xac

3589

Strings - processamento natildeo baacutesico

Perl eacute a linguagem mais avanccedilada para processamento de strings tem suporte nativo a muitas outras operaccedilotildees a semacircntica da linguagem eacute voltada principalmente para processar strings expressotildees regulares (de vaacuterios tipos) natildeo satildeo strings fazem parte da semacircntica

Ex (sem o objetivo que seja compreensiacutevel apenas para indicar o estilo)

Ler um arquivo contendo campos com nomes separados de valores por ()

temperature 10008name some modelx_dimension 100y_dimension 100z_dimension 50()

Armazenado-o em um mapa O que pode ser feito com apenas

While (ltgt) Loop over input linesPut pre-colon text into $1 post-colon into $2 if (m (S+) (+) ) Use $1 as key $2 as value $file_data$1 = $2

3689

Expressotildees regulares - definiccedilatildeo

Expressotildees regulares (regular expressions regex) satildeo a mais poderosa ferramenta para fazer buscas e separar substrings

Regex satildeo uma linguagem com o uacutenico objetivo de especificar propriedades de strings

Implementadas em graus diferentes em todas as linguagens modernas e modernizadas facilita encontrar uma expressatildeo jaacute pronta pois satildeo quase iguais em qualquer linguagem

Estatildeo na biblioteca padratildeo em IDL Python R Perl

Em C++ e Java em bibliotecas comuns (Boost Jregex)

Para que servem

Uma expressatildeo regular especifica propriedades de strings

O interpretador de expressotildees regulares (regular expression engine) recebe a expressatildeo e o string a analisar e determina se o string corresponde (matches) agrave expressatildeo regular

Em alguns casos o interpretador pode tambeacutem informar que parte(s) do string corresponde(m) a que parte(s) da expressatildeo regular e realizar processamentos com estas partes

3789

Expressotildees regulares ndash exemplos de usos Separar partes de strings

Encontrar linhas em arquivos que tenham nomes valores e comentaacuterios e separar estes pedaccedilos

Escalar com comentaacuterio

SLITPA = 351979 Slit position angle

Array 1D sem comentaacuterio (se extendendo por vaacuterias linhas)

BAND_BIN_CENTER = (03505400358950036629003732200379490 0387900104598)

Escalares em diferentes formatos

Total Mechanical Luminosity 15310E+03resources_usedwalltime=005603

Pedaccedilos de nomes

6063 17836E-20 2456 T FeIX((3Pe)3d(2PE)4p_1Po-3s2_3p6_1Se)

Datas separando ano mecircs dia hora (em vaacuterios formatos diferentes)

DATE-OBS= 2006-12-18 universal date of observationDATE_TIME = 2010-07-19T161032START_TIME = 2006-182T225102850Z

3889

Expressotildees regulares ndash exemplos de usos

Separar partes de strings Separar partes de nomes de arquivos (por significarem algo como identificar o

conteuacutedo)

specdec18s0041fitsscamdec18i0054fits15_7_mts_hmpixselh_mr15sav15_7_mts_hwpixselh_mr15sav16_3_mts_hwpixselb_mr16savreadmodel5l_-1_000010000_10000_r05_030_08196_0100000_005000000_1000eps

Determinar se um string eacute um nuacutemero (inteiro real fixo flutuante)

Encontrar identificadores Exs nomes de cataacutelogos endereccedilos HTTPFTP endereccedilos de email

Separar campos em arquivos sendo lidos onde as linhas natildeo tecircm a mesma formataccedilatildeo algumas linhas com colunas separadas por espaccedilos outras por tabs outras por

siacutembolos ignorando linhas de comentaacuterios e linhas vazias

3989

Expressotildees regulares - usoEx (IDL) encontrar nomes de arquivos com algumas propriedades

IDLgt printfilesformat=(A)CM_1477475933_1_viscubCM_1477476864_1_ircubCM_1477476864_1_irgcubCM_1477476864_1_viscubCM_1477477826_1_ircubCM_1477477826_1_irgcubCM_1477477826_1_viscubmosaic2cub

IDLgt printstregex(files+irgcubboolean) 0 0 1 0 0 1 0 0

A expressatildeo regular eacute +irgcub Especifica uma ou mais ocorrecircncias seguidas (+) de qualquer caractere () seguido de uma ocorrecircncia de irgcub (o ponto vem precedido do caractere de

escape () para ser entendido literalmente como um ponto e natildeo como o seu significado especial (qualquer caractere)

Esta aplicaccedilatildeo do interpretador (stregex) retorna um valor Booleano (verdadeirofalso) para cada elemento do string passado (files) que informa se aquele elemento correspondia agravequela expressatildeo regular

Este eacute um exemplo artificial Seria mais faacutecil ter usado strmatch(filesirgcub)

4089

Expressotildees regulares - uso

Em casos como este tipicamente o resultado de stregex seria usado como filtro para selecionar apenas os elementos do array de strings que satisfazem agravequela expressatildeo regular

IDLgt w=where(stregex(files+irgcubboolean)null)IDLgt printfiles[w]format=(A)CM_1477476864_1_irgcubCM_1477477826_1_irgcub

Ex (IDL) Determinar que strings conteacutem uma data no formato yyyy-mm-dd

IDLgt strs=[201002012010-02-012010-2-1aaaa-mm-ddT2010-02-01J]IDLgt printstregex(strs[0-9]4-[0-9]2-[0-9]2boolean) 0 1 0 0 1

Esta expressatildeo regular especifica quatro repeticcedilotildees (4) de diacutegitos (caracteres na faixa [0-9]) seguido de um (-) seguido de duas repeticcedilotildees (2) de dois diacutegitos ([0-9]) seguido de um (-) seguido de duas repeticcedilotildees (2) de dois diacutegitos ([0-9])

Uma expressatildeo regular apenas um pouco mais elaborada poderia corresponder aos 3 formatos de data no array acima E poderia se impedir que a uacuteltima (com outros caracteres antes e depois da data) seja aceita

4189

Expressotildees regulares - regras - caracteres ldquonormaisrdquo

Uma expressatildeo regular usa caracteres ldquonormaisrdquo e especiais para especificar o que se vai procurar na ordem em que aparecem na expressatildeo

Se um caractere eacute normal (natildeo eacute um dos especiais mostrados adiante) ele especifica uma ocorrecircncia daquele caractere

Ex J eacute uma expressatildeo regular que corresponde a qualquer string onde ocorra J Jaacute JA soacute corresponde a strings que tenham JA dentro

Exs (IDL)

IDLgt strs=[JJJJJJaJAjaJa]

IDLgt printstregex(strsJboolean) 1 1 1 0 1

IDLgt printstregex(strsJAboolean) 0 0 1 0 0

4289

Expressotildees regulares - regras - caracteres especiaisCaracteres especiais tecircm outros significados Para significar literalmente aquele caractere deve ser escapado (escaped) com um

Siacutembolo significado exemplo Corresponde(m) Escape o caractere seguinte deve ser interpretado

literalmente natildeo como especial aa

Qualquer caractere ab ajb aab abb jafbc

+ Uma ou mais repeticcedilotildees do que vem agrave esquerda a+b ab aab bab baabh

() Subexpressatildeo para agrupar termos afetados por um caractere especial (como parecircnteses em notaccedilatildeo matemaacutetica)

(ab)+c abc ababc dabababcg

Zero ou mais repeticcedilotildees dos termos agrave esquerda ab abbaab caaabg

Zero ou uma repeticcedilatildeo dos termos agrave esquerda ab b ab cabd cbd

| Alternaccedilatildeo qualquer um dos dois agrave esquerda a|bc ac bc jacd jbcd

n Exatamente n repeticcedilotildees do termo agrave esquerda a2b aab daaabg

n1n2 De n1 a n2 repeticcedilotildees do termo agrave esquerda a12b ab aab aaab gaaabbd

^ Acircncora (no comeccedilo) nada agrave esquerda ^ab ab abb

$ Acircncora (no fim) nada agrave direita ab$ abaab

[] Conjunto de valores (explicado adiante)

4389

Expressotildees regulares - regras - conjuntos de valores

[] denota um conjunto de valores que pode conter

Uma lista de coisas que devem corresponder Ex [abc] signfica qualquer caractere no conjunto abc Correspondem a esta

expressatildeo abcabha

Uma lista de coisas que natildeo podem corresponder [^abc] significa qualquer coisa que natildeo seja a b ou c Correspondem a esta

expressatildeo d jgs gg

Faixas de valores [0-9] signfica qualquer diacutegito [0-9a-zA-Z] significa qualquer diacutegito ou letra

Classes de valores como algumas faixas e outros conjuntos ocorrem com muita frequumlecircncia haacute nomes

especiais para eles Estes (em IDL) vecircm entre [] ex [[digit] significa o mesmo que [0-9]

4489

Expressotildees regulares - regras - classes de valores

Classe signficado

alnum Caracteres alfanumeacutericos 0-9a-zA-Z

alpha Caracteres alfabeacuteticos a-zA-Z

cntrl Caracteres de controle ASCII (natildeo visiacuteveis coacutedigos 1 a 31 e 127)

digit Diacutegitos (decimais) 0-9

graph Caracteres visiacuteveis ASCII 33 a 126 (natildeo inclui o espaccedilo)

lower Letras minuacutesculas a-z

print Caracteres ldquoimprimiacuteveisrdquo (visiacuteveis e o espaccedilo) ASCII 32 a 126

punct Caracteres de pontuaccedilatildeo $amprsquo()+-lt=gt[]^_lsquo|~

space Os caracteres ldquoem brancordquo (blank) espaccedilo tab tab vertical CR LF (ASCII 32 e 9-13)

upper Letras maiuacutesculas A-Z

xdigit Diacutegitos hexadecimais 0-9A-Fa-f

lt Comeccedilo de palavra (palavra definida como sequumlecircncia de coisas natildeo space)

gt Fim de palavra (palavra definida como sequumlecircncia de coisas natildeo space)

Estas satildeo apenas as principais Algumas implementaccedilotildees tecircm muito mais (em particular nas linguagens que usam Unicode nativamente)

4589

Expressotildees regulares - exemplos

Determinar se strings satildeo nuacutemeros (Ex IDL)

IDLgt str=[9-18 875-812-45913E9-98d7a188d032f5]

Inteiros

IDLgt intexpr=^[-+][0-9]+$

IDLgt printstregex(strintexprboolean) 1 1 0 0 0 0 0 0 0 0

Ponto flutuante

IDLgt fpexpr=^[-+](([0-9][0-9]+)|([0-9]+[0-9]))([eEdD][-+][0-9]+)$

IDLgt printstregex(strfpexprboolean) 1 1 0 1 1 1 1 1 0 0

Sinal opcional

1 ou mais diacutegitos

Sinal opcional

0 ou mais diacutegitos opcionalmente seguidos de um ponto e 1 ou mais diacutegitos

1 ou mais diacutegitos opcionalmente seguidos de um ponto e 0 ou mais diacutegitos

ou Expoente opcional letra do expoente seguida de sinal opcional seguido de um ou mais diacutegitos

4689

Expressotildees regulares ndash extraccedilatildeo

Interpretadores de expressotildees regulares costumam oferecer mais que apenas testar se um string corresponde a uma expressatildeo

Em geral tambeacutem podem retornar que parte(s) do string corresponde(m) agrave expressatildeo

Ex (IDL) Determinar se um string conteacutem uma data incluindo os formatos

IDLgt dates=[2011-01-312011 1 3120110131something done on y2011m1d31 with something]

E extrair a data de dentro do string

IDLgt expr=[0-9]4[0-9]12[0-9]12

(4 diacutegitos)(qualquer separador)(1 a 2 diacutegitos)(qualquer separador)(1 a 2 diacutegitos)

IDLgt printstregex(datesexprextract)format=(A)2011-01-312011 1 31201101312011m1d31

Como agora separar ano mecircs e dia Com uma busca e uma extraccedilatildeo para cada Poderia ser mais eacute mais faacutecil com uma uacutenica expressatildeo regular

4789

Expressotildees regulares - aleacutem de apenas testes

Tambeacutem podem retornar que parte(s) do string correspondem agrave expressatildeo toda e agraves suas subexpressotildees (partes da expressatildeo delimitadas por parecircnteses)

Ex (IDL) Separar pedaccedilos de datas Neste caso para a expressatildeo ficar menor assumindo um formato simples (yyyy-mm-ddThhmmssfff) Mas poderia ser um formato mais livre como no exemplo anterior

IDLgt str=Stuff observed on 2011-01-31T123924983 with some instrumentIDLgt expr=([0-9]4)-([0-9]2)-([0-9]2)T([0-9]2)([0-9]2)([0-9]2[0-9]3)

(quatro diacutegitos)-(2 diacutegitos)-(2 diacutegitos)T(2 diacutegitos)(2 diacutegitos)(2 diacutegitos3 diacutegitos)

IDLgt pieces=stregex(strexprextractsubexpr)IDLgt printpiecesformat=(A)2011-01-31T12392498320110131123924983IDLgt d=julday(pieces[2]pieces[3]pieces[1]pieces[4]pieces[5]pieces[6])IDLgt printdformat=(F166) 2455593027372

Expressatildeo inteiraPrimeira subexpressatildeoSegunda subexpressatildeoTerceira subexpressatildeoQuarta subexpressatildeoQuinta subexpressatildeoSexta subexpressatildeo

4889

Expressotildees regulares - referecircncias httpxkcdcom208

Viacutedeos do Software Carpentry

httpsoftware-carpentryorg4_0regexp

4989

Arquivos

Quase todo programa precisa armazenar dados em arquivos

Podem ser pequenos arquivos de paracircmetros ou enormes arquivos de dados produzidos ou a processar

Apesar do sugerido pela praacutetica comum arquivos texto natildeo satildeo sempre a melhor escolha para armazenar dados - e haacute muitas formas diferentes de os usar

Qual eacute a melhor escolha

Assim como para linguagens ou contecirciners natildeo existe ldquoo melhor formatordquo Cada um tem suas vantagens e desvantagens

Dados diferentes (mesmo se usados pelos mesmos programas) em geral se adequam melhor a formatos diferentes

5089

Arquivos - texto X binaacuterios

Em qualquer formato arquivos satildeo armazenados como diacutegitos binaacuterios

Mas haacute duas formas principais como eles podem ser codificados

Arquivos baseados em texto (text files)

Dados satildeo transformados em caracteres usando alguma formataccedilatildeo (mesmo se impliacutecita) e escritos com alguma codificaccedilatildeo de texto (comumente mas natildeo necessariamente ASCII)

Um arquivo texto eacute um ou mais strings As mesmas conversotildees tecircm que ser feitas depara outros tipos

Arquivos ldquobinaacuteriosrdquo (binary files)

Embora todo arquivo seja binaacuterio este nome costuma ser usado soacute para aqueles em que os dados natildeo estatildeo na forma de texto

Com frequumlecircncia (nem sempre) os dados satildeo gravados de forma idecircntica a como satildeo armazenados na memoacuteria

Muitos formatos usam uma mistura de partes em texto e partes binaacuterias

Um cabeccedilalho (header) de texto que daacute informaccedilotildees (metadados) sobre os dados armazenados na parte binaacuteria que vem depois

O cabeccedilalho conteacutem em especial informaccedilotildees sobre como ler os dados binaacuterios

5189

Arquivos - texto X binaacuterios

Vantagens de arquivos texto

Legiacuteveis por pessoas (human readable)

Podem ser auto-suficientes todo o necessaacuterio para os ler e entender o que conteacutem pode ser obtido olhando o arquivo

Satildeo os menos especiacuteficos a linguagens software normalmente satildeo escritos em ASCII ou Unicode e sempre haacute algum suporte a ler escrever texto em linguagens software

Haacute alguns formatos padratildeo para texto (exs CSV XML) que satildeo suportados em muitas plataformas diferentes

5289

Arquivos - texto X binaacuterios

Vantagens de arquivos binaacuterios

Em geral natildeo haacute conversotildees entre o os dados como armazenados na memoacuteria O que torna o armazenamento mais eficiente e sem alteraccedilotildees nos valores

A maior parte dos formatos padronizados eacute binaacuteria Exs FITS cube CDF NetCDF HDF HDF5 JPEG JPEG2000 TIFF GeoTIFF MPEG etc

Eacute mais comum que haja bibliotecas prontas (ateacute de alto niacutevel) para consulta leitura e gravaccedilatildeo

Os formatos melhor desenhados satildeo autodocumentados (em texto ou binaacuterio) para os ler natildeo eacute necessaacuterio conhecimento preacutevio sobre como os dados foram armazenados

Toda linguagem plataforma costuma ter seu formato binaacuterio mais nativo que costuma ser o mais faacutecil para leitura gravaccedilatildeo Em particular nas de alto niacutevel que tecircm formatos autodocumentados (especialmente

em IDL R Python Java)

Muitos formatos tecircm opccedilatildeo de compressatildeo dos dados

5389

Arquivos - proprietaacuterios X padratildeo

Independente da escolha texto binaacuterio programas devem escolher entre usar um formato proacuteprio ou um formato padronizado

A principal vantagem de formatos proacuteprios eacute que satildeo definidos da forma mais conveniente para a aplicaccedilatildeo que os usa simplificando leitura e gravaccedilatildeo e potencialmente otimizando recursos (acesso ao disco tamanho do arquivo etc)

A principal desvantagem de formatos proacuteprios eacute ser necessaacuterio escrever todo o coacutedigo para os ler gravar

Pode dar mais trabalho que usar um formato geneacuterico que natildeo seja exatamente o que melhor se encaixa na aplicaccedilatildeo

O coacutedigo para processar o formato em geral vai ser menos completo e conveniente de usar que o de um formato bem estabelecido usado por muitos outros em muitos ambientes

Cada novo software que for usar estes arquivos vai precisar compartilhar do mesmo coacutedigo ou precisar de coacutedigo novo (em particular se em outra linguagem) para ler gravar naquele formato

Eacute necessaacuterio documentar o formato e decidir sobre como ele seraacute definido

Se outros jaacute colocaram muito trabalho desenvolvendo bons formatos padratildeo bem suportados em muitos ambientes por que ter o trabalho de reinventar (e reprogramar redocumentar e retestar) a roda

5489

Arquivos - padrotildees comuns em astronomia (exs adiante)

Texto

CSV Comma-separated values - bem suportado por muitos softwares

ldquoColunas fixasrdquo Natildeo eacute um padratildeo bem definido mas eacute praacutetica comum para tabelas (2D)

XML Extensible Markup Language - O padratildeo texto mais flexiacutevel de grande uso em programaccedilatildeo geral para armazenar qualquer coisa com frequumlecircncia de forma hieraacuterquica Bem suportado por linguagens modernas (e modernizadas) e bibliotecas das principais

linguagens gerais Alta complexidade o torna trabalhoso de usar

5589

Arquivos - padrotildees comuns em astronomia (exs adiante)Binaacuterios

FITS Flexible Image Transport System - o mais comum para observaccedilotildees astronocircmicas Conteacutem os dados (em geral arrays 1D 2D ou 3D) e documentaccedilatildeo (nos cabeccedilalhos) sobre a origem e caracteriacutesticas dos dados Tambeacutem usado para armazenar tabelas de dados quaisquer mesmo que natildeo sejam observaccedilotildees (especialmente pelo STSCI) Variam muito em qualidade de documentaccedilatildeo

NetCDF Network Common Data Form - evoluccedilatildeo do CDF autodocumentado eacute comum e bem suportado para vaacuterios arrays de dados

HDF5 Hierarchical Data Format ndash autodocumentado comum e bem suportado permitindo aleacutem de simples arrays estruturas (eacute um formato hieraacuterquico)

Formatos de imagens JPEG JPEG2000 TIFF GeoTIFF etc - voltados para arrays 2D3D de inteiros ou (em alguns casos) reais com ou sem compressatildeo JPEG2000 tem caracteriacutesticas mais avanccediladas como imagens multiresoluccedilatildeo

Formatos vetoriais PS EPS DXF SHP SVG - variados niacuteveis de suporte a armazenamento de vetores e formas em 2D ou 3D

ISIS Cube semelhante em caracteriacutesticas ao FITS mais usado em sensoriamento remoto geociecircncias e ciecircncias planetaacuterias em geral para observaccedilotildees 1D 2D ou 3D

Formatos nativos de linguagens todo o trabalho de leitura e gravaccedilatildeo eacute feito automagicamente pela biblioteca padratildeo em IDL R Python Java

5689

Arquivos texto - newlines

Apesar do que possa parecer arquivos texto natildeo tecircm intrinsecamente vaacuterias linhas Arquivos texto satildeo soacute uma sequumlecircncia 1D de caracteres em alguma codificaccedilatildeo Separaccedilatildeo em linhas (equivalente a interpretar o arquivo como 2D em linhas e colunas) eacute

especificada por convenccedilotildees Natildeo haacute apenas uma convenccedilatildeo para o fim de linhas

A mais primitiva convenccedilatildeo eacute separaccedilatildeo nenhuma estipula-se que linhas tenham um nuacutemero fixo N de caracteres e cabe ao software que lecirc o arquivo entender que uma linha nova ocorre regularmente a cada N caracteres

Eacute a forma menos portaacutevel e mais inconveniente eacute necessaacuterio o conhecimento preacutevio (ou por inspeccedilatildeo do arquivo) de quantos caracteres haacute por linha

A maior parte dos editores de texto natildeo vai saber separar linhas desta forma (por falta deste conhecimento preacutevio) Exemplo (de um FITS real)

SIMPLE = T Fits standard BITPIX = 16 Bits per pixel NAXIS = 0 Number of axes EXTEND = T File may contain extensions

O que com as linhas quebradas nos lugares certos seria

SIMPLE = T Fits standard BITPIX = 16 Bits per pixel NAXIS = 0 Number of axes EXTEND = T File may contain extensions

5789

Arquivos texto - newlines

A forma mais comum de especificar linhas eacute com um marcador do final de linha (newline)

Eacute um caractere especial natildeo normalmente presente no texto que serve para marcar fim de linhas

Mas natildeo haacute soacute um padratildeo de newline Os mais comuns

LF (Line Feed ASCII 10) ndash Unix Linux Mac OS X

CR - (Carriage Return ASCII 13) - Mac OS lt10

CR+LF (CR seguido de LF) - Windows DOS

Eacute o motivo de o Notepad (Windows) natildeo entender as quebras de linha de arquivos escritos com o formato nativo de Linux o arquivo soacute tem LF enquanto o editor espera CR+LF

Alguns sistemas (strings em vaacuterias linguagens por exemplo) usam o coacutedigo de escape n para indicar newline que eacute codificado de acordo com o padratildeo sendo usado

Em geral bibliotecas de leitura e gravaccedilatildeo de arquivos usam (default pelo menos) o newline nativo do sistema em que satildeo usadas

Programas de conversatildeo entre os sistemas satildeo comuns (ex dos2unix)

O Wordpad identifica se for usado soacute LF e quebra as linhas de acordo

5889

Arquivos - texto - CSV

Comma-separated values

O formato mais padronizado para tabelas (arrays 2D) em texto (frequentemente mas natildeo necessariamente ASCII)

Bem suportado por bibliotecas padratildeo de linguagens e outros softwares (Excel Calc Origin Google Docs etc)

Conteacutem Linhas de cabeccedilalho (opcionais mas recomendadas) linhas com qualquer texto geral

descrevendo o arquivo e em geral uma linha de tiacutetulo para as colunas da tabela Uma (apenas uma) tabela onde todas as linhas tecircm o mesmo nuacutemero de colunas

Colunas separadas por viacutergulas (opcionalmente pode ser outro separador) Linhas terminadas por newline (qualquer que seja) Strings delimitados por ldquo ldquo

Ex

NAMECALMPOSFILNAMEECHLPOSDISPPOSTARGNAMEPOSDIRCLASSMJD-OBSITIMECOADDSdec18s00010NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001dec18s00020NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001dec18s00120NIRSPEC-5-AO635800364500itan140NIRSPEC-5-AOp2 TITAN5408763000001dec18s00140NIRSPEC-5-AO626300364500itan140NIRSPEC-5-AOp1 TITAN5408763000001dec18s00151NIRSPEC-5-AO626300364500itan140NIRSPEC-5-AOp1ARC5408764000001dec18s00160NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001

Natildeo eacute necessaacuterio que as colunas tenham largura constante

Cabeccedilalho

5989

Arquivos - texto - CSVHaacute amplo suporte a leitura e gravaccedilatildeo de CSV sem precisar recorrer a procedimentos de baixo niacutevel

Podem ser diretamente importados em Excel Calc Origin Google Docs ou lido facilmente com bibliotecas padratildeo comuns Ex (IDL)

IDLgt c=read_csv(filesearch_scamcsvheader=h)IDLgt printhNAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS

IDLgt helpc Structure ltc8bca508gt 11 tags length=5256 data length=5248 refs=1 FIELD01 STRING Array[41] FIELD02 LONG Array[41] FIELD03 STRING Array[41] FIELD04 DOUBLE Array[41] FIELD05 DOUBLE Array[41] FIELD06 STRING Array[41] FIELD07 STRING Array[41] FIELD08 STRING Array[41] FIELD09 STRING Array[41] FIELD10 DOUBLE Array[41] FIELD11 LONG Array[41]

IDLgt printcfield01[03]dec18s0001 dec18s0002 dec18s0003 dec18s0004

IDLgt printcfield03[03]NIRSPEC-5-AO NIRSPEC-5-AO NIRSPEC-5-AO NIRSPEC-5-AO

6089

Arquivos - texto - CSVEx (IDL) Criaccedilatildeo de um CSV com uma tabela de valores

Criaccedilatildeo de 3 arrays 1D (12 elementos) um para cada coluna

IDLgt x=dindgen(3)IDLgt y=dindgen(4)IDLgt xx=reform(rebin(x34)12)IDLgt yy=reform(rebin(reform(y14)34)12)IDLgt f=xx+yy10IDLgt helpxxyyfXX DOUBLE = Array[12]YY DOUBLE = Array[12]F DOUBLE = Array[12]

Escrita do arquivo

IDLgt write_csvexamplecsvxxyyfheader=[XYX+10Y]

ResultadoXYX+10Y000000000000000000000000100000000000000010000000200000000000000020000000000000001000000010000000100000001000000011000000()

6189

Arquivos - texto - ldquoColunas regularesrdquoFixed column width

Natildeo eacute exatamente um padratildeo Eacute uma praacutetica comum

Armazena uma tabela (array 2D) de forma regular simples de ser interpretada e lida

Costumam ter linha(s) de cabeccedilalho descrevendo o conteuacutedo do arquivo em geral com uma linha para os nomes das colunas

As demais linhas conteacutem os dados sempre ocupando a mesma largura por coluna e escritos no mesmo formato em cada coluna

Costumam ser simples de ler inclusive interativamente (exs Excel Calc Origin read_ascii)

Ex (IDL) Uma simples tabela soacute de nuacutemeros

wavl CH4=33 wavl CH4=25 wavl CH4=10 wavl CH4=08 wavl CH4=05 wavl CH4=026 wavl CH4=02 477330000 0090130 477330000 0091110 477330000 0089250 477330000 0087000 477330000 0087140 477330000 0090080 477330000 0088110 480040000 0090930 480040000 0091930 480040000 0090160 480040000 0087930 480040000 0088110 480040000 0090950 480040000 0089090 482750000 0091710 482750000 0092730 482750000 0091060 482750000 0088850 482750000 0089080 482750000 0091810 482750000 0090060 485450000 0092530 485450000 0093570 485450000 0092000 485450000 0089810 485450000 0090100 485450000 0092730 485450000 0091090

IDLgt a=read_ascii(specs_27s_ntxtdata_start=1header=header)IDLgt printheader wavl CH4=33 wavl CH4=25 wavl CH4=10 wavl CH4=08 wavl CH4=05 wavl CH4=026 wavl CH4=02 IDLgt helpa Structure ltd423c9a8gt 1 tags length=224 data length=224 refs=1 FIELD01 FLOAT Array[14 4]

6289

Arquivos - texto - ldquoColunas regularesrdquoJaacute um arquivo um pouco mais difiacutecil de ler

NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS dec18s0001 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0002 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0003 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 FLAT 5408757812500 460000 5 dec18s0004 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 DARK 5408757812500 460000 5

Por ter colunas de tipos diferentes (strings inteiros reais) natildeo eacute possiacutevel o ler em um simples array Mas eacute faacutecil o colocar em uma estrutura de arrays onde cada campo eacute uma coluna

Especificando interativamente como interpretar as linhasIDLgt templ=ascii_template(filesearch_scamtxt)

Nome do campo (default mostrado)

Tipo do campo (identificado automaticamente)

Posiccedilatildeo (caracter) do comeccedilo (identificada automaticamente)

Linha de exemplo para verificar as colunas

6389

Arquivos - texto - ldquoColunas regularesrdquoDepois de feito o template o arquivo pode ser lido com apenas

IDLgt a=read_ascii(filesearch_scamtxttemplate=templ)IDLgt helpa Structure ltd4ec4608gt 11 tags length=416 data length=416 refs=1 FIELD01 STRING Array[4] FIELD02 LONG Array[4] FIELD03 STRING Array[4] FIELD04 FLOAT Array[4] FIELD05 FLOAT Array[4] FIELD06 STRING Array[4] FIELD07 STRING Array[4] FIELD08 STRING Array[4] FIELD09 FLOAT Array[4] FIELD10 FLOAT Array[4] FIELD11 LONG Array[4]IDLgt printafield01dec18s0001 dec18s0002 dec18s0003 dec18s0004IDLgt printafield04 626300 626300 626300 626300

O template (uma estrutura contendo dados sobre como ler o arquivo) pode ser usado para outros arquivos no mesmo formato No lugar de ter sido criado interativamente poderia ter sido lido de algum arquivo Poderia ter especificado nomes para os campos que seriam mais amigaacuteveis que coias como FIELD11

6489

Arquivos - texto - XML

Extensible Markup Language

Admite grande flexibilidade e por isso pode ter alta complexidade

Valores satildeo colocados dentro de uma estrutura em hieraacuterquica (em uma aacutervore) com os noacutes identificados pelos seus nomes (chaves)

Largamente usado em muitas aacutereas para armazenar conjuntos arbitraacuterios de quaisquer estruturas de dados

A maioria das aplicaccedilotildees usa um formato que eacute um subconjunto do XML especificado por um Schema comumente em um arquivo XML DTD (Document Type Definition)

6589

Arquivos - texto ndash XML ndash exemplos de usos

Armazenamento de dados de aplicaccedilotildees web (comum para exportar importar dados MediaWiki DokuWiki WordPress ADS Lattes etc)

Documentos Office (docx pptx xlsx) OpenOffice (odt opd ods)

Como versotildees de outros formatos FITSML XDF

ldquoScientific Dataset XML NASAs Astronomical Data Center (ADC) sponsors a number of research projects that

use XML for scientific data representation The XML activities at the ADC are sponsored and supported by the NASA Office of Space Science Applied Information Systems Research Program (AISRP)rdquo - httpxmlcoverpagesorgnasa-adchtml

Astronomical Instrument Markup Language (AIML)

SVG ndash Scalable Vector Graphics

Muitas de outras aplicaccedilotildees listadas em httpxmlcoverpagesorgxmlhtmlapplications

6689

Arquivos - texto ndash XML - exemploltxml version=10 gtltDOCTYPE Xdmf SYSTEM Xdmfdtd []gtltXdmf xmlnsxi=httpwwww3org2001XInclude Version=20gt ltDomaingt lt-- Example of Basic Topologies --gt ltInformation Name=Descriptiongt Example of a Polyvertex Topology ltInformationgt ltGrid Name=Polyvertex GridType=Uniformgt ltTopology TopologyType=Polyvertex Dimensions=3 NodesPerElement=3gt ltDataItem Format=XML Dimensions=3 3 NumberType=Floatgt 0 1 2 4 5 6 8 9 10 ltDataItemgt ltTopologygt ltGeometry Type=XYZgt ltDataItem Format=XML Dimensions=4 4 3gt 00 00 00 10 00 00()Que mostra que a interpretaccedilatildeo (parsing) de XML eacute em geral complexa

6789

Arquivos - texto - XML

Haacute muitas bibliotecas de alto niacutevel para fazer o processamento (parsing) e entregar os dados em uma estrutura conveniente

A complexidade em processar XML estaacute em decidir o que fazer com os dados jaacute que os arquivos podem ser muito complexos

As APIs (Application Programming Interfaces) mais comuns para processar XML que satildeo implementadas em muitas linguagens

DOM (Document Object Model) ndash manteacutem todo o conteuacutedo do em uma estrutura de dados (em geral uma aacutervore) em uma variaacutevel (em geral um objeto) Esta pode ser consultada para obter os valores de interesse para os alterar e usada para escrever um arquivo

SAX (Simple API for XML) ndash Interpretador (parser) por objetos O usuaacuterio escreve uma classe herdando da classe SAX provendo os meacutetodos que vatildeo processar os campos agrave medida em que estes satildeo lidos

6889

Arquivos - binaacuterios - FITSFlexible Image Transport System

O formato mais comum para observaccedilotildees astronocircmicas Tambeacutem usado para armazenar quaisquer dados mesmo natildeo relacionados a observaccedilotildees (especialmente tabelas como eacute praacutetica do STSCI)

Conteacutem um (ou mais) cabeccedilalho(s) de texto com metadados (informaccedilotildees sobre os dados como caracteriacutesticas (necessaacuterias para os ler) origem condiccedilotildees em que foram obtidos processamento realizado etc)

SIMPLE = T image conforms to FITS standard BITPIX = 32 bits per data value NAXIS = 2 number of axes NAXIS1 = 1024 NAXIS2 = 1024 BSCALE = 100000 Scaling factor BZERO = 000000 Scaling zero-point TELESCOP= Keck II Telescope SLITNAME= 0041x226 Slit Name SLITPA = 351979 Slit position angle SLITX = 131500 X pixel of the center of the slit LST = 12010446 local apparent sidereal time (()

Depois do cabeccedilalho haacute uma (ou mais) seccedilatildeo(otildees) de dados binaacuterios Costuma(m) ser array(s) 1D (espectros) 2D (imagens) ou 3D (ldquocubos de dadosrdquo)

De inteiros ou reais inteiros satildeo comuns em contagens de instrumentos reais para valores derivados (fluxos intensidades etc)

6989

Arquivos - binaacuterios - FITSNormalmente FITS satildeo lidos escritos por bibliotecas prontas de (relativamente) alto niacutevel usuaacuterio natildeo tem que saber como os dados satildeo armazenados no arquivo nem como os ler escrever Ex (IDL com a biblioteca idlastro)

IDLgt fits_info2dspectrumfits2dspectrumfits has 3 extensionsPrimary header 288 recordsNo dataExtension 1 -- SCI Header 144 records IMAGE ( 1201 1201 )Extension 2 -- ERR Header 72 records IMAGE ( 1201 1201 )Extension 3 -- DQ Header 72 records IMAGE ( 1201 1201 )

IDLgt mydata=readfits(2dspectrumfitsexten_no=1myheader) READFITS Reading FITS extension of type IMAGE READFITS Now reading 1201 by 1201 array

IDLgt extastmyheadermyastIDLgt sz=size(mydatadimensions)IDLgt xy2ad[1sz[0]][1sz[1]]myastcorners_acorners_dIDLgt printcorners_aCorners of the data array from file 2dspectrumfits are at 14487480 33063480

IDLgt printcorners_d -00041264444 00041402222

Obteacutem os dados de coordenadas (WCS) do header

Coloca os dados no array (2D de floats) mydata e o header no array (1D de strings) myheader

Calcula as coordenadas das quinas da imagem atraveacutes do WCS

Provecirc informaccedilotildees sobre o arquivo

7089

Arquivos - binaacuterios - ISIS Cube

Formatos como FITS se adequam muito a ter uma interface de mais alto niacutevel por objetos

Tambeacutem para dados em tabelas FITS muito mais trabalhosos de ler em baixo niacutevel que se adequam muito mais a mapas ou estruturas

Exemplo (de um formato semelhante a FITS ISIS cube)

O objeto ao ser criado lecirc todo o arquivo

cube=pp_editablecube(CM_1553510065_1_ircub)

Meacutetodos fornecem os dados desejados para obter quando necessaacuterio os dados de interesse

Find out the names of the backplanesprintcubegetproperty(backnames)Get the start time of the cubeprintcubegetfromheader(START_TIME)2007-084T100057286Z

Valores no cabeccedilalho podem ser convenientemente fornecidos como um mapa

header=cubeheader_as_hash()printheader[START_TIME]2007-084T100057286Z

7189

Arquivos - binaacuterios ndash ISIS Cube

Os dados satildeo fornecidos como arraysMake a contour plot of the latitudesc=contour(cubegetsuffixbyname(LATITUDE))Get the band with wavelength nearest to 21 (in the units used in the cube)selband=cubegetbandbywavelength(21wavelengths=selwavs)

Interfaces por overload tornam o acesso ainda mais conveniente

selband=cube[21]

selwavs=cube[21]

Retorna um array com a banda de comprimento de onda mais proacuteximo de 21 (microm)

Retorna o comprimento de onda mais proacuteximo de 21 (microm) da banda retornada acima

7289

Arquivos - binaacuterios ndash ISIS Cube Alteraccedilotildees feitas ao conteuacutedo satildeo automaticamente refletidas em todos os

lugares (cabeccedilalho em particular) afetados mantendo o objeto vaacutelido que pode depois ser gravado em um novo arquivo

IDLgt printcubelinescubesamplescubebands 64 64 256

IDLgt helpcubecoreltExpressiongt FLOAT = Array[64 64 256]

IDLgt cubecore=dblarr(100100256)

A linha acima natildeo eacute uma atribuiccedilatildeo eacute uma invocaccedilatildeo de meacutetodo Eacute equivalente acubesetpropertycore=dblarr(100100256)

Eacute o trabalho da funccedilatildeo setproperty decidir se a propriedade passada (core) faz sentido e se fizer fazer todo o trabalho necessaacuterio a esta mudanccedila Para o usuaacuterio eacute tudo automaacutetico e os dados da classe satildeo vaacutelidos o tempo todo

IDLgt helpcubecoreltExpressiongt DOUBLE = Array[100 100 256]

IDLgt printcubelinescubesamplescubebands 100 100 256

IDLgt cubesaveCM_1553510065_1_ir_editedcub

7389

Arquivos - binaacuterios ndash NetCDF e HDF5

Network Common Data Form e Hierarchical Data Format

Os dois uacutenicos formatos bem estabelecidos para dados cientiacuteficos geneacutericos

Armazenam dados como vaacuterias variaacuteveis e seus metadados Para cada variaacutevel haacute (ou pode haver) os metadados

Nome Dimensotildees (do array) Unidades Comentaacuterios

Ambos permitem arrays multidimensionais

Apenas HDF5 permite estruturas (daiacute vem a hierarquia)

Autodocumentados qualquer software que saiba ler um destes formatos lecirc qualquer arquivo sem precisar de conhecimento preacutevio sobre como o arquivo foi gerado

Muito bem suportados em bibliotecas padratildeo e natildeo padratildeo em softwares interativos e visualizadores (inclusive plugins para navegadores)

httpwwwunidataucaredusoftwarenetcdf httpenwikipediaorgwikiHdf5

NetCDF eacute mais simples de usar por natildeo ter hierarquia dando menos trabalho para ler e escrever dados Se hierarquia natildeo eacute necessaacuteria eacute mais conveniente de usar que HDF5

7489

Arquivos - binaacuterios - NetCDF e HDF5Haacute tambeacutem o formato CDL uma versatildeo ASCII do NetCDF A biblioteca padratildeo do NetCDF inclui conversores entre estes formatos

$ ncdump -h refspec_g01_0ncnetcdf refspec_g01_0 dimensions nlay = 51 nwn = 400 nleg = 33 numu = 2 nlev = 52 nphi = 3 ngas = 2 nwnc = 1 scal = 1 v3 = 3 dnl = 1 nk = 1 tdisr = UNLIMITED (0 currently) na = 16

variables float alb(nwn) float z(nlay) float t(nlay) float p(nlay) float wl(nwn) float iof(nwn) float mtau(nwn) float htau(nwn) float hctaus(nwn) float gtau(nwn) float outcos(scal) float phi(nleg) float phic(scal) float umu(numu) float flux(v3 nwn nlev) float mix(nlay ngas) float c(nlay) float psat(nlay) float ga(nwnc) float wlc(nwnc) float inc(scal) int dm(scal) int ord(scal) float fbeam(scal) float wn(nwn) float tautot(nwn nlay) float htaus(nwn nlay) float htaux(nwn nlay) float taug(nwn nlay) float phase(nwn nlay nleg) float ssa(nwn nlay) float uu(nwn nphi nlev numu) float u0u(nwn nlev numu) float tray(nwn nlay) float gtauo(tdisr nwn nlay)

Haacute 14 variaacuteveis usadas como dimensotildees para as 35 variaacuteveis que satildeo arrays

Ex alb(nwn) indica que alb eacute um array 1D de nwn elementos

nwn estaacute armazenado como uma das dimensotildees e eacute 400 portanto alb tem 400 elementos

Parte do conteuacutedo de um arquivo NetCDF em formato CDL (gerado pelo programa ncdump)

7589

Arquivos - binaacuterios - NetCDF e HDF5Conteuacutedo daquele arquivo visualizado com o ncview (acompanha a biblioteca NetCDF padratildeo)

7689

Arquivos - binaacuterios - NetCDF e HDF5O conteuacutedo de todo o arquivo pode ser lido facilmente com as bibliotecas disponiacuteveis e armazenado em contecirciners convenientes Usando um objeto que gera um resultado um pouco mais conveniente

IDLgt h=pp_readncdf(refspec_g01_0nchash)IDLgt printhvar_dims ltObjHeapVar229(HASH)gtvars ltObjHeapVar152(HASH)gtdims ltObjHeapVar118(HASH)gt

IDLgt printh[vars]T 173203 175459 175848 176001 175975 Z 431869 418858 406067 393403 380464 FLUX 300660 145536 0705180 0341669 0165532 PHASE 100000 0779034 0660858 0542052 0449983 TAUTOT0694377 0693420 0693474 0693540 0693636()

IDLgt help(h[vars])[TAUTOT]ltExpressiongt FLOAT = Array[51 400]

IDLgt print(h[var_dims])[TAUTOT]NLAY NWN

IDLgt print(h[dims])[(h[var_dims])[TAUTOT]]NLAY 51NWN 400

7789

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5)

Visualizaccedilatildeo da variaacutevel selecionada

Metadados e alguns valores da variaacutevel selecionada

Variaacutevel a ser criada com o conteuacutedo desta variaacutevel do arquivo

Hierarquia das variaacuteveis do arquivo

7889

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5) Imported variable az

IDLgt helpaz Structure ltd5723f38gt 13 tags length=448 data length=444 refs=1 _NAME STRING az _ICONTYPE STRING binary _TYPE STRING DATASET _FILE STRING INTENSI_test_409OUTh5 _PATH STRING _DATA DOUBLE Array[38] _NDIMENSIONS LONG 1 _DIMENSIONS ULONG64 Array[1] _NELEMENTS ULONG64 38 _DATATYPE STRING H5T_FLOAT _STORAGESIZE ULONG 8 _PRECISION LONG 64 _SIGN STRING

IDLgt printaz_data 00000000 10000000 20000000 30000000 40000000 50000000 60000000 80000000 ()

7989

Arquivos - binaacuterios - imagens

JPEG JPEG200 TIFF GeoTIFF etc

Os formatos comuns de imagens satildeo bem suportados em muacuteltiplas plataformas para uso dentro de programas e interativamente

Alguns formatos tecircm opccedilatildeo de compressatildeo com perda eou sem perda

Armazenam imagens como arrays 2D ou 3D (3D frequumlentemente limitado a 3 ou 4 em uma das dimensotildees uma imagem em 3 ou 4 bandas) de inteiros ou (em alguns formatos) reais

Alguns formatos permitem armazenar metadados para caracterizar as imagens armazenadas

JPEG2000 e GeoTIFF (um subconjunto de TIFF) comuns em astronomia e aacutereas proacuteximas

8089

Arquivos - binaacuterios ndash imagens ndash exemplo (IDL)IDLgt printquery_tiff(issmap_2009tiffinfogeotiff=geo) 1

IDLgt helpinfo Structure ltd4eca4b8gt 18 tags length=144 data length=132 refs=1 CHANNELS LONG 4 DIMENSIONS LONG Array[2] IMAGE_INDEX LONG 0 NUM_IMAGES LONG 1 PIXEL_TYPE INT 1 TYPE STRING TIFF BITS_PER_SAMPLE LONG 8 POSITION FLOAT Array[2] RESOLUTION FLOAT Array[2] UNITS LONG 2 TILE_SIZE LONG Array[2] DESCRIPTION STRING ISS (2009) DATE_TIME STRING 20100218 012436()

IDLgt helpgeo Structure ltd4efa1b8gt 10 tags length=264 data length=262 refs=1 MODELPIXELSCALETAG DOUBLE Array[3] MODELTIEPOINTTAG DOUBLE Array[6 4] GEOGRAPHICTYPEGEOKEY INT 4035 GEOGSEMIMAJORAXISGEOKEY DOUBLE 25750000 GEOGSEMIMINORAXISGEOKEY DOUBLE 25750000()

IDLgt myimage=read_tiff(issmap_2009tiff) Lecirc a imagem para o array myimage

Obteacutem informaccedilotildees sobre o arquivo

8189

Arquivos - binaacuterios ndash formatos nativosLinguagens como IDL R Python Java tecircm seu formato nativo binaacuterio acessado em alto niacutevel Basta mandar salvar ler variaacuteveis no do arquivo a biblioteca padratildeo automagicamente faz todo o trabalho de decidir como gravar ler os dados

Conveniente de usar na proacutepria linguagem Mas raramente existem bibliotecas para ler gravar o formato nativo de uma linguagem a partir de outra Ex (IDL)

IDLgt savefile=2dspectrumsavmydatamyheadercorners_dcorners_averbosecompress SAVE Portable (XDR) compressed SAVERESTORE file SAVE Saved variable MYDATA SAVE Saved variable MYHEADER()

Pode ser lido com apenas (haacute formas mais elaboradas)

IDLgt restore2dspectrumsavverbose RESTORE Portable (XDR) compressed SAVERESTORE file RESTORE Save file written by ltunknowngtltunknowngt Thu Jan 27 191422 2011 RESTORE IDL version 801 (linux x86_64) RESTORE Restored variable MYDATA RESTORE Restored variable MYHEADER()

IDLgt helpmydatamyheadercorners_dcorners_aMYDATA FLOAT = Array[1201 1201]MYHEADER STRING = Array[144]()

8289

Arquivos - processamento em baixo niacutevel

Nem sempre um formato padratildeo eacute a melhor escolha para o problema

Nem sempre haacute escolha (pode-se ter que trabalhar com arquivos que jaacute foram escritos em algum formato proprietaacuterio)

Agraves vezes o formato eacute padratildeo mas natildeo haacute bom suporte a ele disponiacutevel

Em todos estes casos eacute necessaacuterio escrever rotinas em baixo niacutevel que vatildeo ler processar diretamente o conteuacutedo do arquivo

Preferencialmente criando interfaces de alto niacutevel para o programa que vai as usar

8389

Arquivos - processamento em baixo niacutevel - texto

Tomando o exemplo anterior onde as colunas eram de diferentes tipos

NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS dec18s0001 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0002 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0003 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 FLAT 5408757812500 460000 5 dec18s0004 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 DARK 5408757812500 460000 5

A forma mais simples de o ler diretamente eacute definir uma estrutura para receber cada linha e um array destas estruturas para receber todo o arquivo Ex (IDL)

IDLgt record=namecalmpos0filnameechlpos0d0disppos0d0targnameposdirclassmjd_obsitime0d0coadds0IDLgt nlines=file_lines(filesearch_scamtxt)IDLgt mydata=replicate(recordnlines-1)IDLgt header=

Depois de definidas as variaacuteveis que vatildeo receber os dados o arquivo pode ser lido

IDLgt openrunitfilesearch_scamtxtget_lunIDLgt readfunitheaderIDLgt readfunitmydataformat=(A14I8A15F104F104A18A19A15F158F105I15)IDLgt free_lununit

A gravaccedilatildeo de um arquivo texto poderia ser feita de forma semelhante apenas trocando openr por openw (abrir o arquivo para gravaccedilatildeo natildeo leitura) e readf por printf

O arquivo eacute aberto em uma unidade (unit) usada para especificar de onde eacute feita a leitura

Ao final o arquivo eacute fechado

8489

Arquivos - processamento em baixo niacutevel - texto

O que resulta em

IDLgt printheader NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS

IDLgt helpmydataMYDATA STRUCT = -gt ltAnonymousgt Array[4]

IDLgt helpmydata[0] Structure ltd5e38f68gt 11 tags length=136 data length=124 refs=3 NAME STRING dec18s0001 CALMPOS INT 0 FILNAME STRING NIRSPEC-5-AO ECHLPOS DOUBLE 62630000 DISPPOS DOUBLE 36450000 TARGNAME STRING HD85258 POSDIR STRING NIRSPEC-5-AOp1 CLASS STRING STAR MJD_OBS STRING 54087574 ITIME DOUBLE 10000000 COADDS INT 1

Este caso eacute mais complicado que os mais comuns por haver colunas de strings

Se todas fossem de nuacutemeros natildeo teria sido necessaacuterio especificar o formato explicitamente As colunas teriam sido adivinhadas pela biblioteca que lecirc o arquivo Poderia ter sido lido escrito soacute com um array de nuacutemeros sem estruturas

8589

Arquivos - processamento em baixo niacutevel - binaacuterio

Formatos binaacuterios podem ser definidos de qualquer forma O arquivo eacute apenas um conjunto de bytes Cabe ao software saber como os interpretar

Uma escolha comum para que sejam autodocumentados eacute incluir um cabeccedilalho de texto informando as caracteriacutesticas dos dados necessaacuterias para os ler

Ex (IDL) criar um arquivo que armazene um array de doubles com um cabeccedilalho informando as dimensotildees para que o programa que o lecirc saiba como ler os dados

Inventa dados e abre o arquivo

IDLgt data_to_write=dindgen(34)IDLgt openwunitbinary_exampledatget_lun

Escreve as dimensotildees como texto

IDLgt printfunitdimensions of the double array stored belowIDLgt printfunitsize(data_to_writedimensions)

Escreve os dados binaacuterios

IDLgt writeuunitdata_to_write

Fecha o arquivo

IDLgt free_lununit

Escreve em binaacuterio (write unformatted)

8689

Arquivos - processamento em baixo niacutevel - binaacuterio

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

dimensions of the double array stored below 3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

8789

Arquivos - processamento em baixo niacutevel - binaacuterioA leitura deste arquivo eacute igualmente simples

IDLgt header=IDLgt dims=[00]IDLgt openrunitbinary_exampledatget_lun

Lecirc as dimensotildees (armazenadas como texto)

IDLgt readfunitheaderIDLgt readfunitdims

Lecirc a parte binaacuteria depois de saber as dimensotildees

IDLgt data_read=dblarr(dims)IDLgt readuunitdata_read

Fecha o arquivo

IDLgt free_lununit

Verifica que os dados foram gravados e lidos corretamente

IDLgt printarray_equal(data_to_writedata_read) 1

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Lecirc dados binaacuterios (read unformatted)

8889

Sumaacuterio

5 ndash Slides em httpwwwppenteadonetpeapea04_strings_iopdf Strings Expressotildees regulares Arquivos

httpwwwppenteadonetpea

8989

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89

Strings - processamento natildeo baacutesico

Operaccedilotildees importantes e muito necessaacuterias mas que natildeo satildeo suportadas em todas as linguagens bibliotecas padratildeo

Separaccedilatildeo de partes (Ex IDL)

IDLgt printstrsplit(2011- 131 -extract)format=(A)2011131

Processamento de nomes de arquivos diretoacuterios (Ex IDL)

IDLgt printfile_dirname(some_directoryanother_directorysome_filetxt)some_directoryanother_directory

IDLgt printfile_basename(some_directoryanother_directorysome_filetxt)some_filetxt

IDLgt printfile_basename(another_directorysome_filetxttxt)+_alteredtxtsome_file_alteredtxt

3489

Strings - processamento natildeo baacutesico

Codificaccedilotildees (Ex Python 3)

gtgtgt s=infinite money infinNeuro sign

gtgtgt print(s)infinite money infineuro

gtgtgt print(ascii(s))infinite money u221eu20ac

gtgtgt print(sencode(utf-8))binfinite money xe2x88x9exe2x82xac

3589

Strings - processamento natildeo baacutesico

Perl eacute a linguagem mais avanccedilada para processamento de strings tem suporte nativo a muitas outras operaccedilotildees a semacircntica da linguagem eacute voltada principalmente para processar strings expressotildees regulares (de vaacuterios tipos) natildeo satildeo strings fazem parte da semacircntica

Ex (sem o objetivo que seja compreensiacutevel apenas para indicar o estilo)

Ler um arquivo contendo campos com nomes separados de valores por ()

temperature 10008name some modelx_dimension 100y_dimension 100z_dimension 50()

Armazenado-o em um mapa O que pode ser feito com apenas

While (ltgt) Loop over input linesPut pre-colon text into $1 post-colon into $2 if (m (S+) (+) ) Use $1 as key $2 as value $file_data$1 = $2

3689

Expressotildees regulares - definiccedilatildeo

Expressotildees regulares (regular expressions regex) satildeo a mais poderosa ferramenta para fazer buscas e separar substrings

Regex satildeo uma linguagem com o uacutenico objetivo de especificar propriedades de strings

Implementadas em graus diferentes em todas as linguagens modernas e modernizadas facilita encontrar uma expressatildeo jaacute pronta pois satildeo quase iguais em qualquer linguagem

Estatildeo na biblioteca padratildeo em IDL Python R Perl

Em C++ e Java em bibliotecas comuns (Boost Jregex)

Para que servem

Uma expressatildeo regular especifica propriedades de strings

O interpretador de expressotildees regulares (regular expression engine) recebe a expressatildeo e o string a analisar e determina se o string corresponde (matches) agrave expressatildeo regular

Em alguns casos o interpretador pode tambeacutem informar que parte(s) do string corresponde(m) a que parte(s) da expressatildeo regular e realizar processamentos com estas partes

3789

Expressotildees regulares ndash exemplos de usos Separar partes de strings

Encontrar linhas em arquivos que tenham nomes valores e comentaacuterios e separar estes pedaccedilos

Escalar com comentaacuterio

SLITPA = 351979 Slit position angle

Array 1D sem comentaacuterio (se extendendo por vaacuterias linhas)

BAND_BIN_CENTER = (03505400358950036629003732200379490 0387900104598)

Escalares em diferentes formatos

Total Mechanical Luminosity 15310E+03resources_usedwalltime=005603

Pedaccedilos de nomes

6063 17836E-20 2456 T FeIX((3Pe)3d(2PE)4p_1Po-3s2_3p6_1Se)

Datas separando ano mecircs dia hora (em vaacuterios formatos diferentes)

DATE-OBS= 2006-12-18 universal date of observationDATE_TIME = 2010-07-19T161032START_TIME = 2006-182T225102850Z

3889

Expressotildees regulares ndash exemplos de usos

Separar partes de strings Separar partes de nomes de arquivos (por significarem algo como identificar o

conteuacutedo)

specdec18s0041fitsscamdec18i0054fits15_7_mts_hmpixselh_mr15sav15_7_mts_hwpixselh_mr15sav16_3_mts_hwpixselb_mr16savreadmodel5l_-1_000010000_10000_r05_030_08196_0100000_005000000_1000eps

Determinar se um string eacute um nuacutemero (inteiro real fixo flutuante)

Encontrar identificadores Exs nomes de cataacutelogos endereccedilos HTTPFTP endereccedilos de email

Separar campos em arquivos sendo lidos onde as linhas natildeo tecircm a mesma formataccedilatildeo algumas linhas com colunas separadas por espaccedilos outras por tabs outras por

siacutembolos ignorando linhas de comentaacuterios e linhas vazias

3989

Expressotildees regulares - usoEx (IDL) encontrar nomes de arquivos com algumas propriedades

IDLgt printfilesformat=(A)CM_1477475933_1_viscubCM_1477476864_1_ircubCM_1477476864_1_irgcubCM_1477476864_1_viscubCM_1477477826_1_ircubCM_1477477826_1_irgcubCM_1477477826_1_viscubmosaic2cub

IDLgt printstregex(files+irgcubboolean) 0 0 1 0 0 1 0 0

A expressatildeo regular eacute +irgcub Especifica uma ou mais ocorrecircncias seguidas (+) de qualquer caractere () seguido de uma ocorrecircncia de irgcub (o ponto vem precedido do caractere de

escape () para ser entendido literalmente como um ponto e natildeo como o seu significado especial (qualquer caractere)

Esta aplicaccedilatildeo do interpretador (stregex) retorna um valor Booleano (verdadeirofalso) para cada elemento do string passado (files) que informa se aquele elemento correspondia agravequela expressatildeo regular

Este eacute um exemplo artificial Seria mais faacutecil ter usado strmatch(filesirgcub)

4089

Expressotildees regulares - uso

Em casos como este tipicamente o resultado de stregex seria usado como filtro para selecionar apenas os elementos do array de strings que satisfazem agravequela expressatildeo regular

IDLgt w=where(stregex(files+irgcubboolean)null)IDLgt printfiles[w]format=(A)CM_1477476864_1_irgcubCM_1477477826_1_irgcub

Ex (IDL) Determinar que strings conteacutem uma data no formato yyyy-mm-dd

IDLgt strs=[201002012010-02-012010-2-1aaaa-mm-ddT2010-02-01J]IDLgt printstregex(strs[0-9]4-[0-9]2-[0-9]2boolean) 0 1 0 0 1

Esta expressatildeo regular especifica quatro repeticcedilotildees (4) de diacutegitos (caracteres na faixa [0-9]) seguido de um (-) seguido de duas repeticcedilotildees (2) de dois diacutegitos ([0-9]) seguido de um (-) seguido de duas repeticcedilotildees (2) de dois diacutegitos ([0-9])

Uma expressatildeo regular apenas um pouco mais elaborada poderia corresponder aos 3 formatos de data no array acima E poderia se impedir que a uacuteltima (com outros caracteres antes e depois da data) seja aceita

4189

Expressotildees regulares - regras - caracteres ldquonormaisrdquo

Uma expressatildeo regular usa caracteres ldquonormaisrdquo e especiais para especificar o que se vai procurar na ordem em que aparecem na expressatildeo

Se um caractere eacute normal (natildeo eacute um dos especiais mostrados adiante) ele especifica uma ocorrecircncia daquele caractere

Ex J eacute uma expressatildeo regular que corresponde a qualquer string onde ocorra J Jaacute JA soacute corresponde a strings que tenham JA dentro

Exs (IDL)

IDLgt strs=[JJJJJJaJAjaJa]

IDLgt printstregex(strsJboolean) 1 1 1 0 1

IDLgt printstregex(strsJAboolean) 0 0 1 0 0

4289

Expressotildees regulares - regras - caracteres especiaisCaracteres especiais tecircm outros significados Para significar literalmente aquele caractere deve ser escapado (escaped) com um

Siacutembolo significado exemplo Corresponde(m) Escape o caractere seguinte deve ser interpretado

literalmente natildeo como especial aa

Qualquer caractere ab ajb aab abb jafbc

+ Uma ou mais repeticcedilotildees do que vem agrave esquerda a+b ab aab bab baabh

() Subexpressatildeo para agrupar termos afetados por um caractere especial (como parecircnteses em notaccedilatildeo matemaacutetica)

(ab)+c abc ababc dabababcg

Zero ou mais repeticcedilotildees dos termos agrave esquerda ab abbaab caaabg

Zero ou uma repeticcedilatildeo dos termos agrave esquerda ab b ab cabd cbd

| Alternaccedilatildeo qualquer um dos dois agrave esquerda a|bc ac bc jacd jbcd

n Exatamente n repeticcedilotildees do termo agrave esquerda a2b aab daaabg

n1n2 De n1 a n2 repeticcedilotildees do termo agrave esquerda a12b ab aab aaab gaaabbd

^ Acircncora (no comeccedilo) nada agrave esquerda ^ab ab abb

$ Acircncora (no fim) nada agrave direita ab$ abaab

[] Conjunto de valores (explicado adiante)

4389

Expressotildees regulares - regras - conjuntos de valores

[] denota um conjunto de valores que pode conter

Uma lista de coisas que devem corresponder Ex [abc] signfica qualquer caractere no conjunto abc Correspondem a esta

expressatildeo abcabha

Uma lista de coisas que natildeo podem corresponder [^abc] significa qualquer coisa que natildeo seja a b ou c Correspondem a esta

expressatildeo d jgs gg

Faixas de valores [0-9] signfica qualquer diacutegito [0-9a-zA-Z] significa qualquer diacutegito ou letra

Classes de valores como algumas faixas e outros conjuntos ocorrem com muita frequumlecircncia haacute nomes

especiais para eles Estes (em IDL) vecircm entre [] ex [[digit] significa o mesmo que [0-9]

4489

Expressotildees regulares - regras - classes de valores

Classe signficado

alnum Caracteres alfanumeacutericos 0-9a-zA-Z

alpha Caracteres alfabeacuteticos a-zA-Z

cntrl Caracteres de controle ASCII (natildeo visiacuteveis coacutedigos 1 a 31 e 127)

digit Diacutegitos (decimais) 0-9

graph Caracteres visiacuteveis ASCII 33 a 126 (natildeo inclui o espaccedilo)

lower Letras minuacutesculas a-z

print Caracteres ldquoimprimiacuteveisrdquo (visiacuteveis e o espaccedilo) ASCII 32 a 126

punct Caracteres de pontuaccedilatildeo $amprsquo()+-lt=gt[]^_lsquo|~

space Os caracteres ldquoem brancordquo (blank) espaccedilo tab tab vertical CR LF (ASCII 32 e 9-13)

upper Letras maiuacutesculas A-Z

xdigit Diacutegitos hexadecimais 0-9A-Fa-f

lt Comeccedilo de palavra (palavra definida como sequumlecircncia de coisas natildeo space)

gt Fim de palavra (palavra definida como sequumlecircncia de coisas natildeo space)

Estas satildeo apenas as principais Algumas implementaccedilotildees tecircm muito mais (em particular nas linguagens que usam Unicode nativamente)

4589

Expressotildees regulares - exemplos

Determinar se strings satildeo nuacutemeros (Ex IDL)

IDLgt str=[9-18 875-812-45913E9-98d7a188d032f5]

Inteiros

IDLgt intexpr=^[-+][0-9]+$

IDLgt printstregex(strintexprboolean) 1 1 0 0 0 0 0 0 0 0

Ponto flutuante

IDLgt fpexpr=^[-+](([0-9][0-9]+)|([0-9]+[0-9]))([eEdD][-+][0-9]+)$

IDLgt printstregex(strfpexprboolean) 1 1 0 1 1 1 1 1 0 0

Sinal opcional

1 ou mais diacutegitos

Sinal opcional

0 ou mais diacutegitos opcionalmente seguidos de um ponto e 1 ou mais diacutegitos

1 ou mais diacutegitos opcionalmente seguidos de um ponto e 0 ou mais diacutegitos

ou Expoente opcional letra do expoente seguida de sinal opcional seguido de um ou mais diacutegitos

4689

Expressotildees regulares ndash extraccedilatildeo

Interpretadores de expressotildees regulares costumam oferecer mais que apenas testar se um string corresponde a uma expressatildeo

Em geral tambeacutem podem retornar que parte(s) do string corresponde(m) agrave expressatildeo

Ex (IDL) Determinar se um string conteacutem uma data incluindo os formatos

IDLgt dates=[2011-01-312011 1 3120110131something done on y2011m1d31 with something]

E extrair a data de dentro do string

IDLgt expr=[0-9]4[0-9]12[0-9]12

(4 diacutegitos)(qualquer separador)(1 a 2 diacutegitos)(qualquer separador)(1 a 2 diacutegitos)

IDLgt printstregex(datesexprextract)format=(A)2011-01-312011 1 31201101312011m1d31

Como agora separar ano mecircs e dia Com uma busca e uma extraccedilatildeo para cada Poderia ser mais eacute mais faacutecil com uma uacutenica expressatildeo regular

4789

Expressotildees regulares - aleacutem de apenas testes

Tambeacutem podem retornar que parte(s) do string correspondem agrave expressatildeo toda e agraves suas subexpressotildees (partes da expressatildeo delimitadas por parecircnteses)

Ex (IDL) Separar pedaccedilos de datas Neste caso para a expressatildeo ficar menor assumindo um formato simples (yyyy-mm-ddThhmmssfff) Mas poderia ser um formato mais livre como no exemplo anterior

IDLgt str=Stuff observed on 2011-01-31T123924983 with some instrumentIDLgt expr=([0-9]4)-([0-9]2)-([0-9]2)T([0-9]2)([0-9]2)([0-9]2[0-9]3)

(quatro diacutegitos)-(2 diacutegitos)-(2 diacutegitos)T(2 diacutegitos)(2 diacutegitos)(2 diacutegitos3 diacutegitos)

IDLgt pieces=stregex(strexprextractsubexpr)IDLgt printpiecesformat=(A)2011-01-31T12392498320110131123924983IDLgt d=julday(pieces[2]pieces[3]pieces[1]pieces[4]pieces[5]pieces[6])IDLgt printdformat=(F166) 2455593027372

Expressatildeo inteiraPrimeira subexpressatildeoSegunda subexpressatildeoTerceira subexpressatildeoQuarta subexpressatildeoQuinta subexpressatildeoSexta subexpressatildeo

4889

Expressotildees regulares - referecircncias httpxkcdcom208

Viacutedeos do Software Carpentry

httpsoftware-carpentryorg4_0regexp

4989

Arquivos

Quase todo programa precisa armazenar dados em arquivos

Podem ser pequenos arquivos de paracircmetros ou enormes arquivos de dados produzidos ou a processar

Apesar do sugerido pela praacutetica comum arquivos texto natildeo satildeo sempre a melhor escolha para armazenar dados - e haacute muitas formas diferentes de os usar

Qual eacute a melhor escolha

Assim como para linguagens ou contecirciners natildeo existe ldquoo melhor formatordquo Cada um tem suas vantagens e desvantagens

Dados diferentes (mesmo se usados pelos mesmos programas) em geral se adequam melhor a formatos diferentes

5089

Arquivos - texto X binaacuterios

Em qualquer formato arquivos satildeo armazenados como diacutegitos binaacuterios

Mas haacute duas formas principais como eles podem ser codificados

Arquivos baseados em texto (text files)

Dados satildeo transformados em caracteres usando alguma formataccedilatildeo (mesmo se impliacutecita) e escritos com alguma codificaccedilatildeo de texto (comumente mas natildeo necessariamente ASCII)

Um arquivo texto eacute um ou mais strings As mesmas conversotildees tecircm que ser feitas depara outros tipos

Arquivos ldquobinaacuteriosrdquo (binary files)

Embora todo arquivo seja binaacuterio este nome costuma ser usado soacute para aqueles em que os dados natildeo estatildeo na forma de texto

Com frequumlecircncia (nem sempre) os dados satildeo gravados de forma idecircntica a como satildeo armazenados na memoacuteria

Muitos formatos usam uma mistura de partes em texto e partes binaacuterias

Um cabeccedilalho (header) de texto que daacute informaccedilotildees (metadados) sobre os dados armazenados na parte binaacuteria que vem depois

O cabeccedilalho conteacutem em especial informaccedilotildees sobre como ler os dados binaacuterios

5189

Arquivos - texto X binaacuterios

Vantagens de arquivos texto

Legiacuteveis por pessoas (human readable)

Podem ser auto-suficientes todo o necessaacuterio para os ler e entender o que conteacutem pode ser obtido olhando o arquivo

Satildeo os menos especiacuteficos a linguagens software normalmente satildeo escritos em ASCII ou Unicode e sempre haacute algum suporte a ler escrever texto em linguagens software

Haacute alguns formatos padratildeo para texto (exs CSV XML) que satildeo suportados em muitas plataformas diferentes

5289

Arquivos - texto X binaacuterios

Vantagens de arquivos binaacuterios

Em geral natildeo haacute conversotildees entre o os dados como armazenados na memoacuteria O que torna o armazenamento mais eficiente e sem alteraccedilotildees nos valores

A maior parte dos formatos padronizados eacute binaacuteria Exs FITS cube CDF NetCDF HDF HDF5 JPEG JPEG2000 TIFF GeoTIFF MPEG etc

Eacute mais comum que haja bibliotecas prontas (ateacute de alto niacutevel) para consulta leitura e gravaccedilatildeo

Os formatos melhor desenhados satildeo autodocumentados (em texto ou binaacuterio) para os ler natildeo eacute necessaacuterio conhecimento preacutevio sobre como os dados foram armazenados

Toda linguagem plataforma costuma ter seu formato binaacuterio mais nativo que costuma ser o mais faacutecil para leitura gravaccedilatildeo Em particular nas de alto niacutevel que tecircm formatos autodocumentados (especialmente

em IDL R Python Java)

Muitos formatos tecircm opccedilatildeo de compressatildeo dos dados

5389

Arquivos - proprietaacuterios X padratildeo

Independente da escolha texto binaacuterio programas devem escolher entre usar um formato proacuteprio ou um formato padronizado

A principal vantagem de formatos proacuteprios eacute que satildeo definidos da forma mais conveniente para a aplicaccedilatildeo que os usa simplificando leitura e gravaccedilatildeo e potencialmente otimizando recursos (acesso ao disco tamanho do arquivo etc)

A principal desvantagem de formatos proacuteprios eacute ser necessaacuterio escrever todo o coacutedigo para os ler gravar

Pode dar mais trabalho que usar um formato geneacuterico que natildeo seja exatamente o que melhor se encaixa na aplicaccedilatildeo

O coacutedigo para processar o formato em geral vai ser menos completo e conveniente de usar que o de um formato bem estabelecido usado por muitos outros em muitos ambientes

Cada novo software que for usar estes arquivos vai precisar compartilhar do mesmo coacutedigo ou precisar de coacutedigo novo (em particular se em outra linguagem) para ler gravar naquele formato

Eacute necessaacuterio documentar o formato e decidir sobre como ele seraacute definido

Se outros jaacute colocaram muito trabalho desenvolvendo bons formatos padratildeo bem suportados em muitos ambientes por que ter o trabalho de reinventar (e reprogramar redocumentar e retestar) a roda

5489

Arquivos - padrotildees comuns em astronomia (exs adiante)

Texto

CSV Comma-separated values - bem suportado por muitos softwares

ldquoColunas fixasrdquo Natildeo eacute um padratildeo bem definido mas eacute praacutetica comum para tabelas (2D)

XML Extensible Markup Language - O padratildeo texto mais flexiacutevel de grande uso em programaccedilatildeo geral para armazenar qualquer coisa com frequumlecircncia de forma hieraacuterquica Bem suportado por linguagens modernas (e modernizadas) e bibliotecas das principais

linguagens gerais Alta complexidade o torna trabalhoso de usar

5589

Arquivos - padrotildees comuns em astronomia (exs adiante)Binaacuterios

FITS Flexible Image Transport System - o mais comum para observaccedilotildees astronocircmicas Conteacutem os dados (em geral arrays 1D 2D ou 3D) e documentaccedilatildeo (nos cabeccedilalhos) sobre a origem e caracteriacutesticas dos dados Tambeacutem usado para armazenar tabelas de dados quaisquer mesmo que natildeo sejam observaccedilotildees (especialmente pelo STSCI) Variam muito em qualidade de documentaccedilatildeo

NetCDF Network Common Data Form - evoluccedilatildeo do CDF autodocumentado eacute comum e bem suportado para vaacuterios arrays de dados

HDF5 Hierarchical Data Format ndash autodocumentado comum e bem suportado permitindo aleacutem de simples arrays estruturas (eacute um formato hieraacuterquico)

Formatos de imagens JPEG JPEG2000 TIFF GeoTIFF etc - voltados para arrays 2D3D de inteiros ou (em alguns casos) reais com ou sem compressatildeo JPEG2000 tem caracteriacutesticas mais avanccediladas como imagens multiresoluccedilatildeo

Formatos vetoriais PS EPS DXF SHP SVG - variados niacuteveis de suporte a armazenamento de vetores e formas em 2D ou 3D

ISIS Cube semelhante em caracteriacutesticas ao FITS mais usado em sensoriamento remoto geociecircncias e ciecircncias planetaacuterias em geral para observaccedilotildees 1D 2D ou 3D

Formatos nativos de linguagens todo o trabalho de leitura e gravaccedilatildeo eacute feito automagicamente pela biblioteca padratildeo em IDL R Python Java

5689

Arquivos texto - newlines

Apesar do que possa parecer arquivos texto natildeo tecircm intrinsecamente vaacuterias linhas Arquivos texto satildeo soacute uma sequumlecircncia 1D de caracteres em alguma codificaccedilatildeo Separaccedilatildeo em linhas (equivalente a interpretar o arquivo como 2D em linhas e colunas) eacute

especificada por convenccedilotildees Natildeo haacute apenas uma convenccedilatildeo para o fim de linhas

A mais primitiva convenccedilatildeo eacute separaccedilatildeo nenhuma estipula-se que linhas tenham um nuacutemero fixo N de caracteres e cabe ao software que lecirc o arquivo entender que uma linha nova ocorre regularmente a cada N caracteres

Eacute a forma menos portaacutevel e mais inconveniente eacute necessaacuterio o conhecimento preacutevio (ou por inspeccedilatildeo do arquivo) de quantos caracteres haacute por linha

A maior parte dos editores de texto natildeo vai saber separar linhas desta forma (por falta deste conhecimento preacutevio) Exemplo (de um FITS real)

SIMPLE = T Fits standard BITPIX = 16 Bits per pixel NAXIS = 0 Number of axes EXTEND = T File may contain extensions

O que com as linhas quebradas nos lugares certos seria

SIMPLE = T Fits standard BITPIX = 16 Bits per pixel NAXIS = 0 Number of axes EXTEND = T File may contain extensions

5789

Arquivos texto - newlines

A forma mais comum de especificar linhas eacute com um marcador do final de linha (newline)

Eacute um caractere especial natildeo normalmente presente no texto que serve para marcar fim de linhas

Mas natildeo haacute soacute um padratildeo de newline Os mais comuns

LF (Line Feed ASCII 10) ndash Unix Linux Mac OS X

CR - (Carriage Return ASCII 13) - Mac OS lt10

CR+LF (CR seguido de LF) - Windows DOS

Eacute o motivo de o Notepad (Windows) natildeo entender as quebras de linha de arquivos escritos com o formato nativo de Linux o arquivo soacute tem LF enquanto o editor espera CR+LF

Alguns sistemas (strings em vaacuterias linguagens por exemplo) usam o coacutedigo de escape n para indicar newline que eacute codificado de acordo com o padratildeo sendo usado

Em geral bibliotecas de leitura e gravaccedilatildeo de arquivos usam (default pelo menos) o newline nativo do sistema em que satildeo usadas

Programas de conversatildeo entre os sistemas satildeo comuns (ex dos2unix)

O Wordpad identifica se for usado soacute LF e quebra as linhas de acordo

5889

Arquivos - texto - CSV

Comma-separated values

O formato mais padronizado para tabelas (arrays 2D) em texto (frequentemente mas natildeo necessariamente ASCII)

Bem suportado por bibliotecas padratildeo de linguagens e outros softwares (Excel Calc Origin Google Docs etc)

Conteacutem Linhas de cabeccedilalho (opcionais mas recomendadas) linhas com qualquer texto geral

descrevendo o arquivo e em geral uma linha de tiacutetulo para as colunas da tabela Uma (apenas uma) tabela onde todas as linhas tecircm o mesmo nuacutemero de colunas

Colunas separadas por viacutergulas (opcionalmente pode ser outro separador) Linhas terminadas por newline (qualquer que seja) Strings delimitados por ldquo ldquo

Ex

NAMECALMPOSFILNAMEECHLPOSDISPPOSTARGNAMEPOSDIRCLASSMJD-OBSITIMECOADDSdec18s00010NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001dec18s00020NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001dec18s00120NIRSPEC-5-AO635800364500itan140NIRSPEC-5-AOp2 TITAN5408763000001dec18s00140NIRSPEC-5-AO626300364500itan140NIRSPEC-5-AOp1 TITAN5408763000001dec18s00151NIRSPEC-5-AO626300364500itan140NIRSPEC-5-AOp1ARC5408764000001dec18s00160NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001

Natildeo eacute necessaacuterio que as colunas tenham largura constante

Cabeccedilalho

5989

Arquivos - texto - CSVHaacute amplo suporte a leitura e gravaccedilatildeo de CSV sem precisar recorrer a procedimentos de baixo niacutevel

Podem ser diretamente importados em Excel Calc Origin Google Docs ou lido facilmente com bibliotecas padratildeo comuns Ex (IDL)

IDLgt c=read_csv(filesearch_scamcsvheader=h)IDLgt printhNAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS

IDLgt helpc Structure ltc8bca508gt 11 tags length=5256 data length=5248 refs=1 FIELD01 STRING Array[41] FIELD02 LONG Array[41] FIELD03 STRING Array[41] FIELD04 DOUBLE Array[41] FIELD05 DOUBLE Array[41] FIELD06 STRING Array[41] FIELD07 STRING Array[41] FIELD08 STRING Array[41] FIELD09 STRING Array[41] FIELD10 DOUBLE Array[41] FIELD11 LONG Array[41]

IDLgt printcfield01[03]dec18s0001 dec18s0002 dec18s0003 dec18s0004

IDLgt printcfield03[03]NIRSPEC-5-AO NIRSPEC-5-AO NIRSPEC-5-AO NIRSPEC-5-AO

6089

Arquivos - texto - CSVEx (IDL) Criaccedilatildeo de um CSV com uma tabela de valores

Criaccedilatildeo de 3 arrays 1D (12 elementos) um para cada coluna

IDLgt x=dindgen(3)IDLgt y=dindgen(4)IDLgt xx=reform(rebin(x34)12)IDLgt yy=reform(rebin(reform(y14)34)12)IDLgt f=xx+yy10IDLgt helpxxyyfXX DOUBLE = Array[12]YY DOUBLE = Array[12]F DOUBLE = Array[12]

Escrita do arquivo

IDLgt write_csvexamplecsvxxyyfheader=[XYX+10Y]

ResultadoXYX+10Y000000000000000000000000100000000000000010000000200000000000000020000000000000001000000010000000100000001000000011000000()

6189

Arquivos - texto - ldquoColunas regularesrdquoFixed column width

Natildeo eacute exatamente um padratildeo Eacute uma praacutetica comum

Armazena uma tabela (array 2D) de forma regular simples de ser interpretada e lida

Costumam ter linha(s) de cabeccedilalho descrevendo o conteuacutedo do arquivo em geral com uma linha para os nomes das colunas

As demais linhas conteacutem os dados sempre ocupando a mesma largura por coluna e escritos no mesmo formato em cada coluna

Costumam ser simples de ler inclusive interativamente (exs Excel Calc Origin read_ascii)

Ex (IDL) Uma simples tabela soacute de nuacutemeros

wavl CH4=33 wavl CH4=25 wavl CH4=10 wavl CH4=08 wavl CH4=05 wavl CH4=026 wavl CH4=02 477330000 0090130 477330000 0091110 477330000 0089250 477330000 0087000 477330000 0087140 477330000 0090080 477330000 0088110 480040000 0090930 480040000 0091930 480040000 0090160 480040000 0087930 480040000 0088110 480040000 0090950 480040000 0089090 482750000 0091710 482750000 0092730 482750000 0091060 482750000 0088850 482750000 0089080 482750000 0091810 482750000 0090060 485450000 0092530 485450000 0093570 485450000 0092000 485450000 0089810 485450000 0090100 485450000 0092730 485450000 0091090

IDLgt a=read_ascii(specs_27s_ntxtdata_start=1header=header)IDLgt printheader wavl CH4=33 wavl CH4=25 wavl CH4=10 wavl CH4=08 wavl CH4=05 wavl CH4=026 wavl CH4=02 IDLgt helpa Structure ltd423c9a8gt 1 tags length=224 data length=224 refs=1 FIELD01 FLOAT Array[14 4]

6289

Arquivos - texto - ldquoColunas regularesrdquoJaacute um arquivo um pouco mais difiacutecil de ler

NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS dec18s0001 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0002 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0003 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 FLAT 5408757812500 460000 5 dec18s0004 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 DARK 5408757812500 460000 5

Por ter colunas de tipos diferentes (strings inteiros reais) natildeo eacute possiacutevel o ler em um simples array Mas eacute faacutecil o colocar em uma estrutura de arrays onde cada campo eacute uma coluna

Especificando interativamente como interpretar as linhasIDLgt templ=ascii_template(filesearch_scamtxt)

Nome do campo (default mostrado)

Tipo do campo (identificado automaticamente)

Posiccedilatildeo (caracter) do comeccedilo (identificada automaticamente)

Linha de exemplo para verificar as colunas

6389

Arquivos - texto - ldquoColunas regularesrdquoDepois de feito o template o arquivo pode ser lido com apenas

IDLgt a=read_ascii(filesearch_scamtxttemplate=templ)IDLgt helpa Structure ltd4ec4608gt 11 tags length=416 data length=416 refs=1 FIELD01 STRING Array[4] FIELD02 LONG Array[4] FIELD03 STRING Array[4] FIELD04 FLOAT Array[4] FIELD05 FLOAT Array[4] FIELD06 STRING Array[4] FIELD07 STRING Array[4] FIELD08 STRING Array[4] FIELD09 FLOAT Array[4] FIELD10 FLOAT Array[4] FIELD11 LONG Array[4]IDLgt printafield01dec18s0001 dec18s0002 dec18s0003 dec18s0004IDLgt printafield04 626300 626300 626300 626300

O template (uma estrutura contendo dados sobre como ler o arquivo) pode ser usado para outros arquivos no mesmo formato No lugar de ter sido criado interativamente poderia ter sido lido de algum arquivo Poderia ter especificado nomes para os campos que seriam mais amigaacuteveis que coias como FIELD11

6489

Arquivos - texto - XML

Extensible Markup Language

Admite grande flexibilidade e por isso pode ter alta complexidade

Valores satildeo colocados dentro de uma estrutura em hieraacuterquica (em uma aacutervore) com os noacutes identificados pelos seus nomes (chaves)

Largamente usado em muitas aacutereas para armazenar conjuntos arbitraacuterios de quaisquer estruturas de dados

A maioria das aplicaccedilotildees usa um formato que eacute um subconjunto do XML especificado por um Schema comumente em um arquivo XML DTD (Document Type Definition)

6589

Arquivos - texto ndash XML ndash exemplos de usos

Armazenamento de dados de aplicaccedilotildees web (comum para exportar importar dados MediaWiki DokuWiki WordPress ADS Lattes etc)

Documentos Office (docx pptx xlsx) OpenOffice (odt opd ods)

Como versotildees de outros formatos FITSML XDF

ldquoScientific Dataset XML NASAs Astronomical Data Center (ADC) sponsors a number of research projects that

use XML for scientific data representation The XML activities at the ADC are sponsored and supported by the NASA Office of Space Science Applied Information Systems Research Program (AISRP)rdquo - httpxmlcoverpagesorgnasa-adchtml

Astronomical Instrument Markup Language (AIML)

SVG ndash Scalable Vector Graphics

Muitas de outras aplicaccedilotildees listadas em httpxmlcoverpagesorgxmlhtmlapplications

6689

Arquivos - texto ndash XML - exemploltxml version=10 gtltDOCTYPE Xdmf SYSTEM Xdmfdtd []gtltXdmf xmlnsxi=httpwwww3org2001XInclude Version=20gt ltDomaingt lt-- Example of Basic Topologies --gt ltInformation Name=Descriptiongt Example of a Polyvertex Topology ltInformationgt ltGrid Name=Polyvertex GridType=Uniformgt ltTopology TopologyType=Polyvertex Dimensions=3 NodesPerElement=3gt ltDataItem Format=XML Dimensions=3 3 NumberType=Floatgt 0 1 2 4 5 6 8 9 10 ltDataItemgt ltTopologygt ltGeometry Type=XYZgt ltDataItem Format=XML Dimensions=4 4 3gt 00 00 00 10 00 00()Que mostra que a interpretaccedilatildeo (parsing) de XML eacute em geral complexa

6789

Arquivos - texto - XML

Haacute muitas bibliotecas de alto niacutevel para fazer o processamento (parsing) e entregar os dados em uma estrutura conveniente

A complexidade em processar XML estaacute em decidir o que fazer com os dados jaacute que os arquivos podem ser muito complexos

As APIs (Application Programming Interfaces) mais comuns para processar XML que satildeo implementadas em muitas linguagens

DOM (Document Object Model) ndash manteacutem todo o conteuacutedo do em uma estrutura de dados (em geral uma aacutervore) em uma variaacutevel (em geral um objeto) Esta pode ser consultada para obter os valores de interesse para os alterar e usada para escrever um arquivo

SAX (Simple API for XML) ndash Interpretador (parser) por objetos O usuaacuterio escreve uma classe herdando da classe SAX provendo os meacutetodos que vatildeo processar os campos agrave medida em que estes satildeo lidos

6889

Arquivos - binaacuterios - FITSFlexible Image Transport System

O formato mais comum para observaccedilotildees astronocircmicas Tambeacutem usado para armazenar quaisquer dados mesmo natildeo relacionados a observaccedilotildees (especialmente tabelas como eacute praacutetica do STSCI)

Conteacutem um (ou mais) cabeccedilalho(s) de texto com metadados (informaccedilotildees sobre os dados como caracteriacutesticas (necessaacuterias para os ler) origem condiccedilotildees em que foram obtidos processamento realizado etc)

SIMPLE = T image conforms to FITS standard BITPIX = 32 bits per data value NAXIS = 2 number of axes NAXIS1 = 1024 NAXIS2 = 1024 BSCALE = 100000 Scaling factor BZERO = 000000 Scaling zero-point TELESCOP= Keck II Telescope SLITNAME= 0041x226 Slit Name SLITPA = 351979 Slit position angle SLITX = 131500 X pixel of the center of the slit LST = 12010446 local apparent sidereal time (()

Depois do cabeccedilalho haacute uma (ou mais) seccedilatildeo(otildees) de dados binaacuterios Costuma(m) ser array(s) 1D (espectros) 2D (imagens) ou 3D (ldquocubos de dadosrdquo)

De inteiros ou reais inteiros satildeo comuns em contagens de instrumentos reais para valores derivados (fluxos intensidades etc)

6989

Arquivos - binaacuterios - FITSNormalmente FITS satildeo lidos escritos por bibliotecas prontas de (relativamente) alto niacutevel usuaacuterio natildeo tem que saber como os dados satildeo armazenados no arquivo nem como os ler escrever Ex (IDL com a biblioteca idlastro)

IDLgt fits_info2dspectrumfits2dspectrumfits has 3 extensionsPrimary header 288 recordsNo dataExtension 1 -- SCI Header 144 records IMAGE ( 1201 1201 )Extension 2 -- ERR Header 72 records IMAGE ( 1201 1201 )Extension 3 -- DQ Header 72 records IMAGE ( 1201 1201 )

IDLgt mydata=readfits(2dspectrumfitsexten_no=1myheader) READFITS Reading FITS extension of type IMAGE READFITS Now reading 1201 by 1201 array

IDLgt extastmyheadermyastIDLgt sz=size(mydatadimensions)IDLgt xy2ad[1sz[0]][1sz[1]]myastcorners_acorners_dIDLgt printcorners_aCorners of the data array from file 2dspectrumfits are at 14487480 33063480

IDLgt printcorners_d -00041264444 00041402222

Obteacutem os dados de coordenadas (WCS) do header

Coloca os dados no array (2D de floats) mydata e o header no array (1D de strings) myheader

Calcula as coordenadas das quinas da imagem atraveacutes do WCS

Provecirc informaccedilotildees sobre o arquivo

7089

Arquivos - binaacuterios - ISIS Cube

Formatos como FITS se adequam muito a ter uma interface de mais alto niacutevel por objetos

Tambeacutem para dados em tabelas FITS muito mais trabalhosos de ler em baixo niacutevel que se adequam muito mais a mapas ou estruturas

Exemplo (de um formato semelhante a FITS ISIS cube)

O objeto ao ser criado lecirc todo o arquivo

cube=pp_editablecube(CM_1553510065_1_ircub)

Meacutetodos fornecem os dados desejados para obter quando necessaacuterio os dados de interesse

Find out the names of the backplanesprintcubegetproperty(backnames)Get the start time of the cubeprintcubegetfromheader(START_TIME)2007-084T100057286Z

Valores no cabeccedilalho podem ser convenientemente fornecidos como um mapa

header=cubeheader_as_hash()printheader[START_TIME]2007-084T100057286Z

7189

Arquivos - binaacuterios ndash ISIS Cube

Os dados satildeo fornecidos como arraysMake a contour plot of the latitudesc=contour(cubegetsuffixbyname(LATITUDE))Get the band with wavelength nearest to 21 (in the units used in the cube)selband=cubegetbandbywavelength(21wavelengths=selwavs)

Interfaces por overload tornam o acesso ainda mais conveniente

selband=cube[21]

selwavs=cube[21]

Retorna um array com a banda de comprimento de onda mais proacuteximo de 21 (microm)

Retorna o comprimento de onda mais proacuteximo de 21 (microm) da banda retornada acima

7289

Arquivos - binaacuterios ndash ISIS Cube Alteraccedilotildees feitas ao conteuacutedo satildeo automaticamente refletidas em todos os

lugares (cabeccedilalho em particular) afetados mantendo o objeto vaacutelido que pode depois ser gravado em um novo arquivo

IDLgt printcubelinescubesamplescubebands 64 64 256

IDLgt helpcubecoreltExpressiongt FLOAT = Array[64 64 256]

IDLgt cubecore=dblarr(100100256)

A linha acima natildeo eacute uma atribuiccedilatildeo eacute uma invocaccedilatildeo de meacutetodo Eacute equivalente acubesetpropertycore=dblarr(100100256)

Eacute o trabalho da funccedilatildeo setproperty decidir se a propriedade passada (core) faz sentido e se fizer fazer todo o trabalho necessaacuterio a esta mudanccedila Para o usuaacuterio eacute tudo automaacutetico e os dados da classe satildeo vaacutelidos o tempo todo

IDLgt helpcubecoreltExpressiongt DOUBLE = Array[100 100 256]

IDLgt printcubelinescubesamplescubebands 100 100 256

IDLgt cubesaveCM_1553510065_1_ir_editedcub

7389

Arquivos - binaacuterios ndash NetCDF e HDF5

Network Common Data Form e Hierarchical Data Format

Os dois uacutenicos formatos bem estabelecidos para dados cientiacuteficos geneacutericos

Armazenam dados como vaacuterias variaacuteveis e seus metadados Para cada variaacutevel haacute (ou pode haver) os metadados

Nome Dimensotildees (do array) Unidades Comentaacuterios

Ambos permitem arrays multidimensionais

Apenas HDF5 permite estruturas (daiacute vem a hierarquia)

Autodocumentados qualquer software que saiba ler um destes formatos lecirc qualquer arquivo sem precisar de conhecimento preacutevio sobre como o arquivo foi gerado

Muito bem suportados em bibliotecas padratildeo e natildeo padratildeo em softwares interativos e visualizadores (inclusive plugins para navegadores)

httpwwwunidataucaredusoftwarenetcdf httpenwikipediaorgwikiHdf5

NetCDF eacute mais simples de usar por natildeo ter hierarquia dando menos trabalho para ler e escrever dados Se hierarquia natildeo eacute necessaacuteria eacute mais conveniente de usar que HDF5

7489

Arquivos - binaacuterios - NetCDF e HDF5Haacute tambeacutem o formato CDL uma versatildeo ASCII do NetCDF A biblioteca padratildeo do NetCDF inclui conversores entre estes formatos

$ ncdump -h refspec_g01_0ncnetcdf refspec_g01_0 dimensions nlay = 51 nwn = 400 nleg = 33 numu = 2 nlev = 52 nphi = 3 ngas = 2 nwnc = 1 scal = 1 v3 = 3 dnl = 1 nk = 1 tdisr = UNLIMITED (0 currently) na = 16

variables float alb(nwn) float z(nlay) float t(nlay) float p(nlay) float wl(nwn) float iof(nwn) float mtau(nwn) float htau(nwn) float hctaus(nwn) float gtau(nwn) float outcos(scal) float phi(nleg) float phic(scal) float umu(numu) float flux(v3 nwn nlev) float mix(nlay ngas) float c(nlay) float psat(nlay) float ga(nwnc) float wlc(nwnc) float inc(scal) int dm(scal) int ord(scal) float fbeam(scal) float wn(nwn) float tautot(nwn nlay) float htaus(nwn nlay) float htaux(nwn nlay) float taug(nwn nlay) float phase(nwn nlay nleg) float ssa(nwn nlay) float uu(nwn nphi nlev numu) float u0u(nwn nlev numu) float tray(nwn nlay) float gtauo(tdisr nwn nlay)

Haacute 14 variaacuteveis usadas como dimensotildees para as 35 variaacuteveis que satildeo arrays

Ex alb(nwn) indica que alb eacute um array 1D de nwn elementos

nwn estaacute armazenado como uma das dimensotildees e eacute 400 portanto alb tem 400 elementos

Parte do conteuacutedo de um arquivo NetCDF em formato CDL (gerado pelo programa ncdump)

7589

Arquivos - binaacuterios - NetCDF e HDF5Conteuacutedo daquele arquivo visualizado com o ncview (acompanha a biblioteca NetCDF padratildeo)

7689

Arquivos - binaacuterios - NetCDF e HDF5O conteuacutedo de todo o arquivo pode ser lido facilmente com as bibliotecas disponiacuteveis e armazenado em contecirciners convenientes Usando um objeto que gera um resultado um pouco mais conveniente

IDLgt h=pp_readncdf(refspec_g01_0nchash)IDLgt printhvar_dims ltObjHeapVar229(HASH)gtvars ltObjHeapVar152(HASH)gtdims ltObjHeapVar118(HASH)gt

IDLgt printh[vars]T 173203 175459 175848 176001 175975 Z 431869 418858 406067 393403 380464 FLUX 300660 145536 0705180 0341669 0165532 PHASE 100000 0779034 0660858 0542052 0449983 TAUTOT0694377 0693420 0693474 0693540 0693636()

IDLgt help(h[vars])[TAUTOT]ltExpressiongt FLOAT = Array[51 400]

IDLgt print(h[var_dims])[TAUTOT]NLAY NWN

IDLgt print(h[dims])[(h[var_dims])[TAUTOT]]NLAY 51NWN 400

7789

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5)

Visualizaccedilatildeo da variaacutevel selecionada

Metadados e alguns valores da variaacutevel selecionada

Variaacutevel a ser criada com o conteuacutedo desta variaacutevel do arquivo

Hierarquia das variaacuteveis do arquivo

7889

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5) Imported variable az

IDLgt helpaz Structure ltd5723f38gt 13 tags length=448 data length=444 refs=1 _NAME STRING az _ICONTYPE STRING binary _TYPE STRING DATASET _FILE STRING INTENSI_test_409OUTh5 _PATH STRING _DATA DOUBLE Array[38] _NDIMENSIONS LONG 1 _DIMENSIONS ULONG64 Array[1] _NELEMENTS ULONG64 38 _DATATYPE STRING H5T_FLOAT _STORAGESIZE ULONG 8 _PRECISION LONG 64 _SIGN STRING

IDLgt printaz_data 00000000 10000000 20000000 30000000 40000000 50000000 60000000 80000000 ()

7989

Arquivos - binaacuterios - imagens

JPEG JPEG200 TIFF GeoTIFF etc

Os formatos comuns de imagens satildeo bem suportados em muacuteltiplas plataformas para uso dentro de programas e interativamente

Alguns formatos tecircm opccedilatildeo de compressatildeo com perda eou sem perda

Armazenam imagens como arrays 2D ou 3D (3D frequumlentemente limitado a 3 ou 4 em uma das dimensotildees uma imagem em 3 ou 4 bandas) de inteiros ou (em alguns formatos) reais

Alguns formatos permitem armazenar metadados para caracterizar as imagens armazenadas

JPEG2000 e GeoTIFF (um subconjunto de TIFF) comuns em astronomia e aacutereas proacuteximas

8089

Arquivos - binaacuterios ndash imagens ndash exemplo (IDL)IDLgt printquery_tiff(issmap_2009tiffinfogeotiff=geo) 1

IDLgt helpinfo Structure ltd4eca4b8gt 18 tags length=144 data length=132 refs=1 CHANNELS LONG 4 DIMENSIONS LONG Array[2] IMAGE_INDEX LONG 0 NUM_IMAGES LONG 1 PIXEL_TYPE INT 1 TYPE STRING TIFF BITS_PER_SAMPLE LONG 8 POSITION FLOAT Array[2] RESOLUTION FLOAT Array[2] UNITS LONG 2 TILE_SIZE LONG Array[2] DESCRIPTION STRING ISS (2009) DATE_TIME STRING 20100218 012436()

IDLgt helpgeo Structure ltd4efa1b8gt 10 tags length=264 data length=262 refs=1 MODELPIXELSCALETAG DOUBLE Array[3] MODELTIEPOINTTAG DOUBLE Array[6 4] GEOGRAPHICTYPEGEOKEY INT 4035 GEOGSEMIMAJORAXISGEOKEY DOUBLE 25750000 GEOGSEMIMINORAXISGEOKEY DOUBLE 25750000()

IDLgt myimage=read_tiff(issmap_2009tiff) Lecirc a imagem para o array myimage

Obteacutem informaccedilotildees sobre o arquivo

8189

Arquivos - binaacuterios ndash formatos nativosLinguagens como IDL R Python Java tecircm seu formato nativo binaacuterio acessado em alto niacutevel Basta mandar salvar ler variaacuteveis no do arquivo a biblioteca padratildeo automagicamente faz todo o trabalho de decidir como gravar ler os dados

Conveniente de usar na proacutepria linguagem Mas raramente existem bibliotecas para ler gravar o formato nativo de uma linguagem a partir de outra Ex (IDL)

IDLgt savefile=2dspectrumsavmydatamyheadercorners_dcorners_averbosecompress SAVE Portable (XDR) compressed SAVERESTORE file SAVE Saved variable MYDATA SAVE Saved variable MYHEADER()

Pode ser lido com apenas (haacute formas mais elaboradas)

IDLgt restore2dspectrumsavverbose RESTORE Portable (XDR) compressed SAVERESTORE file RESTORE Save file written by ltunknowngtltunknowngt Thu Jan 27 191422 2011 RESTORE IDL version 801 (linux x86_64) RESTORE Restored variable MYDATA RESTORE Restored variable MYHEADER()

IDLgt helpmydatamyheadercorners_dcorners_aMYDATA FLOAT = Array[1201 1201]MYHEADER STRING = Array[144]()

8289

Arquivos - processamento em baixo niacutevel

Nem sempre um formato padratildeo eacute a melhor escolha para o problema

Nem sempre haacute escolha (pode-se ter que trabalhar com arquivos que jaacute foram escritos em algum formato proprietaacuterio)

Agraves vezes o formato eacute padratildeo mas natildeo haacute bom suporte a ele disponiacutevel

Em todos estes casos eacute necessaacuterio escrever rotinas em baixo niacutevel que vatildeo ler processar diretamente o conteuacutedo do arquivo

Preferencialmente criando interfaces de alto niacutevel para o programa que vai as usar

8389

Arquivos - processamento em baixo niacutevel - texto

Tomando o exemplo anterior onde as colunas eram de diferentes tipos

NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS dec18s0001 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0002 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0003 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 FLAT 5408757812500 460000 5 dec18s0004 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 DARK 5408757812500 460000 5

A forma mais simples de o ler diretamente eacute definir uma estrutura para receber cada linha e um array destas estruturas para receber todo o arquivo Ex (IDL)

IDLgt record=namecalmpos0filnameechlpos0d0disppos0d0targnameposdirclassmjd_obsitime0d0coadds0IDLgt nlines=file_lines(filesearch_scamtxt)IDLgt mydata=replicate(recordnlines-1)IDLgt header=

Depois de definidas as variaacuteveis que vatildeo receber os dados o arquivo pode ser lido

IDLgt openrunitfilesearch_scamtxtget_lunIDLgt readfunitheaderIDLgt readfunitmydataformat=(A14I8A15F104F104A18A19A15F158F105I15)IDLgt free_lununit

A gravaccedilatildeo de um arquivo texto poderia ser feita de forma semelhante apenas trocando openr por openw (abrir o arquivo para gravaccedilatildeo natildeo leitura) e readf por printf

O arquivo eacute aberto em uma unidade (unit) usada para especificar de onde eacute feita a leitura

Ao final o arquivo eacute fechado

8489

Arquivos - processamento em baixo niacutevel - texto

O que resulta em

IDLgt printheader NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS

IDLgt helpmydataMYDATA STRUCT = -gt ltAnonymousgt Array[4]

IDLgt helpmydata[0] Structure ltd5e38f68gt 11 tags length=136 data length=124 refs=3 NAME STRING dec18s0001 CALMPOS INT 0 FILNAME STRING NIRSPEC-5-AO ECHLPOS DOUBLE 62630000 DISPPOS DOUBLE 36450000 TARGNAME STRING HD85258 POSDIR STRING NIRSPEC-5-AOp1 CLASS STRING STAR MJD_OBS STRING 54087574 ITIME DOUBLE 10000000 COADDS INT 1

Este caso eacute mais complicado que os mais comuns por haver colunas de strings

Se todas fossem de nuacutemeros natildeo teria sido necessaacuterio especificar o formato explicitamente As colunas teriam sido adivinhadas pela biblioteca que lecirc o arquivo Poderia ter sido lido escrito soacute com um array de nuacutemeros sem estruturas

8589

Arquivos - processamento em baixo niacutevel - binaacuterio

Formatos binaacuterios podem ser definidos de qualquer forma O arquivo eacute apenas um conjunto de bytes Cabe ao software saber como os interpretar

Uma escolha comum para que sejam autodocumentados eacute incluir um cabeccedilalho de texto informando as caracteriacutesticas dos dados necessaacuterias para os ler

Ex (IDL) criar um arquivo que armazene um array de doubles com um cabeccedilalho informando as dimensotildees para que o programa que o lecirc saiba como ler os dados

Inventa dados e abre o arquivo

IDLgt data_to_write=dindgen(34)IDLgt openwunitbinary_exampledatget_lun

Escreve as dimensotildees como texto

IDLgt printfunitdimensions of the double array stored belowIDLgt printfunitsize(data_to_writedimensions)

Escreve os dados binaacuterios

IDLgt writeuunitdata_to_write

Fecha o arquivo

IDLgt free_lununit

Escreve em binaacuterio (write unformatted)

8689

Arquivos - processamento em baixo niacutevel - binaacuterio

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

dimensions of the double array stored below 3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

8789

Arquivos - processamento em baixo niacutevel - binaacuterioA leitura deste arquivo eacute igualmente simples

IDLgt header=IDLgt dims=[00]IDLgt openrunitbinary_exampledatget_lun

Lecirc as dimensotildees (armazenadas como texto)

IDLgt readfunitheaderIDLgt readfunitdims

Lecirc a parte binaacuteria depois de saber as dimensotildees

IDLgt data_read=dblarr(dims)IDLgt readuunitdata_read

Fecha o arquivo

IDLgt free_lununit

Verifica que os dados foram gravados e lidos corretamente

IDLgt printarray_equal(data_to_writedata_read) 1

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Lecirc dados binaacuterios (read unformatted)

8889

Sumaacuterio

5 ndash Slides em httpwwwppenteadonetpeapea04_strings_iopdf Strings Expressotildees regulares Arquivos

httpwwwppenteadonetpea

8989

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89

Strings - processamento natildeo baacutesico

Codificaccedilotildees (Ex Python 3)

gtgtgt s=infinite money infinNeuro sign

gtgtgt print(s)infinite money infineuro

gtgtgt print(ascii(s))infinite money u221eu20ac

gtgtgt print(sencode(utf-8))binfinite money xe2x88x9exe2x82xac

3589

Strings - processamento natildeo baacutesico

Perl eacute a linguagem mais avanccedilada para processamento de strings tem suporte nativo a muitas outras operaccedilotildees a semacircntica da linguagem eacute voltada principalmente para processar strings expressotildees regulares (de vaacuterios tipos) natildeo satildeo strings fazem parte da semacircntica

Ex (sem o objetivo que seja compreensiacutevel apenas para indicar o estilo)

Ler um arquivo contendo campos com nomes separados de valores por ()

temperature 10008name some modelx_dimension 100y_dimension 100z_dimension 50()

Armazenado-o em um mapa O que pode ser feito com apenas

While (ltgt) Loop over input linesPut pre-colon text into $1 post-colon into $2 if (m (S+) (+) ) Use $1 as key $2 as value $file_data$1 = $2

3689

Expressotildees regulares - definiccedilatildeo

Expressotildees regulares (regular expressions regex) satildeo a mais poderosa ferramenta para fazer buscas e separar substrings

Regex satildeo uma linguagem com o uacutenico objetivo de especificar propriedades de strings

Implementadas em graus diferentes em todas as linguagens modernas e modernizadas facilita encontrar uma expressatildeo jaacute pronta pois satildeo quase iguais em qualquer linguagem

Estatildeo na biblioteca padratildeo em IDL Python R Perl

Em C++ e Java em bibliotecas comuns (Boost Jregex)

Para que servem

Uma expressatildeo regular especifica propriedades de strings

O interpretador de expressotildees regulares (regular expression engine) recebe a expressatildeo e o string a analisar e determina se o string corresponde (matches) agrave expressatildeo regular

Em alguns casos o interpretador pode tambeacutem informar que parte(s) do string corresponde(m) a que parte(s) da expressatildeo regular e realizar processamentos com estas partes

3789

Expressotildees regulares ndash exemplos de usos Separar partes de strings

Encontrar linhas em arquivos que tenham nomes valores e comentaacuterios e separar estes pedaccedilos

Escalar com comentaacuterio

SLITPA = 351979 Slit position angle

Array 1D sem comentaacuterio (se extendendo por vaacuterias linhas)

BAND_BIN_CENTER = (03505400358950036629003732200379490 0387900104598)

Escalares em diferentes formatos

Total Mechanical Luminosity 15310E+03resources_usedwalltime=005603

Pedaccedilos de nomes

6063 17836E-20 2456 T FeIX((3Pe)3d(2PE)4p_1Po-3s2_3p6_1Se)

Datas separando ano mecircs dia hora (em vaacuterios formatos diferentes)

DATE-OBS= 2006-12-18 universal date of observationDATE_TIME = 2010-07-19T161032START_TIME = 2006-182T225102850Z

3889

Expressotildees regulares ndash exemplos de usos

Separar partes de strings Separar partes de nomes de arquivos (por significarem algo como identificar o

conteuacutedo)

specdec18s0041fitsscamdec18i0054fits15_7_mts_hmpixselh_mr15sav15_7_mts_hwpixselh_mr15sav16_3_mts_hwpixselb_mr16savreadmodel5l_-1_000010000_10000_r05_030_08196_0100000_005000000_1000eps

Determinar se um string eacute um nuacutemero (inteiro real fixo flutuante)

Encontrar identificadores Exs nomes de cataacutelogos endereccedilos HTTPFTP endereccedilos de email

Separar campos em arquivos sendo lidos onde as linhas natildeo tecircm a mesma formataccedilatildeo algumas linhas com colunas separadas por espaccedilos outras por tabs outras por

siacutembolos ignorando linhas de comentaacuterios e linhas vazias

3989

Expressotildees regulares - usoEx (IDL) encontrar nomes de arquivos com algumas propriedades

IDLgt printfilesformat=(A)CM_1477475933_1_viscubCM_1477476864_1_ircubCM_1477476864_1_irgcubCM_1477476864_1_viscubCM_1477477826_1_ircubCM_1477477826_1_irgcubCM_1477477826_1_viscubmosaic2cub

IDLgt printstregex(files+irgcubboolean) 0 0 1 0 0 1 0 0

A expressatildeo regular eacute +irgcub Especifica uma ou mais ocorrecircncias seguidas (+) de qualquer caractere () seguido de uma ocorrecircncia de irgcub (o ponto vem precedido do caractere de

escape () para ser entendido literalmente como um ponto e natildeo como o seu significado especial (qualquer caractere)

Esta aplicaccedilatildeo do interpretador (stregex) retorna um valor Booleano (verdadeirofalso) para cada elemento do string passado (files) que informa se aquele elemento correspondia agravequela expressatildeo regular

Este eacute um exemplo artificial Seria mais faacutecil ter usado strmatch(filesirgcub)

4089

Expressotildees regulares - uso

Em casos como este tipicamente o resultado de stregex seria usado como filtro para selecionar apenas os elementos do array de strings que satisfazem agravequela expressatildeo regular

IDLgt w=where(stregex(files+irgcubboolean)null)IDLgt printfiles[w]format=(A)CM_1477476864_1_irgcubCM_1477477826_1_irgcub

Ex (IDL) Determinar que strings conteacutem uma data no formato yyyy-mm-dd

IDLgt strs=[201002012010-02-012010-2-1aaaa-mm-ddT2010-02-01J]IDLgt printstregex(strs[0-9]4-[0-9]2-[0-9]2boolean) 0 1 0 0 1

Esta expressatildeo regular especifica quatro repeticcedilotildees (4) de diacutegitos (caracteres na faixa [0-9]) seguido de um (-) seguido de duas repeticcedilotildees (2) de dois diacutegitos ([0-9]) seguido de um (-) seguido de duas repeticcedilotildees (2) de dois diacutegitos ([0-9])

Uma expressatildeo regular apenas um pouco mais elaborada poderia corresponder aos 3 formatos de data no array acima E poderia se impedir que a uacuteltima (com outros caracteres antes e depois da data) seja aceita

4189

Expressotildees regulares - regras - caracteres ldquonormaisrdquo

Uma expressatildeo regular usa caracteres ldquonormaisrdquo e especiais para especificar o que se vai procurar na ordem em que aparecem na expressatildeo

Se um caractere eacute normal (natildeo eacute um dos especiais mostrados adiante) ele especifica uma ocorrecircncia daquele caractere

Ex J eacute uma expressatildeo regular que corresponde a qualquer string onde ocorra J Jaacute JA soacute corresponde a strings que tenham JA dentro

Exs (IDL)

IDLgt strs=[JJJJJJaJAjaJa]

IDLgt printstregex(strsJboolean) 1 1 1 0 1

IDLgt printstregex(strsJAboolean) 0 0 1 0 0

4289

Expressotildees regulares - regras - caracteres especiaisCaracteres especiais tecircm outros significados Para significar literalmente aquele caractere deve ser escapado (escaped) com um

Siacutembolo significado exemplo Corresponde(m) Escape o caractere seguinte deve ser interpretado

literalmente natildeo como especial aa

Qualquer caractere ab ajb aab abb jafbc

+ Uma ou mais repeticcedilotildees do que vem agrave esquerda a+b ab aab bab baabh

() Subexpressatildeo para agrupar termos afetados por um caractere especial (como parecircnteses em notaccedilatildeo matemaacutetica)

(ab)+c abc ababc dabababcg

Zero ou mais repeticcedilotildees dos termos agrave esquerda ab abbaab caaabg

Zero ou uma repeticcedilatildeo dos termos agrave esquerda ab b ab cabd cbd

| Alternaccedilatildeo qualquer um dos dois agrave esquerda a|bc ac bc jacd jbcd

n Exatamente n repeticcedilotildees do termo agrave esquerda a2b aab daaabg

n1n2 De n1 a n2 repeticcedilotildees do termo agrave esquerda a12b ab aab aaab gaaabbd

^ Acircncora (no comeccedilo) nada agrave esquerda ^ab ab abb

$ Acircncora (no fim) nada agrave direita ab$ abaab

[] Conjunto de valores (explicado adiante)

4389

Expressotildees regulares - regras - conjuntos de valores

[] denota um conjunto de valores que pode conter

Uma lista de coisas que devem corresponder Ex [abc] signfica qualquer caractere no conjunto abc Correspondem a esta

expressatildeo abcabha

Uma lista de coisas que natildeo podem corresponder [^abc] significa qualquer coisa que natildeo seja a b ou c Correspondem a esta

expressatildeo d jgs gg

Faixas de valores [0-9] signfica qualquer diacutegito [0-9a-zA-Z] significa qualquer diacutegito ou letra

Classes de valores como algumas faixas e outros conjuntos ocorrem com muita frequumlecircncia haacute nomes

especiais para eles Estes (em IDL) vecircm entre [] ex [[digit] significa o mesmo que [0-9]

4489

Expressotildees regulares - regras - classes de valores

Classe signficado

alnum Caracteres alfanumeacutericos 0-9a-zA-Z

alpha Caracteres alfabeacuteticos a-zA-Z

cntrl Caracteres de controle ASCII (natildeo visiacuteveis coacutedigos 1 a 31 e 127)

digit Diacutegitos (decimais) 0-9

graph Caracteres visiacuteveis ASCII 33 a 126 (natildeo inclui o espaccedilo)

lower Letras minuacutesculas a-z

print Caracteres ldquoimprimiacuteveisrdquo (visiacuteveis e o espaccedilo) ASCII 32 a 126

punct Caracteres de pontuaccedilatildeo $amprsquo()+-lt=gt[]^_lsquo|~

space Os caracteres ldquoem brancordquo (blank) espaccedilo tab tab vertical CR LF (ASCII 32 e 9-13)

upper Letras maiuacutesculas A-Z

xdigit Diacutegitos hexadecimais 0-9A-Fa-f

lt Comeccedilo de palavra (palavra definida como sequumlecircncia de coisas natildeo space)

gt Fim de palavra (palavra definida como sequumlecircncia de coisas natildeo space)

Estas satildeo apenas as principais Algumas implementaccedilotildees tecircm muito mais (em particular nas linguagens que usam Unicode nativamente)

4589

Expressotildees regulares - exemplos

Determinar se strings satildeo nuacutemeros (Ex IDL)

IDLgt str=[9-18 875-812-45913E9-98d7a188d032f5]

Inteiros

IDLgt intexpr=^[-+][0-9]+$

IDLgt printstregex(strintexprboolean) 1 1 0 0 0 0 0 0 0 0

Ponto flutuante

IDLgt fpexpr=^[-+](([0-9][0-9]+)|([0-9]+[0-9]))([eEdD][-+][0-9]+)$

IDLgt printstregex(strfpexprboolean) 1 1 0 1 1 1 1 1 0 0

Sinal opcional

1 ou mais diacutegitos

Sinal opcional

0 ou mais diacutegitos opcionalmente seguidos de um ponto e 1 ou mais diacutegitos

1 ou mais diacutegitos opcionalmente seguidos de um ponto e 0 ou mais diacutegitos

ou Expoente opcional letra do expoente seguida de sinal opcional seguido de um ou mais diacutegitos

4689

Expressotildees regulares ndash extraccedilatildeo

Interpretadores de expressotildees regulares costumam oferecer mais que apenas testar se um string corresponde a uma expressatildeo

Em geral tambeacutem podem retornar que parte(s) do string corresponde(m) agrave expressatildeo

Ex (IDL) Determinar se um string conteacutem uma data incluindo os formatos

IDLgt dates=[2011-01-312011 1 3120110131something done on y2011m1d31 with something]

E extrair a data de dentro do string

IDLgt expr=[0-9]4[0-9]12[0-9]12

(4 diacutegitos)(qualquer separador)(1 a 2 diacutegitos)(qualquer separador)(1 a 2 diacutegitos)

IDLgt printstregex(datesexprextract)format=(A)2011-01-312011 1 31201101312011m1d31

Como agora separar ano mecircs e dia Com uma busca e uma extraccedilatildeo para cada Poderia ser mais eacute mais faacutecil com uma uacutenica expressatildeo regular

4789

Expressotildees regulares - aleacutem de apenas testes

Tambeacutem podem retornar que parte(s) do string correspondem agrave expressatildeo toda e agraves suas subexpressotildees (partes da expressatildeo delimitadas por parecircnteses)

Ex (IDL) Separar pedaccedilos de datas Neste caso para a expressatildeo ficar menor assumindo um formato simples (yyyy-mm-ddThhmmssfff) Mas poderia ser um formato mais livre como no exemplo anterior

IDLgt str=Stuff observed on 2011-01-31T123924983 with some instrumentIDLgt expr=([0-9]4)-([0-9]2)-([0-9]2)T([0-9]2)([0-9]2)([0-9]2[0-9]3)

(quatro diacutegitos)-(2 diacutegitos)-(2 diacutegitos)T(2 diacutegitos)(2 diacutegitos)(2 diacutegitos3 diacutegitos)

IDLgt pieces=stregex(strexprextractsubexpr)IDLgt printpiecesformat=(A)2011-01-31T12392498320110131123924983IDLgt d=julday(pieces[2]pieces[3]pieces[1]pieces[4]pieces[5]pieces[6])IDLgt printdformat=(F166) 2455593027372

Expressatildeo inteiraPrimeira subexpressatildeoSegunda subexpressatildeoTerceira subexpressatildeoQuarta subexpressatildeoQuinta subexpressatildeoSexta subexpressatildeo

4889

Expressotildees regulares - referecircncias httpxkcdcom208

Viacutedeos do Software Carpentry

httpsoftware-carpentryorg4_0regexp

4989

Arquivos

Quase todo programa precisa armazenar dados em arquivos

Podem ser pequenos arquivos de paracircmetros ou enormes arquivos de dados produzidos ou a processar

Apesar do sugerido pela praacutetica comum arquivos texto natildeo satildeo sempre a melhor escolha para armazenar dados - e haacute muitas formas diferentes de os usar

Qual eacute a melhor escolha

Assim como para linguagens ou contecirciners natildeo existe ldquoo melhor formatordquo Cada um tem suas vantagens e desvantagens

Dados diferentes (mesmo se usados pelos mesmos programas) em geral se adequam melhor a formatos diferentes

5089

Arquivos - texto X binaacuterios

Em qualquer formato arquivos satildeo armazenados como diacutegitos binaacuterios

Mas haacute duas formas principais como eles podem ser codificados

Arquivos baseados em texto (text files)

Dados satildeo transformados em caracteres usando alguma formataccedilatildeo (mesmo se impliacutecita) e escritos com alguma codificaccedilatildeo de texto (comumente mas natildeo necessariamente ASCII)

Um arquivo texto eacute um ou mais strings As mesmas conversotildees tecircm que ser feitas depara outros tipos

Arquivos ldquobinaacuteriosrdquo (binary files)

Embora todo arquivo seja binaacuterio este nome costuma ser usado soacute para aqueles em que os dados natildeo estatildeo na forma de texto

Com frequumlecircncia (nem sempre) os dados satildeo gravados de forma idecircntica a como satildeo armazenados na memoacuteria

Muitos formatos usam uma mistura de partes em texto e partes binaacuterias

Um cabeccedilalho (header) de texto que daacute informaccedilotildees (metadados) sobre os dados armazenados na parte binaacuteria que vem depois

O cabeccedilalho conteacutem em especial informaccedilotildees sobre como ler os dados binaacuterios

5189

Arquivos - texto X binaacuterios

Vantagens de arquivos texto

Legiacuteveis por pessoas (human readable)

Podem ser auto-suficientes todo o necessaacuterio para os ler e entender o que conteacutem pode ser obtido olhando o arquivo

Satildeo os menos especiacuteficos a linguagens software normalmente satildeo escritos em ASCII ou Unicode e sempre haacute algum suporte a ler escrever texto em linguagens software

Haacute alguns formatos padratildeo para texto (exs CSV XML) que satildeo suportados em muitas plataformas diferentes

5289

Arquivos - texto X binaacuterios

Vantagens de arquivos binaacuterios

Em geral natildeo haacute conversotildees entre o os dados como armazenados na memoacuteria O que torna o armazenamento mais eficiente e sem alteraccedilotildees nos valores

A maior parte dos formatos padronizados eacute binaacuteria Exs FITS cube CDF NetCDF HDF HDF5 JPEG JPEG2000 TIFF GeoTIFF MPEG etc

Eacute mais comum que haja bibliotecas prontas (ateacute de alto niacutevel) para consulta leitura e gravaccedilatildeo

Os formatos melhor desenhados satildeo autodocumentados (em texto ou binaacuterio) para os ler natildeo eacute necessaacuterio conhecimento preacutevio sobre como os dados foram armazenados

Toda linguagem plataforma costuma ter seu formato binaacuterio mais nativo que costuma ser o mais faacutecil para leitura gravaccedilatildeo Em particular nas de alto niacutevel que tecircm formatos autodocumentados (especialmente

em IDL R Python Java)

Muitos formatos tecircm opccedilatildeo de compressatildeo dos dados

5389

Arquivos - proprietaacuterios X padratildeo

Independente da escolha texto binaacuterio programas devem escolher entre usar um formato proacuteprio ou um formato padronizado

A principal vantagem de formatos proacuteprios eacute que satildeo definidos da forma mais conveniente para a aplicaccedilatildeo que os usa simplificando leitura e gravaccedilatildeo e potencialmente otimizando recursos (acesso ao disco tamanho do arquivo etc)

A principal desvantagem de formatos proacuteprios eacute ser necessaacuterio escrever todo o coacutedigo para os ler gravar

Pode dar mais trabalho que usar um formato geneacuterico que natildeo seja exatamente o que melhor se encaixa na aplicaccedilatildeo

O coacutedigo para processar o formato em geral vai ser menos completo e conveniente de usar que o de um formato bem estabelecido usado por muitos outros em muitos ambientes

Cada novo software que for usar estes arquivos vai precisar compartilhar do mesmo coacutedigo ou precisar de coacutedigo novo (em particular se em outra linguagem) para ler gravar naquele formato

Eacute necessaacuterio documentar o formato e decidir sobre como ele seraacute definido

Se outros jaacute colocaram muito trabalho desenvolvendo bons formatos padratildeo bem suportados em muitos ambientes por que ter o trabalho de reinventar (e reprogramar redocumentar e retestar) a roda

5489

Arquivos - padrotildees comuns em astronomia (exs adiante)

Texto

CSV Comma-separated values - bem suportado por muitos softwares

ldquoColunas fixasrdquo Natildeo eacute um padratildeo bem definido mas eacute praacutetica comum para tabelas (2D)

XML Extensible Markup Language - O padratildeo texto mais flexiacutevel de grande uso em programaccedilatildeo geral para armazenar qualquer coisa com frequumlecircncia de forma hieraacuterquica Bem suportado por linguagens modernas (e modernizadas) e bibliotecas das principais

linguagens gerais Alta complexidade o torna trabalhoso de usar

5589

Arquivos - padrotildees comuns em astronomia (exs adiante)Binaacuterios

FITS Flexible Image Transport System - o mais comum para observaccedilotildees astronocircmicas Conteacutem os dados (em geral arrays 1D 2D ou 3D) e documentaccedilatildeo (nos cabeccedilalhos) sobre a origem e caracteriacutesticas dos dados Tambeacutem usado para armazenar tabelas de dados quaisquer mesmo que natildeo sejam observaccedilotildees (especialmente pelo STSCI) Variam muito em qualidade de documentaccedilatildeo

NetCDF Network Common Data Form - evoluccedilatildeo do CDF autodocumentado eacute comum e bem suportado para vaacuterios arrays de dados

HDF5 Hierarchical Data Format ndash autodocumentado comum e bem suportado permitindo aleacutem de simples arrays estruturas (eacute um formato hieraacuterquico)

Formatos de imagens JPEG JPEG2000 TIFF GeoTIFF etc - voltados para arrays 2D3D de inteiros ou (em alguns casos) reais com ou sem compressatildeo JPEG2000 tem caracteriacutesticas mais avanccediladas como imagens multiresoluccedilatildeo

Formatos vetoriais PS EPS DXF SHP SVG - variados niacuteveis de suporte a armazenamento de vetores e formas em 2D ou 3D

ISIS Cube semelhante em caracteriacutesticas ao FITS mais usado em sensoriamento remoto geociecircncias e ciecircncias planetaacuterias em geral para observaccedilotildees 1D 2D ou 3D

Formatos nativos de linguagens todo o trabalho de leitura e gravaccedilatildeo eacute feito automagicamente pela biblioteca padratildeo em IDL R Python Java

5689

Arquivos texto - newlines

Apesar do que possa parecer arquivos texto natildeo tecircm intrinsecamente vaacuterias linhas Arquivos texto satildeo soacute uma sequumlecircncia 1D de caracteres em alguma codificaccedilatildeo Separaccedilatildeo em linhas (equivalente a interpretar o arquivo como 2D em linhas e colunas) eacute

especificada por convenccedilotildees Natildeo haacute apenas uma convenccedilatildeo para o fim de linhas

A mais primitiva convenccedilatildeo eacute separaccedilatildeo nenhuma estipula-se que linhas tenham um nuacutemero fixo N de caracteres e cabe ao software que lecirc o arquivo entender que uma linha nova ocorre regularmente a cada N caracteres

Eacute a forma menos portaacutevel e mais inconveniente eacute necessaacuterio o conhecimento preacutevio (ou por inspeccedilatildeo do arquivo) de quantos caracteres haacute por linha

A maior parte dos editores de texto natildeo vai saber separar linhas desta forma (por falta deste conhecimento preacutevio) Exemplo (de um FITS real)

SIMPLE = T Fits standard BITPIX = 16 Bits per pixel NAXIS = 0 Number of axes EXTEND = T File may contain extensions

O que com as linhas quebradas nos lugares certos seria

SIMPLE = T Fits standard BITPIX = 16 Bits per pixel NAXIS = 0 Number of axes EXTEND = T File may contain extensions

5789

Arquivos texto - newlines

A forma mais comum de especificar linhas eacute com um marcador do final de linha (newline)

Eacute um caractere especial natildeo normalmente presente no texto que serve para marcar fim de linhas

Mas natildeo haacute soacute um padratildeo de newline Os mais comuns

LF (Line Feed ASCII 10) ndash Unix Linux Mac OS X

CR - (Carriage Return ASCII 13) - Mac OS lt10

CR+LF (CR seguido de LF) - Windows DOS

Eacute o motivo de o Notepad (Windows) natildeo entender as quebras de linha de arquivos escritos com o formato nativo de Linux o arquivo soacute tem LF enquanto o editor espera CR+LF

Alguns sistemas (strings em vaacuterias linguagens por exemplo) usam o coacutedigo de escape n para indicar newline que eacute codificado de acordo com o padratildeo sendo usado

Em geral bibliotecas de leitura e gravaccedilatildeo de arquivos usam (default pelo menos) o newline nativo do sistema em que satildeo usadas

Programas de conversatildeo entre os sistemas satildeo comuns (ex dos2unix)

O Wordpad identifica se for usado soacute LF e quebra as linhas de acordo

5889

Arquivos - texto - CSV

Comma-separated values

O formato mais padronizado para tabelas (arrays 2D) em texto (frequentemente mas natildeo necessariamente ASCII)

Bem suportado por bibliotecas padratildeo de linguagens e outros softwares (Excel Calc Origin Google Docs etc)

Conteacutem Linhas de cabeccedilalho (opcionais mas recomendadas) linhas com qualquer texto geral

descrevendo o arquivo e em geral uma linha de tiacutetulo para as colunas da tabela Uma (apenas uma) tabela onde todas as linhas tecircm o mesmo nuacutemero de colunas

Colunas separadas por viacutergulas (opcionalmente pode ser outro separador) Linhas terminadas por newline (qualquer que seja) Strings delimitados por ldquo ldquo

Ex

NAMECALMPOSFILNAMEECHLPOSDISPPOSTARGNAMEPOSDIRCLASSMJD-OBSITIMECOADDSdec18s00010NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001dec18s00020NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001dec18s00120NIRSPEC-5-AO635800364500itan140NIRSPEC-5-AOp2 TITAN5408763000001dec18s00140NIRSPEC-5-AO626300364500itan140NIRSPEC-5-AOp1 TITAN5408763000001dec18s00151NIRSPEC-5-AO626300364500itan140NIRSPEC-5-AOp1ARC5408764000001dec18s00160NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001

Natildeo eacute necessaacuterio que as colunas tenham largura constante

Cabeccedilalho

5989

Arquivos - texto - CSVHaacute amplo suporte a leitura e gravaccedilatildeo de CSV sem precisar recorrer a procedimentos de baixo niacutevel

Podem ser diretamente importados em Excel Calc Origin Google Docs ou lido facilmente com bibliotecas padratildeo comuns Ex (IDL)

IDLgt c=read_csv(filesearch_scamcsvheader=h)IDLgt printhNAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS

IDLgt helpc Structure ltc8bca508gt 11 tags length=5256 data length=5248 refs=1 FIELD01 STRING Array[41] FIELD02 LONG Array[41] FIELD03 STRING Array[41] FIELD04 DOUBLE Array[41] FIELD05 DOUBLE Array[41] FIELD06 STRING Array[41] FIELD07 STRING Array[41] FIELD08 STRING Array[41] FIELD09 STRING Array[41] FIELD10 DOUBLE Array[41] FIELD11 LONG Array[41]

IDLgt printcfield01[03]dec18s0001 dec18s0002 dec18s0003 dec18s0004

IDLgt printcfield03[03]NIRSPEC-5-AO NIRSPEC-5-AO NIRSPEC-5-AO NIRSPEC-5-AO

6089

Arquivos - texto - CSVEx (IDL) Criaccedilatildeo de um CSV com uma tabela de valores

Criaccedilatildeo de 3 arrays 1D (12 elementos) um para cada coluna

IDLgt x=dindgen(3)IDLgt y=dindgen(4)IDLgt xx=reform(rebin(x34)12)IDLgt yy=reform(rebin(reform(y14)34)12)IDLgt f=xx+yy10IDLgt helpxxyyfXX DOUBLE = Array[12]YY DOUBLE = Array[12]F DOUBLE = Array[12]

Escrita do arquivo

IDLgt write_csvexamplecsvxxyyfheader=[XYX+10Y]

ResultadoXYX+10Y000000000000000000000000100000000000000010000000200000000000000020000000000000001000000010000000100000001000000011000000()

6189

Arquivos - texto - ldquoColunas regularesrdquoFixed column width

Natildeo eacute exatamente um padratildeo Eacute uma praacutetica comum

Armazena uma tabela (array 2D) de forma regular simples de ser interpretada e lida

Costumam ter linha(s) de cabeccedilalho descrevendo o conteuacutedo do arquivo em geral com uma linha para os nomes das colunas

As demais linhas conteacutem os dados sempre ocupando a mesma largura por coluna e escritos no mesmo formato em cada coluna

Costumam ser simples de ler inclusive interativamente (exs Excel Calc Origin read_ascii)

Ex (IDL) Uma simples tabela soacute de nuacutemeros

wavl CH4=33 wavl CH4=25 wavl CH4=10 wavl CH4=08 wavl CH4=05 wavl CH4=026 wavl CH4=02 477330000 0090130 477330000 0091110 477330000 0089250 477330000 0087000 477330000 0087140 477330000 0090080 477330000 0088110 480040000 0090930 480040000 0091930 480040000 0090160 480040000 0087930 480040000 0088110 480040000 0090950 480040000 0089090 482750000 0091710 482750000 0092730 482750000 0091060 482750000 0088850 482750000 0089080 482750000 0091810 482750000 0090060 485450000 0092530 485450000 0093570 485450000 0092000 485450000 0089810 485450000 0090100 485450000 0092730 485450000 0091090

IDLgt a=read_ascii(specs_27s_ntxtdata_start=1header=header)IDLgt printheader wavl CH4=33 wavl CH4=25 wavl CH4=10 wavl CH4=08 wavl CH4=05 wavl CH4=026 wavl CH4=02 IDLgt helpa Structure ltd423c9a8gt 1 tags length=224 data length=224 refs=1 FIELD01 FLOAT Array[14 4]

6289

Arquivos - texto - ldquoColunas regularesrdquoJaacute um arquivo um pouco mais difiacutecil de ler

NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS dec18s0001 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0002 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0003 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 FLAT 5408757812500 460000 5 dec18s0004 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 DARK 5408757812500 460000 5

Por ter colunas de tipos diferentes (strings inteiros reais) natildeo eacute possiacutevel o ler em um simples array Mas eacute faacutecil o colocar em uma estrutura de arrays onde cada campo eacute uma coluna

Especificando interativamente como interpretar as linhasIDLgt templ=ascii_template(filesearch_scamtxt)

Nome do campo (default mostrado)

Tipo do campo (identificado automaticamente)

Posiccedilatildeo (caracter) do comeccedilo (identificada automaticamente)

Linha de exemplo para verificar as colunas

6389

Arquivos - texto - ldquoColunas regularesrdquoDepois de feito o template o arquivo pode ser lido com apenas

IDLgt a=read_ascii(filesearch_scamtxttemplate=templ)IDLgt helpa Structure ltd4ec4608gt 11 tags length=416 data length=416 refs=1 FIELD01 STRING Array[4] FIELD02 LONG Array[4] FIELD03 STRING Array[4] FIELD04 FLOAT Array[4] FIELD05 FLOAT Array[4] FIELD06 STRING Array[4] FIELD07 STRING Array[4] FIELD08 STRING Array[4] FIELD09 FLOAT Array[4] FIELD10 FLOAT Array[4] FIELD11 LONG Array[4]IDLgt printafield01dec18s0001 dec18s0002 dec18s0003 dec18s0004IDLgt printafield04 626300 626300 626300 626300

O template (uma estrutura contendo dados sobre como ler o arquivo) pode ser usado para outros arquivos no mesmo formato No lugar de ter sido criado interativamente poderia ter sido lido de algum arquivo Poderia ter especificado nomes para os campos que seriam mais amigaacuteveis que coias como FIELD11

6489

Arquivos - texto - XML

Extensible Markup Language

Admite grande flexibilidade e por isso pode ter alta complexidade

Valores satildeo colocados dentro de uma estrutura em hieraacuterquica (em uma aacutervore) com os noacutes identificados pelos seus nomes (chaves)

Largamente usado em muitas aacutereas para armazenar conjuntos arbitraacuterios de quaisquer estruturas de dados

A maioria das aplicaccedilotildees usa um formato que eacute um subconjunto do XML especificado por um Schema comumente em um arquivo XML DTD (Document Type Definition)

6589

Arquivos - texto ndash XML ndash exemplos de usos

Armazenamento de dados de aplicaccedilotildees web (comum para exportar importar dados MediaWiki DokuWiki WordPress ADS Lattes etc)

Documentos Office (docx pptx xlsx) OpenOffice (odt opd ods)

Como versotildees de outros formatos FITSML XDF

ldquoScientific Dataset XML NASAs Astronomical Data Center (ADC) sponsors a number of research projects that

use XML for scientific data representation The XML activities at the ADC are sponsored and supported by the NASA Office of Space Science Applied Information Systems Research Program (AISRP)rdquo - httpxmlcoverpagesorgnasa-adchtml

Astronomical Instrument Markup Language (AIML)

SVG ndash Scalable Vector Graphics

Muitas de outras aplicaccedilotildees listadas em httpxmlcoverpagesorgxmlhtmlapplications

6689

Arquivos - texto ndash XML - exemploltxml version=10 gtltDOCTYPE Xdmf SYSTEM Xdmfdtd []gtltXdmf xmlnsxi=httpwwww3org2001XInclude Version=20gt ltDomaingt lt-- Example of Basic Topologies --gt ltInformation Name=Descriptiongt Example of a Polyvertex Topology ltInformationgt ltGrid Name=Polyvertex GridType=Uniformgt ltTopology TopologyType=Polyvertex Dimensions=3 NodesPerElement=3gt ltDataItem Format=XML Dimensions=3 3 NumberType=Floatgt 0 1 2 4 5 6 8 9 10 ltDataItemgt ltTopologygt ltGeometry Type=XYZgt ltDataItem Format=XML Dimensions=4 4 3gt 00 00 00 10 00 00()Que mostra que a interpretaccedilatildeo (parsing) de XML eacute em geral complexa

6789

Arquivos - texto - XML

Haacute muitas bibliotecas de alto niacutevel para fazer o processamento (parsing) e entregar os dados em uma estrutura conveniente

A complexidade em processar XML estaacute em decidir o que fazer com os dados jaacute que os arquivos podem ser muito complexos

As APIs (Application Programming Interfaces) mais comuns para processar XML que satildeo implementadas em muitas linguagens

DOM (Document Object Model) ndash manteacutem todo o conteuacutedo do em uma estrutura de dados (em geral uma aacutervore) em uma variaacutevel (em geral um objeto) Esta pode ser consultada para obter os valores de interesse para os alterar e usada para escrever um arquivo

SAX (Simple API for XML) ndash Interpretador (parser) por objetos O usuaacuterio escreve uma classe herdando da classe SAX provendo os meacutetodos que vatildeo processar os campos agrave medida em que estes satildeo lidos

6889

Arquivos - binaacuterios - FITSFlexible Image Transport System

O formato mais comum para observaccedilotildees astronocircmicas Tambeacutem usado para armazenar quaisquer dados mesmo natildeo relacionados a observaccedilotildees (especialmente tabelas como eacute praacutetica do STSCI)

Conteacutem um (ou mais) cabeccedilalho(s) de texto com metadados (informaccedilotildees sobre os dados como caracteriacutesticas (necessaacuterias para os ler) origem condiccedilotildees em que foram obtidos processamento realizado etc)

SIMPLE = T image conforms to FITS standard BITPIX = 32 bits per data value NAXIS = 2 number of axes NAXIS1 = 1024 NAXIS2 = 1024 BSCALE = 100000 Scaling factor BZERO = 000000 Scaling zero-point TELESCOP= Keck II Telescope SLITNAME= 0041x226 Slit Name SLITPA = 351979 Slit position angle SLITX = 131500 X pixel of the center of the slit LST = 12010446 local apparent sidereal time (()

Depois do cabeccedilalho haacute uma (ou mais) seccedilatildeo(otildees) de dados binaacuterios Costuma(m) ser array(s) 1D (espectros) 2D (imagens) ou 3D (ldquocubos de dadosrdquo)

De inteiros ou reais inteiros satildeo comuns em contagens de instrumentos reais para valores derivados (fluxos intensidades etc)

6989

Arquivos - binaacuterios - FITSNormalmente FITS satildeo lidos escritos por bibliotecas prontas de (relativamente) alto niacutevel usuaacuterio natildeo tem que saber como os dados satildeo armazenados no arquivo nem como os ler escrever Ex (IDL com a biblioteca idlastro)

IDLgt fits_info2dspectrumfits2dspectrumfits has 3 extensionsPrimary header 288 recordsNo dataExtension 1 -- SCI Header 144 records IMAGE ( 1201 1201 )Extension 2 -- ERR Header 72 records IMAGE ( 1201 1201 )Extension 3 -- DQ Header 72 records IMAGE ( 1201 1201 )

IDLgt mydata=readfits(2dspectrumfitsexten_no=1myheader) READFITS Reading FITS extension of type IMAGE READFITS Now reading 1201 by 1201 array

IDLgt extastmyheadermyastIDLgt sz=size(mydatadimensions)IDLgt xy2ad[1sz[0]][1sz[1]]myastcorners_acorners_dIDLgt printcorners_aCorners of the data array from file 2dspectrumfits are at 14487480 33063480

IDLgt printcorners_d -00041264444 00041402222

Obteacutem os dados de coordenadas (WCS) do header

Coloca os dados no array (2D de floats) mydata e o header no array (1D de strings) myheader

Calcula as coordenadas das quinas da imagem atraveacutes do WCS

Provecirc informaccedilotildees sobre o arquivo

7089

Arquivos - binaacuterios - ISIS Cube

Formatos como FITS se adequam muito a ter uma interface de mais alto niacutevel por objetos

Tambeacutem para dados em tabelas FITS muito mais trabalhosos de ler em baixo niacutevel que se adequam muito mais a mapas ou estruturas

Exemplo (de um formato semelhante a FITS ISIS cube)

O objeto ao ser criado lecirc todo o arquivo

cube=pp_editablecube(CM_1553510065_1_ircub)

Meacutetodos fornecem os dados desejados para obter quando necessaacuterio os dados de interesse

Find out the names of the backplanesprintcubegetproperty(backnames)Get the start time of the cubeprintcubegetfromheader(START_TIME)2007-084T100057286Z

Valores no cabeccedilalho podem ser convenientemente fornecidos como um mapa

header=cubeheader_as_hash()printheader[START_TIME]2007-084T100057286Z

7189

Arquivos - binaacuterios ndash ISIS Cube

Os dados satildeo fornecidos como arraysMake a contour plot of the latitudesc=contour(cubegetsuffixbyname(LATITUDE))Get the band with wavelength nearest to 21 (in the units used in the cube)selband=cubegetbandbywavelength(21wavelengths=selwavs)

Interfaces por overload tornam o acesso ainda mais conveniente

selband=cube[21]

selwavs=cube[21]

Retorna um array com a banda de comprimento de onda mais proacuteximo de 21 (microm)

Retorna o comprimento de onda mais proacuteximo de 21 (microm) da banda retornada acima

7289

Arquivos - binaacuterios ndash ISIS Cube Alteraccedilotildees feitas ao conteuacutedo satildeo automaticamente refletidas em todos os

lugares (cabeccedilalho em particular) afetados mantendo o objeto vaacutelido que pode depois ser gravado em um novo arquivo

IDLgt printcubelinescubesamplescubebands 64 64 256

IDLgt helpcubecoreltExpressiongt FLOAT = Array[64 64 256]

IDLgt cubecore=dblarr(100100256)

A linha acima natildeo eacute uma atribuiccedilatildeo eacute uma invocaccedilatildeo de meacutetodo Eacute equivalente acubesetpropertycore=dblarr(100100256)

Eacute o trabalho da funccedilatildeo setproperty decidir se a propriedade passada (core) faz sentido e se fizer fazer todo o trabalho necessaacuterio a esta mudanccedila Para o usuaacuterio eacute tudo automaacutetico e os dados da classe satildeo vaacutelidos o tempo todo

IDLgt helpcubecoreltExpressiongt DOUBLE = Array[100 100 256]

IDLgt printcubelinescubesamplescubebands 100 100 256

IDLgt cubesaveCM_1553510065_1_ir_editedcub

7389

Arquivos - binaacuterios ndash NetCDF e HDF5

Network Common Data Form e Hierarchical Data Format

Os dois uacutenicos formatos bem estabelecidos para dados cientiacuteficos geneacutericos

Armazenam dados como vaacuterias variaacuteveis e seus metadados Para cada variaacutevel haacute (ou pode haver) os metadados

Nome Dimensotildees (do array) Unidades Comentaacuterios

Ambos permitem arrays multidimensionais

Apenas HDF5 permite estruturas (daiacute vem a hierarquia)

Autodocumentados qualquer software que saiba ler um destes formatos lecirc qualquer arquivo sem precisar de conhecimento preacutevio sobre como o arquivo foi gerado

Muito bem suportados em bibliotecas padratildeo e natildeo padratildeo em softwares interativos e visualizadores (inclusive plugins para navegadores)

httpwwwunidataucaredusoftwarenetcdf httpenwikipediaorgwikiHdf5

NetCDF eacute mais simples de usar por natildeo ter hierarquia dando menos trabalho para ler e escrever dados Se hierarquia natildeo eacute necessaacuteria eacute mais conveniente de usar que HDF5

7489

Arquivos - binaacuterios - NetCDF e HDF5Haacute tambeacutem o formato CDL uma versatildeo ASCII do NetCDF A biblioteca padratildeo do NetCDF inclui conversores entre estes formatos

$ ncdump -h refspec_g01_0ncnetcdf refspec_g01_0 dimensions nlay = 51 nwn = 400 nleg = 33 numu = 2 nlev = 52 nphi = 3 ngas = 2 nwnc = 1 scal = 1 v3 = 3 dnl = 1 nk = 1 tdisr = UNLIMITED (0 currently) na = 16

variables float alb(nwn) float z(nlay) float t(nlay) float p(nlay) float wl(nwn) float iof(nwn) float mtau(nwn) float htau(nwn) float hctaus(nwn) float gtau(nwn) float outcos(scal) float phi(nleg) float phic(scal) float umu(numu) float flux(v3 nwn nlev) float mix(nlay ngas) float c(nlay) float psat(nlay) float ga(nwnc) float wlc(nwnc) float inc(scal) int dm(scal) int ord(scal) float fbeam(scal) float wn(nwn) float tautot(nwn nlay) float htaus(nwn nlay) float htaux(nwn nlay) float taug(nwn nlay) float phase(nwn nlay nleg) float ssa(nwn nlay) float uu(nwn nphi nlev numu) float u0u(nwn nlev numu) float tray(nwn nlay) float gtauo(tdisr nwn nlay)

Haacute 14 variaacuteveis usadas como dimensotildees para as 35 variaacuteveis que satildeo arrays

Ex alb(nwn) indica que alb eacute um array 1D de nwn elementos

nwn estaacute armazenado como uma das dimensotildees e eacute 400 portanto alb tem 400 elementos

Parte do conteuacutedo de um arquivo NetCDF em formato CDL (gerado pelo programa ncdump)

7589

Arquivos - binaacuterios - NetCDF e HDF5Conteuacutedo daquele arquivo visualizado com o ncview (acompanha a biblioteca NetCDF padratildeo)

7689

Arquivos - binaacuterios - NetCDF e HDF5O conteuacutedo de todo o arquivo pode ser lido facilmente com as bibliotecas disponiacuteveis e armazenado em contecirciners convenientes Usando um objeto que gera um resultado um pouco mais conveniente

IDLgt h=pp_readncdf(refspec_g01_0nchash)IDLgt printhvar_dims ltObjHeapVar229(HASH)gtvars ltObjHeapVar152(HASH)gtdims ltObjHeapVar118(HASH)gt

IDLgt printh[vars]T 173203 175459 175848 176001 175975 Z 431869 418858 406067 393403 380464 FLUX 300660 145536 0705180 0341669 0165532 PHASE 100000 0779034 0660858 0542052 0449983 TAUTOT0694377 0693420 0693474 0693540 0693636()

IDLgt help(h[vars])[TAUTOT]ltExpressiongt FLOAT = Array[51 400]

IDLgt print(h[var_dims])[TAUTOT]NLAY NWN

IDLgt print(h[dims])[(h[var_dims])[TAUTOT]]NLAY 51NWN 400

7789

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5)

Visualizaccedilatildeo da variaacutevel selecionada

Metadados e alguns valores da variaacutevel selecionada

Variaacutevel a ser criada com o conteuacutedo desta variaacutevel do arquivo

Hierarquia das variaacuteveis do arquivo

7889

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5) Imported variable az

IDLgt helpaz Structure ltd5723f38gt 13 tags length=448 data length=444 refs=1 _NAME STRING az _ICONTYPE STRING binary _TYPE STRING DATASET _FILE STRING INTENSI_test_409OUTh5 _PATH STRING _DATA DOUBLE Array[38] _NDIMENSIONS LONG 1 _DIMENSIONS ULONG64 Array[1] _NELEMENTS ULONG64 38 _DATATYPE STRING H5T_FLOAT _STORAGESIZE ULONG 8 _PRECISION LONG 64 _SIGN STRING

IDLgt printaz_data 00000000 10000000 20000000 30000000 40000000 50000000 60000000 80000000 ()

7989

Arquivos - binaacuterios - imagens

JPEG JPEG200 TIFF GeoTIFF etc

Os formatos comuns de imagens satildeo bem suportados em muacuteltiplas plataformas para uso dentro de programas e interativamente

Alguns formatos tecircm opccedilatildeo de compressatildeo com perda eou sem perda

Armazenam imagens como arrays 2D ou 3D (3D frequumlentemente limitado a 3 ou 4 em uma das dimensotildees uma imagem em 3 ou 4 bandas) de inteiros ou (em alguns formatos) reais

Alguns formatos permitem armazenar metadados para caracterizar as imagens armazenadas

JPEG2000 e GeoTIFF (um subconjunto de TIFF) comuns em astronomia e aacutereas proacuteximas

8089

Arquivos - binaacuterios ndash imagens ndash exemplo (IDL)IDLgt printquery_tiff(issmap_2009tiffinfogeotiff=geo) 1

IDLgt helpinfo Structure ltd4eca4b8gt 18 tags length=144 data length=132 refs=1 CHANNELS LONG 4 DIMENSIONS LONG Array[2] IMAGE_INDEX LONG 0 NUM_IMAGES LONG 1 PIXEL_TYPE INT 1 TYPE STRING TIFF BITS_PER_SAMPLE LONG 8 POSITION FLOAT Array[2] RESOLUTION FLOAT Array[2] UNITS LONG 2 TILE_SIZE LONG Array[2] DESCRIPTION STRING ISS (2009) DATE_TIME STRING 20100218 012436()

IDLgt helpgeo Structure ltd4efa1b8gt 10 tags length=264 data length=262 refs=1 MODELPIXELSCALETAG DOUBLE Array[3] MODELTIEPOINTTAG DOUBLE Array[6 4] GEOGRAPHICTYPEGEOKEY INT 4035 GEOGSEMIMAJORAXISGEOKEY DOUBLE 25750000 GEOGSEMIMINORAXISGEOKEY DOUBLE 25750000()

IDLgt myimage=read_tiff(issmap_2009tiff) Lecirc a imagem para o array myimage

Obteacutem informaccedilotildees sobre o arquivo

8189

Arquivos - binaacuterios ndash formatos nativosLinguagens como IDL R Python Java tecircm seu formato nativo binaacuterio acessado em alto niacutevel Basta mandar salvar ler variaacuteveis no do arquivo a biblioteca padratildeo automagicamente faz todo o trabalho de decidir como gravar ler os dados

Conveniente de usar na proacutepria linguagem Mas raramente existem bibliotecas para ler gravar o formato nativo de uma linguagem a partir de outra Ex (IDL)

IDLgt savefile=2dspectrumsavmydatamyheadercorners_dcorners_averbosecompress SAVE Portable (XDR) compressed SAVERESTORE file SAVE Saved variable MYDATA SAVE Saved variable MYHEADER()

Pode ser lido com apenas (haacute formas mais elaboradas)

IDLgt restore2dspectrumsavverbose RESTORE Portable (XDR) compressed SAVERESTORE file RESTORE Save file written by ltunknowngtltunknowngt Thu Jan 27 191422 2011 RESTORE IDL version 801 (linux x86_64) RESTORE Restored variable MYDATA RESTORE Restored variable MYHEADER()

IDLgt helpmydatamyheadercorners_dcorners_aMYDATA FLOAT = Array[1201 1201]MYHEADER STRING = Array[144]()

8289

Arquivos - processamento em baixo niacutevel

Nem sempre um formato padratildeo eacute a melhor escolha para o problema

Nem sempre haacute escolha (pode-se ter que trabalhar com arquivos que jaacute foram escritos em algum formato proprietaacuterio)

Agraves vezes o formato eacute padratildeo mas natildeo haacute bom suporte a ele disponiacutevel

Em todos estes casos eacute necessaacuterio escrever rotinas em baixo niacutevel que vatildeo ler processar diretamente o conteuacutedo do arquivo

Preferencialmente criando interfaces de alto niacutevel para o programa que vai as usar

8389

Arquivos - processamento em baixo niacutevel - texto

Tomando o exemplo anterior onde as colunas eram de diferentes tipos

NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS dec18s0001 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0002 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0003 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 FLAT 5408757812500 460000 5 dec18s0004 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 DARK 5408757812500 460000 5

A forma mais simples de o ler diretamente eacute definir uma estrutura para receber cada linha e um array destas estruturas para receber todo o arquivo Ex (IDL)

IDLgt record=namecalmpos0filnameechlpos0d0disppos0d0targnameposdirclassmjd_obsitime0d0coadds0IDLgt nlines=file_lines(filesearch_scamtxt)IDLgt mydata=replicate(recordnlines-1)IDLgt header=

Depois de definidas as variaacuteveis que vatildeo receber os dados o arquivo pode ser lido

IDLgt openrunitfilesearch_scamtxtget_lunIDLgt readfunitheaderIDLgt readfunitmydataformat=(A14I8A15F104F104A18A19A15F158F105I15)IDLgt free_lununit

A gravaccedilatildeo de um arquivo texto poderia ser feita de forma semelhante apenas trocando openr por openw (abrir o arquivo para gravaccedilatildeo natildeo leitura) e readf por printf

O arquivo eacute aberto em uma unidade (unit) usada para especificar de onde eacute feita a leitura

Ao final o arquivo eacute fechado

8489

Arquivos - processamento em baixo niacutevel - texto

O que resulta em

IDLgt printheader NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS

IDLgt helpmydataMYDATA STRUCT = -gt ltAnonymousgt Array[4]

IDLgt helpmydata[0] Structure ltd5e38f68gt 11 tags length=136 data length=124 refs=3 NAME STRING dec18s0001 CALMPOS INT 0 FILNAME STRING NIRSPEC-5-AO ECHLPOS DOUBLE 62630000 DISPPOS DOUBLE 36450000 TARGNAME STRING HD85258 POSDIR STRING NIRSPEC-5-AOp1 CLASS STRING STAR MJD_OBS STRING 54087574 ITIME DOUBLE 10000000 COADDS INT 1

Este caso eacute mais complicado que os mais comuns por haver colunas de strings

Se todas fossem de nuacutemeros natildeo teria sido necessaacuterio especificar o formato explicitamente As colunas teriam sido adivinhadas pela biblioteca que lecirc o arquivo Poderia ter sido lido escrito soacute com um array de nuacutemeros sem estruturas

8589

Arquivos - processamento em baixo niacutevel - binaacuterio

Formatos binaacuterios podem ser definidos de qualquer forma O arquivo eacute apenas um conjunto de bytes Cabe ao software saber como os interpretar

Uma escolha comum para que sejam autodocumentados eacute incluir um cabeccedilalho de texto informando as caracteriacutesticas dos dados necessaacuterias para os ler

Ex (IDL) criar um arquivo que armazene um array de doubles com um cabeccedilalho informando as dimensotildees para que o programa que o lecirc saiba como ler os dados

Inventa dados e abre o arquivo

IDLgt data_to_write=dindgen(34)IDLgt openwunitbinary_exampledatget_lun

Escreve as dimensotildees como texto

IDLgt printfunitdimensions of the double array stored belowIDLgt printfunitsize(data_to_writedimensions)

Escreve os dados binaacuterios

IDLgt writeuunitdata_to_write

Fecha o arquivo

IDLgt free_lununit

Escreve em binaacuterio (write unformatted)

8689

Arquivos - processamento em baixo niacutevel - binaacuterio

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

dimensions of the double array stored below 3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

8789

Arquivos - processamento em baixo niacutevel - binaacuterioA leitura deste arquivo eacute igualmente simples

IDLgt header=IDLgt dims=[00]IDLgt openrunitbinary_exampledatget_lun

Lecirc as dimensotildees (armazenadas como texto)

IDLgt readfunitheaderIDLgt readfunitdims

Lecirc a parte binaacuteria depois de saber as dimensotildees

IDLgt data_read=dblarr(dims)IDLgt readuunitdata_read

Fecha o arquivo

IDLgt free_lununit

Verifica que os dados foram gravados e lidos corretamente

IDLgt printarray_equal(data_to_writedata_read) 1

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Lecirc dados binaacuterios (read unformatted)

8889

Sumaacuterio

5 ndash Slides em httpwwwppenteadonetpeapea04_strings_iopdf Strings Expressotildees regulares Arquivos

httpwwwppenteadonetpea

8989

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89

Strings - processamento natildeo baacutesico

Perl eacute a linguagem mais avanccedilada para processamento de strings tem suporte nativo a muitas outras operaccedilotildees a semacircntica da linguagem eacute voltada principalmente para processar strings expressotildees regulares (de vaacuterios tipos) natildeo satildeo strings fazem parte da semacircntica

Ex (sem o objetivo que seja compreensiacutevel apenas para indicar o estilo)

Ler um arquivo contendo campos com nomes separados de valores por ()

temperature 10008name some modelx_dimension 100y_dimension 100z_dimension 50()

Armazenado-o em um mapa O que pode ser feito com apenas

While (ltgt) Loop over input linesPut pre-colon text into $1 post-colon into $2 if (m (S+) (+) ) Use $1 as key $2 as value $file_data$1 = $2

3689

Expressotildees regulares - definiccedilatildeo

Expressotildees regulares (regular expressions regex) satildeo a mais poderosa ferramenta para fazer buscas e separar substrings

Regex satildeo uma linguagem com o uacutenico objetivo de especificar propriedades de strings

Implementadas em graus diferentes em todas as linguagens modernas e modernizadas facilita encontrar uma expressatildeo jaacute pronta pois satildeo quase iguais em qualquer linguagem

Estatildeo na biblioteca padratildeo em IDL Python R Perl

Em C++ e Java em bibliotecas comuns (Boost Jregex)

Para que servem

Uma expressatildeo regular especifica propriedades de strings

O interpretador de expressotildees regulares (regular expression engine) recebe a expressatildeo e o string a analisar e determina se o string corresponde (matches) agrave expressatildeo regular

Em alguns casos o interpretador pode tambeacutem informar que parte(s) do string corresponde(m) a que parte(s) da expressatildeo regular e realizar processamentos com estas partes

3789

Expressotildees regulares ndash exemplos de usos Separar partes de strings

Encontrar linhas em arquivos que tenham nomes valores e comentaacuterios e separar estes pedaccedilos

Escalar com comentaacuterio

SLITPA = 351979 Slit position angle

Array 1D sem comentaacuterio (se extendendo por vaacuterias linhas)

BAND_BIN_CENTER = (03505400358950036629003732200379490 0387900104598)

Escalares em diferentes formatos

Total Mechanical Luminosity 15310E+03resources_usedwalltime=005603

Pedaccedilos de nomes

6063 17836E-20 2456 T FeIX((3Pe)3d(2PE)4p_1Po-3s2_3p6_1Se)

Datas separando ano mecircs dia hora (em vaacuterios formatos diferentes)

DATE-OBS= 2006-12-18 universal date of observationDATE_TIME = 2010-07-19T161032START_TIME = 2006-182T225102850Z

3889

Expressotildees regulares ndash exemplos de usos

Separar partes de strings Separar partes de nomes de arquivos (por significarem algo como identificar o

conteuacutedo)

specdec18s0041fitsscamdec18i0054fits15_7_mts_hmpixselh_mr15sav15_7_mts_hwpixselh_mr15sav16_3_mts_hwpixselb_mr16savreadmodel5l_-1_000010000_10000_r05_030_08196_0100000_005000000_1000eps

Determinar se um string eacute um nuacutemero (inteiro real fixo flutuante)

Encontrar identificadores Exs nomes de cataacutelogos endereccedilos HTTPFTP endereccedilos de email

Separar campos em arquivos sendo lidos onde as linhas natildeo tecircm a mesma formataccedilatildeo algumas linhas com colunas separadas por espaccedilos outras por tabs outras por

siacutembolos ignorando linhas de comentaacuterios e linhas vazias

3989

Expressotildees regulares - usoEx (IDL) encontrar nomes de arquivos com algumas propriedades

IDLgt printfilesformat=(A)CM_1477475933_1_viscubCM_1477476864_1_ircubCM_1477476864_1_irgcubCM_1477476864_1_viscubCM_1477477826_1_ircubCM_1477477826_1_irgcubCM_1477477826_1_viscubmosaic2cub

IDLgt printstregex(files+irgcubboolean) 0 0 1 0 0 1 0 0

A expressatildeo regular eacute +irgcub Especifica uma ou mais ocorrecircncias seguidas (+) de qualquer caractere () seguido de uma ocorrecircncia de irgcub (o ponto vem precedido do caractere de

escape () para ser entendido literalmente como um ponto e natildeo como o seu significado especial (qualquer caractere)

Esta aplicaccedilatildeo do interpretador (stregex) retorna um valor Booleano (verdadeirofalso) para cada elemento do string passado (files) que informa se aquele elemento correspondia agravequela expressatildeo regular

Este eacute um exemplo artificial Seria mais faacutecil ter usado strmatch(filesirgcub)

4089

Expressotildees regulares - uso

Em casos como este tipicamente o resultado de stregex seria usado como filtro para selecionar apenas os elementos do array de strings que satisfazem agravequela expressatildeo regular

IDLgt w=where(stregex(files+irgcubboolean)null)IDLgt printfiles[w]format=(A)CM_1477476864_1_irgcubCM_1477477826_1_irgcub

Ex (IDL) Determinar que strings conteacutem uma data no formato yyyy-mm-dd

IDLgt strs=[201002012010-02-012010-2-1aaaa-mm-ddT2010-02-01J]IDLgt printstregex(strs[0-9]4-[0-9]2-[0-9]2boolean) 0 1 0 0 1

Esta expressatildeo regular especifica quatro repeticcedilotildees (4) de diacutegitos (caracteres na faixa [0-9]) seguido de um (-) seguido de duas repeticcedilotildees (2) de dois diacutegitos ([0-9]) seguido de um (-) seguido de duas repeticcedilotildees (2) de dois diacutegitos ([0-9])

Uma expressatildeo regular apenas um pouco mais elaborada poderia corresponder aos 3 formatos de data no array acima E poderia se impedir que a uacuteltima (com outros caracteres antes e depois da data) seja aceita

4189

Expressotildees regulares - regras - caracteres ldquonormaisrdquo

Uma expressatildeo regular usa caracteres ldquonormaisrdquo e especiais para especificar o que se vai procurar na ordem em que aparecem na expressatildeo

Se um caractere eacute normal (natildeo eacute um dos especiais mostrados adiante) ele especifica uma ocorrecircncia daquele caractere

Ex J eacute uma expressatildeo regular que corresponde a qualquer string onde ocorra J Jaacute JA soacute corresponde a strings que tenham JA dentro

Exs (IDL)

IDLgt strs=[JJJJJJaJAjaJa]

IDLgt printstregex(strsJboolean) 1 1 1 0 1

IDLgt printstregex(strsJAboolean) 0 0 1 0 0

4289

Expressotildees regulares - regras - caracteres especiaisCaracteres especiais tecircm outros significados Para significar literalmente aquele caractere deve ser escapado (escaped) com um

Siacutembolo significado exemplo Corresponde(m) Escape o caractere seguinte deve ser interpretado

literalmente natildeo como especial aa

Qualquer caractere ab ajb aab abb jafbc

+ Uma ou mais repeticcedilotildees do que vem agrave esquerda a+b ab aab bab baabh

() Subexpressatildeo para agrupar termos afetados por um caractere especial (como parecircnteses em notaccedilatildeo matemaacutetica)

(ab)+c abc ababc dabababcg

Zero ou mais repeticcedilotildees dos termos agrave esquerda ab abbaab caaabg

Zero ou uma repeticcedilatildeo dos termos agrave esquerda ab b ab cabd cbd

| Alternaccedilatildeo qualquer um dos dois agrave esquerda a|bc ac bc jacd jbcd

n Exatamente n repeticcedilotildees do termo agrave esquerda a2b aab daaabg

n1n2 De n1 a n2 repeticcedilotildees do termo agrave esquerda a12b ab aab aaab gaaabbd

^ Acircncora (no comeccedilo) nada agrave esquerda ^ab ab abb

$ Acircncora (no fim) nada agrave direita ab$ abaab

[] Conjunto de valores (explicado adiante)

4389

Expressotildees regulares - regras - conjuntos de valores

[] denota um conjunto de valores que pode conter

Uma lista de coisas que devem corresponder Ex [abc] signfica qualquer caractere no conjunto abc Correspondem a esta

expressatildeo abcabha

Uma lista de coisas que natildeo podem corresponder [^abc] significa qualquer coisa que natildeo seja a b ou c Correspondem a esta

expressatildeo d jgs gg

Faixas de valores [0-9] signfica qualquer diacutegito [0-9a-zA-Z] significa qualquer diacutegito ou letra

Classes de valores como algumas faixas e outros conjuntos ocorrem com muita frequumlecircncia haacute nomes

especiais para eles Estes (em IDL) vecircm entre [] ex [[digit] significa o mesmo que [0-9]

4489

Expressotildees regulares - regras - classes de valores

Classe signficado

alnum Caracteres alfanumeacutericos 0-9a-zA-Z

alpha Caracteres alfabeacuteticos a-zA-Z

cntrl Caracteres de controle ASCII (natildeo visiacuteveis coacutedigos 1 a 31 e 127)

digit Diacutegitos (decimais) 0-9

graph Caracteres visiacuteveis ASCII 33 a 126 (natildeo inclui o espaccedilo)

lower Letras minuacutesculas a-z

print Caracteres ldquoimprimiacuteveisrdquo (visiacuteveis e o espaccedilo) ASCII 32 a 126

punct Caracteres de pontuaccedilatildeo $amprsquo()+-lt=gt[]^_lsquo|~

space Os caracteres ldquoem brancordquo (blank) espaccedilo tab tab vertical CR LF (ASCII 32 e 9-13)

upper Letras maiuacutesculas A-Z

xdigit Diacutegitos hexadecimais 0-9A-Fa-f

lt Comeccedilo de palavra (palavra definida como sequumlecircncia de coisas natildeo space)

gt Fim de palavra (palavra definida como sequumlecircncia de coisas natildeo space)

Estas satildeo apenas as principais Algumas implementaccedilotildees tecircm muito mais (em particular nas linguagens que usam Unicode nativamente)

4589

Expressotildees regulares - exemplos

Determinar se strings satildeo nuacutemeros (Ex IDL)

IDLgt str=[9-18 875-812-45913E9-98d7a188d032f5]

Inteiros

IDLgt intexpr=^[-+][0-9]+$

IDLgt printstregex(strintexprboolean) 1 1 0 0 0 0 0 0 0 0

Ponto flutuante

IDLgt fpexpr=^[-+](([0-9][0-9]+)|([0-9]+[0-9]))([eEdD][-+][0-9]+)$

IDLgt printstregex(strfpexprboolean) 1 1 0 1 1 1 1 1 0 0

Sinal opcional

1 ou mais diacutegitos

Sinal opcional

0 ou mais diacutegitos opcionalmente seguidos de um ponto e 1 ou mais diacutegitos

1 ou mais diacutegitos opcionalmente seguidos de um ponto e 0 ou mais diacutegitos

ou Expoente opcional letra do expoente seguida de sinal opcional seguido de um ou mais diacutegitos

4689

Expressotildees regulares ndash extraccedilatildeo

Interpretadores de expressotildees regulares costumam oferecer mais que apenas testar se um string corresponde a uma expressatildeo

Em geral tambeacutem podem retornar que parte(s) do string corresponde(m) agrave expressatildeo

Ex (IDL) Determinar se um string conteacutem uma data incluindo os formatos

IDLgt dates=[2011-01-312011 1 3120110131something done on y2011m1d31 with something]

E extrair a data de dentro do string

IDLgt expr=[0-9]4[0-9]12[0-9]12

(4 diacutegitos)(qualquer separador)(1 a 2 diacutegitos)(qualquer separador)(1 a 2 diacutegitos)

IDLgt printstregex(datesexprextract)format=(A)2011-01-312011 1 31201101312011m1d31

Como agora separar ano mecircs e dia Com uma busca e uma extraccedilatildeo para cada Poderia ser mais eacute mais faacutecil com uma uacutenica expressatildeo regular

4789

Expressotildees regulares - aleacutem de apenas testes

Tambeacutem podem retornar que parte(s) do string correspondem agrave expressatildeo toda e agraves suas subexpressotildees (partes da expressatildeo delimitadas por parecircnteses)

Ex (IDL) Separar pedaccedilos de datas Neste caso para a expressatildeo ficar menor assumindo um formato simples (yyyy-mm-ddThhmmssfff) Mas poderia ser um formato mais livre como no exemplo anterior

IDLgt str=Stuff observed on 2011-01-31T123924983 with some instrumentIDLgt expr=([0-9]4)-([0-9]2)-([0-9]2)T([0-9]2)([0-9]2)([0-9]2[0-9]3)

(quatro diacutegitos)-(2 diacutegitos)-(2 diacutegitos)T(2 diacutegitos)(2 diacutegitos)(2 diacutegitos3 diacutegitos)

IDLgt pieces=stregex(strexprextractsubexpr)IDLgt printpiecesformat=(A)2011-01-31T12392498320110131123924983IDLgt d=julday(pieces[2]pieces[3]pieces[1]pieces[4]pieces[5]pieces[6])IDLgt printdformat=(F166) 2455593027372

Expressatildeo inteiraPrimeira subexpressatildeoSegunda subexpressatildeoTerceira subexpressatildeoQuarta subexpressatildeoQuinta subexpressatildeoSexta subexpressatildeo

4889

Expressotildees regulares - referecircncias httpxkcdcom208

Viacutedeos do Software Carpentry

httpsoftware-carpentryorg4_0regexp

4989

Arquivos

Quase todo programa precisa armazenar dados em arquivos

Podem ser pequenos arquivos de paracircmetros ou enormes arquivos de dados produzidos ou a processar

Apesar do sugerido pela praacutetica comum arquivos texto natildeo satildeo sempre a melhor escolha para armazenar dados - e haacute muitas formas diferentes de os usar

Qual eacute a melhor escolha

Assim como para linguagens ou contecirciners natildeo existe ldquoo melhor formatordquo Cada um tem suas vantagens e desvantagens

Dados diferentes (mesmo se usados pelos mesmos programas) em geral se adequam melhor a formatos diferentes

5089

Arquivos - texto X binaacuterios

Em qualquer formato arquivos satildeo armazenados como diacutegitos binaacuterios

Mas haacute duas formas principais como eles podem ser codificados

Arquivos baseados em texto (text files)

Dados satildeo transformados em caracteres usando alguma formataccedilatildeo (mesmo se impliacutecita) e escritos com alguma codificaccedilatildeo de texto (comumente mas natildeo necessariamente ASCII)

Um arquivo texto eacute um ou mais strings As mesmas conversotildees tecircm que ser feitas depara outros tipos

Arquivos ldquobinaacuteriosrdquo (binary files)

Embora todo arquivo seja binaacuterio este nome costuma ser usado soacute para aqueles em que os dados natildeo estatildeo na forma de texto

Com frequumlecircncia (nem sempre) os dados satildeo gravados de forma idecircntica a como satildeo armazenados na memoacuteria

Muitos formatos usam uma mistura de partes em texto e partes binaacuterias

Um cabeccedilalho (header) de texto que daacute informaccedilotildees (metadados) sobre os dados armazenados na parte binaacuteria que vem depois

O cabeccedilalho conteacutem em especial informaccedilotildees sobre como ler os dados binaacuterios

5189

Arquivos - texto X binaacuterios

Vantagens de arquivos texto

Legiacuteveis por pessoas (human readable)

Podem ser auto-suficientes todo o necessaacuterio para os ler e entender o que conteacutem pode ser obtido olhando o arquivo

Satildeo os menos especiacuteficos a linguagens software normalmente satildeo escritos em ASCII ou Unicode e sempre haacute algum suporte a ler escrever texto em linguagens software

Haacute alguns formatos padratildeo para texto (exs CSV XML) que satildeo suportados em muitas plataformas diferentes

5289

Arquivos - texto X binaacuterios

Vantagens de arquivos binaacuterios

Em geral natildeo haacute conversotildees entre o os dados como armazenados na memoacuteria O que torna o armazenamento mais eficiente e sem alteraccedilotildees nos valores

A maior parte dos formatos padronizados eacute binaacuteria Exs FITS cube CDF NetCDF HDF HDF5 JPEG JPEG2000 TIFF GeoTIFF MPEG etc

Eacute mais comum que haja bibliotecas prontas (ateacute de alto niacutevel) para consulta leitura e gravaccedilatildeo

Os formatos melhor desenhados satildeo autodocumentados (em texto ou binaacuterio) para os ler natildeo eacute necessaacuterio conhecimento preacutevio sobre como os dados foram armazenados

Toda linguagem plataforma costuma ter seu formato binaacuterio mais nativo que costuma ser o mais faacutecil para leitura gravaccedilatildeo Em particular nas de alto niacutevel que tecircm formatos autodocumentados (especialmente

em IDL R Python Java)

Muitos formatos tecircm opccedilatildeo de compressatildeo dos dados

5389

Arquivos - proprietaacuterios X padratildeo

Independente da escolha texto binaacuterio programas devem escolher entre usar um formato proacuteprio ou um formato padronizado

A principal vantagem de formatos proacuteprios eacute que satildeo definidos da forma mais conveniente para a aplicaccedilatildeo que os usa simplificando leitura e gravaccedilatildeo e potencialmente otimizando recursos (acesso ao disco tamanho do arquivo etc)

A principal desvantagem de formatos proacuteprios eacute ser necessaacuterio escrever todo o coacutedigo para os ler gravar

Pode dar mais trabalho que usar um formato geneacuterico que natildeo seja exatamente o que melhor se encaixa na aplicaccedilatildeo

O coacutedigo para processar o formato em geral vai ser menos completo e conveniente de usar que o de um formato bem estabelecido usado por muitos outros em muitos ambientes

Cada novo software que for usar estes arquivos vai precisar compartilhar do mesmo coacutedigo ou precisar de coacutedigo novo (em particular se em outra linguagem) para ler gravar naquele formato

Eacute necessaacuterio documentar o formato e decidir sobre como ele seraacute definido

Se outros jaacute colocaram muito trabalho desenvolvendo bons formatos padratildeo bem suportados em muitos ambientes por que ter o trabalho de reinventar (e reprogramar redocumentar e retestar) a roda

5489

Arquivos - padrotildees comuns em astronomia (exs adiante)

Texto

CSV Comma-separated values - bem suportado por muitos softwares

ldquoColunas fixasrdquo Natildeo eacute um padratildeo bem definido mas eacute praacutetica comum para tabelas (2D)

XML Extensible Markup Language - O padratildeo texto mais flexiacutevel de grande uso em programaccedilatildeo geral para armazenar qualquer coisa com frequumlecircncia de forma hieraacuterquica Bem suportado por linguagens modernas (e modernizadas) e bibliotecas das principais

linguagens gerais Alta complexidade o torna trabalhoso de usar

5589

Arquivos - padrotildees comuns em astronomia (exs adiante)Binaacuterios

FITS Flexible Image Transport System - o mais comum para observaccedilotildees astronocircmicas Conteacutem os dados (em geral arrays 1D 2D ou 3D) e documentaccedilatildeo (nos cabeccedilalhos) sobre a origem e caracteriacutesticas dos dados Tambeacutem usado para armazenar tabelas de dados quaisquer mesmo que natildeo sejam observaccedilotildees (especialmente pelo STSCI) Variam muito em qualidade de documentaccedilatildeo

NetCDF Network Common Data Form - evoluccedilatildeo do CDF autodocumentado eacute comum e bem suportado para vaacuterios arrays de dados

HDF5 Hierarchical Data Format ndash autodocumentado comum e bem suportado permitindo aleacutem de simples arrays estruturas (eacute um formato hieraacuterquico)

Formatos de imagens JPEG JPEG2000 TIFF GeoTIFF etc - voltados para arrays 2D3D de inteiros ou (em alguns casos) reais com ou sem compressatildeo JPEG2000 tem caracteriacutesticas mais avanccediladas como imagens multiresoluccedilatildeo

Formatos vetoriais PS EPS DXF SHP SVG - variados niacuteveis de suporte a armazenamento de vetores e formas em 2D ou 3D

ISIS Cube semelhante em caracteriacutesticas ao FITS mais usado em sensoriamento remoto geociecircncias e ciecircncias planetaacuterias em geral para observaccedilotildees 1D 2D ou 3D

Formatos nativos de linguagens todo o trabalho de leitura e gravaccedilatildeo eacute feito automagicamente pela biblioteca padratildeo em IDL R Python Java

5689

Arquivos texto - newlines

Apesar do que possa parecer arquivos texto natildeo tecircm intrinsecamente vaacuterias linhas Arquivos texto satildeo soacute uma sequumlecircncia 1D de caracteres em alguma codificaccedilatildeo Separaccedilatildeo em linhas (equivalente a interpretar o arquivo como 2D em linhas e colunas) eacute

especificada por convenccedilotildees Natildeo haacute apenas uma convenccedilatildeo para o fim de linhas

A mais primitiva convenccedilatildeo eacute separaccedilatildeo nenhuma estipula-se que linhas tenham um nuacutemero fixo N de caracteres e cabe ao software que lecirc o arquivo entender que uma linha nova ocorre regularmente a cada N caracteres

Eacute a forma menos portaacutevel e mais inconveniente eacute necessaacuterio o conhecimento preacutevio (ou por inspeccedilatildeo do arquivo) de quantos caracteres haacute por linha

A maior parte dos editores de texto natildeo vai saber separar linhas desta forma (por falta deste conhecimento preacutevio) Exemplo (de um FITS real)

SIMPLE = T Fits standard BITPIX = 16 Bits per pixel NAXIS = 0 Number of axes EXTEND = T File may contain extensions

O que com as linhas quebradas nos lugares certos seria

SIMPLE = T Fits standard BITPIX = 16 Bits per pixel NAXIS = 0 Number of axes EXTEND = T File may contain extensions

5789

Arquivos texto - newlines

A forma mais comum de especificar linhas eacute com um marcador do final de linha (newline)

Eacute um caractere especial natildeo normalmente presente no texto que serve para marcar fim de linhas

Mas natildeo haacute soacute um padratildeo de newline Os mais comuns

LF (Line Feed ASCII 10) ndash Unix Linux Mac OS X

CR - (Carriage Return ASCII 13) - Mac OS lt10

CR+LF (CR seguido de LF) - Windows DOS

Eacute o motivo de o Notepad (Windows) natildeo entender as quebras de linha de arquivos escritos com o formato nativo de Linux o arquivo soacute tem LF enquanto o editor espera CR+LF

Alguns sistemas (strings em vaacuterias linguagens por exemplo) usam o coacutedigo de escape n para indicar newline que eacute codificado de acordo com o padratildeo sendo usado

Em geral bibliotecas de leitura e gravaccedilatildeo de arquivos usam (default pelo menos) o newline nativo do sistema em que satildeo usadas

Programas de conversatildeo entre os sistemas satildeo comuns (ex dos2unix)

O Wordpad identifica se for usado soacute LF e quebra as linhas de acordo

5889

Arquivos - texto - CSV

Comma-separated values

O formato mais padronizado para tabelas (arrays 2D) em texto (frequentemente mas natildeo necessariamente ASCII)

Bem suportado por bibliotecas padratildeo de linguagens e outros softwares (Excel Calc Origin Google Docs etc)

Conteacutem Linhas de cabeccedilalho (opcionais mas recomendadas) linhas com qualquer texto geral

descrevendo o arquivo e em geral uma linha de tiacutetulo para as colunas da tabela Uma (apenas uma) tabela onde todas as linhas tecircm o mesmo nuacutemero de colunas

Colunas separadas por viacutergulas (opcionalmente pode ser outro separador) Linhas terminadas por newline (qualquer que seja) Strings delimitados por ldquo ldquo

Ex

NAMECALMPOSFILNAMEECHLPOSDISPPOSTARGNAMEPOSDIRCLASSMJD-OBSITIMECOADDSdec18s00010NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001dec18s00020NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001dec18s00120NIRSPEC-5-AO635800364500itan140NIRSPEC-5-AOp2 TITAN5408763000001dec18s00140NIRSPEC-5-AO626300364500itan140NIRSPEC-5-AOp1 TITAN5408763000001dec18s00151NIRSPEC-5-AO626300364500itan140NIRSPEC-5-AOp1ARC5408764000001dec18s00160NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001

Natildeo eacute necessaacuterio que as colunas tenham largura constante

Cabeccedilalho

5989

Arquivos - texto - CSVHaacute amplo suporte a leitura e gravaccedilatildeo de CSV sem precisar recorrer a procedimentos de baixo niacutevel

Podem ser diretamente importados em Excel Calc Origin Google Docs ou lido facilmente com bibliotecas padratildeo comuns Ex (IDL)

IDLgt c=read_csv(filesearch_scamcsvheader=h)IDLgt printhNAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS

IDLgt helpc Structure ltc8bca508gt 11 tags length=5256 data length=5248 refs=1 FIELD01 STRING Array[41] FIELD02 LONG Array[41] FIELD03 STRING Array[41] FIELD04 DOUBLE Array[41] FIELD05 DOUBLE Array[41] FIELD06 STRING Array[41] FIELD07 STRING Array[41] FIELD08 STRING Array[41] FIELD09 STRING Array[41] FIELD10 DOUBLE Array[41] FIELD11 LONG Array[41]

IDLgt printcfield01[03]dec18s0001 dec18s0002 dec18s0003 dec18s0004

IDLgt printcfield03[03]NIRSPEC-5-AO NIRSPEC-5-AO NIRSPEC-5-AO NIRSPEC-5-AO

6089

Arquivos - texto - CSVEx (IDL) Criaccedilatildeo de um CSV com uma tabela de valores

Criaccedilatildeo de 3 arrays 1D (12 elementos) um para cada coluna

IDLgt x=dindgen(3)IDLgt y=dindgen(4)IDLgt xx=reform(rebin(x34)12)IDLgt yy=reform(rebin(reform(y14)34)12)IDLgt f=xx+yy10IDLgt helpxxyyfXX DOUBLE = Array[12]YY DOUBLE = Array[12]F DOUBLE = Array[12]

Escrita do arquivo

IDLgt write_csvexamplecsvxxyyfheader=[XYX+10Y]

ResultadoXYX+10Y000000000000000000000000100000000000000010000000200000000000000020000000000000001000000010000000100000001000000011000000()

6189

Arquivos - texto - ldquoColunas regularesrdquoFixed column width

Natildeo eacute exatamente um padratildeo Eacute uma praacutetica comum

Armazena uma tabela (array 2D) de forma regular simples de ser interpretada e lida

Costumam ter linha(s) de cabeccedilalho descrevendo o conteuacutedo do arquivo em geral com uma linha para os nomes das colunas

As demais linhas conteacutem os dados sempre ocupando a mesma largura por coluna e escritos no mesmo formato em cada coluna

Costumam ser simples de ler inclusive interativamente (exs Excel Calc Origin read_ascii)

Ex (IDL) Uma simples tabela soacute de nuacutemeros

wavl CH4=33 wavl CH4=25 wavl CH4=10 wavl CH4=08 wavl CH4=05 wavl CH4=026 wavl CH4=02 477330000 0090130 477330000 0091110 477330000 0089250 477330000 0087000 477330000 0087140 477330000 0090080 477330000 0088110 480040000 0090930 480040000 0091930 480040000 0090160 480040000 0087930 480040000 0088110 480040000 0090950 480040000 0089090 482750000 0091710 482750000 0092730 482750000 0091060 482750000 0088850 482750000 0089080 482750000 0091810 482750000 0090060 485450000 0092530 485450000 0093570 485450000 0092000 485450000 0089810 485450000 0090100 485450000 0092730 485450000 0091090

IDLgt a=read_ascii(specs_27s_ntxtdata_start=1header=header)IDLgt printheader wavl CH4=33 wavl CH4=25 wavl CH4=10 wavl CH4=08 wavl CH4=05 wavl CH4=026 wavl CH4=02 IDLgt helpa Structure ltd423c9a8gt 1 tags length=224 data length=224 refs=1 FIELD01 FLOAT Array[14 4]

6289

Arquivos - texto - ldquoColunas regularesrdquoJaacute um arquivo um pouco mais difiacutecil de ler

NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS dec18s0001 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0002 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0003 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 FLAT 5408757812500 460000 5 dec18s0004 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 DARK 5408757812500 460000 5

Por ter colunas de tipos diferentes (strings inteiros reais) natildeo eacute possiacutevel o ler em um simples array Mas eacute faacutecil o colocar em uma estrutura de arrays onde cada campo eacute uma coluna

Especificando interativamente como interpretar as linhasIDLgt templ=ascii_template(filesearch_scamtxt)

Nome do campo (default mostrado)

Tipo do campo (identificado automaticamente)

Posiccedilatildeo (caracter) do comeccedilo (identificada automaticamente)

Linha de exemplo para verificar as colunas

6389

Arquivos - texto - ldquoColunas regularesrdquoDepois de feito o template o arquivo pode ser lido com apenas

IDLgt a=read_ascii(filesearch_scamtxttemplate=templ)IDLgt helpa Structure ltd4ec4608gt 11 tags length=416 data length=416 refs=1 FIELD01 STRING Array[4] FIELD02 LONG Array[4] FIELD03 STRING Array[4] FIELD04 FLOAT Array[4] FIELD05 FLOAT Array[4] FIELD06 STRING Array[4] FIELD07 STRING Array[4] FIELD08 STRING Array[4] FIELD09 FLOAT Array[4] FIELD10 FLOAT Array[4] FIELD11 LONG Array[4]IDLgt printafield01dec18s0001 dec18s0002 dec18s0003 dec18s0004IDLgt printafield04 626300 626300 626300 626300

O template (uma estrutura contendo dados sobre como ler o arquivo) pode ser usado para outros arquivos no mesmo formato No lugar de ter sido criado interativamente poderia ter sido lido de algum arquivo Poderia ter especificado nomes para os campos que seriam mais amigaacuteveis que coias como FIELD11

6489

Arquivos - texto - XML

Extensible Markup Language

Admite grande flexibilidade e por isso pode ter alta complexidade

Valores satildeo colocados dentro de uma estrutura em hieraacuterquica (em uma aacutervore) com os noacutes identificados pelos seus nomes (chaves)

Largamente usado em muitas aacutereas para armazenar conjuntos arbitraacuterios de quaisquer estruturas de dados

A maioria das aplicaccedilotildees usa um formato que eacute um subconjunto do XML especificado por um Schema comumente em um arquivo XML DTD (Document Type Definition)

6589

Arquivos - texto ndash XML ndash exemplos de usos

Armazenamento de dados de aplicaccedilotildees web (comum para exportar importar dados MediaWiki DokuWiki WordPress ADS Lattes etc)

Documentos Office (docx pptx xlsx) OpenOffice (odt opd ods)

Como versotildees de outros formatos FITSML XDF

ldquoScientific Dataset XML NASAs Astronomical Data Center (ADC) sponsors a number of research projects that

use XML for scientific data representation The XML activities at the ADC are sponsored and supported by the NASA Office of Space Science Applied Information Systems Research Program (AISRP)rdquo - httpxmlcoverpagesorgnasa-adchtml

Astronomical Instrument Markup Language (AIML)

SVG ndash Scalable Vector Graphics

Muitas de outras aplicaccedilotildees listadas em httpxmlcoverpagesorgxmlhtmlapplications

6689

Arquivos - texto ndash XML - exemploltxml version=10 gtltDOCTYPE Xdmf SYSTEM Xdmfdtd []gtltXdmf xmlnsxi=httpwwww3org2001XInclude Version=20gt ltDomaingt lt-- Example of Basic Topologies --gt ltInformation Name=Descriptiongt Example of a Polyvertex Topology ltInformationgt ltGrid Name=Polyvertex GridType=Uniformgt ltTopology TopologyType=Polyvertex Dimensions=3 NodesPerElement=3gt ltDataItem Format=XML Dimensions=3 3 NumberType=Floatgt 0 1 2 4 5 6 8 9 10 ltDataItemgt ltTopologygt ltGeometry Type=XYZgt ltDataItem Format=XML Dimensions=4 4 3gt 00 00 00 10 00 00()Que mostra que a interpretaccedilatildeo (parsing) de XML eacute em geral complexa

6789

Arquivos - texto - XML

Haacute muitas bibliotecas de alto niacutevel para fazer o processamento (parsing) e entregar os dados em uma estrutura conveniente

A complexidade em processar XML estaacute em decidir o que fazer com os dados jaacute que os arquivos podem ser muito complexos

As APIs (Application Programming Interfaces) mais comuns para processar XML que satildeo implementadas em muitas linguagens

DOM (Document Object Model) ndash manteacutem todo o conteuacutedo do em uma estrutura de dados (em geral uma aacutervore) em uma variaacutevel (em geral um objeto) Esta pode ser consultada para obter os valores de interesse para os alterar e usada para escrever um arquivo

SAX (Simple API for XML) ndash Interpretador (parser) por objetos O usuaacuterio escreve uma classe herdando da classe SAX provendo os meacutetodos que vatildeo processar os campos agrave medida em que estes satildeo lidos

6889

Arquivos - binaacuterios - FITSFlexible Image Transport System

O formato mais comum para observaccedilotildees astronocircmicas Tambeacutem usado para armazenar quaisquer dados mesmo natildeo relacionados a observaccedilotildees (especialmente tabelas como eacute praacutetica do STSCI)

Conteacutem um (ou mais) cabeccedilalho(s) de texto com metadados (informaccedilotildees sobre os dados como caracteriacutesticas (necessaacuterias para os ler) origem condiccedilotildees em que foram obtidos processamento realizado etc)

SIMPLE = T image conforms to FITS standard BITPIX = 32 bits per data value NAXIS = 2 number of axes NAXIS1 = 1024 NAXIS2 = 1024 BSCALE = 100000 Scaling factor BZERO = 000000 Scaling zero-point TELESCOP= Keck II Telescope SLITNAME= 0041x226 Slit Name SLITPA = 351979 Slit position angle SLITX = 131500 X pixel of the center of the slit LST = 12010446 local apparent sidereal time (()

Depois do cabeccedilalho haacute uma (ou mais) seccedilatildeo(otildees) de dados binaacuterios Costuma(m) ser array(s) 1D (espectros) 2D (imagens) ou 3D (ldquocubos de dadosrdquo)

De inteiros ou reais inteiros satildeo comuns em contagens de instrumentos reais para valores derivados (fluxos intensidades etc)

6989

Arquivos - binaacuterios - FITSNormalmente FITS satildeo lidos escritos por bibliotecas prontas de (relativamente) alto niacutevel usuaacuterio natildeo tem que saber como os dados satildeo armazenados no arquivo nem como os ler escrever Ex (IDL com a biblioteca idlastro)

IDLgt fits_info2dspectrumfits2dspectrumfits has 3 extensionsPrimary header 288 recordsNo dataExtension 1 -- SCI Header 144 records IMAGE ( 1201 1201 )Extension 2 -- ERR Header 72 records IMAGE ( 1201 1201 )Extension 3 -- DQ Header 72 records IMAGE ( 1201 1201 )

IDLgt mydata=readfits(2dspectrumfitsexten_no=1myheader) READFITS Reading FITS extension of type IMAGE READFITS Now reading 1201 by 1201 array

IDLgt extastmyheadermyastIDLgt sz=size(mydatadimensions)IDLgt xy2ad[1sz[0]][1sz[1]]myastcorners_acorners_dIDLgt printcorners_aCorners of the data array from file 2dspectrumfits are at 14487480 33063480

IDLgt printcorners_d -00041264444 00041402222

Obteacutem os dados de coordenadas (WCS) do header

Coloca os dados no array (2D de floats) mydata e o header no array (1D de strings) myheader

Calcula as coordenadas das quinas da imagem atraveacutes do WCS

Provecirc informaccedilotildees sobre o arquivo

7089

Arquivos - binaacuterios - ISIS Cube

Formatos como FITS se adequam muito a ter uma interface de mais alto niacutevel por objetos

Tambeacutem para dados em tabelas FITS muito mais trabalhosos de ler em baixo niacutevel que se adequam muito mais a mapas ou estruturas

Exemplo (de um formato semelhante a FITS ISIS cube)

O objeto ao ser criado lecirc todo o arquivo

cube=pp_editablecube(CM_1553510065_1_ircub)

Meacutetodos fornecem os dados desejados para obter quando necessaacuterio os dados de interesse

Find out the names of the backplanesprintcubegetproperty(backnames)Get the start time of the cubeprintcubegetfromheader(START_TIME)2007-084T100057286Z

Valores no cabeccedilalho podem ser convenientemente fornecidos como um mapa

header=cubeheader_as_hash()printheader[START_TIME]2007-084T100057286Z

7189

Arquivos - binaacuterios ndash ISIS Cube

Os dados satildeo fornecidos como arraysMake a contour plot of the latitudesc=contour(cubegetsuffixbyname(LATITUDE))Get the band with wavelength nearest to 21 (in the units used in the cube)selband=cubegetbandbywavelength(21wavelengths=selwavs)

Interfaces por overload tornam o acesso ainda mais conveniente

selband=cube[21]

selwavs=cube[21]

Retorna um array com a banda de comprimento de onda mais proacuteximo de 21 (microm)

Retorna o comprimento de onda mais proacuteximo de 21 (microm) da banda retornada acima

7289

Arquivos - binaacuterios ndash ISIS Cube Alteraccedilotildees feitas ao conteuacutedo satildeo automaticamente refletidas em todos os

lugares (cabeccedilalho em particular) afetados mantendo o objeto vaacutelido que pode depois ser gravado em um novo arquivo

IDLgt printcubelinescubesamplescubebands 64 64 256

IDLgt helpcubecoreltExpressiongt FLOAT = Array[64 64 256]

IDLgt cubecore=dblarr(100100256)

A linha acima natildeo eacute uma atribuiccedilatildeo eacute uma invocaccedilatildeo de meacutetodo Eacute equivalente acubesetpropertycore=dblarr(100100256)

Eacute o trabalho da funccedilatildeo setproperty decidir se a propriedade passada (core) faz sentido e se fizer fazer todo o trabalho necessaacuterio a esta mudanccedila Para o usuaacuterio eacute tudo automaacutetico e os dados da classe satildeo vaacutelidos o tempo todo

IDLgt helpcubecoreltExpressiongt DOUBLE = Array[100 100 256]

IDLgt printcubelinescubesamplescubebands 100 100 256

IDLgt cubesaveCM_1553510065_1_ir_editedcub

7389

Arquivos - binaacuterios ndash NetCDF e HDF5

Network Common Data Form e Hierarchical Data Format

Os dois uacutenicos formatos bem estabelecidos para dados cientiacuteficos geneacutericos

Armazenam dados como vaacuterias variaacuteveis e seus metadados Para cada variaacutevel haacute (ou pode haver) os metadados

Nome Dimensotildees (do array) Unidades Comentaacuterios

Ambos permitem arrays multidimensionais

Apenas HDF5 permite estruturas (daiacute vem a hierarquia)

Autodocumentados qualquer software que saiba ler um destes formatos lecirc qualquer arquivo sem precisar de conhecimento preacutevio sobre como o arquivo foi gerado

Muito bem suportados em bibliotecas padratildeo e natildeo padratildeo em softwares interativos e visualizadores (inclusive plugins para navegadores)

httpwwwunidataucaredusoftwarenetcdf httpenwikipediaorgwikiHdf5

NetCDF eacute mais simples de usar por natildeo ter hierarquia dando menos trabalho para ler e escrever dados Se hierarquia natildeo eacute necessaacuteria eacute mais conveniente de usar que HDF5

7489

Arquivos - binaacuterios - NetCDF e HDF5Haacute tambeacutem o formato CDL uma versatildeo ASCII do NetCDF A biblioteca padratildeo do NetCDF inclui conversores entre estes formatos

$ ncdump -h refspec_g01_0ncnetcdf refspec_g01_0 dimensions nlay = 51 nwn = 400 nleg = 33 numu = 2 nlev = 52 nphi = 3 ngas = 2 nwnc = 1 scal = 1 v3 = 3 dnl = 1 nk = 1 tdisr = UNLIMITED (0 currently) na = 16

variables float alb(nwn) float z(nlay) float t(nlay) float p(nlay) float wl(nwn) float iof(nwn) float mtau(nwn) float htau(nwn) float hctaus(nwn) float gtau(nwn) float outcos(scal) float phi(nleg) float phic(scal) float umu(numu) float flux(v3 nwn nlev) float mix(nlay ngas) float c(nlay) float psat(nlay) float ga(nwnc) float wlc(nwnc) float inc(scal) int dm(scal) int ord(scal) float fbeam(scal) float wn(nwn) float tautot(nwn nlay) float htaus(nwn nlay) float htaux(nwn nlay) float taug(nwn nlay) float phase(nwn nlay nleg) float ssa(nwn nlay) float uu(nwn nphi nlev numu) float u0u(nwn nlev numu) float tray(nwn nlay) float gtauo(tdisr nwn nlay)

Haacute 14 variaacuteveis usadas como dimensotildees para as 35 variaacuteveis que satildeo arrays

Ex alb(nwn) indica que alb eacute um array 1D de nwn elementos

nwn estaacute armazenado como uma das dimensotildees e eacute 400 portanto alb tem 400 elementos

Parte do conteuacutedo de um arquivo NetCDF em formato CDL (gerado pelo programa ncdump)

7589

Arquivos - binaacuterios - NetCDF e HDF5Conteuacutedo daquele arquivo visualizado com o ncview (acompanha a biblioteca NetCDF padratildeo)

7689

Arquivos - binaacuterios - NetCDF e HDF5O conteuacutedo de todo o arquivo pode ser lido facilmente com as bibliotecas disponiacuteveis e armazenado em contecirciners convenientes Usando um objeto que gera um resultado um pouco mais conveniente

IDLgt h=pp_readncdf(refspec_g01_0nchash)IDLgt printhvar_dims ltObjHeapVar229(HASH)gtvars ltObjHeapVar152(HASH)gtdims ltObjHeapVar118(HASH)gt

IDLgt printh[vars]T 173203 175459 175848 176001 175975 Z 431869 418858 406067 393403 380464 FLUX 300660 145536 0705180 0341669 0165532 PHASE 100000 0779034 0660858 0542052 0449983 TAUTOT0694377 0693420 0693474 0693540 0693636()

IDLgt help(h[vars])[TAUTOT]ltExpressiongt FLOAT = Array[51 400]

IDLgt print(h[var_dims])[TAUTOT]NLAY NWN

IDLgt print(h[dims])[(h[var_dims])[TAUTOT]]NLAY 51NWN 400

7789

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5)

Visualizaccedilatildeo da variaacutevel selecionada

Metadados e alguns valores da variaacutevel selecionada

Variaacutevel a ser criada com o conteuacutedo desta variaacutevel do arquivo

Hierarquia das variaacuteveis do arquivo

7889

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5) Imported variable az

IDLgt helpaz Structure ltd5723f38gt 13 tags length=448 data length=444 refs=1 _NAME STRING az _ICONTYPE STRING binary _TYPE STRING DATASET _FILE STRING INTENSI_test_409OUTh5 _PATH STRING _DATA DOUBLE Array[38] _NDIMENSIONS LONG 1 _DIMENSIONS ULONG64 Array[1] _NELEMENTS ULONG64 38 _DATATYPE STRING H5T_FLOAT _STORAGESIZE ULONG 8 _PRECISION LONG 64 _SIGN STRING

IDLgt printaz_data 00000000 10000000 20000000 30000000 40000000 50000000 60000000 80000000 ()

7989

Arquivos - binaacuterios - imagens

JPEG JPEG200 TIFF GeoTIFF etc

Os formatos comuns de imagens satildeo bem suportados em muacuteltiplas plataformas para uso dentro de programas e interativamente

Alguns formatos tecircm opccedilatildeo de compressatildeo com perda eou sem perda

Armazenam imagens como arrays 2D ou 3D (3D frequumlentemente limitado a 3 ou 4 em uma das dimensotildees uma imagem em 3 ou 4 bandas) de inteiros ou (em alguns formatos) reais

Alguns formatos permitem armazenar metadados para caracterizar as imagens armazenadas

JPEG2000 e GeoTIFF (um subconjunto de TIFF) comuns em astronomia e aacutereas proacuteximas

8089

Arquivos - binaacuterios ndash imagens ndash exemplo (IDL)IDLgt printquery_tiff(issmap_2009tiffinfogeotiff=geo) 1

IDLgt helpinfo Structure ltd4eca4b8gt 18 tags length=144 data length=132 refs=1 CHANNELS LONG 4 DIMENSIONS LONG Array[2] IMAGE_INDEX LONG 0 NUM_IMAGES LONG 1 PIXEL_TYPE INT 1 TYPE STRING TIFF BITS_PER_SAMPLE LONG 8 POSITION FLOAT Array[2] RESOLUTION FLOAT Array[2] UNITS LONG 2 TILE_SIZE LONG Array[2] DESCRIPTION STRING ISS (2009) DATE_TIME STRING 20100218 012436()

IDLgt helpgeo Structure ltd4efa1b8gt 10 tags length=264 data length=262 refs=1 MODELPIXELSCALETAG DOUBLE Array[3] MODELTIEPOINTTAG DOUBLE Array[6 4] GEOGRAPHICTYPEGEOKEY INT 4035 GEOGSEMIMAJORAXISGEOKEY DOUBLE 25750000 GEOGSEMIMINORAXISGEOKEY DOUBLE 25750000()

IDLgt myimage=read_tiff(issmap_2009tiff) Lecirc a imagem para o array myimage

Obteacutem informaccedilotildees sobre o arquivo

8189

Arquivos - binaacuterios ndash formatos nativosLinguagens como IDL R Python Java tecircm seu formato nativo binaacuterio acessado em alto niacutevel Basta mandar salvar ler variaacuteveis no do arquivo a biblioteca padratildeo automagicamente faz todo o trabalho de decidir como gravar ler os dados

Conveniente de usar na proacutepria linguagem Mas raramente existem bibliotecas para ler gravar o formato nativo de uma linguagem a partir de outra Ex (IDL)

IDLgt savefile=2dspectrumsavmydatamyheadercorners_dcorners_averbosecompress SAVE Portable (XDR) compressed SAVERESTORE file SAVE Saved variable MYDATA SAVE Saved variable MYHEADER()

Pode ser lido com apenas (haacute formas mais elaboradas)

IDLgt restore2dspectrumsavverbose RESTORE Portable (XDR) compressed SAVERESTORE file RESTORE Save file written by ltunknowngtltunknowngt Thu Jan 27 191422 2011 RESTORE IDL version 801 (linux x86_64) RESTORE Restored variable MYDATA RESTORE Restored variable MYHEADER()

IDLgt helpmydatamyheadercorners_dcorners_aMYDATA FLOAT = Array[1201 1201]MYHEADER STRING = Array[144]()

8289

Arquivos - processamento em baixo niacutevel

Nem sempre um formato padratildeo eacute a melhor escolha para o problema

Nem sempre haacute escolha (pode-se ter que trabalhar com arquivos que jaacute foram escritos em algum formato proprietaacuterio)

Agraves vezes o formato eacute padratildeo mas natildeo haacute bom suporte a ele disponiacutevel

Em todos estes casos eacute necessaacuterio escrever rotinas em baixo niacutevel que vatildeo ler processar diretamente o conteuacutedo do arquivo

Preferencialmente criando interfaces de alto niacutevel para o programa que vai as usar

8389

Arquivos - processamento em baixo niacutevel - texto

Tomando o exemplo anterior onde as colunas eram de diferentes tipos

NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS dec18s0001 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0002 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0003 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 FLAT 5408757812500 460000 5 dec18s0004 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 DARK 5408757812500 460000 5

A forma mais simples de o ler diretamente eacute definir uma estrutura para receber cada linha e um array destas estruturas para receber todo o arquivo Ex (IDL)

IDLgt record=namecalmpos0filnameechlpos0d0disppos0d0targnameposdirclassmjd_obsitime0d0coadds0IDLgt nlines=file_lines(filesearch_scamtxt)IDLgt mydata=replicate(recordnlines-1)IDLgt header=

Depois de definidas as variaacuteveis que vatildeo receber os dados o arquivo pode ser lido

IDLgt openrunitfilesearch_scamtxtget_lunIDLgt readfunitheaderIDLgt readfunitmydataformat=(A14I8A15F104F104A18A19A15F158F105I15)IDLgt free_lununit

A gravaccedilatildeo de um arquivo texto poderia ser feita de forma semelhante apenas trocando openr por openw (abrir o arquivo para gravaccedilatildeo natildeo leitura) e readf por printf

O arquivo eacute aberto em uma unidade (unit) usada para especificar de onde eacute feita a leitura

Ao final o arquivo eacute fechado

8489

Arquivos - processamento em baixo niacutevel - texto

O que resulta em

IDLgt printheader NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS

IDLgt helpmydataMYDATA STRUCT = -gt ltAnonymousgt Array[4]

IDLgt helpmydata[0] Structure ltd5e38f68gt 11 tags length=136 data length=124 refs=3 NAME STRING dec18s0001 CALMPOS INT 0 FILNAME STRING NIRSPEC-5-AO ECHLPOS DOUBLE 62630000 DISPPOS DOUBLE 36450000 TARGNAME STRING HD85258 POSDIR STRING NIRSPEC-5-AOp1 CLASS STRING STAR MJD_OBS STRING 54087574 ITIME DOUBLE 10000000 COADDS INT 1

Este caso eacute mais complicado que os mais comuns por haver colunas de strings

Se todas fossem de nuacutemeros natildeo teria sido necessaacuterio especificar o formato explicitamente As colunas teriam sido adivinhadas pela biblioteca que lecirc o arquivo Poderia ter sido lido escrito soacute com um array de nuacutemeros sem estruturas

8589

Arquivos - processamento em baixo niacutevel - binaacuterio

Formatos binaacuterios podem ser definidos de qualquer forma O arquivo eacute apenas um conjunto de bytes Cabe ao software saber como os interpretar

Uma escolha comum para que sejam autodocumentados eacute incluir um cabeccedilalho de texto informando as caracteriacutesticas dos dados necessaacuterias para os ler

Ex (IDL) criar um arquivo que armazene um array de doubles com um cabeccedilalho informando as dimensotildees para que o programa que o lecirc saiba como ler os dados

Inventa dados e abre o arquivo

IDLgt data_to_write=dindgen(34)IDLgt openwunitbinary_exampledatget_lun

Escreve as dimensotildees como texto

IDLgt printfunitdimensions of the double array stored belowIDLgt printfunitsize(data_to_writedimensions)

Escreve os dados binaacuterios

IDLgt writeuunitdata_to_write

Fecha o arquivo

IDLgt free_lununit

Escreve em binaacuterio (write unformatted)

8689

Arquivos - processamento em baixo niacutevel - binaacuterio

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

dimensions of the double array stored below 3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

8789

Arquivos - processamento em baixo niacutevel - binaacuterioA leitura deste arquivo eacute igualmente simples

IDLgt header=IDLgt dims=[00]IDLgt openrunitbinary_exampledatget_lun

Lecirc as dimensotildees (armazenadas como texto)

IDLgt readfunitheaderIDLgt readfunitdims

Lecirc a parte binaacuteria depois de saber as dimensotildees

IDLgt data_read=dblarr(dims)IDLgt readuunitdata_read

Fecha o arquivo

IDLgt free_lununit

Verifica que os dados foram gravados e lidos corretamente

IDLgt printarray_equal(data_to_writedata_read) 1

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Lecirc dados binaacuterios (read unformatted)

8889

Sumaacuterio

5 ndash Slides em httpwwwppenteadonetpeapea04_strings_iopdf Strings Expressotildees regulares Arquivos

httpwwwppenteadonetpea

8989

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89

Expressotildees regulares - definiccedilatildeo

Expressotildees regulares (regular expressions regex) satildeo a mais poderosa ferramenta para fazer buscas e separar substrings

Regex satildeo uma linguagem com o uacutenico objetivo de especificar propriedades de strings

Implementadas em graus diferentes em todas as linguagens modernas e modernizadas facilita encontrar uma expressatildeo jaacute pronta pois satildeo quase iguais em qualquer linguagem

Estatildeo na biblioteca padratildeo em IDL Python R Perl

Em C++ e Java em bibliotecas comuns (Boost Jregex)

Para que servem

Uma expressatildeo regular especifica propriedades de strings

O interpretador de expressotildees regulares (regular expression engine) recebe a expressatildeo e o string a analisar e determina se o string corresponde (matches) agrave expressatildeo regular

Em alguns casos o interpretador pode tambeacutem informar que parte(s) do string corresponde(m) a que parte(s) da expressatildeo regular e realizar processamentos com estas partes

3789

Expressotildees regulares ndash exemplos de usos Separar partes de strings

Encontrar linhas em arquivos que tenham nomes valores e comentaacuterios e separar estes pedaccedilos

Escalar com comentaacuterio

SLITPA = 351979 Slit position angle

Array 1D sem comentaacuterio (se extendendo por vaacuterias linhas)

BAND_BIN_CENTER = (03505400358950036629003732200379490 0387900104598)

Escalares em diferentes formatos

Total Mechanical Luminosity 15310E+03resources_usedwalltime=005603

Pedaccedilos de nomes

6063 17836E-20 2456 T FeIX((3Pe)3d(2PE)4p_1Po-3s2_3p6_1Se)

Datas separando ano mecircs dia hora (em vaacuterios formatos diferentes)

DATE-OBS= 2006-12-18 universal date of observationDATE_TIME = 2010-07-19T161032START_TIME = 2006-182T225102850Z

3889

Expressotildees regulares ndash exemplos de usos

Separar partes de strings Separar partes de nomes de arquivos (por significarem algo como identificar o

conteuacutedo)

specdec18s0041fitsscamdec18i0054fits15_7_mts_hmpixselh_mr15sav15_7_mts_hwpixselh_mr15sav16_3_mts_hwpixselb_mr16savreadmodel5l_-1_000010000_10000_r05_030_08196_0100000_005000000_1000eps

Determinar se um string eacute um nuacutemero (inteiro real fixo flutuante)

Encontrar identificadores Exs nomes de cataacutelogos endereccedilos HTTPFTP endereccedilos de email

Separar campos em arquivos sendo lidos onde as linhas natildeo tecircm a mesma formataccedilatildeo algumas linhas com colunas separadas por espaccedilos outras por tabs outras por

siacutembolos ignorando linhas de comentaacuterios e linhas vazias

3989

Expressotildees regulares - usoEx (IDL) encontrar nomes de arquivos com algumas propriedades

IDLgt printfilesformat=(A)CM_1477475933_1_viscubCM_1477476864_1_ircubCM_1477476864_1_irgcubCM_1477476864_1_viscubCM_1477477826_1_ircubCM_1477477826_1_irgcubCM_1477477826_1_viscubmosaic2cub

IDLgt printstregex(files+irgcubboolean) 0 0 1 0 0 1 0 0

A expressatildeo regular eacute +irgcub Especifica uma ou mais ocorrecircncias seguidas (+) de qualquer caractere () seguido de uma ocorrecircncia de irgcub (o ponto vem precedido do caractere de

escape () para ser entendido literalmente como um ponto e natildeo como o seu significado especial (qualquer caractere)

Esta aplicaccedilatildeo do interpretador (stregex) retorna um valor Booleano (verdadeirofalso) para cada elemento do string passado (files) que informa se aquele elemento correspondia agravequela expressatildeo regular

Este eacute um exemplo artificial Seria mais faacutecil ter usado strmatch(filesirgcub)

4089

Expressotildees regulares - uso

Em casos como este tipicamente o resultado de stregex seria usado como filtro para selecionar apenas os elementos do array de strings que satisfazem agravequela expressatildeo regular

IDLgt w=where(stregex(files+irgcubboolean)null)IDLgt printfiles[w]format=(A)CM_1477476864_1_irgcubCM_1477477826_1_irgcub

Ex (IDL) Determinar que strings conteacutem uma data no formato yyyy-mm-dd

IDLgt strs=[201002012010-02-012010-2-1aaaa-mm-ddT2010-02-01J]IDLgt printstregex(strs[0-9]4-[0-9]2-[0-9]2boolean) 0 1 0 0 1

Esta expressatildeo regular especifica quatro repeticcedilotildees (4) de diacutegitos (caracteres na faixa [0-9]) seguido de um (-) seguido de duas repeticcedilotildees (2) de dois diacutegitos ([0-9]) seguido de um (-) seguido de duas repeticcedilotildees (2) de dois diacutegitos ([0-9])

Uma expressatildeo regular apenas um pouco mais elaborada poderia corresponder aos 3 formatos de data no array acima E poderia se impedir que a uacuteltima (com outros caracteres antes e depois da data) seja aceita

4189

Expressotildees regulares - regras - caracteres ldquonormaisrdquo

Uma expressatildeo regular usa caracteres ldquonormaisrdquo e especiais para especificar o que se vai procurar na ordem em que aparecem na expressatildeo

Se um caractere eacute normal (natildeo eacute um dos especiais mostrados adiante) ele especifica uma ocorrecircncia daquele caractere

Ex J eacute uma expressatildeo regular que corresponde a qualquer string onde ocorra J Jaacute JA soacute corresponde a strings que tenham JA dentro

Exs (IDL)

IDLgt strs=[JJJJJJaJAjaJa]

IDLgt printstregex(strsJboolean) 1 1 1 0 1

IDLgt printstregex(strsJAboolean) 0 0 1 0 0

4289

Expressotildees regulares - regras - caracteres especiaisCaracteres especiais tecircm outros significados Para significar literalmente aquele caractere deve ser escapado (escaped) com um

Siacutembolo significado exemplo Corresponde(m) Escape o caractere seguinte deve ser interpretado

literalmente natildeo como especial aa

Qualquer caractere ab ajb aab abb jafbc

+ Uma ou mais repeticcedilotildees do que vem agrave esquerda a+b ab aab bab baabh

() Subexpressatildeo para agrupar termos afetados por um caractere especial (como parecircnteses em notaccedilatildeo matemaacutetica)

(ab)+c abc ababc dabababcg

Zero ou mais repeticcedilotildees dos termos agrave esquerda ab abbaab caaabg

Zero ou uma repeticcedilatildeo dos termos agrave esquerda ab b ab cabd cbd

| Alternaccedilatildeo qualquer um dos dois agrave esquerda a|bc ac bc jacd jbcd

n Exatamente n repeticcedilotildees do termo agrave esquerda a2b aab daaabg

n1n2 De n1 a n2 repeticcedilotildees do termo agrave esquerda a12b ab aab aaab gaaabbd

^ Acircncora (no comeccedilo) nada agrave esquerda ^ab ab abb

$ Acircncora (no fim) nada agrave direita ab$ abaab

[] Conjunto de valores (explicado adiante)

4389

Expressotildees regulares - regras - conjuntos de valores

[] denota um conjunto de valores que pode conter

Uma lista de coisas que devem corresponder Ex [abc] signfica qualquer caractere no conjunto abc Correspondem a esta

expressatildeo abcabha

Uma lista de coisas que natildeo podem corresponder [^abc] significa qualquer coisa que natildeo seja a b ou c Correspondem a esta

expressatildeo d jgs gg

Faixas de valores [0-9] signfica qualquer diacutegito [0-9a-zA-Z] significa qualquer diacutegito ou letra

Classes de valores como algumas faixas e outros conjuntos ocorrem com muita frequumlecircncia haacute nomes

especiais para eles Estes (em IDL) vecircm entre [] ex [[digit] significa o mesmo que [0-9]

4489

Expressotildees regulares - regras - classes de valores

Classe signficado

alnum Caracteres alfanumeacutericos 0-9a-zA-Z

alpha Caracteres alfabeacuteticos a-zA-Z

cntrl Caracteres de controle ASCII (natildeo visiacuteveis coacutedigos 1 a 31 e 127)

digit Diacutegitos (decimais) 0-9

graph Caracteres visiacuteveis ASCII 33 a 126 (natildeo inclui o espaccedilo)

lower Letras minuacutesculas a-z

print Caracteres ldquoimprimiacuteveisrdquo (visiacuteveis e o espaccedilo) ASCII 32 a 126

punct Caracteres de pontuaccedilatildeo $amprsquo()+-lt=gt[]^_lsquo|~

space Os caracteres ldquoem brancordquo (blank) espaccedilo tab tab vertical CR LF (ASCII 32 e 9-13)

upper Letras maiuacutesculas A-Z

xdigit Diacutegitos hexadecimais 0-9A-Fa-f

lt Comeccedilo de palavra (palavra definida como sequumlecircncia de coisas natildeo space)

gt Fim de palavra (palavra definida como sequumlecircncia de coisas natildeo space)

Estas satildeo apenas as principais Algumas implementaccedilotildees tecircm muito mais (em particular nas linguagens que usam Unicode nativamente)

4589

Expressotildees regulares - exemplos

Determinar se strings satildeo nuacutemeros (Ex IDL)

IDLgt str=[9-18 875-812-45913E9-98d7a188d032f5]

Inteiros

IDLgt intexpr=^[-+][0-9]+$

IDLgt printstregex(strintexprboolean) 1 1 0 0 0 0 0 0 0 0

Ponto flutuante

IDLgt fpexpr=^[-+](([0-9][0-9]+)|([0-9]+[0-9]))([eEdD][-+][0-9]+)$

IDLgt printstregex(strfpexprboolean) 1 1 0 1 1 1 1 1 0 0

Sinal opcional

1 ou mais diacutegitos

Sinal opcional

0 ou mais diacutegitos opcionalmente seguidos de um ponto e 1 ou mais diacutegitos

1 ou mais diacutegitos opcionalmente seguidos de um ponto e 0 ou mais diacutegitos

ou Expoente opcional letra do expoente seguida de sinal opcional seguido de um ou mais diacutegitos

4689

Expressotildees regulares ndash extraccedilatildeo

Interpretadores de expressotildees regulares costumam oferecer mais que apenas testar se um string corresponde a uma expressatildeo

Em geral tambeacutem podem retornar que parte(s) do string corresponde(m) agrave expressatildeo

Ex (IDL) Determinar se um string conteacutem uma data incluindo os formatos

IDLgt dates=[2011-01-312011 1 3120110131something done on y2011m1d31 with something]

E extrair a data de dentro do string

IDLgt expr=[0-9]4[0-9]12[0-9]12

(4 diacutegitos)(qualquer separador)(1 a 2 diacutegitos)(qualquer separador)(1 a 2 diacutegitos)

IDLgt printstregex(datesexprextract)format=(A)2011-01-312011 1 31201101312011m1d31

Como agora separar ano mecircs e dia Com uma busca e uma extraccedilatildeo para cada Poderia ser mais eacute mais faacutecil com uma uacutenica expressatildeo regular

4789

Expressotildees regulares - aleacutem de apenas testes

Tambeacutem podem retornar que parte(s) do string correspondem agrave expressatildeo toda e agraves suas subexpressotildees (partes da expressatildeo delimitadas por parecircnteses)

Ex (IDL) Separar pedaccedilos de datas Neste caso para a expressatildeo ficar menor assumindo um formato simples (yyyy-mm-ddThhmmssfff) Mas poderia ser um formato mais livre como no exemplo anterior

IDLgt str=Stuff observed on 2011-01-31T123924983 with some instrumentIDLgt expr=([0-9]4)-([0-9]2)-([0-9]2)T([0-9]2)([0-9]2)([0-9]2[0-9]3)

(quatro diacutegitos)-(2 diacutegitos)-(2 diacutegitos)T(2 diacutegitos)(2 diacutegitos)(2 diacutegitos3 diacutegitos)

IDLgt pieces=stregex(strexprextractsubexpr)IDLgt printpiecesformat=(A)2011-01-31T12392498320110131123924983IDLgt d=julday(pieces[2]pieces[3]pieces[1]pieces[4]pieces[5]pieces[6])IDLgt printdformat=(F166) 2455593027372

Expressatildeo inteiraPrimeira subexpressatildeoSegunda subexpressatildeoTerceira subexpressatildeoQuarta subexpressatildeoQuinta subexpressatildeoSexta subexpressatildeo

4889

Expressotildees regulares - referecircncias httpxkcdcom208

Viacutedeos do Software Carpentry

httpsoftware-carpentryorg4_0regexp

4989

Arquivos

Quase todo programa precisa armazenar dados em arquivos

Podem ser pequenos arquivos de paracircmetros ou enormes arquivos de dados produzidos ou a processar

Apesar do sugerido pela praacutetica comum arquivos texto natildeo satildeo sempre a melhor escolha para armazenar dados - e haacute muitas formas diferentes de os usar

Qual eacute a melhor escolha

Assim como para linguagens ou contecirciners natildeo existe ldquoo melhor formatordquo Cada um tem suas vantagens e desvantagens

Dados diferentes (mesmo se usados pelos mesmos programas) em geral se adequam melhor a formatos diferentes

5089

Arquivos - texto X binaacuterios

Em qualquer formato arquivos satildeo armazenados como diacutegitos binaacuterios

Mas haacute duas formas principais como eles podem ser codificados

Arquivos baseados em texto (text files)

Dados satildeo transformados em caracteres usando alguma formataccedilatildeo (mesmo se impliacutecita) e escritos com alguma codificaccedilatildeo de texto (comumente mas natildeo necessariamente ASCII)

Um arquivo texto eacute um ou mais strings As mesmas conversotildees tecircm que ser feitas depara outros tipos

Arquivos ldquobinaacuteriosrdquo (binary files)

Embora todo arquivo seja binaacuterio este nome costuma ser usado soacute para aqueles em que os dados natildeo estatildeo na forma de texto

Com frequumlecircncia (nem sempre) os dados satildeo gravados de forma idecircntica a como satildeo armazenados na memoacuteria

Muitos formatos usam uma mistura de partes em texto e partes binaacuterias

Um cabeccedilalho (header) de texto que daacute informaccedilotildees (metadados) sobre os dados armazenados na parte binaacuteria que vem depois

O cabeccedilalho conteacutem em especial informaccedilotildees sobre como ler os dados binaacuterios

5189

Arquivos - texto X binaacuterios

Vantagens de arquivos texto

Legiacuteveis por pessoas (human readable)

Podem ser auto-suficientes todo o necessaacuterio para os ler e entender o que conteacutem pode ser obtido olhando o arquivo

Satildeo os menos especiacuteficos a linguagens software normalmente satildeo escritos em ASCII ou Unicode e sempre haacute algum suporte a ler escrever texto em linguagens software

Haacute alguns formatos padratildeo para texto (exs CSV XML) que satildeo suportados em muitas plataformas diferentes

5289

Arquivos - texto X binaacuterios

Vantagens de arquivos binaacuterios

Em geral natildeo haacute conversotildees entre o os dados como armazenados na memoacuteria O que torna o armazenamento mais eficiente e sem alteraccedilotildees nos valores

A maior parte dos formatos padronizados eacute binaacuteria Exs FITS cube CDF NetCDF HDF HDF5 JPEG JPEG2000 TIFF GeoTIFF MPEG etc

Eacute mais comum que haja bibliotecas prontas (ateacute de alto niacutevel) para consulta leitura e gravaccedilatildeo

Os formatos melhor desenhados satildeo autodocumentados (em texto ou binaacuterio) para os ler natildeo eacute necessaacuterio conhecimento preacutevio sobre como os dados foram armazenados

Toda linguagem plataforma costuma ter seu formato binaacuterio mais nativo que costuma ser o mais faacutecil para leitura gravaccedilatildeo Em particular nas de alto niacutevel que tecircm formatos autodocumentados (especialmente

em IDL R Python Java)

Muitos formatos tecircm opccedilatildeo de compressatildeo dos dados

5389

Arquivos - proprietaacuterios X padratildeo

Independente da escolha texto binaacuterio programas devem escolher entre usar um formato proacuteprio ou um formato padronizado

A principal vantagem de formatos proacuteprios eacute que satildeo definidos da forma mais conveniente para a aplicaccedilatildeo que os usa simplificando leitura e gravaccedilatildeo e potencialmente otimizando recursos (acesso ao disco tamanho do arquivo etc)

A principal desvantagem de formatos proacuteprios eacute ser necessaacuterio escrever todo o coacutedigo para os ler gravar

Pode dar mais trabalho que usar um formato geneacuterico que natildeo seja exatamente o que melhor se encaixa na aplicaccedilatildeo

O coacutedigo para processar o formato em geral vai ser menos completo e conveniente de usar que o de um formato bem estabelecido usado por muitos outros em muitos ambientes

Cada novo software que for usar estes arquivos vai precisar compartilhar do mesmo coacutedigo ou precisar de coacutedigo novo (em particular se em outra linguagem) para ler gravar naquele formato

Eacute necessaacuterio documentar o formato e decidir sobre como ele seraacute definido

Se outros jaacute colocaram muito trabalho desenvolvendo bons formatos padratildeo bem suportados em muitos ambientes por que ter o trabalho de reinventar (e reprogramar redocumentar e retestar) a roda

5489

Arquivos - padrotildees comuns em astronomia (exs adiante)

Texto

CSV Comma-separated values - bem suportado por muitos softwares

ldquoColunas fixasrdquo Natildeo eacute um padratildeo bem definido mas eacute praacutetica comum para tabelas (2D)

XML Extensible Markup Language - O padratildeo texto mais flexiacutevel de grande uso em programaccedilatildeo geral para armazenar qualquer coisa com frequumlecircncia de forma hieraacuterquica Bem suportado por linguagens modernas (e modernizadas) e bibliotecas das principais

linguagens gerais Alta complexidade o torna trabalhoso de usar

5589

Arquivos - padrotildees comuns em astronomia (exs adiante)Binaacuterios

FITS Flexible Image Transport System - o mais comum para observaccedilotildees astronocircmicas Conteacutem os dados (em geral arrays 1D 2D ou 3D) e documentaccedilatildeo (nos cabeccedilalhos) sobre a origem e caracteriacutesticas dos dados Tambeacutem usado para armazenar tabelas de dados quaisquer mesmo que natildeo sejam observaccedilotildees (especialmente pelo STSCI) Variam muito em qualidade de documentaccedilatildeo

NetCDF Network Common Data Form - evoluccedilatildeo do CDF autodocumentado eacute comum e bem suportado para vaacuterios arrays de dados

HDF5 Hierarchical Data Format ndash autodocumentado comum e bem suportado permitindo aleacutem de simples arrays estruturas (eacute um formato hieraacuterquico)

Formatos de imagens JPEG JPEG2000 TIFF GeoTIFF etc - voltados para arrays 2D3D de inteiros ou (em alguns casos) reais com ou sem compressatildeo JPEG2000 tem caracteriacutesticas mais avanccediladas como imagens multiresoluccedilatildeo

Formatos vetoriais PS EPS DXF SHP SVG - variados niacuteveis de suporte a armazenamento de vetores e formas em 2D ou 3D

ISIS Cube semelhante em caracteriacutesticas ao FITS mais usado em sensoriamento remoto geociecircncias e ciecircncias planetaacuterias em geral para observaccedilotildees 1D 2D ou 3D

Formatos nativos de linguagens todo o trabalho de leitura e gravaccedilatildeo eacute feito automagicamente pela biblioteca padratildeo em IDL R Python Java

5689

Arquivos texto - newlines

Apesar do que possa parecer arquivos texto natildeo tecircm intrinsecamente vaacuterias linhas Arquivos texto satildeo soacute uma sequumlecircncia 1D de caracteres em alguma codificaccedilatildeo Separaccedilatildeo em linhas (equivalente a interpretar o arquivo como 2D em linhas e colunas) eacute

especificada por convenccedilotildees Natildeo haacute apenas uma convenccedilatildeo para o fim de linhas

A mais primitiva convenccedilatildeo eacute separaccedilatildeo nenhuma estipula-se que linhas tenham um nuacutemero fixo N de caracteres e cabe ao software que lecirc o arquivo entender que uma linha nova ocorre regularmente a cada N caracteres

Eacute a forma menos portaacutevel e mais inconveniente eacute necessaacuterio o conhecimento preacutevio (ou por inspeccedilatildeo do arquivo) de quantos caracteres haacute por linha

A maior parte dos editores de texto natildeo vai saber separar linhas desta forma (por falta deste conhecimento preacutevio) Exemplo (de um FITS real)

SIMPLE = T Fits standard BITPIX = 16 Bits per pixel NAXIS = 0 Number of axes EXTEND = T File may contain extensions

O que com as linhas quebradas nos lugares certos seria

SIMPLE = T Fits standard BITPIX = 16 Bits per pixel NAXIS = 0 Number of axes EXTEND = T File may contain extensions

5789

Arquivos texto - newlines

A forma mais comum de especificar linhas eacute com um marcador do final de linha (newline)

Eacute um caractere especial natildeo normalmente presente no texto que serve para marcar fim de linhas

Mas natildeo haacute soacute um padratildeo de newline Os mais comuns

LF (Line Feed ASCII 10) ndash Unix Linux Mac OS X

CR - (Carriage Return ASCII 13) - Mac OS lt10

CR+LF (CR seguido de LF) - Windows DOS

Eacute o motivo de o Notepad (Windows) natildeo entender as quebras de linha de arquivos escritos com o formato nativo de Linux o arquivo soacute tem LF enquanto o editor espera CR+LF

Alguns sistemas (strings em vaacuterias linguagens por exemplo) usam o coacutedigo de escape n para indicar newline que eacute codificado de acordo com o padratildeo sendo usado

Em geral bibliotecas de leitura e gravaccedilatildeo de arquivos usam (default pelo menos) o newline nativo do sistema em que satildeo usadas

Programas de conversatildeo entre os sistemas satildeo comuns (ex dos2unix)

O Wordpad identifica se for usado soacute LF e quebra as linhas de acordo

5889

Arquivos - texto - CSV

Comma-separated values

O formato mais padronizado para tabelas (arrays 2D) em texto (frequentemente mas natildeo necessariamente ASCII)

Bem suportado por bibliotecas padratildeo de linguagens e outros softwares (Excel Calc Origin Google Docs etc)

Conteacutem Linhas de cabeccedilalho (opcionais mas recomendadas) linhas com qualquer texto geral

descrevendo o arquivo e em geral uma linha de tiacutetulo para as colunas da tabela Uma (apenas uma) tabela onde todas as linhas tecircm o mesmo nuacutemero de colunas

Colunas separadas por viacutergulas (opcionalmente pode ser outro separador) Linhas terminadas por newline (qualquer que seja) Strings delimitados por ldquo ldquo

Ex

NAMECALMPOSFILNAMEECHLPOSDISPPOSTARGNAMEPOSDIRCLASSMJD-OBSITIMECOADDSdec18s00010NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001dec18s00020NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001dec18s00120NIRSPEC-5-AO635800364500itan140NIRSPEC-5-AOp2 TITAN5408763000001dec18s00140NIRSPEC-5-AO626300364500itan140NIRSPEC-5-AOp1 TITAN5408763000001dec18s00151NIRSPEC-5-AO626300364500itan140NIRSPEC-5-AOp1ARC5408764000001dec18s00160NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001

Natildeo eacute necessaacuterio que as colunas tenham largura constante

Cabeccedilalho

5989

Arquivos - texto - CSVHaacute amplo suporte a leitura e gravaccedilatildeo de CSV sem precisar recorrer a procedimentos de baixo niacutevel

Podem ser diretamente importados em Excel Calc Origin Google Docs ou lido facilmente com bibliotecas padratildeo comuns Ex (IDL)

IDLgt c=read_csv(filesearch_scamcsvheader=h)IDLgt printhNAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS

IDLgt helpc Structure ltc8bca508gt 11 tags length=5256 data length=5248 refs=1 FIELD01 STRING Array[41] FIELD02 LONG Array[41] FIELD03 STRING Array[41] FIELD04 DOUBLE Array[41] FIELD05 DOUBLE Array[41] FIELD06 STRING Array[41] FIELD07 STRING Array[41] FIELD08 STRING Array[41] FIELD09 STRING Array[41] FIELD10 DOUBLE Array[41] FIELD11 LONG Array[41]

IDLgt printcfield01[03]dec18s0001 dec18s0002 dec18s0003 dec18s0004

IDLgt printcfield03[03]NIRSPEC-5-AO NIRSPEC-5-AO NIRSPEC-5-AO NIRSPEC-5-AO

6089

Arquivos - texto - CSVEx (IDL) Criaccedilatildeo de um CSV com uma tabela de valores

Criaccedilatildeo de 3 arrays 1D (12 elementos) um para cada coluna

IDLgt x=dindgen(3)IDLgt y=dindgen(4)IDLgt xx=reform(rebin(x34)12)IDLgt yy=reform(rebin(reform(y14)34)12)IDLgt f=xx+yy10IDLgt helpxxyyfXX DOUBLE = Array[12]YY DOUBLE = Array[12]F DOUBLE = Array[12]

Escrita do arquivo

IDLgt write_csvexamplecsvxxyyfheader=[XYX+10Y]

ResultadoXYX+10Y000000000000000000000000100000000000000010000000200000000000000020000000000000001000000010000000100000001000000011000000()

6189

Arquivos - texto - ldquoColunas regularesrdquoFixed column width

Natildeo eacute exatamente um padratildeo Eacute uma praacutetica comum

Armazena uma tabela (array 2D) de forma regular simples de ser interpretada e lida

Costumam ter linha(s) de cabeccedilalho descrevendo o conteuacutedo do arquivo em geral com uma linha para os nomes das colunas

As demais linhas conteacutem os dados sempre ocupando a mesma largura por coluna e escritos no mesmo formato em cada coluna

Costumam ser simples de ler inclusive interativamente (exs Excel Calc Origin read_ascii)

Ex (IDL) Uma simples tabela soacute de nuacutemeros

wavl CH4=33 wavl CH4=25 wavl CH4=10 wavl CH4=08 wavl CH4=05 wavl CH4=026 wavl CH4=02 477330000 0090130 477330000 0091110 477330000 0089250 477330000 0087000 477330000 0087140 477330000 0090080 477330000 0088110 480040000 0090930 480040000 0091930 480040000 0090160 480040000 0087930 480040000 0088110 480040000 0090950 480040000 0089090 482750000 0091710 482750000 0092730 482750000 0091060 482750000 0088850 482750000 0089080 482750000 0091810 482750000 0090060 485450000 0092530 485450000 0093570 485450000 0092000 485450000 0089810 485450000 0090100 485450000 0092730 485450000 0091090

IDLgt a=read_ascii(specs_27s_ntxtdata_start=1header=header)IDLgt printheader wavl CH4=33 wavl CH4=25 wavl CH4=10 wavl CH4=08 wavl CH4=05 wavl CH4=026 wavl CH4=02 IDLgt helpa Structure ltd423c9a8gt 1 tags length=224 data length=224 refs=1 FIELD01 FLOAT Array[14 4]

6289

Arquivos - texto - ldquoColunas regularesrdquoJaacute um arquivo um pouco mais difiacutecil de ler

NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS dec18s0001 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0002 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0003 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 FLAT 5408757812500 460000 5 dec18s0004 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 DARK 5408757812500 460000 5

Por ter colunas de tipos diferentes (strings inteiros reais) natildeo eacute possiacutevel o ler em um simples array Mas eacute faacutecil o colocar em uma estrutura de arrays onde cada campo eacute uma coluna

Especificando interativamente como interpretar as linhasIDLgt templ=ascii_template(filesearch_scamtxt)

Nome do campo (default mostrado)

Tipo do campo (identificado automaticamente)

Posiccedilatildeo (caracter) do comeccedilo (identificada automaticamente)

Linha de exemplo para verificar as colunas

6389

Arquivos - texto - ldquoColunas regularesrdquoDepois de feito o template o arquivo pode ser lido com apenas

IDLgt a=read_ascii(filesearch_scamtxttemplate=templ)IDLgt helpa Structure ltd4ec4608gt 11 tags length=416 data length=416 refs=1 FIELD01 STRING Array[4] FIELD02 LONG Array[4] FIELD03 STRING Array[4] FIELD04 FLOAT Array[4] FIELD05 FLOAT Array[4] FIELD06 STRING Array[4] FIELD07 STRING Array[4] FIELD08 STRING Array[4] FIELD09 FLOAT Array[4] FIELD10 FLOAT Array[4] FIELD11 LONG Array[4]IDLgt printafield01dec18s0001 dec18s0002 dec18s0003 dec18s0004IDLgt printafield04 626300 626300 626300 626300

O template (uma estrutura contendo dados sobre como ler o arquivo) pode ser usado para outros arquivos no mesmo formato No lugar de ter sido criado interativamente poderia ter sido lido de algum arquivo Poderia ter especificado nomes para os campos que seriam mais amigaacuteveis que coias como FIELD11

6489

Arquivos - texto - XML

Extensible Markup Language

Admite grande flexibilidade e por isso pode ter alta complexidade

Valores satildeo colocados dentro de uma estrutura em hieraacuterquica (em uma aacutervore) com os noacutes identificados pelos seus nomes (chaves)

Largamente usado em muitas aacutereas para armazenar conjuntos arbitraacuterios de quaisquer estruturas de dados

A maioria das aplicaccedilotildees usa um formato que eacute um subconjunto do XML especificado por um Schema comumente em um arquivo XML DTD (Document Type Definition)

6589

Arquivos - texto ndash XML ndash exemplos de usos

Armazenamento de dados de aplicaccedilotildees web (comum para exportar importar dados MediaWiki DokuWiki WordPress ADS Lattes etc)

Documentos Office (docx pptx xlsx) OpenOffice (odt opd ods)

Como versotildees de outros formatos FITSML XDF

ldquoScientific Dataset XML NASAs Astronomical Data Center (ADC) sponsors a number of research projects that

use XML for scientific data representation The XML activities at the ADC are sponsored and supported by the NASA Office of Space Science Applied Information Systems Research Program (AISRP)rdquo - httpxmlcoverpagesorgnasa-adchtml

Astronomical Instrument Markup Language (AIML)

SVG ndash Scalable Vector Graphics

Muitas de outras aplicaccedilotildees listadas em httpxmlcoverpagesorgxmlhtmlapplications

6689

Arquivos - texto ndash XML - exemploltxml version=10 gtltDOCTYPE Xdmf SYSTEM Xdmfdtd []gtltXdmf xmlnsxi=httpwwww3org2001XInclude Version=20gt ltDomaingt lt-- Example of Basic Topologies --gt ltInformation Name=Descriptiongt Example of a Polyvertex Topology ltInformationgt ltGrid Name=Polyvertex GridType=Uniformgt ltTopology TopologyType=Polyvertex Dimensions=3 NodesPerElement=3gt ltDataItem Format=XML Dimensions=3 3 NumberType=Floatgt 0 1 2 4 5 6 8 9 10 ltDataItemgt ltTopologygt ltGeometry Type=XYZgt ltDataItem Format=XML Dimensions=4 4 3gt 00 00 00 10 00 00()Que mostra que a interpretaccedilatildeo (parsing) de XML eacute em geral complexa

6789

Arquivos - texto - XML

Haacute muitas bibliotecas de alto niacutevel para fazer o processamento (parsing) e entregar os dados em uma estrutura conveniente

A complexidade em processar XML estaacute em decidir o que fazer com os dados jaacute que os arquivos podem ser muito complexos

As APIs (Application Programming Interfaces) mais comuns para processar XML que satildeo implementadas em muitas linguagens

DOM (Document Object Model) ndash manteacutem todo o conteuacutedo do em uma estrutura de dados (em geral uma aacutervore) em uma variaacutevel (em geral um objeto) Esta pode ser consultada para obter os valores de interesse para os alterar e usada para escrever um arquivo

SAX (Simple API for XML) ndash Interpretador (parser) por objetos O usuaacuterio escreve uma classe herdando da classe SAX provendo os meacutetodos que vatildeo processar os campos agrave medida em que estes satildeo lidos

6889

Arquivos - binaacuterios - FITSFlexible Image Transport System

O formato mais comum para observaccedilotildees astronocircmicas Tambeacutem usado para armazenar quaisquer dados mesmo natildeo relacionados a observaccedilotildees (especialmente tabelas como eacute praacutetica do STSCI)

Conteacutem um (ou mais) cabeccedilalho(s) de texto com metadados (informaccedilotildees sobre os dados como caracteriacutesticas (necessaacuterias para os ler) origem condiccedilotildees em que foram obtidos processamento realizado etc)

SIMPLE = T image conforms to FITS standard BITPIX = 32 bits per data value NAXIS = 2 number of axes NAXIS1 = 1024 NAXIS2 = 1024 BSCALE = 100000 Scaling factor BZERO = 000000 Scaling zero-point TELESCOP= Keck II Telescope SLITNAME= 0041x226 Slit Name SLITPA = 351979 Slit position angle SLITX = 131500 X pixel of the center of the slit LST = 12010446 local apparent sidereal time (()

Depois do cabeccedilalho haacute uma (ou mais) seccedilatildeo(otildees) de dados binaacuterios Costuma(m) ser array(s) 1D (espectros) 2D (imagens) ou 3D (ldquocubos de dadosrdquo)

De inteiros ou reais inteiros satildeo comuns em contagens de instrumentos reais para valores derivados (fluxos intensidades etc)

6989

Arquivos - binaacuterios - FITSNormalmente FITS satildeo lidos escritos por bibliotecas prontas de (relativamente) alto niacutevel usuaacuterio natildeo tem que saber como os dados satildeo armazenados no arquivo nem como os ler escrever Ex (IDL com a biblioteca idlastro)

IDLgt fits_info2dspectrumfits2dspectrumfits has 3 extensionsPrimary header 288 recordsNo dataExtension 1 -- SCI Header 144 records IMAGE ( 1201 1201 )Extension 2 -- ERR Header 72 records IMAGE ( 1201 1201 )Extension 3 -- DQ Header 72 records IMAGE ( 1201 1201 )

IDLgt mydata=readfits(2dspectrumfitsexten_no=1myheader) READFITS Reading FITS extension of type IMAGE READFITS Now reading 1201 by 1201 array

IDLgt extastmyheadermyastIDLgt sz=size(mydatadimensions)IDLgt xy2ad[1sz[0]][1sz[1]]myastcorners_acorners_dIDLgt printcorners_aCorners of the data array from file 2dspectrumfits are at 14487480 33063480

IDLgt printcorners_d -00041264444 00041402222

Obteacutem os dados de coordenadas (WCS) do header

Coloca os dados no array (2D de floats) mydata e o header no array (1D de strings) myheader

Calcula as coordenadas das quinas da imagem atraveacutes do WCS

Provecirc informaccedilotildees sobre o arquivo

7089

Arquivos - binaacuterios - ISIS Cube

Formatos como FITS se adequam muito a ter uma interface de mais alto niacutevel por objetos

Tambeacutem para dados em tabelas FITS muito mais trabalhosos de ler em baixo niacutevel que se adequam muito mais a mapas ou estruturas

Exemplo (de um formato semelhante a FITS ISIS cube)

O objeto ao ser criado lecirc todo o arquivo

cube=pp_editablecube(CM_1553510065_1_ircub)

Meacutetodos fornecem os dados desejados para obter quando necessaacuterio os dados de interesse

Find out the names of the backplanesprintcubegetproperty(backnames)Get the start time of the cubeprintcubegetfromheader(START_TIME)2007-084T100057286Z

Valores no cabeccedilalho podem ser convenientemente fornecidos como um mapa

header=cubeheader_as_hash()printheader[START_TIME]2007-084T100057286Z

7189

Arquivos - binaacuterios ndash ISIS Cube

Os dados satildeo fornecidos como arraysMake a contour plot of the latitudesc=contour(cubegetsuffixbyname(LATITUDE))Get the band with wavelength nearest to 21 (in the units used in the cube)selband=cubegetbandbywavelength(21wavelengths=selwavs)

Interfaces por overload tornam o acesso ainda mais conveniente

selband=cube[21]

selwavs=cube[21]

Retorna um array com a banda de comprimento de onda mais proacuteximo de 21 (microm)

Retorna o comprimento de onda mais proacuteximo de 21 (microm) da banda retornada acima

7289

Arquivos - binaacuterios ndash ISIS Cube Alteraccedilotildees feitas ao conteuacutedo satildeo automaticamente refletidas em todos os

lugares (cabeccedilalho em particular) afetados mantendo o objeto vaacutelido que pode depois ser gravado em um novo arquivo

IDLgt printcubelinescubesamplescubebands 64 64 256

IDLgt helpcubecoreltExpressiongt FLOAT = Array[64 64 256]

IDLgt cubecore=dblarr(100100256)

A linha acima natildeo eacute uma atribuiccedilatildeo eacute uma invocaccedilatildeo de meacutetodo Eacute equivalente acubesetpropertycore=dblarr(100100256)

Eacute o trabalho da funccedilatildeo setproperty decidir se a propriedade passada (core) faz sentido e se fizer fazer todo o trabalho necessaacuterio a esta mudanccedila Para o usuaacuterio eacute tudo automaacutetico e os dados da classe satildeo vaacutelidos o tempo todo

IDLgt helpcubecoreltExpressiongt DOUBLE = Array[100 100 256]

IDLgt printcubelinescubesamplescubebands 100 100 256

IDLgt cubesaveCM_1553510065_1_ir_editedcub

7389

Arquivos - binaacuterios ndash NetCDF e HDF5

Network Common Data Form e Hierarchical Data Format

Os dois uacutenicos formatos bem estabelecidos para dados cientiacuteficos geneacutericos

Armazenam dados como vaacuterias variaacuteveis e seus metadados Para cada variaacutevel haacute (ou pode haver) os metadados

Nome Dimensotildees (do array) Unidades Comentaacuterios

Ambos permitem arrays multidimensionais

Apenas HDF5 permite estruturas (daiacute vem a hierarquia)

Autodocumentados qualquer software que saiba ler um destes formatos lecirc qualquer arquivo sem precisar de conhecimento preacutevio sobre como o arquivo foi gerado

Muito bem suportados em bibliotecas padratildeo e natildeo padratildeo em softwares interativos e visualizadores (inclusive plugins para navegadores)

httpwwwunidataucaredusoftwarenetcdf httpenwikipediaorgwikiHdf5

NetCDF eacute mais simples de usar por natildeo ter hierarquia dando menos trabalho para ler e escrever dados Se hierarquia natildeo eacute necessaacuteria eacute mais conveniente de usar que HDF5

7489

Arquivos - binaacuterios - NetCDF e HDF5Haacute tambeacutem o formato CDL uma versatildeo ASCII do NetCDF A biblioteca padratildeo do NetCDF inclui conversores entre estes formatos

$ ncdump -h refspec_g01_0ncnetcdf refspec_g01_0 dimensions nlay = 51 nwn = 400 nleg = 33 numu = 2 nlev = 52 nphi = 3 ngas = 2 nwnc = 1 scal = 1 v3 = 3 dnl = 1 nk = 1 tdisr = UNLIMITED (0 currently) na = 16

variables float alb(nwn) float z(nlay) float t(nlay) float p(nlay) float wl(nwn) float iof(nwn) float mtau(nwn) float htau(nwn) float hctaus(nwn) float gtau(nwn) float outcos(scal) float phi(nleg) float phic(scal) float umu(numu) float flux(v3 nwn nlev) float mix(nlay ngas) float c(nlay) float psat(nlay) float ga(nwnc) float wlc(nwnc) float inc(scal) int dm(scal) int ord(scal) float fbeam(scal) float wn(nwn) float tautot(nwn nlay) float htaus(nwn nlay) float htaux(nwn nlay) float taug(nwn nlay) float phase(nwn nlay nleg) float ssa(nwn nlay) float uu(nwn nphi nlev numu) float u0u(nwn nlev numu) float tray(nwn nlay) float gtauo(tdisr nwn nlay)

Haacute 14 variaacuteveis usadas como dimensotildees para as 35 variaacuteveis que satildeo arrays

Ex alb(nwn) indica que alb eacute um array 1D de nwn elementos

nwn estaacute armazenado como uma das dimensotildees e eacute 400 portanto alb tem 400 elementos

Parte do conteuacutedo de um arquivo NetCDF em formato CDL (gerado pelo programa ncdump)

7589

Arquivos - binaacuterios - NetCDF e HDF5Conteuacutedo daquele arquivo visualizado com o ncview (acompanha a biblioteca NetCDF padratildeo)

7689

Arquivos - binaacuterios - NetCDF e HDF5O conteuacutedo de todo o arquivo pode ser lido facilmente com as bibliotecas disponiacuteveis e armazenado em contecirciners convenientes Usando um objeto que gera um resultado um pouco mais conveniente

IDLgt h=pp_readncdf(refspec_g01_0nchash)IDLgt printhvar_dims ltObjHeapVar229(HASH)gtvars ltObjHeapVar152(HASH)gtdims ltObjHeapVar118(HASH)gt

IDLgt printh[vars]T 173203 175459 175848 176001 175975 Z 431869 418858 406067 393403 380464 FLUX 300660 145536 0705180 0341669 0165532 PHASE 100000 0779034 0660858 0542052 0449983 TAUTOT0694377 0693420 0693474 0693540 0693636()

IDLgt help(h[vars])[TAUTOT]ltExpressiongt FLOAT = Array[51 400]

IDLgt print(h[var_dims])[TAUTOT]NLAY NWN

IDLgt print(h[dims])[(h[var_dims])[TAUTOT]]NLAY 51NWN 400

7789

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5)

Visualizaccedilatildeo da variaacutevel selecionada

Metadados e alguns valores da variaacutevel selecionada

Variaacutevel a ser criada com o conteuacutedo desta variaacutevel do arquivo

Hierarquia das variaacuteveis do arquivo

7889

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5) Imported variable az

IDLgt helpaz Structure ltd5723f38gt 13 tags length=448 data length=444 refs=1 _NAME STRING az _ICONTYPE STRING binary _TYPE STRING DATASET _FILE STRING INTENSI_test_409OUTh5 _PATH STRING _DATA DOUBLE Array[38] _NDIMENSIONS LONG 1 _DIMENSIONS ULONG64 Array[1] _NELEMENTS ULONG64 38 _DATATYPE STRING H5T_FLOAT _STORAGESIZE ULONG 8 _PRECISION LONG 64 _SIGN STRING

IDLgt printaz_data 00000000 10000000 20000000 30000000 40000000 50000000 60000000 80000000 ()

7989

Arquivos - binaacuterios - imagens

JPEG JPEG200 TIFF GeoTIFF etc

Os formatos comuns de imagens satildeo bem suportados em muacuteltiplas plataformas para uso dentro de programas e interativamente

Alguns formatos tecircm opccedilatildeo de compressatildeo com perda eou sem perda

Armazenam imagens como arrays 2D ou 3D (3D frequumlentemente limitado a 3 ou 4 em uma das dimensotildees uma imagem em 3 ou 4 bandas) de inteiros ou (em alguns formatos) reais

Alguns formatos permitem armazenar metadados para caracterizar as imagens armazenadas

JPEG2000 e GeoTIFF (um subconjunto de TIFF) comuns em astronomia e aacutereas proacuteximas

8089

Arquivos - binaacuterios ndash imagens ndash exemplo (IDL)IDLgt printquery_tiff(issmap_2009tiffinfogeotiff=geo) 1

IDLgt helpinfo Structure ltd4eca4b8gt 18 tags length=144 data length=132 refs=1 CHANNELS LONG 4 DIMENSIONS LONG Array[2] IMAGE_INDEX LONG 0 NUM_IMAGES LONG 1 PIXEL_TYPE INT 1 TYPE STRING TIFF BITS_PER_SAMPLE LONG 8 POSITION FLOAT Array[2] RESOLUTION FLOAT Array[2] UNITS LONG 2 TILE_SIZE LONG Array[2] DESCRIPTION STRING ISS (2009) DATE_TIME STRING 20100218 012436()

IDLgt helpgeo Structure ltd4efa1b8gt 10 tags length=264 data length=262 refs=1 MODELPIXELSCALETAG DOUBLE Array[3] MODELTIEPOINTTAG DOUBLE Array[6 4] GEOGRAPHICTYPEGEOKEY INT 4035 GEOGSEMIMAJORAXISGEOKEY DOUBLE 25750000 GEOGSEMIMINORAXISGEOKEY DOUBLE 25750000()

IDLgt myimage=read_tiff(issmap_2009tiff) Lecirc a imagem para o array myimage

Obteacutem informaccedilotildees sobre o arquivo

8189

Arquivos - binaacuterios ndash formatos nativosLinguagens como IDL R Python Java tecircm seu formato nativo binaacuterio acessado em alto niacutevel Basta mandar salvar ler variaacuteveis no do arquivo a biblioteca padratildeo automagicamente faz todo o trabalho de decidir como gravar ler os dados

Conveniente de usar na proacutepria linguagem Mas raramente existem bibliotecas para ler gravar o formato nativo de uma linguagem a partir de outra Ex (IDL)

IDLgt savefile=2dspectrumsavmydatamyheadercorners_dcorners_averbosecompress SAVE Portable (XDR) compressed SAVERESTORE file SAVE Saved variable MYDATA SAVE Saved variable MYHEADER()

Pode ser lido com apenas (haacute formas mais elaboradas)

IDLgt restore2dspectrumsavverbose RESTORE Portable (XDR) compressed SAVERESTORE file RESTORE Save file written by ltunknowngtltunknowngt Thu Jan 27 191422 2011 RESTORE IDL version 801 (linux x86_64) RESTORE Restored variable MYDATA RESTORE Restored variable MYHEADER()

IDLgt helpmydatamyheadercorners_dcorners_aMYDATA FLOAT = Array[1201 1201]MYHEADER STRING = Array[144]()

8289

Arquivos - processamento em baixo niacutevel

Nem sempre um formato padratildeo eacute a melhor escolha para o problema

Nem sempre haacute escolha (pode-se ter que trabalhar com arquivos que jaacute foram escritos em algum formato proprietaacuterio)

Agraves vezes o formato eacute padratildeo mas natildeo haacute bom suporte a ele disponiacutevel

Em todos estes casos eacute necessaacuterio escrever rotinas em baixo niacutevel que vatildeo ler processar diretamente o conteuacutedo do arquivo

Preferencialmente criando interfaces de alto niacutevel para o programa que vai as usar

8389

Arquivos - processamento em baixo niacutevel - texto

Tomando o exemplo anterior onde as colunas eram de diferentes tipos

NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS dec18s0001 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0002 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0003 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 FLAT 5408757812500 460000 5 dec18s0004 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 DARK 5408757812500 460000 5

A forma mais simples de o ler diretamente eacute definir uma estrutura para receber cada linha e um array destas estruturas para receber todo o arquivo Ex (IDL)

IDLgt record=namecalmpos0filnameechlpos0d0disppos0d0targnameposdirclassmjd_obsitime0d0coadds0IDLgt nlines=file_lines(filesearch_scamtxt)IDLgt mydata=replicate(recordnlines-1)IDLgt header=

Depois de definidas as variaacuteveis que vatildeo receber os dados o arquivo pode ser lido

IDLgt openrunitfilesearch_scamtxtget_lunIDLgt readfunitheaderIDLgt readfunitmydataformat=(A14I8A15F104F104A18A19A15F158F105I15)IDLgt free_lununit

A gravaccedilatildeo de um arquivo texto poderia ser feita de forma semelhante apenas trocando openr por openw (abrir o arquivo para gravaccedilatildeo natildeo leitura) e readf por printf

O arquivo eacute aberto em uma unidade (unit) usada para especificar de onde eacute feita a leitura

Ao final o arquivo eacute fechado

8489

Arquivos - processamento em baixo niacutevel - texto

O que resulta em

IDLgt printheader NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS

IDLgt helpmydataMYDATA STRUCT = -gt ltAnonymousgt Array[4]

IDLgt helpmydata[0] Structure ltd5e38f68gt 11 tags length=136 data length=124 refs=3 NAME STRING dec18s0001 CALMPOS INT 0 FILNAME STRING NIRSPEC-5-AO ECHLPOS DOUBLE 62630000 DISPPOS DOUBLE 36450000 TARGNAME STRING HD85258 POSDIR STRING NIRSPEC-5-AOp1 CLASS STRING STAR MJD_OBS STRING 54087574 ITIME DOUBLE 10000000 COADDS INT 1

Este caso eacute mais complicado que os mais comuns por haver colunas de strings

Se todas fossem de nuacutemeros natildeo teria sido necessaacuterio especificar o formato explicitamente As colunas teriam sido adivinhadas pela biblioteca que lecirc o arquivo Poderia ter sido lido escrito soacute com um array de nuacutemeros sem estruturas

8589

Arquivos - processamento em baixo niacutevel - binaacuterio

Formatos binaacuterios podem ser definidos de qualquer forma O arquivo eacute apenas um conjunto de bytes Cabe ao software saber como os interpretar

Uma escolha comum para que sejam autodocumentados eacute incluir um cabeccedilalho de texto informando as caracteriacutesticas dos dados necessaacuterias para os ler

Ex (IDL) criar um arquivo que armazene um array de doubles com um cabeccedilalho informando as dimensotildees para que o programa que o lecirc saiba como ler os dados

Inventa dados e abre o arquivo

IDLgt data_to_write=dindgen(34)IDLgt openwunitbinary_exampledatget_lun

Escreve as dimensotildees como texto

IDLgt printfunitdimensions of the double array stored belowIDLgt printfunitsize(data_to_writedimensions)

Escreve os dados binaacuterios

IDLgt writeuunitdata_to_write

Fecha o arquivo

IDLgt free_lununit

Escreve em binaacuterio (write unformatted)

8689

Arquivos - processamento em baixo niacutevel - binaacuterio

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

dimensions of the double array stored below 3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

8789

Arquivos - processamento em baixo niacutevel - binaacuterioA leitura deste arquivo eacute igualmente simples

IDLgt header=IDLgt dims=[00]IDLgt openrunitbinary_exampledatget_lun

Lecirc as dimensotildees (armazenadas como texto)

IDLgt readfunitheaderIDLgt readfunitdims

Lecirc a parte binaacuteria depois de saber as dimensotildees

IDLgt data_read=dblarr(dims)IDLgt readuunitdata_read

Fecha o arquivo

IDLgt free_lununit

Verifica que os dados foram gravados e lidos corretamente

IDLgt printarray_equal(data_to_writedata_read) 1

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Lecirc dados binaacuterios (read unformatted)

8889

Sumaacuterio

5 ndash Slides em httpwwwppenteadonetpeapea04_strings_iopdf Strings Expressotildees regulares Arquivos

httpwwwppenteadonetpea

8989

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89

Expressotildees regulares ndash exemplos de usos Separar partes de strings

Encontrar linhas em arquivos que tenham nomes valores e comentaacuterios e separar estes pedaccedilos

Escalar com comentaacuterio

SLITPA = 351979 Slit position angle

Array 1D sem comentaacuterio (se extendendo por vaacuterias linhas)

BAND_BIN_CENTER = (03505400358950036629003732200379490 0387900104598)

Escalares em diferentes formatos

Total Mechanical Luminosity 15310E+03resources_usedwalltime=005603

Pedaccedilos de nomes

6063 17836E-20 2456 T FeIX((3Pe)3d(2PE)4p_1Po-3s2_3p6_1Se)

Datas separando ano mecircs dia hora (em vaacuterios formatos diferentes)

DATE-OBS= 2006-12-18 universal date of observationDATE_TIME = 2010-07-19T161032START_TIME = 2006-182T225102850Z

3889

Expressotildees regulares ndash exemplos de usos

Separar partes de strings Separar partes de nomes de arquivos (por significarem algo como identificar o

conteuacutedo)

specdec18s0041fitsscamdec18i0054fits15_7_mts_hmpixselh_mr15sav15_7_mts_hwpixselh_mr15sav16_3_mts_hwpixselb_mr16savreadmodel5l_-1_000010000_10000_r05_030_08196_0100000_005000000_1000eps

Determinar se um string eacute um nuacutemero (inteiro real fixo flutuante)

Encontrar identificadores Exs nomes de cataacutelogos endereccedilos HTTPFTP endereccedilos de email

Separar campos em arquivos sendo lidos onde as linhas natildeo tecircm a mesma formataccedilatildeo algumas linhas com colunas separadas por espaccedilos outras por tabs outras por

siacutembolos ignorando linhas de comentaacuterios e linhas vazias

3989

Expressotildees regulares - usoEx (IDL) encontrar nomes de arquivos com algumas propriedades

IDLgt printfilesformat=(A)CM_1477475933_1_viscubCM_1477476864_1_ircubCM_1477476864_1_irgcubCM_1477476864_1_viscubCM_1477477826_1_ircubCM_1477477826_1_irgcubCM_1477477826_1_viscubmosaic2cub

IDLgt printstregex(files+irgcubboolean) 0 0 1 0 0 1 0 0

A expressatildeo regular eacute +irgcub Especifica uma ou mais ocorrecircncias seguidas (+) de qualquer caractere () seguido de uma ocorrecircncia de irgcub (o ponto vem precedido do caractere de

escape () para ser entendido literalmente como um ponto e natildeo como o seu significado especial (qualquer caractere)

Esta aplicaccedilatildeo do interpretador (stregex) retorna um valor Booleano (verdadeirofalso) para cada elemento do string passado (files) que informa se aquele elemento correspondia agravequela expressatildeo regular

Este eacute um exemplo artificial Seria mais faacutecil ter usado strmatch(filesirgcub)

4089

Expressotildees regulares - uso

Em casos como este tipicamente o resultado de stregex seria usado como filtro para selecionar apenas os elementos do array de strings que satisfazem agravequela expressatildeo regular

IDLgt w=where(stregex(files+irgcubboolean)null)IDLgt printfiles[w]format=(A)CM_1477476864_1_irgcubCM_1477477826_1_irgcub

Ex (IDL) Determinar que strings conteacutem uma data no formato yyyy-mm-dd

IDLgt strs=[201002012010-02-012010-2-1aaaa-mm-ddT2010-02-01J]IDLgt printstregex(strs[0-9]4-[0-9]2-[0-9]2boolean) 0 1 0 0 1

Esta expressatildeo regular especifica quatro repeticcedilotildees (4) de diacutegitos (caracteres na faixa [0-9]) seguido de um (-) seguido de duas repeticcedilotildees (2) de dois diacutegitos ([0-9]) seguido de um (-) seguido de duas repeticcedilotildees (2) de dois diacutegitos ([0-9])

Uma expressatildeo regular apenas um pouco mais elaborada poderia corresponder aos 3 formatos de data no array acima E poderia se impedir que a uacuteltima (com outros caracteres antes e depois da data) seja aceita

4189

Expressotildees regulares - regras - caracteres ldquonormaisrdquo

Uma expressatildeo regular usa caracteres ldquonormaisrdquo e especiais para especificar o que se vai procurar na ordem em que aparecem na expressatildeo

Se um caractere eacute normal (natildeo eacute um dos especiais mostrados adiante) ele especifica uma ocorrecircncia daquele caractere

Ex J eacute uma expressatildeo regular que corresponde a qualquer string onde ocorra J Jaacute JA soacute corresponde a strings que tenham JA dentro

Exs (IDL)

IDLgt strs=[JJJJJJaJAjaJa]

IDLgt printstregex(strsJboolean) 1 1 1 0 1

IDLgt printstregex(strsJAboolean) 0 0 1 0 0

4289

Expressotildees regulares - regras - caracteres especiaisCaracteres especiais tecircm outros significados Para significar literalmente aquele caractere deve ser escapado (escaped) com um

Siacutembolo significado exemplo Corresponde(m) Escape o caractere seguinte deve ser interpretado

literalmente natildeo como especial aa

Qualquer caractere ab ajb aab abb jafbc

+ Uma ou mais repeticcedilotildees do que vem agrave esquerda a+b ab aab bab baabh

() Subexpressatildeo para agrupar termos afetados por um caractere especial (como parecircnteses em notaccedilatildeo matemaacutetica)

(ab)+c abc ababc dabababcg

Zero ou mais repeticcedilotildees dos termos agrave esquerda ab abbaab caaabg

Zero ou uma repeticcedilatildeo dos termos agrave esquerda ab b ab cabd cbd

| Alternaccedilatildeo qualquer um dos dois agrave esquerda a|bc ac bc jacd jbcd

n Exatamente n repeticcedilotildees do termo agrave esquerda a2b aab daaabg

n1n2 De n1 a n2 repeticcedilotildees do termo agrave esquerda a12b ab aab aaab gaaabbd

^ Acircncora (no comeccedilo) nada agrave esquerda ^ab ab abb

$ Acircncora (no fim) nada agrave direita ab$ abaab

[] Conjunto de valores (explicado adiante)

4389

Expressotildees regulares - regras - conjuntos de valores

[] denota um conjunto de valores que pode conter

Uma lista de coisas que devem corresponder Ex [abc] signfica qualquer caractere no conjunto abc Correspondem a esta

expressatildeo abcabha

Uma lista de coisas que natildeo podem corresponder [^abc] significa qualquer coisa que natildeo seja a b ou c Correspondem a esta

expressatildeo d jgs gg

Faixas de valores [0-9] signfica qualquer diacutegito [0-9a-zA-Z] significa qualquer diacutegito ou letra

Classes de valores como algumas faixas e outros conjuntos ocorrem com muita frequumlecircncia haacute nomes

especiais para eles Estes (em IDL) vecircm entre [] ex [[digit] significa o mesmo que [0-9]

4489

Expressotildees regulares - regras - classes de valores

Classe signficado

alnum Caracteres alfanumeacutericos 0-9a-zA-Z

alpha Caracteres alfabeacuteticos a-zA-Z

cntrl Caracteres de controle ASCII (natildeo visiacuteveis coacutedigos 1 a 31 e 127)

digit Diacutegitos (decimais) 0-9

graph Caracteres visiacuteveis ASCII 33 a 126 (natildeo inclui o espaccedilo)

lower Letras minuacutesculas a-z

print Caracteres ldquoimprimiacuteveisrdquo (visiacuteveis e o espaccedilo) ASCII 32 a 126

punct Caracteres de pontuaccedilatildeo $amprsquo()+-lt=gt[]^_lsquo|~

space Os caracteres ldquoem brancordquo (blank) espaccedilo tab tab vertical CR LF (ASCII 32 e 9-13)

upper Letras maiuacutesculas A-Z

xdigit Diacutegitos hexadecimais 0-9A-Fa-f

lt Comeccedilo de palavra (palavra definida como sequumlecircncia de coisas natildeo space)

gt Fim de palavra (palavra definida como sequumlecircncia de coisas natildeo space)

Estas satildeo apenas as principais Algumas implementaccedilotildees tecircm muito mais (em particular nas linguagens que usam Unicode nativamente)

4589

Expressotildees regulares - exemplos

Determinar se strings satildeo nuacutemeros (Ex IDL)

IDLgt str=[9-18 875-812-45913E9-98d7a188d032f5]

Inteiros

IDLgt intexpr=^[-+][0-9]+$

IDLgt printstregex(strintexprboolean) 1 1 0 0 0 0 0 0 0 0

Ponto flutuante

IDLgt fpexpr=^[-+](([0-9][0-9]+)|([0-9]+[0-9]))([eEdD][-+][0-9]+)$

IDLgt printstregex(strfpexprboolean) 1 1 0 1 1 1 1 1 0 0

Sinal opcional

1 ou mais diacutegitos

Sinal opcional

0 ou mais diacutegitos opcionalmente seguidos de um ponto e 1 ou mais diacutegitos

1 ou mais diacutegitos opcionalmente seguidos de um ponto e 0 ou mais diacutegitos

ou Expoente opcional letra do expoente seguida de sinal opcional seguido de um ou mais diacutegitos

4689

Expressotildees regulares ndash extraccedilatildeo

Interpretadores de expressotildees regulares costumam oferecer mais que apenas testar se um string corresponde a uma expressatildeo

Em geral tambeacutem podem retornar que parte(s) do string corresponde(m) agrave expressatildeo

Ex (IDL) Determinar se um string conteacutem uma data incluindo os formatos

IDLgt dates=[2011-01-312011 1 3120110131something done on y2011m1d31 with something]

E extrair a data de dentro do string

IDLgt expr=[0-9]4[0-9]12[0-9]12

(4 diacutegitos)(qualquer separador)(1 a 2 diacutegitos)(qualquer separador)(1 a 2 diacutegitos)

IDLgt printstregex(datesexprextract)format=(A)2011-01-312011 1 31201101312011m1d31

Como agora separar ano mecircs e dia Com uma busca e uma extraccedilatildeo para cada Poderia ser mais eacute mais faacutecil com uma uacutenica expressatildeo regular

4789

Expressotildees regulares - aleacutem de apenas testes

Tambeacutem podem retornar que parte(s) do string correspondem agrave expressatildeo toda e agraves suas subexpressotildees (partes da expressatildeo delimitadas por parecircnteses)

Ex (IDL) Separar pedaccedilos de datas Neste caso para a expressatildeo ficar menor assumindo um formato simples (yyyy-mm-ddThhmmssfff) Mas poderia ser um formato mais livre como no exemplo anterior

IDLgt str=Stuff observed on 2011-01-31T123924983 with some instrumentIDLgt expr=([0-9]4)-([0-9]2)-([0-9]2)T([0-9]2)([0-9]2)([0-9]2[0-9]3)

(quatro diacutegitos)-(2 diacutegitos)-(2 diacutegitos)T(2 diacutegitos)(2 diacutegitos)(2 diacutegitos3 diacutegitos)

IDLgt pieces=stregex(strexprextractsubexpr)IDLgt printpiecesformat=(A)2011-01-31T12392498320110131123924983IDLgt d=julday(pieces[2]pieces[3]pieces[1]pieces[4]pieces[5]pieces[6])IDLgt printdformat=(F166) 2455593027372

Expressatildeo inteiraPrimeira subexpressatildeoSegunda subexpressatildeoTerceira subexpressatildeoQuarta subexpressatildeoQuinta subexpressatildeoSexta subexpressatildeo

4889

Expressotildees regulares - referecircncias httpxkcdcom208

Viacutedeos do Software Carpentry

httpsoftware-carpentryorg4_0regexp

4989

Arquivos

Quase todo programa precisa armazenar dados em arquivos

Podem ser pequenos arquivos de paracircmetros ou enormes arquivos de dados produzidos ou a processar

Apesar do sugerido pela praacutetica comum arquivos texto natildeo satildeo sempre a melhor escolha para armazenar dados - e haacute muitas formas diferentes de os usar

Qual eacute a melhor escolha

Assim como para linguagens ou contecirciners natildeo existe ldquoo melhor formatordquo Cada um tem suas vantagens e desvantagens

Dados diferentes (mesmo se usados pelos mesmos programas) em geral se adequam melhor a formatos diferentes

5089

Arquivos - texto X binaacuterios

Em qualquer formato arquivos satildeo armazenados como diacutegitos binaacuterios

Mas haacute duas formas principais como eles podem ser codificados

Arquivos baseados em texto (text files)

Dados satildeo transformados em caracteres usando alguma formataccedilatildeo (mesmo se impliacutecita) e escritos com alguma codificaccedilatildeo de texto (comumente mas natildeo necessariamente ASCII)

Um arquivo texto eacute um ou mais strings As mesmas conversotildees tecircm que ser feitas depara outros tipos

Arquivos ldquobinaacuteriosrdquo (binary files)

Embora todo arquivo seja binaacuterio este nome costuma ser usado soacute para aqueles em que os dados natildeo estatildeo na forma de texto

Com frequumlecircncia (nem sempre) os dados satildeo gravados de forma idecircntica a como satildeo armazenados na memoacuteria

Muitos formatos usam uma mistura de partes em texto e partes binaacuterias

Um cabeccedilalho (header) de texto que daacute informaccedilotildees (metadados) sobre os dados armazenados na parte binaacuteria que vem depois

O cabeccedilalho conteacutem em especial informaccedilotildees sobre como ler os dados binaacuterios

5189

Arquivos - texto X binaacuterios

Vantagens de arquivos texto

Legiacuteveis por pessoas (human readable)

Podem ser auto-suficientes todo o necessaacuterio para os ler e entender o que conteacutem pode ser obtido olhando o arquivo

Satildeo os menos especiacuteficos a linguagens software normalmente satildeo escritos em ASCII ou Unicode e sempre haacute algum suporte a ler escrever texto em linguagens software

Haacute alguns formatos padratildeo para texto (exs CSV XML) que satildeo suportados em muitas plataformas diferentes

5289

Arquivos - texto X binaacuterios

Vantagens de arquivos binaacuterios

Em geral natildeo haacute conversotildees entre o os dados como armazenados na memoacuteria O que torna o armazenamento mais eficiente e sem alteraccedilotildees nos valores

A maior parte dos formatos padronizados eacute binaacuteria Exs FITS cube CDF NetCDF HDF HDF5 JPEG JPEG2000 TIFF GeoTIFF MPEG etc

Eacute mais comum que haja bibliotecas prontas (ateacute de alto niacutevel) para consulta leitura e gravaccedilatildeo

Os formatos melhor desenhados satildeo autodocumentados (em texto ou binaacuterio) para os ler natildeo eacute necessaacuterio conhecimento preacutevio sobre como os dados foram armazenados

Toda linguagem plataforma costuma ter seu formato binaacuterio mais nativo que costuma ser o mais faacutecil para leitura gravaccedilatildeo Em particular nas de alto niacutevel que tecircm formatos autodocumentados (especialmente

em IDL R Python Java)

Muitos formatos tecircm opccedilatildeo de compressatildeo dos dados

5389

Arquivos - proprietaacuterios X padratildeo

Independente da escolha texto binaacuterio programas devem escolher entre usar um formato proacuteprio ou um formato padronizado

A principal vantagem de formatos proacuteprios eacute que satildeo definidos da forma mais conveniente para a aplicaccedilatildeo que os usa simplificando leitura e gravaccedilatildeo e potencialmente otimizando recursos (acesso ao disco tamanho do arquivo etc)

A principal desvantagem de formatos proacuteprios eacute ser necessaacuterio escrever todo o coacutedigo para os ler gravar

Pode dar mais trabalho que usar um formato geneacuterico que natildeo seja exatamente o que melhor se encaixa na aplicaccedilatildeo

O coacutedigo para processar o formato em geral vai ser menos completo e conveniente de usar que o de um formato bem estabelecido usado por muitos outros em muitos ambientes

Cada novo software que for usar estes arquivos vai precisar compartilhar do mesmo coacutedigo ou precisar de coacutedigo novo (em particular se em outra linguagem) para ler gravar naquele formato

Eacute necessaacuterio documentar o formato e decidir sobre como ele seraacute definido

Se outros jaacute colocaram muito trabalho desenvolvendo bons formatos padratildeo bem suportados em muitos ambientes por que ter o trabalho de reinventar (e reprogramar redocumentar e retestar) a roda

5489

Arquivos - padrotildees comuns em astronomia (exs adiante)

Texto

CSV Comma-separated values - bem suportado por muitos softwares

ldquoColunas fixasrdquo Natildeo eacute um padratildeo bem definido mas eacute praacutetica comum para tabelas (2D)

XML Extensible Markup Language - O padratildeo texto mais flexiacutevel de grande uso em programaccedilatildeo geral para armazenar qualquer coisa com frequumlecircncia de forma hieraacuterquica Bem suportado por linguagens modernas (e modernizadas) e bibliotecas das principais

linguagens gerais Alta complexidade o torna trabalhoso de usar

5589

Arquivos - padrotildees comuns em astronomia (exs adiante)Binaacuterios

FITS Flexible Image Transport System - o mais comum para observaccedilotildees astronocircmicas Conteacutem os dados (em geral arrays 1D 2D ou 3D) e documentaccedilatildeo (nos cabeccedilalhos) sobre a origem e caracteriacutesticas dos dados Tambeacutem usado para armazenar tabelas de dados quaisquer mesmo que natildeo sejam observaccedilotildees (especialmente pelo STSCI) Variam muito em qualidade de documentaccedilatildeo

NetCDF Network Common Data Form - evoluccedilatildeo do CDF autodocumentado eacute comum e bem suportado para vaacuterios arrays de dados

HDF5 Hierarchical Data Format ndash autodocumentado comum e bem suportado permitindo aleacutem de simples arrays estruturas (eacute um formato hieraacuterquico)

Formatos de imagens JPEG JPEG2000 TIFF GeoTIFF etc - voltados para arrays 2D3D de inteiros ou (em alguns casos) reais com ou sem compressatildeo JPEG2000 tem caracteriacutesticas mais avanccediladas como imagens multiresoluccedilatildeo

Formatos vetoriais PS EPS DXF SHP SVG - variados niacuteveis de suporte a armazenamento de vetores e formas em 2D ou 3D

ISIS Cube semelhante em caracteriacutesticas ao FITS mais usado em sensoriamento remoto geociecircncias e ciecircncias planetaacuterias em geral para observaccedilotildees 1D 2D ou 3D

Formatos nativos de linguagens todo o trabalho de leitura e gravaccedilatildeo eacute feito automagicamente pela biblioteca padratildeo em IDL R Python Java

5689

Arquivos texto - newlines

Apesar do que possa parecer arquivos texto natildeo tecircm intrinsecamente vaacuterias linhas Arquivos texto satildeo soacute uma sequumlecircncia 1D de caracteres em alguma codificaccedilatildeo Separaccedilatildeo em linhas (equivalente a interpretar o arquivo como 2D em linhas e colunas) eacute

especificada por convenccedilotildees Natildeo haacute apenas uma convenccedilatildeo para o fim de linhas

A mais primitiva convenccedilatildeo eacute separaccedilatildeo nenhuma estipula-se que linhas tenham um nuacutemero fixo N de caracteres e cabe ao software que lecirc o arquivo entender que uma linha nova ocorre regularmente a cada N caracteres

Eacute a forma menos portaacutevel e mais inconveniente eacute necessaacuterio o conhecimento preacutevio (ou por inspeccedilatildeo do arquivo) de quantos caracteres haacute por linha

A maior parte dos editores de texto natildeo vai saber separar linhas desta forma (por falta deste conhecimento preacutevio) Exemplo (de um FITS real)

SIMPLE = T Fits standard BITPIX = 16 Bits per pixel NAXIS = 0 Number of axes EXTEND = T File may contain extensions

O que com as linhas quebradas nos lugares certos seria

SIMPLE = T Fits standard BITPIX = 16 Bits per pixel NAXIS = 0 Number of axes EXTEND = T File may contain extensions

5789

Arquivos texto - newlines

A forma mais comum de especificar linhas eacute com um marcador do final de linha (newline)

Eacute um caractere especial natildeo normalmente presente no texto que serve para marcar fim de linhas

Mas natildeo haacute soacute um padratildeo de newline Os mais comuns

LF (Line Feed ASCII 10) ndash Unix Linux Mac OS X

CR - (Carriage Return ASCII 13) - Mac OS lt10

CR+LF (CR seguido de LF) - Windows DOS

Eacute o motivo de o Notepad (Windows) natildeo entender as quebras de linha de arquivos escritos com o formato nativo de Linux o arquivo soacute tem LF enquanto o editor espera CR+LF

Alguns sistemas (strings em vaacuterias linguagens por exemplo) usam o coacutedigo de escape n para indicar newline que eacute codificado de acordo com o padratildeo sendo usado

Em geral bibliotecas de leitura e gravaccedilatildeo de arquivos usam (default pelo menos) o newline nativo do sistema em que satildeo usadas

Programas de conversatildeo entre os sistemas satildeo comuns (ex dos2unix)

O Wordpad identifica se for usado soacute LF e quebra as linhas de acordo

5889

Arquivos - texto - CSV

Comma-separated values

O formato mais padronizado para tabelas (arrays 2D) em texto (frequentemente mas natildeo necessariamente ASCII)

Bem suportado por bibliotecas padratildeo de linguagens e outros softwares (Excel Calc Origin Google Docs etc)

Conteacutem Linhas de cabeccedilalho (opcionais mas recomendadas) linhas com qualquer texto geral

descrevendo o arquivo e em geral uma linha de tiacutetulo para as colunas da tabela Uma (apenas uma) tabela onde todas as linhas tecircm o mesmo nuacutemero de colunas

Colunas separadas por viacutergulas (opcionalmente pode ser outro separador) Linhas terminadas por newline (qualquer que seja) Strings delimitados por ldquo ldquo

Ex

NAMECALMPOSFILNAMEECHLPOSDISPPOSTARGNAMEPOSDIRCLASSMJD-OBSITIMECOADDSdec18s00010NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001dec18s00020NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001dec18s00120NIRSPEC-5-AO635800364500itan140NIRSPEC-5-AOp2 TITAN5408763000001dec18s00140NIRSPEC-5-AO626300364500itan140NIRSPEC-5-AOp1 TITAN5408763000001dec18s00151NIRSPEC-5-AO626300364500itan140NIRSPEC-5-AOp1ARC5408764000001dec18s00160NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001

Natildeo eacute necessaacuterio que as colunas tenham largura constante

Cabeccedilalho

5989

Arquivos - texto - CSVHaacute amplo suporte a leitura e gravaccedilatildeo de CSV sem precisar recorrer a procedimentos de baixo niacutevel

Podem ser diretamente importados em Excel Calc Origin Google Docs ou lido facilmente com bibliotecas padratildeo comuns Ex (IDL)

IDLgt c=read_csv(filesearch_scamcsvheader=h)IDLgt printhNAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS

IDLgt helpc Structure ltc8bca508gt 11 tags length=5256 data length=5248 refs=1 FIELD01 STRING Array[41] FIELD02 LONG Array[41] FIELD03 STRING Array[41] FIELD04 DOUBLE Array[41] FIELD05 DOUBLE Array[41] FIELD06 STRING Array[41] FIELD07 STRING Array[41] FIELD08 STRING Array[41] FIELD09 STRING Array[41] FIELD10 DOUBLE Array[41] FIELD11 LONG Array[41]

IDLgt printcfield01[03]dec18s0001 dec18s0002 dec18s0003 dec18s0004

IDLgt printcfield03[03]NIRSPEC-5-AO NIRSPEC-5-AO NIRSPEC-5-AO NIRSPEC-5-AO

6089

Arquivos - texto - CSVEx (IDL) Criaccedilatildeo de um CSV com uma tabela de valores

Criaccedilatildeo de 3 arrays 1D (12 elementos) um para cada coluna

IDLgt x=dindgen(3)IDLgt y=dindgen(4)IDLgt xx=reform(rebin(x34)12)IDLgt yy=reform(rebin(reform(y14)34)12)IDLgt f=xx+yy10IDLgt helpxxyyfXX DOUBLE = Array[12]YY DOUBLE = Array[12]F DOUBLE = Array[12]

Escrita do arquivo

IDLgt write_csvexamplecsvxxyyfheader=[XYX+10Y]

ResultadoXYX+10Y000000000000000000000000100000000000000010000000200000000000000020000000000000001000000010000000100000001000000011000000()

6189

Arquivos - texto - ldquoColunas regularesrdquoFixed column width

Natildeo eacute exatamente um padratildeo Eacute uma praacutetica comum

Armazena uma tabela (array 2D) de forma regular simples de ser interpretada e lida

Costumam ter linha(s) de cabeccedilalho descrevendo o conteuacutedo do arquivo em geral com uma linha para os nomes das colunas

As demais linhas conteacutem os dados sempre ocupando a mesma largura por coluna e escritos no mesmo formato em cada coluna

Costumam ser simples de ler inclusive interativamente (exs Excel Calc Origin read_ascii)

Ex (IDL) Uma simples tabela soacute de nuacutemeros

wavl CH4=33 wavl CH4=25 wavl CH4=10 wavl CH4=08 wavl CH4=05 wavl CH4=026 wavl CH4=02 477330000 0090130 477330000 0091110 477330000 0089250 477330000 0087000 477330000 0087140 477330000 0090080 477330000 0088110 480040000 0090930 480040000 0091930 480040000 0090160 480040000 0087930 480040000 0088110 480040000 0090950 480040000 0089090 482750000 0091710 482750000 0092730 482750000 0091060 482750000 0088850 482750000 0089080 482750000 0091810 482750000 0090060 485450000 0092530 485450000 0093570 485450000 0092000 485450000 0089810 485450000 0090100 485450000 0092730 485450000 0091090

IDLgt a=read_ascii(specs_27s_ntxtdata_start=1header=header)IDLgt printheader wavl CH4=33 wavl CH4=25 wavl CH4=10 wavl CH4=08 wavl CH4=05 wavl CH4=026 wavl CH4=02 IDLgt helpa Structure ltd423c9a8gt 1 tags length=224 data length=224 refs=1 FIELD01 FLOAT Array[14 4]

6289

Arquivos - texto - ldquoColunas regularesrdquoJaacute um arquivo um pouco mais difiacutecil de ler

NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS dec18s0001 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0002 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0003 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 FLAT 5408757812500 460000 5 dec18s0004 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 DARK 5408757812500 460000 5

Por ter colunas de tipos diferentes (strings inteiros reais) natildeo eacute possiacutevel o ler em um simples array Mas eacute faacutecil o colocar em uma estrutura de arrays onde cada campo eacute uma coluna

Especificando interativamente como interpretar as linhasIDLgt templ=ascii_template(filesearch_scamtxt)

Nome do campo (default mostrado)

Tipo do campo (identificado automaticamente)

Posiccedilatildeo (caracter) do comeccedilo (identificada automaticamente)

Linha de exemplo para verificar as colunas

6389

Arquivos - texto - ldquoColunas regularesrdquoDepois de feito o template o arquivo pode ser lido com apenas

IDLgt a=read_ascii(filesearch_scamtxttemplate=templ)IDLgt helpa Structure ltd4ec4608gt 11 tags length=416 data length=416 refs=1 FIELD01 STRING Array[4] FIELD02 LONG Array[4] FIELD03 STRING Array[4] FIELD04 FLOAT Array[4] FIELD05 FLOAT Array[4] FIELD06 STRING Array[4] FIELD07 STRING Array[4] FIELD08 STRING Array[4] FIELD09 FLOAT Array[4] FIELD10 FLOAT Array[4] FIELD11 LONG Array[4]IDLgt printafield01dec18s0001 dec18s0002 dec18s0003 dec18s0004IDLgt printafield04 626300 626300 626300 626300

O template (uma estrutura contendo dados sobre como ler o arquivo) pode ser usado para outros arquivos no mesmo formato No lugar de ter sido criado interativamente poderia ter sido lido de algum arquivo Poderia ter especificado nomes para os campos que seriam mais amigaacuteveis que coias como FIELD11

6489

Arquivos - texto - XML

Extensible Markup Language

Admite grande flexibilidade e por isso pode ter alta complexidade

Valores satildeo colocados dentro de uma estrutura em hieraacuterquica (em uma aacutervore) com os noacutes identificados pelos seus nomes (chaves)

Largamente usado em muitas aacutereas para armazenar conjuntos arbitraacuterios de quaisquer estruturas de dados

A maioria das aplicaccedilotildees usa um formato que eacute um subconjunto do XML especificado por um Schema comumente em um arquivo XML DTD (Document Type Definition)

6589

Arquivos - texto ndash XML ndash exemplos de usos

Armazenamento de dados de aplicaccedilotildees web (comum para exportar importar dados MediaWiki DokuWiki WordPress ADS Lattes etc)

Documentos Office (docx pptx xlsx) OpenOffice (odt opd ods)

Como versotildees de outros formatos FITSML XDF

ldquoScientific Dataset XML NASAs Astronomical Data Center (ADC) sponsors a number of research projects that

use XML for scientific data representation The XML activities at the ADC are sponsored and supported by the NASA Office of Space Science Applied Information Systems Research Program (AISRP)rdquo - httpxmlcoverpagesorgnasa-adchtml

Astronomical Instrument Markup Language (AIML)

SVG ndash Scalable Vector Graphics

Muitas de outras aplicaccedilotildees listadas em httpxmlcoverpagesorgxmlhtmlapplications

6689

Arquivos - texto ndash XML - exemploltxml version=10 gtltDOCTYPE Xdmf SYSTEM Xdmfdtd []gtltXdmf xmlnsxi=httpwwww3org2001XInclude Version=20gt ltDomaingt lt-- Example of Basic Topologies --gt ltInformation Name=Descriptiongt Example of a Polyvertex Topology ltInformationgt ltGrid Name=Polyvertex GridType=Uniformgt ltTopology TopologyType=Polyvertex Dimensions=3 NodesPerElement=3gt ltDataItem Format=XML Dimensions=3 3 NumberType=Floatgt 0 1 2 4 5 6 8 9 10 ltDataItemgt ltTopologygt ltGeometry Type=XYZgt ltDataItem Format=XML Dimensions=4 4 3gt 00 00 00 10 00 00()Que mostra que a interpretaccedilatildeo (parsing) de XML eacute em geral complexa

6789

Arquivos - texto - XML

Haacute muitas bibliotecas de alto niacutevel para fazer o processamento (parsing) e entregar os dados em uma estrutura conveniente

A complexidade em processar XML estaacute em decidir o que fazer com os dados jaacute que os arquivos podem ser muito complexos

As APIs (Application Programming Interfaces) mais comuns para processar XML que satildeo implementadas em muitas linguagens

DOM (Document Object Model) ndash manteacutem todo o conteuacutedo do em uma estrutura de dados (em geral uma aacutervore) em uma variaacutevel (em geral um objeto) Esta pode ser consultada para obter os valores de interesse para os alterar e usada para escrever um arquivo

SAX (Simple API for XML) ndash Interpretador (parser) por objetos O usuaacuterio escreve uma classe herdando da classe SAX provendo os meacutetodos que vatildeo processar os campos agrave medida em que estes satildeo lidos

6889

Arquivos - binaacuterios - FITSFlexible Image Transport System

O formato mais comum para observaccedilotildees astronocircmicas Tambeacutem usado para armazenar quaisquer dados mesmo natildeo relacionados a observaccedilotildees (especialmente tabelas como eacute praacutetica do STSCI)

Conteacutem um (ou mais) cabeccedilalho(s) de texto com metadados (informaccedilotildees sobre os dados como caracteriacutesticas (necessaacuterias para os ler) origem condiccedilotildees em que foram obtidos processamento realizado etc)

SIMPLE = T image conforms to FITS standard BITPIX = 32 bits per data value NAXIS = 2 number of axes NAXIS1 = 1024 NAXIS2 = 1024 BSCALE = 100000 Scaling factor BZERO = 000000 Scaling zero-point TELESCOP= Keck II Telescope SLITNAME= 0041x226 Slit Name SLITPA = 351979 Slit position angle SLITX = 131500 X pixel of the center of the slit LST = 12010446 local apparent sidereal time (()

Depois do cabeccedilalho haacute uma (ou mais) seccedilatildeo(otildees) de dados binaacuterios Costuma(m) ser array(s) 1D (espectros) 2D (imagens) ou 3D (ldquocubos de dadosrdquo)

De inteiros ou reais inteiros satildeo comuns em contagens de instrumentos reais para valores derivados (fluxos intensidades etc)

6989

Arquivos - binaacuterios - FITSNormalmente FITS satildeo lidos escritos por bibliotecas prontas de (relativamente) alto niacutevel usuaacuterio natildeo tem que saber como os dados satildeo armazenados no arquivo nem como os ler escrever Ex (IDL com a biblioteca idlastro)

IDLgt fits_info2dspectrumfits2dspectrumfits has 3 extensionsPrimary header 288 recordsNo dataExtension 1 -- SCI Header 144 records IMAGE ( 1201 1201 )Extension 2 -- ERR Header 72 records IMAGE ( 1201 1201 )Extension 3 -- DQ Header 72 records IMAGE ( 1201 1201 )

IDLgt mydata=readfits(2dspectrumfitsexten_no=1myheader) READFITS Reading FITS extension of type IMAGE READFITS Now reading 1201 by 1201 array

IDLgt extastmyheadermyastIDLgt sz=size(mydatadimensions)IDLgt xy2ad[1sz[0]][1sz[1]]myastcorners_acorners_dIDLgt printcorners_aCorners of the data array from file 2dspectrumfits are at 14487480 33063480

IDLgt printcorners_d -00041264444 00041402222

Obteacutem os dados de coordenadas (WCS) do header

Coloca os dados no array (2D de floats) mydata e o header no array (1D de strings) myheader

Calcula as coordenadas das quinas da imagem atraveacutes do WCS

Provecirc informaccedilotildees sobre o arquivo

7089

Arquivos - binaacuterios - ISIS Cube

Formatos como FITS se adequam muito a ter uma interface de mais alto niacutevel por objetos

Tambeacutem para dados em tabelas FITS muito mais trabalhosos de ler em baixo niacutevel que se adequam muito mais a mapas ou estruturas

Exemplo (de um formato semelhante a FITS ISIS cube)

O objeto ao ser criado lecirc todo o arquivo

cube=pp_editablecube(CM_1553510065_1_ircub)

Meacutetodos fornecem os dados desejados para obter quando necessaacuterio os dados de interesse

Find out the names of the backplanesprintcubegetproperty(backnames)Get the start time of the cubeprintcubegetfromheader(START_TIME)2007-084T100057286Z

Valores no cabeccedilalho podem ser convenientemente fornecidos como um mapa

header=cubeheader_as_hash()printheader[START_TIME]2007-084T100057286Z

7189

Arquivos - binaacuterios ndash ISIS Cube

Os dados satildeo fornecidos como arraysMake a contour plot of the latitudesc=contour(cubegetsuffixbyname(LATITUDE))Get the band with wavelength nearest to 21 (in the units used in the cube)selband=cubegetbandbywavelength(21wavelengths=selwavs)

Interfaces por overload tornam o acesso ainda mais conveniente

selband=cube[21]

selwavs=cube[21]

Retorna um array com a banda de comprimento de onda mais proacuteximo de 21 (microm)

Retorna o comprimento de onda mais proacuteximo de 21 (microm) da banda retornada acima

7289

Arquivos - binaacuterios ndash ISIS Cube Alteraccedilotildees feitas ao conteuacutedo satildeo automaticamente refletidas em todos os

lugares (cabeccedilalho em particular) afetados mantendo o objeto vaacutelido que pode depois ser gravado em um novo arquivo

IDLgt printcubelinescubesamplescubebands 64 64 256

IDLgt helpcubecoreltExpressiongt FLOAT = Array[64 64 256]

IDLgt cubecore=dblarr(100100256)

A linha acima natildeo eacute uma atribuiccedilatildeo eacute uma invocaccedilatildeo de meacutetodo Eacute equivalente acubesetpropertycore=dblarr(100100256)

Eacute o trabalho da funccedilatildeo setproperty decidir se a propriedade passada (core) faz sentido e se fizer fazer todo o trabalho necessaacuterio a esta mudanccedila Para o usuaacuterio eacute tudo automaacutetico e os dados da classe satildeo vaacutelidos o tempo todo

IDLgt helpcubecoreltExpressiongt DOUBLE = Array[100 100 256]

IDLgt printcubelinescubesamplescubebands 100 100 256

IDLgt cubesaveCM_1553510065_1_ir_editedcub

7389

Arquivos - binaacuterios ndash NetCDF e HDF5

Network Common Data Form e Hierarchical Data Format

Os dois uacutenicos formatos bem estabelecidos para dados cientiacuteficos geneacutericos

Armazenam dados como vaacuterias variaacuteveis e seus metadados Para cada variaacutevel haacute (ou pode haver) os metadados

Nome Dimensotildees (do array) Unidades Comentaacuterios

Ambos permitem arrays multidimensionais

Apenas HDF5 permite estruturas (daiacute vem a hierarquia)

Autodocumentados qualquer software que saiba ler um destes formatos lecirc qualquer arquivo sem precisar de conhecimento preacutevio sobre como o arquivo foi gerado

Muito bem suportados em bibliotecas padratildeo e natildeo padratildeo em softwares interativos e visualizadores (inclusive plugins para navegadores)

httpwwwunidataucaredusoftwarenetcdf httpenwikipediaorgwikiHdf5

NetCDF eacute mais simples de usar por natildeo ter hierarquia dando menos trabalho para ler e escrever dados Se hierarquia natildeo eacute necessaacuteria eacute mais conveniente de usar que HDF5

7489

Arquivos - binaacuterios - NetCDF e HDF5Haacute tambeacutem o formato CDL uma versatildeo ASCII do NetCDF A biblioteca padratildeo do NetCDF inclui conversores entre estes formatos

$ ncdump -h refspec_g01_0ncnetcdf refspec_g01_0 dimensions nlay = 51 nwn = 400 nleg = 33 numu = 2 nlev = 52 nphi = 3 ngas = 2 nwnc = 1 scal = 1 v3 = 3 dnl = 1 nk = 1 tdisr = UNLIMITED (0 currently) na = 16

variables float alb(nwn) float z(nlay) float t(nlay) float p(nlay) float wl(nwn) float iof(nwn) float mtau(nwn) float htau(nwn) float hctaus(nwn) float gtau(nwn) float outcos(scal) float phi(nleg) float phic(scal) float umu(numu) float flux(v3 nwn nlev) float mix(nlay ngas) float c(nlay) float psat(nlay) float ga(nwnc) float wlc(nwnc) float inc(scal) int dm(scal) int ord(scal) float fbeam(scal) float wn(nwn) float tautot(nwn nlay) float htaus(nwn nlay) float htaux(nwn nlay) float taug(nwn nlay) float phase(nwn nlay nleg) float ssa(nwn nlay) float uu(nwn nphi nlev numu) float u0u(nwn nlev numu) float tray(nwn nlay) float gtauo(tdisr nwn nlay)

Haacute 14 variaacuteveis usadas como dimensotildees para as 35 variaacuteveis que satildeo arrays

Ex alb(nwn) indica que alb eacute um array 1D de nwn elementos

nwn estaacute armazenado como uma das dimensotildees e eacute 400 portanto alb tem 400 elementos

Parte do conteuacutedo de um arquivo NetCDF em formato CDL (gerado pelo programa ncdump)

7589

Arquivos - binaacuterios - NetCDF e HDF5Conteuacutedo daquele arquivo visualizado com o ncview (acompanha a biblioteca NetCDF padratildeo)

7689

Arquivos - binaacuterios - NetCDF e HDF5O conteuacutedo de todo o arquivo pode ser lido facilmente com as bibliotecas disponiacuteveis e armazenado em contecirciners convenientes Usando um objeto que gera um resultado um pouco mais conveniente

IDLgt h=pp_readncdf(refspec_g01_0nchash)IDLgt printhvar_dims ltObjHeapVar229(HASH)gtvars ltObjHeapVar152(HASH)gtdims ltObjHeapVar118(HASH)gt

IDLgt printh[vars]T 173203 175459 175848 176001 175975 Z 431869 418858 406067 393403 380464 FLUX 300660 145536 0705180 0341669 0165532 PHASE 100000 0779034 0660858 0542052 0449983 TAUTOT0694377 0693420 0693474 0693540 0693636()

IDLgt help(h[vars])[TAUTOT]ltExpressiongt FLOAT = Array[51 400]

IDLgt print(h[var_dims])[TAUTOT]NLAY NWN

IDLgt print(h[dims])[(h[var_dims])[TAUTOT]]NLAY 51NWN 400

7789

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5)

Visualizaccedilatildeo da variaacutevel selecionada

Metadados e alguns valores da variaacutevel selecionada

Variaacutevel a ser criada com o conteuacutedo desta variaacutevel do arquivo

Hierarquia das variaacuteveis do arquivo

7889

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5) Imported variable az

IDLgt helpaz Structure ltd5723f38gt 13 tags length=448 data length=444 refs=1 _NAME STRING az _ICONTYPE STRING binary _TYPE STRING DATASET _FILE STRING INTENSI_test_409OUTh5 _PATH STRING _DATA DOUBLE Array[38] _NDIMENSIONS LONG 1 _DIMENSIONS ULONG64 Array[1] _NELEMENTS ULONG64 38 _DATATYPE STRING H5T_FLOAT _STORAGESIZE ULONG 8 _PRECISION LONG 64 _SIGN STRING

IDLgt printaz_data 00000000 10000000 20000000 30000000 40000000 50000000 60000000 80000000 ()

7989

Arquivos - binaacuterios - imagens

JPEG JPEG200 TIFF GeoTIFF etc

Os formatos comuns de imagens satildeo bem suportados em muacuteltiplas plataformas para uso dentro de programas e interativamente

Alguns formatos tecircm opccedilatildeo de compressatildeo com perda eou sem perda

Armazenam imagens como arrays 2D ou 3D (3D frequumlentemente limitado a 3 ou 4 em uma das dimensotildees uma imagem em 3 ou 4 bandas) de inteiros ou (em alguns formatos) reais

Alguns formatos permitem armazenar metadados para caracterizar as imagens armazenadas

JPEG2000 e GeoTIFF (um subconjunto de TIFF) comuns em astronomia e aacutereas proacuteximas

8089

Arquivos - binaacuterios ndash imagens ndash exemplo (IDL)IDLgt printquery_tiff(issmap_2009tiffinfogeotiff=geo) 1

IDLgt helpinfo Structure ltd4eca4b8gt 18 tags length=144 data length=132 refs=1 CHANNELS LONG 4 DIMENSIONS LONG Array[2] IMAGE_INDEX LONG 0 NUM_IMAGES LONG 1 PIXEL_TYPE INT 1 TYPE STRING TIFF BITS_PER_SAMPLE LONG 8 POSITION FLOAT Array[2] RESOLUTION FLOAT Array[2] UNITS LONG 2 TILE_SIZE LONG Array[2] DESCRIPTION STRING ISS (2009) DATE_TIME STRING 20100218 012436()

IDLgt helpgeo Structure ltd4efa1b8gt 10 tags length=264 data length=262 refs=1 MODELPIXELSCALETAG DOUBLE Array[3] MODELTIEPOINTTAG DOUBLE Array[6 4] GEOGRAPHICTYPEGEOKEY INT 4035 GEOGSEMIMAJORAXISGEOKEY DOUBLE 25750000 GEOGSEMIMINORAXISGEOKEY DOUBLE 25750000()

IDLgt myimage=read_tiff(issmap_2009tiff) Lecirc a imagem para o array myimage

Obteacutem informaccedilotildees sobre o arquivo

8189

Arquivos - binaacuterios ndash formatos nativosLinguagens como IDL R Python Java tecircm seu formato nativo binaacuterio acessado em alto niacutevel Basta mandar salvar ler variaacuteveis no do arquivo a biblioteca padratildeo automagicamente faz todo o trabalho de decidir como gravar ler os dados

Conveniente de usar na proacutepria linguagem Mas raramente existem bibliotecas para ler gravar o formato nativo de uma linguagem a partir de outra Ex (IDL)

IDLgt savefile=2dspectrumsavmydatamyheadercorners_dcorners_averbosecompress SAVE Portable (XDR) compressed SAVERESTORE file SAVE Saved variable MYDATA SAVE Saved variable MYHEADER()

Pode ser lido com apenas (haacute formas mais elaboradas)

IDLgt restore2dspectrumsavverbose RESTORE Portable (XDR) compressed SAVERESTORE file RESTORE Save file written by ltunknowngtltunknowngt Thu Jan 27 191422 2011 RESTORE IDL version 801 (linux x86_64) RESTORE Restored variable MYDATA RESTORE Restored variable MYHEADER()

IDLgt helpmydatamyheadercorners_dcorners_aMYDATA FLOAT = Array[1201 1201]MYHEADER STRING = Array[144]()

8289

Arquivos - processamento em baixo niacutevel

Nem sempre um formato padratildeo eacute a melhor escolha para o problema

Nem sempre haacute escolha (pode-se ter que trabalhar com arquivos que jaacute foram escritos em algum formato proprietaacuterio)

Agraves vezes o formato eacute padratildeo mas natildeo haacute bom suporte a ele disponiacutevel

Em todos estes casos eacute necessaacuterio escrever rotinas em baixo niacutevel que vatildeo ler processar diretamente o conteuacutedo do arquivo

Preferencialmente criando interfaces de alto niacutevel para o programa que vai as usar

8389

Arquivos - processamento em baixo niacutevel - texto

Tomando o exemplo anterior onde as colunas eram de diferentes tipos

NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS dec18s0001 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0002 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0003 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 FLAT 5408757812500 460000 5 dec18s0004 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 DARK 5408757812500 460000 5

A forma mais simples de o ler diretamente eacute definir uma estrutura para receber cada linha e um array destas estruturas para receber todo o arquivo Ex (IDL)

IDLgt record=namecalmpos0filnameechlpos0d0disppos0d0targnameposdirclassmjd_obsitime0d0coadds0IDLgt nlines=file_lines(filesearch_scamtxt)IDLgt mydata=replicate(recordnlines-1)IDLgt header=

Depois de definidas as variaacuteveis que vatildeo receber os dados o arquivo pode ser lido

IDLgt openrunitfilesearch_scamtxtget_lunIDLgt readfunitheaderIDLgt readfunitmydataformat=(A14I8A15F104F104A18A19A15F158F105I15)IDLgt free_lununit

A gravaccedilatildeo de um arquivo texto poderia ser feita de forma semelhante apenas trocando openr por openw (abrir o arquivo para gravaccedilatildeo natildeo leitura) e readf por printf

O arquivo eacute aberto em uma unidade (unit) usada para especificar de onde eacute feita a leitura

Ao final o arquivo eacute fechado

8489

Arquivos - processamento em baixo niacutevel - texto

O que resulta em

IDLgt printheader NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS

IDLgt helpmydataMYDATA STRUCT = -gt ltAnonymousgt Array[4]

IDLgt helpmydata[0] Structure ltd5e38f68gt 11 tags length=136 data length=124 refs=3 NAME STRING dec18s0001 CALMPOS INT 0 FILNAME STRING NIRSPEC-5-AO ECHLPOS DOUBLE 62630000 DISPPOS DOUBLE 36450000 TARGNAME STRING HD85258 POSDIR STRING NIRSPEC-5-AOp1 CLASS STRING STAR MJD_OBS STRING 54087574 ITIME DOUBLE 10000000 COADDS INT 1

Este caso eacute mais complicado que os mais comuns por haver colunas de strings

Se todas fossem de nuacutemeros natildeo teria sido necessaacuterio especificar o formato explicitamente As colunas teriam sido adivinhadas pela biblioteca que lecirc o arquivo Poderia ter sido lido escrito soacute com um array de nuacutemeros sem estruturas

8589

Arquivos - processamento em baixo niacutevel - binaacuterio

Formatos binaacuterios podem ser definidos de qualquer forma O arquivo eacute apenas um conjunto de bytes Cabe ao software saber como os interpretar

Uma escolha comum para que sejam autodocumentados eacute incluir um cabeccedilalho de texto informando as caracteriacutesticas dos dados necessaacuterias para os ler

Ex (IDL) criar um arquivo que armazene um array de doubles com um cabeccedilalho informando as dimensotildees para que o programa que o lecirc saiba como ler os dados

Inventa dados e abre o arquivo

IDLgt data_to_write=dindgen(34)IDLgt openwunitbinary_exampledatget_lun

Escreve as dimensotildees como texto

IDLgt printfunitdimensions of the double array stored belowIDLgt printfunitsize(data_to_writedimensions)

Escreve os dados binaacuterios

IDLgt writeuunitdata_to_write

Fecha o arquivo

IDLgt free_lununit

Escreve em binaacuterio (write unformatted)

8689

Arquivos - processamento em baixo niacutevel - binaacuterio

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

dimensions of the double array stored below 3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

8789

Arquivos - processamento em baixo niacutevel - binaacuterioA leitura deste arquivo eacute igualmente simples

IDLgt header=IDLgt dims=[00]IDLgt openrunitbinary_exampledatget_lun

Lecirc as dimensotildees (armazenadas como texto)

IDLgt readfunitheaderIDLgt readfunitdims

Lecirc a parte binaacuteria depois de saber as dimensotildees

IDLgt data_read=dblarr(dims)IDLgt readuunitdata_read

Fecha o arquivo

IDLgt free_lununit

Verifica que os dados foram gravados e lidos corretamente

IDLgt printarray_equal(data_to_writedata_read) 1

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Lecirc dados binaacuterios (read unformatted)

8889

Sumaacuterio

5 ndash Slides em httpwwwppenteadonetpeapea04_strings_iopdf Strings Expressotildees regulares Arquivos

httpwwwppenteadonetpea

8989

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89

Expressotildees regulares ndash exemplos de usos

Separar partes de strings Separar partes de nomes de arquivos (por significarem algo como identificar o

conteuacutedo)

specdec18s0041fitsscamdec18i0054fits15_7_mts_hmpixselh_mr15sav15_7_mts_hwpixselh_mr15sav16_3_mts_hwpixselb_mr16savreadmodel5l_-1_000010000_10000_r05_030_08196_0100000_005000000_1000eps

Determinar se um string eacute um nuacutemero (inteiro real fixo flutuante)

Encontrar identificadores Exs nomes de cataacutelogos endereccedilos HTTPFTP endereccedilos de email

Separar campos em arquivos sendo lidos onde as linhas natildeo tecircm a mesma formataccedilatildeo algumas linhas com colunas separadas por espaccedilos outras por tabs outras por

siacutembolos ignorando linhas de comentaacuterios e linhas vazias

3989

Expressotildees regulares - usoEx (IDL) encontrar nomes de arquivos com algumas propriedades

IDLgt printfilesformat=(A)CM_1477475933_1_viscubCM_1477476864_1_ircubCM_1477476864_1_irgcubCM_1477476864_1_viscubCM_1477477826_1_ircubCM_1477477826_1_irgcubCM_1477477826_1_viscubmosaic2cub

IDLgt printstregex(files+irgcubboolean) 0 0 1 0 0 1 0 0

A expressatildeo regular eacute +irgcub Especifica uma ou mais ocorrecircncias seguidas (+) de qualquer caractere () seguido de uma ocorrecircncia de irgcub (o ponto vem precedido do caractere de

escape () para ser entendido literalmente como um ponto e natildeo como o seu significado especial (qualquer caractere)

Esta aplicaccedilatildeo do interpretador (stregex) retorna um valor Booleano (verdadeirofalso) para cada elemento do string passado (files) que informa se aquele elemento correspondia agravequela expressatildeo regular

Este eacute um exemplo artificial Seria mais faacutecil ter usado strmatch(filesirgcub)

4089

Expressotildees regulares - uso

Em casos como este tipicamente o resultado de stregex seria usado como filtro para selecionar apenas os elementos do array de strings que satisfazem agravequela expressatildeo regular

IDLgt w=where(stregex(files+irgcubboolean)null)IDLgt printfiles[w]format=(A)CM_1477476864_1_irgcubCM_1477477826_1_irgcub

Ex (IDL) Determinar que strings conteacutem uma data no formato yyyy-mm-dd

IDLgt strs=[201002012010-02-012010-2-1aaaa-mm-ddT2010-02-01J]IDLgt printstregex(strs[0-9]4-[0-9]2-[0-9]2boolean) 0 1 0 0 1

Esta expressatildeo regular especifica quatro repeticcedilotildees (4) de diacutegitos (caracteres na faixa [0-9]) seguido de um (-) seguido de duas repeticcedilotildees (2) de dois diacutegitos ([0-9]) seguido de um (-) seguido de duas repeticcedilotildees (2) de dois diacutegitos ([0-9])

Uma expressatildeo regular apenas um pouco mais elaborada poderia corresponder aos 3 formatos de data no array acima E poderia se impedir que a uacuteltima (com outros caracteres antes e depois da data) seja aceita

4189

Expressotildees regulares - regras - caracteres ldquonormaisrdquo

Uma expressatildeo regular usa caracteres ldquonormaisrdquo e especiais para especificar o que se vai procurar na ordem em que aparecem na expressatildeo

Se um caractere eacute normal (natildeo eacute um dos especiais mostrados adiante) ele especifica uma ocorrecircncia daquele caractere

Ex J eacute uma expressatildeo regular que corresponde a qualquer string onde ocorra J Jaacute JA soacute corresponde a strings que tenham JA dentro

Exs (IDL)

IDLgt strs=[JJJJJJaJAjaJa]

IDLgt printstregex(strsJboolean) 1 1 1 0 1

IDLgt printstregex(strsJAboolean) 0 0 1 0 0

4289

Expressotildees regulares - regras - caracteres especiaisCaracteres especiais tecircm outros significados Para significar literalmente aquele caractere deve ser escapado (escaped) com um

Siacutembolo significado exemplo Corresponde(m) Escape o caractere seguinte deve ser interpretado

literalmente natildeo como especial aa

Qualquer caractere ab ajb aab abb jafbc

+ Uma ou mais repeticcedilotildees do que vem agrave esquerda a+b ab aab bab baabh

() Subexpressatildeo para agrupar termos afetados por um caractere especial (como parecircnteses em notaccedilatildeo matemaacutetica)

(ab)+c abc ababc dabababcg

Zero ou mais repeticcedilotildees dos termos agrave esquerda ab abbaab caaabg

Zero ou uma repeticcedilatildeo dos termos agrave esquerda ab b ab cabd cbd

| Alternaccedilatildeo qualquer um dos dois agrave esquerda a|bc ac bc jacd jbcd

n Exatamente n repeticcedilotildees do termo agrave esquerda a2b aab daaabg

n1n2 De n1 a n2 repeticcedilotildees do termo agrave esquerda a12b ab aab aaab gaaabbd

^ Acircncora (no comeccedilo) nada agrave esquerda ^ab ab abb

$ Acircncora (no fim) nada agrave direita ab$ abaab

[] Conjunto de valores (explicado adiante)

4389

Expressotildees regulares - regras - conjuntos de valores

[] denota um conjunto de valores que pode conter

Uma lista de coisas que devem corresponder Ex [abc] signfica qualquer caractere no conjunto abc Correspondem a esta

expressatildeo abcabha

Uma lista de coisas que natildeo podem corresponder [^abc] significa qualquer coisa que natildeo seja a b ou c Correspondem a esta

expressatildeo d jgs gg

Faixas de valores [0-9] signfica qualquer diacutegito [0-9a-zA-Z] significa qualquer diacutegito ou letra

Classes de valores como algumas faixas e outros conjuntos ocorrem com muita frequumlecircncia haacute nomes

especiais para eles Estes (em IDL) vecircm entre [] ex [[digit] significa o mesmo que [0-9]

4489

Expressotildees regulares - regras - classes de valores

Classe signficado

alnum Caracteres alfanumeacutericos 0-9a-zA-Z

alpha Caracteres alfabeacuteticos a-zA-Z

cntrl Caracteres de controle ASCII (natildeo visiacuteveis coacutedigos 1 a 31 e 127)

digit Diacutegitos (decimais) 0-9

graph Caracteres visiacuteveis ASCII 33 a 126 (natildeo inclui o espaccedilo)

lower Letras minuacutesculas a-z

print Caracteres ldquoimprimiacuteveisrdquo (visiacuteveis e o espaccedilo) ASCII 32 a 126

punct Caracteres de pontuaccedilatildeo $amprsquo()+-lt=gt[]^_lsquo|~

space Os caracteres ldquoem brancordquo (blank) espaccedilo tab tab vertical CR LF (ASCII 32 e 9-13)

upper Letras maiuacutesculas A-Z

xdigit Diacutegitos hexadecimais 0-9A-Fa-f

lt Comeccedilo de palavra (palavra definida como sequumlecircncia de coisas natildeo space)

gt Fim de palavra (palavra definida como sequumlecircncia de coisas natildeo space)

Estas satildeo apenas as principais Algumas implementaccedilotildees tecircm muito mais (em particular nas linguagens que usam Unicode nativamente)

4589

Expressotildees regulares - exemplos

Determinar se strings satildeo nuacutemeros (Ex IDL)

IDLgt str=[9-18 875-812-45913E9-98d7a188d032f5]

Inteiros

IDLgt intexpr=^[-+][0-9]+$

IDLgt printstregex(strintexprboolean) 1 1 0 0 0 0 0 0 0 0

Ponto flutuante

IDLgt fpexpr=^[-+](([0-9][0-9]+)|([0-9]+[0-9]))([eEdD][-+][0-9]+)$

IDLgt printstregex(strfpexprboolean) 1 1 0 1 1 1 1 1 0 0

Sinal opcional

1 ou mais diacutegitos

Sinal opcional

0 ou mais diacutegitos opcionalmente seguidos de um ponto e 1 ou mais diacutegitos

1 ou mais diacutegitos opcionalmente seguidos de um ponto e 0 ou mais diacutegitos

ou Expoente opcional letra do expoente seguida de sinal opcional seguido de um ou mais diacutegitos

4689

Expressotildees regulares ndash extraccedilatildeo

Interpretadores de expressotildees regulares costumam oferecer mais que apenas testar se um string corresponde a uma expressatildeo

Em geral tambeacutem podem retornar que parte(s) do string corresponde(m) agrave expressatildeo

Ex (IDL) Determinar se um string conteacutem uma data incluindo os formatos

IDLgt dates=[2011-01-312011 1 3120110131something done on y2011m1d31 with something]

E extrair a data de dentro do string

IDLgt expr=[0-9]4[0-9]12[0-9]12

(4 diacutegitos)(qualquer separador)(1 a 2 diacutegitos)(qualquer separador)(1 a 2 diacutegitos)

IDLgt printstregex(datesexprextract)format=(A)2011-01-312011 1 31201101312011m1d31

Como agora separar ano mecircs e dia Com uma busca e uma extraccedilatildeo para cada Poderia ser mais eacute mais faacutecil com uma uacutenica expressatildeo regular

4789

Expressotildees regulares - aleacutem de apenas testes

Tambeacutem podem retornar que parte(s) do string correspondem agrave expressatildeo toda e agraves suas subexpressotildees (partes da expressatildeo delimitadas por parecircnteses)

Ex (IDL) Separar pedaccedilos de datas Neste caso para a expressatildeo ficar menor assumindo um formato simples (yyyy-mm-ddThhmmssfff) Mas poderia ser um formato mais livre como no exemplo anterior

IDLgt str=Stuff observed on 2011-01-31T123924983 with some instrumentIDLgt expr=([0-9]4)-([0-9]2)-([0-9]2)T([0-9]2)([0-9]2)([0-9]2[0-9]3)

(quatro diacutegitos)-(2 diacutegitos)-(2 diacutegitos)T(2 diacutegitos)(2 diacutegitos)(2 diacutegitos3 diacutegitos)

IDLgt pieces=stregex(strexprextractsubexpr)IDLgt printpiecesformat=(A)2011-01-31T12392498320110131123924983IDLgt d=julday(pieces[2]pieces[3]pieces[1]pieces[4]pieces[5]pieces[6])IDLgt printdformat=(F166) 2455593027372

Expressatildeo inteiraPrimeira subexpressatildeoSegunda subexpressatildeoTerceira subexpressatildeoQuarta subexpressatildeoQuinta subexpressatildeoSexta subexpressatildeo

4889

Expressotildees regulares - referecircncias httpxkcdcom208

Viacutedeos do Software Carpentry

httpsoftware-carpentryorg4_0regexp

4989

Arquivos

Quase todo programa precisa armazenar dados em arquivos

Podem ser pequenos arquivos de paracircmetros ou enormes arquivos de dados produzidos ou a processar

Apesar do sugerido pela praacutetica comum arquivos texto natildeo satildeo sempre a melhor escolha para armazenar dados - e haacute muitas formas diferentes de os usar

Qual eacute a melhor escolha

Assim como para linguagens ou contecirciners natildeo existe ldquoo melhor formatordquo Cada um tem suas vantagens e desvantagens

Dados diferentes (mesmo se usados pelos mesmos programas) em geral se adequam melhor a formatos diferentes

5089

Arquivos - texto X binaacuterios

Em qualquer formato arquivos satildeo armazenados como diacutegitos binaacuterios

Mas haacute duas formas principais como eles podem ser codificados

Arquivos baseados em texto (text files)

Dados satildeo transformados em caracteres usando alguma formataccedilatildeo (mesmo se impliacutecita) e escritos com alguma codificaccedilatildeo de texto (comumente mas natildeo necessariamente ASCII)

Um arquivo texto eacute um ou mais strings As mesmas conversotildees tecircm que ser feitas depara outros tipos

Arquivos ldquobinaacuteriosrdquo (binary files)

Embora todo arquivo seja binaacuterio este nome costuma ser usado soacute para aqueles em que os dados natildeo estatildeo na forma de texto

Com frequumlecircncia (nem sempre) os dados satildeo gravados de forma idecircntica a como satildeo armazenados na memoacuteria

Muitos formatos usam uma mistura de partes em texto e partes binaacuterias

Um cabeccedilalho (header) de texto que daacute informaccedilotildees (metadados) sobre os dados armazenados na parte binaacuteria que vem depois

O cabeccedilalho conteacutem em especial informaccedilotildees sobre como ler os dados binaacuterios

5189

Arquivos - texto X binaacuterios

Vantagens de arquivos texto

Legiacuteveis por pessoas (human readable)

Podem ser auto-suficientes todo o necessaacuterio para os ler e entender o que conteacutem pode ser obtido olhando o arquivo

Satildeo os menos especiacuteficos a linguagens software normalmente satildeo escritos em ASCII ou Unicode e sempre haacute algum suporte a ler escrever texto em linguagens software

Haacute alguns formatos padratildeo para texto (exs CSV XML) que satildeo suportados em muitas plataformas diferentes

5289

Arquivos - texto X binaacuterios

Vantagens de arquivos binaacuterios

Em geral natildeo haacute conversotildees entre o os dados como armazenados na memoacuteria O que torna o armazenamento mais eficiente e sem alteraccedilotildees nos valores

A maior parte dos formatos padronizados eacute binaacuteria Exs FITS cube CDF NetCDF HDF HDF5 JPEG JPEG2000 TIFF GeoTIFF MPEG etc

Eacute mais comum que haja bibliotecas prontas (ateacute de alto niacutevel) para consulta leitura e gravaccedilatildeo

Os formatos melhor desenhados satildeo autodocumentados (em texto ou binaacuterio) para os ler natildeo eacute necessaacuterio conhecimento preacutevio sobre como os dados foram armazenados

Toda linguagem plataforma costuma ter seu formato binaacuterio mais nativo que costuma ser o mais faacutecil para leitura gravaccedilatildeo Em particular nas de alto niacutevel que tecircm formatos autodocumentados (especialmente

em IDL R Python Java)

Muitos formatos tecircm opccedilatildeo de compressatildeo dos dados

5389

Arquivos - proprietaacuterios X padratildeo

Independente da escolha texto binaacuterio programas devem escolher entre usar um formato proacuteprio ou um formato padronizado

A principal vantagem de formatos proacuteprios eacute que satildeo definidos da forma mais conveniente para a aplicaccedilatildeo que os usa simplificando leitura e gravaccedilatildeo e potencialmente otimizando recursos (acesso ao disco tamanho do arquivo etc)

A principal desvantagem de formatos proacuteprios eacute ser necessaacuterio escrever todo o coacutedigo para os ler gravar

Pode dar mais trabalho que usar um formato geneacuterico que natildeo seja exatamente o que melhor se encaixa na aplicaccedilatildeo

O coacutedigo para processar o formato em geral vai ser menos completo e conveniente de usar que o de um formato bem estabelecido usado por muitos outros em muitos ambientes

Cada novo software que for usar estes arquivos vai precisar compartilhar do mesmo coacutedigo ou precisar de coacutedigo novo (em particular se em outra linguagem) para ler gravar naquele formato

Eacute necessaacuterio documentar o formato e decidir sobre como ele seraacute definido

Se outros jaacute colocaram muito trabalho desenvolvendo bons formatos padratildeo bem suportados em muitos ambientes por que ter o trabalho de reinventar (e reprogramar redocumentar e retestar) a roda

5489

Arquivos - padrotildees comuns em astronomia (exs adiante)

Texto

CSV Comma-separated values - bem suportado por muitos softwares

ldquoColunas fixasrdquo Natildeo eacute um padratildeo bem definido mas eacute praacutetica comum para tabelas (2D)

XML Extensible Markup Language - O padratildeo texto mais flexiacutevel de grande uso em programaccedilatildeo geral para armazenar qualquer coisa com frequumlecircncia de forma hieraacuterquica Bem suportado por linguagens modernas (e modernizadas) e bibliotecas das principais

linguagens gerais Alta complexidade o torna trabalhoso de usar

5589

Arquivos - padrotildees comuns em astronomia (exs adiante)Binaacuterios

FITS Flexible Image Transport System - o mais comum para observaccedilotildees astronocircmicas Conteacutem os dados (em geral arrays 1D 2D ou 3D) e documentaccedilatildeo (nos cabeccedilalhos) sobre a origem e caracteriacutesticas dos dados Tambeacutem usado para armazenar tabelas de dados quaisquer mesmo que natildeo sejam observaccedilotildees (especialmente pelo STSCI) Variam muito em qualidade de documentaccedilatildeo

NetCDF Network Common Data Form - evoluccedilatildeo do CDF autodocumentado eacute comum e bem suportado para vaacuterios arrays de dados

HDF5 Hierarchical Data Format ndash autodocumentado comum e bem suportado permitindo aleacutem de simples arrays estruturas (eacute um formato hieraacuterquico)

Formatos de imagens JPEG JPEG2000 TIFF GeoTIFF etc - voltados para arrays 2D3D de inteiros ou (em alguns casos) reais com ou sem compressatildeo JPEG2000 tem caracteriacutesticas mais avanccediladas como imagens multiresoluccedilatildeo

Formatos vetoriais PS EPS DXF SHP SVG - variados niacuteveis de suporte a armazenamento de vetores e formas em 2D ou 3D

ISIS Cube semelhante em caracteriacutesticas ao FITS mais usado em sensoriamento remoto geociecircncias e ciecircncias planetaacuterias em geral para observaccedilotildees 1D 2D ou 3D

Formatos nativos de linguagens todo o trabalho de leitura e gravaccedilatildeo eacute feito automagicamente pela biblioteca padratildeo em IDL R Python Java

5689

Arquivos texto - newlines

Apesar do que possa parecer arquivos texto natildeo tecircm intrinsecamente vaacuterias linhas Arquivos texto satildeo soacute uma sequumlecircncia 1D de caracteres em alguma codificaccedilatildeo Separaccedilatildeo em linhas (equivalente a interpretar o arquivo como 2D em linhas e colunas) eacute

especificada por convenccedilotildees Natildeo haacute apenas uma convenccedilatildeo para o fim de linhas

A mais primitiva convenccedilatildeo eacute separaccedilatildeo nenhuma estipula-se que linhas tenham um nuacutemero fixo N de caracteres e cabe ao software que lecirc o arquivo entender que uma linha nova ocorre regularmente a cada N caracteres

Eacute a forma menos portaacutevel e mais inconveniente eacute necessaacuterio o conhecimento preacutevio (ou por inspeccedilatildeo do arquivo) de quantos caracteres haacute por linha

A maior parte dos editores de texto natildeo vai saber separar linhas desta forma (por falta deste conhecimento preacutevio) Exemplo (de um FITS real)

SIMPLE = T Fits standard BITPIX = 16 Bits per pixel NAXIS = 0 Number of axes EXTEND = T File may contain extensions

O que com as linhas quebradas nos lugares certos seria

SIMPLE = T Fits standard BITPIX = 16 Bits per pixel NAXIS = 0 Number of axes EXTEND = T File may contain extensions

5789

Arquivos texto - newlines

A forma mais comum de especificar linhas eacute com um marcador do final de linha (newline)

Eacute um caractere especial natildeo normalmente presente no texto que serve para marcar fim de linhas

Mas natildeo haacute soacute um padratildeo de newline Os mais comuns

LF (Line Feed ASCII 10) ndash Unix Linux Mac OS X

CR - (Carriage Return ASCII 13) - Mac OS lt10

CR+LF (CR seguido de LF) - Windows DOS

Eacute o motivo de o Notepad (Windows) natildeo entender as quebras de linha de arquivos escritos com o formato nativo de Linux o arquivo soacute tem LF enquanto o editor espera CR+LF

Alguns sistemas (strings em vaacuterias linguagens por exemplo) usam o coacutedigo de escape n para indicar newline que eacute codificado de acordo com o padratildeo sendo usado

Em geral bibliotecas de leitura e gravaccedilatildeo de arquivos usam (default pelo menos) o newline nativo do sistema em que satildeo usadas

Programas de conversatildeo entre os sistemas satildeo comuns (ex dos2unix)

O Wordpad identifica se for usado soacute LF e quebra as linhas de acordo

5889

Arquivos - texto - CSV

Comma-separated values

O formato mais padronizado para tabelas (arrays 2D) em texto (frequentemente mas natildeo necessariamente ASCII)

Bem suportado por bibliotecas padratildeo de linguagens e outros softwares (Excel Calc Origin Google Docs etc)

Conteacutem Linhas de cabeccedilalho (opcionais mas recomendadas) linhas com qualquer texto geral

descrevendo o arquivo e em geral uma linha de tiacutetulo para as colunas da tabela Uma (apenas uma) tabela onde todas as linhas tecircm o mesmo nuacutemero de colunas

Colunas separadas por viacutergulas (opcionalmente pode ser outro separador) Linhas terminadas por newline (qualquer que seja) Strings delimitados por ldquo ldquo

Ex

NAMECALMPOSFILNAMEECHLPOSDISPPOSTARGNAMEPOSDIRCLASSMJD-OBSITIMECOADDSdec18s00010NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001dec18s00020NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001dec18s00120NIRSPEC-5-AO635800364500itan140NIRSPEC-5-AOp2 TITAN5408763000001dec18s00140NIRSPEC-5-AO626300364500itan140NIRSPEC-5-AOp1 TITAN5408763000001dec18s00151NIRSPEC-5-AO626300364500itan140NIRSPEC-5-AOp1ARC5408764000001dec18s00160NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001

Natildeo eacute necessaacuterio que as colunas tenham largura constante

Cabeccedilalho

5989

Arquivos - texto - CSVHaacute amplo suporte a leitura e gravaccedilatildeo de CSV sem precisar recorrer a procedimentos de baixo niacutevel

Podem ser diretamente importados em Excel Calc Origin Google Docs ou lido facilmente com bibliotecas padratildeo comuns Ex (IDL)

IDLgt c=read_csv(filesearch_scamcsvheader=h)IDLgt printhNAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS

IDLgt helpc Structure ltc8bca508gt 11 tags length=5256 data length=5248 refs=1 FIELD01 STRING Array[41] FIELD02 LONG Array[41] FIELD03 STRING Array[41] FIELD04 DOUBLE Array[41] FIELD05 DOUBLE Array[41] FIELD06 STRING Array[41] FIELD07 STRING Array[41] FIELD08 STRING Array[41] FIELD09 STRING Array[41] FIELD10 DOUBLE Array[41] FIELD11 LONG Array[41]

IDLgt printcfield01[03]dec18s0001 dec18s0002 dec18s0003 dec18s0004

IDLgt printcfield03[03]NIRSPEC-5-AO NIRSPEC-5-AO NIRSPEC-5-AO NIRSPEC-5-AO

6089

Arquivos - texto - CSVEx (IDL) Criaccedilatildeo de um CSV com uma tabela de valores

Criaccedilatildeo de 3 arrays 1D (12 elementos) um para cada coluna

IDLgt x=dindgen(3)IDLgt y=dindgen(4)IDLgt xx=reform(rebin(x34)12)IDLgt yy=reform(rebin(reform(y14)34)12)IDLgt f=xx+yy10IDLgt helpxxyyfXX DOUBLE = Array[12]YY DOUBLE = Array[12]F DOUBLE = Array[12]

Escrita do arquivo

IDLgt write_csvexamplecsvxxyyfheader=[XYX+10Y]

ResultadoXYX+10Y000000000000000000000000100000000000000010000000200000000000000020000000000000001000000010000000100000001000000011000000()

6189

Arquivos - texto - ldquoColunas regularesrdquoFixed column width

Natildeo eacute exatamente um padratildeo Eacute uma praacutetica comum

Armazena uma tabela (array 2D) de forma regular simples de ser interpretada e lida

Costumam ter linha(s) de cabeccedilalho descrevendo o conteuacutedo do arquivo em geral com uma linha para os nomes das colunas

As demais linhas conteacutem os dados sempre ocupando a mesma largura por coluna e escritos no mesmo formato em cada coluna

Costumam ser simples de ler inclusive interativamente (exs Excel Calc Origin read_ascii)

Ex (IDL) Uma simples tabela soacute de nuacutemeros

wavl CH4=33 wavl CH4=25 wavl CH4=10 wavl CH4=08 wavl CH4=05 wavl CH4=026 wavl CH4=02 477330000 0090130 477330000 0091110 477330000 0089250 477330000 0087000 477330000 0087140 477330000 0090080 477330000 0088110 480040000 0090930 480040000 0091930 480040000 0090160 480040000 0087930 480040000 0088110 480040000 0090950 480040000 0089090 482750000 0091710 482750000 0092730 482750000 0091060 482750000 0088850 482750000 0089080 482750000 0091810 482750000 0090060 485450000 0092530 485450000 0093570 485450000 0092000 485450000 0089810 485450000 0090100 485450000 0092730 485450000 0091090

IDLgt a=read_ascii(specs_27s_ntxtdata_start=1header=header)IDLgt printheader wavl CH4=33 wavl CH4=25 wavl CH4=10 wavl CH4=08 wavl CH4=05 wavl CH4=026 wavl CH4=02 IDLgt helpa Structure ltd423c9a8gt 1 tags length=224 data length=224 refs=1 FIELD01 FLOAT Array[14 4]

6289

Arquivos - texto - ldquoColunas regularesrdquoJaacute um arquivo um pouco mais difiacutecil de ler

NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS dec18s0001 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0002 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0003 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 FLAT 5408757812500 460000 5 dec18s0004 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 DARK 5408757812500 460000 5

Por ter colunas de tipos diferentes (strings inteiros reais) natildeo eacute possiacutevel o ler em um simples array Mas eacute faacutecil o colocar em uma estrutura de arrays onde cada campo eacute uma coluna

Especificando interativamente como interpretar as linhasIDLgt templ=ascii_template(filesearch_scamtxt)

Nome do campo (default mostrado)

Tipo do campo (identificado automaticamente)

Posiccedilatildeo (caracter) do comeccedilo (identificada automaticamente)

Linha de exemplo para verificar as colunas

6389

Arquivos - texto - ldquoColunas regularesrdquoDepois de feito o template o arquivo pode ser lido com apenas

IDLgt a=read_ascii(filesearch_scamtxttemplate=templ)IDLgt helpa Structure ltd4ec4608gt 11 tags length=416 data length=416 refs=1 FIELD01 STRING Array[4] FIELD02 LONG Array[4] FIELD03 STRING Array[4] FIELD04 FLOAT Array[4] FIELD05 FLOAT Array[4] FIELD06 STRING Array[4] FIELD07 STRING Array[4] FIELD08 STRING Array[4] FIELD09 FLOAT Array[4] FIELD10 FLOAT Array[4] FIELD11 LONG Array[4]IDLgt printafield01dec18s0001 dec18s0002 dec18s0003 dec18s0004IDLgt printafield04 626300 626300 626300 626300

O template (uma estrutura contendo dados sobre como ler o arquivo) pode ser usado para outros arquivos no mesmo formato No lugar de ter sido criado interativamente poderia ter sido lido de algum arquivo Poderia ter especificado nomes para os campos que seriam mais amigaacuteveis que coias como FIELD11

6489

Arquivos - texto - XML

Extensible Markup Language

Admite grande flexibilidade e por isso pode ter alta complexidade

Valores satildeo colocados dentro de uma estrutura em hieraacuterquica (em uma aacutervore) com os noacutes identificados pelos seus nomes (chaves)

Largamente usado em muitas aacutereas para armazenar conjuntos arbitraacuterios de quaisquer estruturas de dados

A maioria das aplicaccedilotildees usa um formato que eacute um subconjunto do XML especificado por um Schema comumente em um arquivo XML DTD (Document Type Definition)

6589

Arquivos - texto ndash XML ndash exemplos de usos

Armazenamento de dados de aplicaccedilotildees web (comum para exportar importar dados MediaWiki DokuWiki WordPress ADS Lattes etc)

Documentos Office (docx pptx xlsx) OpenOffice (odt opd ods)

Como versotildees de outros formatos FITSML XDF

ldquoScientific Dataset XML NASAs Astronomical Data Center (ADC) sponsors a number of research projects that

use XML for scientific data representation The XML activities at the ADC are sponsored and supported by the NASA Office of Space Science Applied Information Systems Research Program (AISRP)rdquo - httpxmlcoverpagesorgnasa-adchtml

Astronomical Instrument Markup Language (AIML)

SVG ndash Scalable Vector Graphics

Muitas de outras aplicaccedilotildees listadas em httpxmlcoverpagesorgxmlhtmlapplications

6689

Arquivos - texto ndash XML - exemploltxml version=10 gtltDOCTYPE Xdmf SYSTEM Xdmfdtd []gtltXdmf xmlnsxi=httpwwww3org2001XInclude Version=20gt ltDomaingt lt-- Example of Basic Topologies --gt ltInformation Name=Descriptiongt Example of a Polyvertex Topology ltInformationgt ltGrid Name=Polyvertex GridType=Uniformgt ltTopology TopologyType=Polyvertex Dimensions=3 NodesPerElement=3gt ltDataItem Format=XML Dimensions=3 3 NumberType=Floatgt 0 1 2 4 5 6 8 9 10 ltDataItemgt ltTopologygt ltGeometry Type=XYZgt ltDataItem Format=XML Dimensions=4 4 3gt 00 00 00 10 00 00()Que mostra que a interpretaccedilatildeo (parsing) de XML eacute em geral complexa

6789

Arquivos - texto - XML

Haacute muitas bibliotecas de alto niacutevel para fazer o processamento (parsing) e entregar os dados em uma estrutura conveniente

A complexidade em processar XML estaacute em decidir o que fazer com os dados jaacute que os arquivos podem ser muito complexos

As APIs (Application Programming Interfaces) mais comuns para processar XML que satildeo implementadas em muitas linguagens

DOM (Document Object Model) ndash manteacutem todo o conteuacutedo do em uma estrutura de dados (em geral uma aacutervore) em uma variaacutevel (em geral um objeto) Esta pode ser consultada para obter os valores de interesse para os alterar e usada para escrever um arquivo

SAX (Simple API for XML) ndash Interpretador (parser) por objetos O usuaacuterio escreve uma classe herdando da classe SAX provendo os meacutetodos que vatildeo processar os campos agrave medida em que estes satildeo lidos

6889

Arquivos - binaacuterios - FITSFlexible Image Transport System

O formato mais comum para observaccedilotildees astronocircmicas Tambeacutem usado para armazenar quaisquer dados mesmo natildeo relacionados a observaccedilotildees (especialmente tabelas como eacute praacutetica do STSCI)

Conteacutem um (ou mais) cabeccedilalho(s) de texto com metadados (informaccedilotildees sobre os dados como caracteriacutesticas (necessaacuterias para os ler) origem condiccedilotildees em que foram obtidos processamento realizado etc)

SIMPLE = T image conforms to FITS standard BITPIX = 32 bits per data value NAXIS = 2 number of axes NAXIS1 = 1024 NAXIS2 = 1024 BSCALE = 100000 Scaling factor BZERO = 000000 Scaling zero-point TELESCOP= Keck II Telescope SLITNAME= 0041x226 Slit Name SLITPA = 351979 Slit position angle SLITX = 131500 X pixel of the center of the slit LST = 12010446 local apparent sidereal time (()

Depois do cabeccedilalho haacute uma (ou mais) seccedilatildeo(otildees) de dados binaacuterios Costuma(m) ser array(s) 1D (espectros) 2D (imagens) ou 3D (ldquocubos de dadosrdquo)

De inteiros ou reais inteiros satildeo comuns em contagens de instrumentos reais para valores derivados (fluxos intensidades etc)

6989

Arquivos - binaacuterios - FITSNormalmente FITS satildeo lidos escritos por bibliotecas prontas de (relativamente) alto niacutevel usuaacuterio natildeo tem que saber como os dados satildeo armazenados no arquivo nem como os ler escrever Ex (IDL com a biblioteca idlastro)

IDLgt fits_info2dspectrumfits2dspectrumfits has 3 extensionsPrimary header 288 recordsNo dataExtension 1 -- SCI Header 144 records IMAGE ( 1201 1201 )Extension 2 -- ERR Header 72 records IMAGE ( 1201 1201 )Extension 3 -- DQ Header 72 records IMAGE ( 1201 1201 )

IDLgt mydata=readfits(2dspectrumfitsexten_no=1myheader) READFITS Reading FITS extension of type IMAGE READFITS Now reading 1201 by 1201 array

IDLgt extastmyheadermyastIDLgt sz=size(mydatadimensions)IDLgt xy2ad[1sz[0]][1sz[1]]myastcorners_acorners_dIDLgt printcorners_aCorners of the data array from file 2dspectrumfits are at 14487480 33063480

IDLgt printcorners_d -00041264444 00041402222

Obteacutem os dados de coordenadas (WCS) do header

Coloca os dados no array (2D de floats) mydata e o header no array (1D de strings) myheader

Calcula as coordenadas das quinas da imagem atraveacutes do WCS

Provecirc informaccedilotildees sobre o arquivo

7089

Arquivos - binaacuterios - ISIS Cube

Formatos como FITS se adequam muito a ter uma interface de mais alto niacutevel por objetos

Tambeacutem para dados em tabelas FITS muito mais trabalhosos de ler em baixo niacutevel que se adequam muito mais a mapas ou estruturas

Exemplo (de um formato semelhante a FITS ISIS cube)

O objeto ao ser criado lecirc todo o arquivo

cube=pp_editablecube(CM_1553510065_1_ircub)

Meacutetodos fornecem os dados desejados para obter quando necessaacuterio os dados de interesse

Find out the names of the backplanesprintcubegetproperty(backnames)Get the start time of the cubeprintcubegetfromheader(START_TIME)2007-084T100057286Z

Valores no cabeccedilalho podem ser convenientemente fornecidos como um mapa

header=cubeheader_as_hash()printheader[START_TIME]2007-084T100057286Z

7189

Arquivos - binaacuterios ndash ISIS Cube

Os dados satildeo fornecidos como arraysMake a contour plot of the latitudesc=contour(cubegetsuffixbyname(LATITUDE))Get the band with wavelength nearest to 21 (in the units used in the cube)selband=cubegetbandbywavelength(21wavelengths=selwavs)

Interfaces por overload tornam o acesso ainda mais conveniente

selband=cube[21]

selwavs=cube[21]

Retorna um array com a banda de comprimento de onda mais proacuteximo de 21 (microm)

Retorna o comprimento de onda mais proacuteximo de 21 (microm) da banda retornada acima

7289

Arquivos - binaacuterios ndash ISIS Cube Alteraccedilotildees feitas ao conteuacutedo satildeo automaticamente refletidas em todos os

lugares (cabeccedilalho em particular) afetados mantendo o objeto vaacutelido que pode depois ser gravado em um novo arquivo

IDLgt printcubelinescubesamplescubebands 64 64 256

IDLgt helpcubecoreltExpressiongt FLOAT = Array[64 64 256]

IDLgt cubecore=dblarr(100100256)

A linha acima natildeo eacute uma atribuiccedilatildeo eacute uma invocaccedilatildeo de meacutetodo Eacute equivalente acubesetpropertycore=dblarr(100100256)

Eacute o trabalho da funccedilatildeo setproperty decidir se a propriedade passada (core) faz sentido e se fizer fazer todo o trabalho necessaacuterio a esta mudanccedila Para o usuaacuterio eacute tudo automaacutetico e os dados da classe satildeo vaacutelidos o tempo todo

IDLgt helpcubecoreltExpressiongt DOUBLE = Array[100 100 256]

IDLgt printcubelinescubesamplescubebands 100 100 256

IDLgt cubesaveCM_1553510065_1_ir_editedcub

7389

Arquivos - binaacuterios ndash NetCDF e HDF5

Network Common Data Form e Hierarchical Data Format

Os dois uacutenicos formatos bem estabelecidos para dados cientiacuteficos geneacutericos

Armazenam dados como vaacuterias variaacuteveis e seus metadados Para cada variaacutevel haacute (ou pode haver) os metadados

Nome Dimensotildees (do array) Unidades Comentaacuterios

Ambos permitem arrays multidimensionais

Apenas HDF5 permite estruturas (daiacute vem a hierarquia)

Autodocumentados qualquer software que saiba ler um destes formatos lecirc qualquer arquivo sem precisar de conhecimento preacutevio sobre como o arquivo foi gerado

Muito bem suportados em bibliotecas padratildeo e natildeo padratildeo em softwares interativos e visualizadores (inclusive plugins para navegadores)

httpwwwunidataucaredusoftwarenetcdf httpenwikipediaorgwikiHdf5

NetCDF eacute mais simples de usar por natildeo ter hierarquia dando menos trabalho para ler e escrever dados Se hierarquia natildeo eacute necessaacuteria eacute mais conveniente de usar que HDF5

7489

Arquivos - binaacuterios - NetCDF e HDF5Haacute tambeacutem o formato CDL uma versatildeo ASCII do NetCDF A biblioteca padratildeo do NetCDF inclui conversores entre estes formatos

$ ncdump -h refspec_g01_0ncnetcdf refspec_g01_0 dimensions nlay = 51 nwn = 400 nleg = 33 numu = 2 nlev = 52 nphi = 3 ngas = 2 nwnc = 1 scal = 1 v3 = 3 dnl = 1 nk = 1 tdisr = UNLIMITED (0 currently) na = 16

variables float alb(nwn) float z(nlay) float t(nlay) float p(nlay) float wl(nwn) float iof(nwn) float mtau(nwn) float htau(nwn) float hctaus(nwn) float gtau(nwn) float outcos(scal) float phi(nleg) float phic(scal) float umu(numu) float flux(v3 nwn nlev) float mix(nlay ngas) float c(nlay) float psat(nlay) float ga(nwnc) float wlc(nwnc) float inc(scal) int dm(scal) int ord(scal) float fbeam(scal) float wn(nwn) float tautot(nwn nlay) float htaus(nwn nlay) float htaux(nwn nlay) float taug(nwn nlay) float phase(nwn nlay nleg) float ssa(nwn nlay) float uu(nwn nphi nlev numu) float u0u(nwn nlev numu) float tray(nwn nlay) float gtauo(tdisr nwn nlay)

Haacute 14 variaacuteveis usadas como dimensotildees para as 35 variaacuteveis que satildeo arrays

Ex alb(nwn) indica que alb eacute um array 1D de nwn elementos

nwn estaacute armazenado como uma das dimensotildees e eacute 400 portanto alb tem 400 elementos

Parte do conteuacutedo de um arquivo NetCDF em formato CDL (gerado pelo programa ncdump)

7589

Arquivos - binaacuterios - NetCDF e HDF5Conteuacutedo daquele arquivo visualizado com o ncview (acompanha a biblioteca NetCDF padratildeo)

7689

Arquivos - binaacuterios - NetCDF e HDF5O conteuacutedo de todo o arquivo pode ser lido facilmente com as bibliotecas disponiacuteveis e armazenado em contecirciners convenientes Usando um objeto que gera um resultado um pouco mais conveniente

IDLgt h=pp_readncdf(refspec_g01_0nchash)IDLgt printhvar_dims ltObjHeapVar229(HASH)gtvars ltObjHeapVar152(HASH)gtdims ltObjHeapVar118(HASH)gt

IDLgt printh[vars]T 173203 175459 175848 176001 175975 Z 431869 418858 406067 393403 380464 FLUX 300660 145536 0705180 0341669 0165532 PHASE 100000 0779034 0660858 0542052 0449983 TAUTOT0694377 0693420 0693474 0693540 0693636()

IDLgt help(h[vars])[TAUTOT]ltExpressiongt FLOAT = Array[51 400]

IDLgt print(h[var_dims])[TAUTOT]NLAY NWN

IDLgt print(h[dims])[(h[var_dims])[TAUTOT]]NLAY 51NWN 400

7789

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5)

Visualizaccedilatildeo da variaacutevel selecionada

Metadados e alguns valores da variaacutevel selecionada

Variaacutevel a ser criada com o conteuacutedo desta variaacutevel do arquivo

Hierarquia das variaacuteveis do arquivo

7889

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5) Imported variable az

IDLgt helpaz Structure ltd5723f38gt 13 tags length=448 data length=444 refs=1 _NAME STRING az _ICONTYPE STRING binary _TYPE STRING DATASET _FILE STRING INTENSI_test_409OUTh5 _PATH STRING _DATA DOUBLE Array[38] _NDIMENSIONS LONG 1 _DIMENSIONS ULONG64 Array[1] _NELEMENTS ULONG64 38 _DATATYPE STRING H5T_FLOAT _STORAGESIZE ULONG 8 _PRECISION LONG 64 _SIGN STRING

IDLgt printaz_data 00000000 10000000 20000000 30000000 40000000 50000000 60000000 80000000 ()

7989

Arquivos - binaacuterios - imagens

JPEG JPEG200 TIFF GeoTIFF etc

Os formatos comuns de imagens satildeo bem suportados em muacuteltiplas plataformas para uso dentro de programas e interativamente

Alguns formatos tecircm opccedilatildeo de compressatildeo com perda eou sem perda

Armazenam imagens como arrays 2D ou 3D (3D frequumlentemente limitado a 3 ou 4 em uma das dimensotildees uma imagem em 3 ou 4 bandas) de inteiros ou (em alguns formatos) reais

Alguns formatos permitem armazenar metadados para caracterizar as imagens armazenadas

JPEG2000 e GeoTIFF (um subconjunto de TIFF) comuns em astronomia e aacutereas proacuteximas

8089

Arquivos - binaacuterios ndash imagens ndash exemplo (IDL)IDLgt printquery_tiff(issmap_2009tiffinfogeotiff=geo) 1

IDLgt helpinfo Structure ltd4eca4b8gt 18 tags length=144 data length=132 refs=1 CHANNELS LONG 4 DIMENSIONS LONG Array[2] IMAGE_INDEX LONG 0 NUM_IMAGES LONG 1 PIXEL_TYPE INT 1 TYPE STRING TIFF BITS_PER_SAMPLE LONG 8 POSITION FLOAT Array[2] RESOLUTION FLOAT Array[2] UNITS LONG 2 TILE_SIZE LONG Array[2] DESCRIPTION STRING ISS (2009) DATE_TIME STRING 20100218 012436()

IDLgt helpgeo Structure ltd4efa1b8gt 10 tags length=264 data length=262 refs=1 MODELPIXELSCALETAG DOUBLE Array[3] MODELTIEPOINTTAG DOUBLE Array[6 4] GEOGRAPHICTYPEGEOKEY INT 4035 GEOGSEMIMAJORAXISGEOKEY DOUBLE 25750000 GEOGSEMIMINORAXISGEOKEY DOUBLE 25750000()

IDLgt myimage=read_tiff(issmap_2009tiff) Lecirc a imagem para o array myimage

Obteacutem informaccedilotildees sobre o arquivo

8189

Arquivos - binaacuterios ndash formatos nativosLinguagens como IDL R Python Java tecircm seu formato nativo binaacuterio acessado em alto niacutevel Basta mandar salvar ler variaacuteveis no do arquivo a biblioteca padratildeo automagicamente faz todo o trabalho de decidir como gravar ler os dados

Conveniente de usar na proacutepria linguagem Mas raramente existem bibliotecas para ler gravar o formato nativo de uma linguagem a partir de outra Ex (IDL)

IDLgt savefile=2dspectrumsavmydatamyheadercorners_dcorners_averbosecompress SAVE Portable (XDR) compressed SAVERESTORE file SAVE Saved variable MYDATA SAVE Saved variable MYHEADER()

Pode ser lido com apenas (haacute formas mais elaboradas)

IDLgt restore2dspectrumsavverbose RESTORE Portable (XDR) compressed SAVERESTORE file RESTORE Save file written by ltunknowngtltunknowngt Thu Jan 27 191422 2011 RESTORE IDL version 801 (linux x86_64) RESTORE Restored variable MYDATA RESTORE Restored variable MYHEADER()

IDLgt helpmydatamyheadercorners_dcorners_aMYDATA FLOAT = Array[1201 1201]MYHEADER STRING = Array[144]()

8289

Arquivos - processamento em baixo niacutevel

Nem sempre um formato padratildeo eacute a melhor escolha para o problema

Nem sempre haacute escolha (pode-se ter que trabalhar com arquivos que jaacute foram escritos em algum formato proprietaacuterio)

Agraves vezes o formato eacute padratildeo mas natildeo haacute bom suporte a ele disponiacutevel

Em todos estes casos eacute necessaacuterio escrever rotinas em baixo niacutevel que vatildeo ler processar diretamente o conteuacutedo do arquivo

Preferencialmente criando interfaces de alto niacutevel para o programa que vai as usar

8389

Arquivos - processamento em baixo niacutevel - texto

Tomando o exemplo anterior onde as colunas eram de diferentes tipos

NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS dec18s0001 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0002 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0003 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 FLAT 5408757812500 460000 5 dec18s0004 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 DARK 5408757812500 460000 5

A forma mais simples de o ler diretamente eacute definir uma estrutura para receber cada linha e um array destas estruturas para receber todo o arquivo Ex (IDL)

IDLgt record=namecalmpos0filnameechlpos0d0disppos0d0targnameposdirclassmjd_obsitime0d0coadds0IDLgt nlines=file_lines(filesearch_scamtxt)IDLgt mydata=replicate(recordnlines-1)IDLgt header=

Depois de definidas as variaacuteveis que vatildeo receber os dados o arquivo pode ser lido

IDLgt openrunitfilesearch_scamtxtget_lunIDLgt readfunitheaderIDLgt readfunitmydataformat=(A14I8A15F104F104A18A19A15F158F105I15)IDLgt free_lununit

A gravaccedilatildeo de um arquivo texto poderia ser feita de forma semelhante apenas trocando openr por openw (abrir o arquivo para gravaccedilatildeo natildeo leitura) e readf por printf

O arquivo eacute aberto em uma unidade (unit) usada para especificar de onde eacute feita a leitura

Ao final o arquivo eacute fechado

8489

Arquivos - processamento em baixo niacutevel - texto

O que resulta em

IDLgt printheader NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS

IDLgt helpmydataMYDATA STRUCT = -gt ltAnonymousgt Array[4]

IDLgt helpmydata[0] Structure ltd5e38f68gt 11 tags length=136 data length=124 refs=3 NAME STRING dec18s0001 CALMPOS INT 0 FILNAME STRING NIRSPEC-5-AO ECHLPOS DOUBLE 62630000 DISPPOS DOUBLE 36450000 TARGNAME STRING HD85258 POSDIR STRING NIRSPEC-5-AOp1 CLASS STRING STAR MJD_OBS STRING 54087574 ITIME DOUBLE 10000000 COADDS INT 1

Este caso eacute mais complicado que os mais comuns por haver colunas de strings

Se todas fossem de nuacutemeros natildeo teria sido necessaacuterio especificar o formato explicitamente As colunas teriam sido adivinhadas pela biblioteca que lecirc o arquivo Poderia ter sido lido escrito soacute com um array de nuacutemeros sem estruturas

8589

Arquivos - processamento em baixo niacutevel - binaacuterio

Formatos binaacuterios podem ser definidos de qualquer forma O arquivo eacute apenas um conjunto de bytes Cabe ao software saber como os interpretar

Uma escolha comum para que sejam autodocumentados eacute incluir um cabeccedilalho de texto informando as caracteriacutesticas dos dados necessaacuterias para os ler

Ex (IDL) criar um arquivo que armazene um array de doubles com um cabeccedilalho informando as dimensotildees para que o programa que o lecirc saiba como ler os dados

Inventa dados e abre o arquivo

IDLgt data_to_write=dindgen(34)IDLgt openwunitbinary_exampledatget_lun

Escreve as dimensotildees como texto

IDLgt printfunitdimensions of the double array stored belowIDLgt printfunitsize(data_to_writedimensions)

Escreve os dados binaacuterios

IDLgt writeuunitdata_to_write

Fecha o arquivo

IDLgt free_lununit

Escreve em binaacuterio (write unformatted)

8689

Arquivos - processamento em baixo niacutevel - binaacuterio

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

dimensions of the double array stored below 3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

8789

Arquivos - processamento em baixo niacutevel - binaacuterioA leitura deste arquivo eacute igualmente simples

IDLgt header=IDLgt dims=[00]IDLgt openrunitbinary_exampledatget_lun

Lecirc as dimensotildees (armazenadas como texto)

IDLgt readfunitheaderIDLgt readfunitdims

Lecirc a parte binaacuteria depois de saber as dimensotildees

IDLgt data_read=dblarr(dims)IDLgt readuunitdata_read

Fecha o arquivo

IDLgt free_lununit

Verifica que os dados foram gravados e lidos corretamente

IDLgt printarray_equal(data_to_writedata_read) 1

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Lecirc dados binaacuterios (read unformatted)

8889

Sumaacuterio

5 ndash Slides em httpwwwppenteadonetpeapea04_strings_iopdf Strings Expressotildees regulares Arquivos

httpwwwppenteadonetpea

8989

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89

Expressotildees regulares - usoEx (IDL) encontrar nomes de arquivos com algumas propriedades

IDLgt printfilesformat=(A)CM_1477475933_1_viscubCM_1477476864_1_ircubCM_1477476864_1_irgcubCM_1477476864_1_viscubCM_1477477826_1_ircubCM_1477477826_1_irgcubCM_1477477826_1_viscubmosaic2cub

IDLgt printstregex(files+irgcubboolean) 0 0 1 0 0 1 0 0

A expressatildeo regular eacute +irgcub Especifica uma ou mais ocorrecircncias seguidas (+) de qualquer caractere () seguido de uma ocorrecircncia de irgcub (o ponto vem precedido do caractere de

escape () para ser entendido literalmente como um ponto e natildeo como o seu significado especial (qualquer caractere)

Esta aplicaccedilatildeo do interpretador (stregex) retorna um valor Booleano (verdadeirofalso) para cada elemento do string passado (files) que informa se aquele elemento correspondia agravequela expressatildeo regular

Este eacute um exemplo artificial Seria mais faacutecil ter usado strmatch(filesirgcub)

4089

Expressotildees regulares - uso

Em casos como este tipicamente o resultado de stregex seria usado como filtro para selecionar apenas os elementos do array de strings que satisfazem agravequela expressatildeo regular

IDLgt w=where(stregex(files+irgcubboolean)null)IDLgt printfiles[w]format=(A)CM_1477476864_1_irgcubCM_1477477826_1_irgcub

Ex (IDL) Determinar que strings conteacutem uma data no formato yyyy-mm-dd

IDLgt strs=[201002012010-02-012010-2-1aaaa-mm-ddT2010-02-01J]IDLgt printstregex(strs[0-9]4-[0-9]2-[0-9]2boolean) 0 1 0 0 1

Esta expressatildeo regular especifica quatro repeticcedilotildees (4) de diacutegitos (caracteres na faixa [0-9]) seguido de um (-) seguido de duas repeticcedilotildees (2) de dois diacutegitos ([0-9]) seguido de um (-) seguido de duas repeticcedilotildees (2) de dois diacutegitos ([0-9])

Uma expressatildeo regular apenas um pouco mais elaborada poderia corresponder aos 3 formatos de data no array acima E poderia se impedir que a uacuteltima (com outros caracteres antes e depois da data) seja aceita

4189

Expressotildees regulares - regras - caracteres ldquonormaisrdquo

Uma expressatildeo regular usa caracteres ldquonormaisrdquo e especiais para especificar o que se vai procurar na ordem em que aparecem na expressatildeo

Se um caractere eacute normal (natildeo eacute um dos especiais mostrados adiante) ele especifica uma ocorrecircncia daquele caractere

Ex J eacute uma expressatildeo regular que corresponde a qualquer string onde ocorra J Jaacute JA soacute corresponde a strings que tenham JA dentro

Exs (IDL)

IDLgt strs=[JJJJJJaJAjaJa]

IDLgt printstregex(strsJboolean) 1 1 1 0 1

IDLgt printstregex(strsJAboolean) 0 0 1 0 0

4289

Expressotildees regulares - regras - caracteres especiaisCaracteres especiais tecircm outros significados Para significar literalmente aquele caractere deve ser escapado (escaped) com um

Siacutembolo significado exemplo Corresponde(m) Escape o caractere seguinte deve ser interpretado

literalmente natildeo como especial aa

Qualquer caractere ab ajb aab abb jafbc

+ Uma ou mais repeticcedilotildees do que vem agrave esquerda a+b ab aab bab baabh

() Subexpressatildeo para agrupar termos afetados por um caractere especial (como parecircnteses em notaccedilatildeo matemaacutetica)

(ab)+c abc ababc dabababcg

Zero ou mais repeticcedilotildees dos termos agrave esquerda ab abbaab caaabg

Zero ou uma repeticcedilatildeo dos termos agrave esquerda ab b ab cabd cbd

| Alternaccedilatildeo qualquer um dos dois agrave esquerda a|bc ac bc jacd jbcd

n Exatamente n repeticcedilotildees do termo agrave esquerda a2b aab daaabg

n1n2 De n1 a n2 repeticcedilotildees do termo agrave esquerda a12b ab aab aaab gaaabbd

^ Acircncora (no comeccedilo) nada agrave esquerda ^ab ab abb

$ Acircncora (no fim) nada agrave direita ab$ abaab

[] Conjunto de valores (explicado adiante)

4389

Expressotildees regulares - regras - conjuntos de valores

[] denota um conjunto de valores que pode conter

Uma lista de coisas que devem corresponder Ex [abc] signfica qualquer caractere no conjunto abc Correspondem a esta

expressatildeo abcabha

Uma lista de coisas que natildeo podem corresponder [^abc] significa qualquer coisa que natildeo seja a b ou c Correspondem a esta

expressatildeo d jgs gg

Faixas de valores [0-9] signfica qualquer diacutegito [0-9a-zA-Z] significa qualquer diacutegito ou letra

Classes de valores como algumas faixas e outros conjuntos ocorrem com muita frequumlecircncia haacute nomes

especiais para eles Estes (em IDL) vecircm entre [] ex [[digit] significa o mesmo que [0-9]

4489

Expressotildees regulares - regras - classes de valores

Classe signficado

alnum Caracteres alfanumeacutericos 0-9a-zA-Z

alpha Caracteres alfabeacuteticos a-zA-Z

cntrl Caracteres de controle ASCII (natildeo visiacuteveis coacutedigos 1 a 31 e 127)

digit Diacutegitos (decimais) 0-9

graph Caracteres visiacuteveis ASCII 33 a 126 (natildeo inclui o espaccedilo)

lower Letras minuacutesculas a-z

print Caracteres ldquoimprimiacuteveisrdquo (visiacuteveis e o espaccedilo) ASCII 32 a 126

punct Caracteres de pontuaccedilatildeo $amprsquo()+-lt=gt[]^_lsquo|~

space Os caracteres ldquoem brancordquo (blank) espaccedilo tab tab vertical CR LF (ASCII 32 e 9-13)

upper Letras maiuacutesculas A-Z

xdigit Diacutegitos hexadecimais 0-9A-Fa-f

lt Comeccedilo de palavra (palavra definida como sequumlecircncia de coisas natildeo space)

gt Fim de palavra (palavra definida como sequumlecircncia de coisas natildeo space)

Estas satildeo apenas as principais Algumas implementaccedilotildees tecircm muito mais (em particular nas linguagens que usam Unicode nativamente)

4589

Expressotildees regulares - exemplos

Determinar se strings satildeo nuacutemeros (Ex IDL)

IDLgt str=[9-18 875-812-45913E9-98d7a188d032f5]

Inteiros

IDLgt intexpr=^[-+][0-9]+$

IDLgt printstregex(strintexprboolean) 1 1 0 0 0 0 0 0 0 0

Ponto flutuante

IDLgt fpexpr=^[-+](([0-9][0-9]+)|([0-9]+[0-9]))([eEdD][-+][0-9]+)$

IDLgt printstregex(strfpexprboolean) 1 1 0 1 1 1 1 1 0 0

Sinal opcional

1 ou mais diacutegitos

Sinal opcional

0 ou mais diacutegitos opcionalmente seguidos de um ponto e 1 ou mais diacutegitos

1 ou mais diacutegitos opcionalmente seguidos de um ponto e 0 ou mais diacutegitos

ou Expoente opcional letra do expoente seguida de sinal opcional seguido de um ou mais diacutegitos

4689

Expressotildees regulares ndash extraccedilatildeo

Interpretadores de expressotildees regulares costumam oferecer mais que apenas testar se um string corresponde a uma expressatildeo

Em geral tambeacutem podem retornar que parte(s) do string corresponde(m) agrave expressatildeo

Ex (IDL) Determinar se um string conteacutem uma data incluindo os formatos

IDLgt dates=[2011-01-312011 1 3120110131something done on y2011m1d31 with something]

E extrair a data de dentro do string

IDLgt expr=[0-9]4[0-9]12[0-9]12

(4 diacutegitos)(qualquer separador)(1 a 2 diacutegitos)(qualquer separador)(1 a 2 diacutegitos)

IDLgt printstregex(datesexprextract)format=(A)2011-01-312011 1 31201101312011m1d31

Como agora separar ano mecircs e dia Com uma busca e uma extraccedilatildeo para cada Poderia ser mais eacute mais faacutecil com uma uacutenica expressatildeo regular

4789

Expressotildees regulares - aleacutem de apenas testes

Tambeacutem podem retornar que parte(s) do string correspondem agrave expressatildeo toda e agraves suas subexpressotildees (partes da expressatildeo delimitadas por parecircnteses)

Ex (IDL) Separar pedaccedilos de datas Neste caso para a expressatildeo ficar menor assumindo um formato simples (yyyy-mm-ddThhmmssfff) Mas poderia ser um formato mais livre como no exemplo anterior

IDLgt str=Stuff observed on 2011-01-31T123924983 with some instrumentIDLgt expr=([0-9]4)-([0-9]2)-([0-9]2)T([0-9]2)([0-9]2)([0-9]2[0-9]3)

(quatro diacutegitos)-(2 diacutegitos)-(2 diacutegitos)T(2 diacutegitos)(2 diacutegitos)(2 diacutegitos3 diacutegitos)

IDLgt pieces=stregex(strexprextractsubexpr)IDLgt printpiecesformat=(A)2011-01-31T12392498320110131123924983IDLgt d=julday(pieces[2]pieces[3]pieces[1]pieces[4]pieces[5]pieces[6])IDLgt printdformat=(F166) 2455593027372

Expressatildeo inteiraPrimeira subexpressatildeoSegunda subexpressatildeoTerceira subexpressatildeoQuarta subexpressatildeoQuinta subexpressatildeoSexta subexpressatildeo

4889

Expressotildees regulares - referecircncias httpxkcdcom208

Viacutedeos do Software Carpentry

httpsoftware-carpentryorg4_0regexp

4989

Arquivos

Quase todo programa precisa armazenar dados em arquivos

Podem ser pequenos arquivos de paracircmetros ou enormes arquivos de dados produzidos ou a processar

Apesar do sugerido pela praacutetica comum arquivos texto natildeo satildeo sempre a melhor escolha para armazenar dados - e haacute muitas formas diferentes de os usar

Qual eacute a melhor escolha

Assim como para linguagens ou contecirciners natildeo existe ldquoo melhor formatordquo Cada um tem suas vantagens e desvantagens

Dados diferentes (mesmo se usados pelos mesmos programas) em geral se adequam melhor a formatos diferentes

5089

Arquivos - texto X binaacuterios

Em qualquer formato arquivos satildeo armazenados como diacutegitos binaacuterios

Mas haacute duas formas principais como eles podem ser codificados

Arquivos baseados em texto (text files)

Dados satildeo transformados em caracteres usando alguma formataccedilatildeo (mesmo se impliacutecita) e escritos com alguma codificaccedilatildeo de texto (comumente mas natildeo necessariamente ASCII)

Um arquivo texto eacute um ou mais strings As mesmas conversotildees tecircm que ser feitas depara outros tipos

Arquivos ldquobinaacuteriosrdquo (binary files)

Embora todo arquivo seja binaacuterio este nome costuma ser usado soacute para aqueles em que os dados natildeo estatildeo na forma de texto

Com frequumlecircncia (nem sempre) os dados satildeo gravados de forma idecircntica a como satildeo armazenados na memoacuteria

Muitos formatos usam uma mistura de partes em texto e partes binaacuterias

Um cabeccedilalho (header) de texto que daacute informaccedilotildees (metadados) sobre os dados armazenados na parte binaacuteria que vem depois

O cabeccedilalho conteacutem em especial informaccedilotildees sobre como ler os dados binaacuterios

5189

Arquivos - texto X binaacuterios

Vantagens de arquivos texto

Legiacuteveis por pessoas (human readable)

Podem ser auto-suficientes todo o necessaacuterio para os ler e entender o que conteacutem pode ser obtido olhando o arquivo

Satildeo os menos especiacuteficos a linguagens software normalmente satildeo escritos em ASCII ou Unicode e sempre haacute algum suporte a ler escrever texto em linguagens software

Haacute alguns formatos padratildeo para texto (exs CSV XML) que satildeo suportados em muitas plataformas diferentes

5289

Arquivos - texto X binaacuterios

Vantagens de arquivos binaacuterios

Em geral natildeo haacute conversotildees entre o os dados como armazenados na memoacuteria O que torna o armazenamento mais eficiente e sem alteraccedilotildees nos valores

A maior parte dos formatos padronizados eacute binaacuteria Exs FITS cube CDF NetCDF HDF HDF5 JPEG JPEG2000 TIFF GeoTIFF MPEG etc

Eacute mais comum que haja bibliotecas prontas (ateacute de alto niacutevel) para consulta leitura e gravaccedilatildeo

Os formatos melhor desenhados satildeo autodocumentados (em texto ou binaacuterio) para os ler natildeo eacute necessaacuterio conhecimento preacutevio sobre como os dados foram armazenados

Toda linguagem plataforma costuma ter seu formato binaacuterio mais nativo que costuma ser o mais faacutecil para leitura gravaccedilatildeo Em particular nas de alto niacutevel que tecircm formatos autodocumentados (especialmente

em IDL R Python Java)

Muitos formatos tecircm opccedilatildeo de compressatildeo dos dados

5389

Arquivos - proprietaacuterios X padratildeo

Independente da escolha texto binaacuterio programas devem escolher entre usar um formato proacuteprio ou um formato padronizado

A principal vantagem de formatos proacuteprios eacute que satildeo definidos da forma mais conveniente para a aplicaccedilatildeo que os usa simplificando leitura e gravaccedilatildeo e potencialmente otimizando recursos (acesso ao disco tamanho do arquivo etc)

A principal desvantagem de formatos proacuteprios eacute ser necessaacuterio escrever todo o coacutedigo para os ler gravar

Pode dar mais trabalho que usar um formato geneacuterico que natildeo seja exatamente o que melhor se encaixa na aplicaccedilatildeo

O coacutedigo para processar o formato em geral vai ser menos completo e conveniente de usar que o de um formato bem estabelecido usado por muitos outros em muitos ambientes

Cada novo software que for usar estes arquivos vai precisar compartilhar do mesmo coacutedigo ou precisar de coacutedigo novo (em particular se em outra linguagem) para ler gravar naquele formato

Eacute necessaacuterio documentar o formato e decidir sobre como ele seraacute definido

Se outros jaacute colocaram muito trabalho desenvolvendo bons formatos padratildeo bem suportados em muitos ambientes por que ter o trabalho de reinventar (e reprogramar redocumentar e retestar) a roda

5489

Arquivos - padrotildees comuns em astronomia (exs adiante)

Texto

CSV Comma-separated values - bem suportado por muitos softwares

ldquoColunas fixasrdquo Natildeo eacute um padratildeo bem definido mas eacute praacutetica comum para tabelas (2D)

XML Extensible Markup Language - O padratildeo texto mais flexiacutevel de grande uso em programaccedilatildeo geral para armazenar qualquer coisa com frequumlecircncia de forma hieraacuterquica Bem suportado por linguagens modernas (e modernizadas) e bibliotecas das principais

linguagens gerais Alta complexidade o torna trabalhoso de usar

5589

Arquivos - padrotildees comuns em astronomia (exs adiante)Binaacuterios

FITS Flexible Image Transport System - o mais comum para observaccedilotildees astronocircmicas Conteacutem os dados (em geral arrays 1D 2D ou 3D) e documentaccedilatildeo (nos cabeccedilalhos) sobre a origem e caracteriacutesticas dos dados Tambeacutem usado para armazenar tabelas de dados quaisquer mesmo que natildeo sejam observaccedilotildees (especialmente pelo STSCI) Variam muito em qualidade de documentaccedilatildeo

NetCDF Network Common Data Form - evoluccedilatildeo do CDF autodocumentado eacute comum e bem suportado para vaacuterios arrays de dados

HDF5 Hierarchical Data Format ndash autodocumentado comum e bem suportado permitindo aleacutem de simples arrays estruturas (eacute um formato hieraacuterquico)

Formatos de imagens JPEG JPEG2000 TIFF GeoTIFF etc - voltados para arrays 2D3D de inteiros ou (em alguns casos) reais com ou sem compressatildeo JPEG2000 tem caracteriacutesticas mais avanccediladas como imagens multiresoluccedilatildeo

Formatos vetoriais PS EPS DXF SHP SVG - variados niacuteveis de suporte a armazenamento de vetores e formas em 2D ou 3D

ISIS Cube semelhante em caracteriacutesticas ao FITS mais usado em sensoriamento remoto geociecircncias e ciecircncias planetaacuterias em geral para observaccedilotildees 1D 2D ou 3D

Formatos nativos de linguagens todo o trabalho de leitura e gravaccedilatildeo eacute feito automagicamente pela biblioteca padratildeo em IDL R Python Java

5689

Arquivos texto - newlines

Apesar do que possa parecer arquivos texto natildeo tecircm intrinsecamente vaacuterias linhas Arquivos texto satildeo soacute uma sequumlecircncia 1D de caracteres em alguma codificaccedilatildeo Separaccedilatildeo em linhas (equivalente a interpretar o arquivo como 2D em linhas e colunas) eacute

especificada por convenccedilotildees Natildeo haacute apenas uma convenccedilatildeo para o fim de linhas

A mais primitiva convenccedilatildeo eacute separaccedilatildeo nenhuma estipula-se que linhas tenham um nuacutemero fixo N de caracteres e cabe ao software que lecirc o arquivo entender que uma linha nova ocorre regularmente a cada N caracteres

Eacute a forma menos portaacutevel e mais inconveniente eacute necessaacuterio o conhecimento preacutevio (ou por inspeccedilatildeo do arquivo) de quantos caracteres haacute por linha

A maior parte dos editores de texto natildeo vai saber separar linhas desta forma (por falta deste conhecimento preacutevio) Exemplo (de um FITS real)

SIMPLE = T Fits standard BITPIX = 16 Bits per pixel NAXIS = 0 Number of axes EXTEND = T File may contain extensions

O que com as linhas quebradas nos lugares certos seria

SIMPLE = T Fits standard BITPIX = 16 Bits per pixel NAXIS = 0 Number of axes EXTEND = T File may contain extensions

5789

Arquivos texto - newlines

A forma mais comum de especificar linhas eacute com um marcador do final de linha (newline)

Eacute um caractere especial natildeo normalmente presente no texto que serve para marcar fim de linhas

Mas natildeo haacute soacute um padratildeo de newline Os mais comuns

LF (Line Feed ASCII 10) ndash Unix Linux Mac OS X

CR - (Carriage Return ASCII 13) - Mac OS lt10

CR+LF (CR seguido de LF) - Windows DOS

Eacute o motivo de o Notepad (Windows) natildeo entender as quebras de linha de arquivos escritos com o formato nativo de Linux o arquivo soacute tem LF enquanto o editor espera CR+LF

Alguns sistemas (strings em vaacuterias linguagens por exemplo) usam o coacutedigo de escape n para indicar newline que eacute codificado de acordo com o padratildeo sendo usado

Em geral bibliotecas de leitura e gravaccedilatildeo de arquivos usam (default pelo menos) o newline nativo do sistema em que satildeo usadas

Programas de conversatildeo entre os sistemas satildeo comuns (ex dos2unix)

O Wordpad identifica se for usado soacute LF e quebra as linhas de acordo

5889

Arquivos - texto - CSV

Comma-separated values

O formato mais padronizado para tabelas (arrays 2D) em texto (frequentemente mas natildeo necessariamente ASCII)

Bem suportado por bibliotecas padratildeo de linguagens e outros softwares (Excel Calc Origin Google Docs etc)

Conteacutem Linhas de cabeccedilalho (opcionais mas recomendadas) linhas com qualquer texto geral

descrevendo o arquivo e em geral uma linha de tiacutetulo para as colunas da tabela Uma (apenas uma) tabela onde todas as linhas tecircm o mesmo nuacutemero de colunas

Colunas separadas por viacutergulas (opcionalmente pode ser outro separador) Linhas terminadas por newline (qualquer que seja) Strings delimitados por ldquo ldquo

Ex

NAMECALMPOSFILNAMEECHLPOSDISPPOSTARGNAMEPOSDIRCLASSMJD-OBSITIMECOADDSdec18s00010NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001dec18s00020NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001dec18s00120NIRSPEC-5-AO635800364500itan140NIRSPEC-5-AOp2 TITAN5408763000001dec18s00140NIRSPEC-5-AO626300364500itan140NIRSPEC-5-AOp1 TITAN5408763000001dec18s00151NIRSPEC-5-AO626300364500itan140NIRSPEC-5-AOp1ARC5408764000001dec18s00160NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001

Natildeo eacute necessaacuterio que as colunas tenham largura constante

Cabeccedilalho

5989

Arquivos - texto - CSVHaacute amplo suporte a leitura e gravaccedilatildeo de CSV sem precisar recorrer a procedimentos de baixo niacutevel

Podem ser diretamente importados em Excel Calc Origin Google Docs ou lido facilmente com bibliotecas padratildeo comuns Ex (IDL)

IDLgt c=read_csv(filesearch_scamcsvheader=h)IDLgt printhNAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS

IDLgt helpc Structure ltc8bca508gt 11 tags length=5256 data length=5248 refs=1 FIELD01 STRING Array[41] FIELD02 LONG Array[41] FIELD03 STRING Array[41] FIELD04 DOUBLE Array[41] FIELD05 DOUBLE Array[41] FIELD06 STRING Array[41] FIELD07 STRING Array[41] FIELD08 STRING Array[41] FIELD09 STRING Array[41] FIELD10 DOUBLE Array[41] FIELD11 LONG Array[41]

IDLgt printcfield01[03]dec18s0001 dec18s0002 dec18s0003 dec18s0004

IDLgt printcfield03[03]NIRSPEC-5-AO NIRSPEC-5-AO NIRSPEC-5-AO NIRSPEC-5-AO

6089

Arquivos - texto - CSVEx (IDL) Criaccedilatildeo de um CSV com uma tabela de valores

Criaccedilatildeo de 3 arrays 1D (12 elementos) um para cada coluna

IDLgt x=dindgen(3)IDLgt y=dindgen(4)IDLgt xx=reform(rebin(x34)12)IDLgt yy=reform(rebin(reform(y14)34)12)IDLgt f=xx+yy10IDLgt helpxxyyfXX DOUBLE = Array[12]YY DOUBLE = Array[12]F DOUBLE = Array[12]

Escrita do arquivo

IDLgt write_csvexamplecsvxxyyfheader=[XYX+10Y]

ResultadoXYX+10Y000000000000000000000000100000000000000010000000200000000000000020000000000000001000000010000000100000001000000011000000()

6189

Arquivos - texto - ldquoColunas regularesrdquoFixed column width

Natildeo eacute exatamente um padratildeo Eacute uma praacutetica comum

Armazena uma tabela (array 2D) de forma regular simples de ser interpretada e lida

Costumam ter linha(s) de cabeccedilalho descrevendo o conteuacutedo do arquivo em geral com uma linha para os nomes das colunas

As demais linhas conteacutem os dados sempre ocupando a mesma largura por coluna e escritos no mesmo formato em cada coluna

Costumam ser simples de ler inclusive interativamente (exs Excel Calc Origin read_ascii)

Ex (IDL) Uma simples tabela soacute de nuacutemeros

wavl CH4=33 wavl CH4=25 wavl CH4=10 wavl CH4=08 wavl CH4=05 wavl CH4=026 wavl CH4=02 477330000 0090130 477330000 0091110 477330000 0089250 477330000 0087000 477330000 0087140 477330000 0090080 477330000 0088110 480040000 0090930 480040000 0091930 480040000 0090160 480040000 0087930 480040000 0088110 480040000 0090950 480040000 0089090 482750000 0091710 482750000 0092730 482750000 0091060 482750000 0088850 482750000 0089080 482750000 0091810 482750000 0090060 485450000 0092530 485450000 0093570 485450000 0092000 485450000 0089810 485450000 0090100 485450000 0092730 485450000 0091090

IDLgt a=read_ascii(specs_27s_ntxtdata_start=1header=header)IDLgt printheader wavl CH4=33 wavl CH4=25 wavl CH4=10 wavl CH4=08 wavl CH4=05 wavl CH4=026 wavl CH4=02 IDLgt helpa Structure ltd423c9a8gt 1 tags length=224 data length=224 refs=1 FIELD01 FLOAT Array[14 4]

6289

Arquivos - texto - ldquoColunas regularesrdquoJaacute um arquivo um pouco mais difiacutecil de ler

NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS dec18s0001 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0002 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0003 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 FLAT 5408757812500 460000 5 dec18s0004 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 DARK 5408757812500 460000 5

Por ter colunas de tipos diferentes (strings inteiros reais) natildeo eacute possiacutevel o ler em um simples array Mas eacute faacutecil o colocar em uma estrutura de arrays onde cada campo eacute uma coluna

Especificando interativamente como interpretar as linhasIDLgt templ=ascii_template(filesearch_scamtxt)

Nome do campo (default mostrado)

Tipo do campo (identificado automaticamente)

Posiccedilatildeo (caracter) do comeccedilo (identificada automaticamente)

Linha de exemplo para verificar as colunas

6389

Arquivos - texto - ldquoColunas regularesrdquoDepois de feito o template o arquivo pode ser lido com apenas

IDLgt a=read_ascii(filesearch_scamtxttemplate=templ)IDLgt helpa Structure ltd4ec4608gt 11 tags length=416 data length=416 refs=1 FIELD01 STRING Array[4] FIELD02 LONG Array[4] FIELD03 STRING Array[4] FIELD04 FLOAT Array[4] FIELD05 FLOAT Array[4] FIELD06 STRING Array[4] FIELD07 STRING Array[4] FIELD08 STRING Array[4] FIELD09 FLOAT Array[4] FIELD10 FLOAT Array[4] FIELD11 LONG Array[4]IDLgt printafield01dec18s0001 dec18s0002 dec18s0003 dec18s0004IDLgt printafield04 626300 626300 626300 626300

O template (uma estrutura contendo dados sobre como ler o arquivo) pode ser usado para outros arquivos no mesmo formato No lugar de ter sido criado interativamente poderia ter sido lido de algum arquivo Poderia ter especificado nomes para os campos que seriam mais amigaacuteveis que coias como FIELD11

6489

Arquivos - texto - XML

Extensible Markup Language

Admite grande flexibilidade e por isso pode ter alta complexidade

Valores satildeo colocados dentro de uma estrutura em hieraacuterquica (em uma aacutervore) com os noacutes identificados pelos seus nomes (chaves)

Largamente usado em muitas aacutereas para armazenar conjuntos arbitraacuterios de quaisquer estruturas de dados

A maioria das aplicaccedilotildees usa um formato que eacute um subconjunto do XML especificado por um Schema comumente em um arquivo XML DTD (Document Type Definition)

6589

Arquivos - texto ndash XML ndash exemplos de usos

Armazenamento de dados de aplicaccedilotildees web (comum para exportar importar dados MediaWiki DokuWiki WordPress ADS Lattes etc)

Documentos Office (docx pptx xlsx) OpenOffice (odt opd ods)

Como versotildees de outros formatos FITSML XDF

ldquoScientific Dataset XML NASAs Astronomical Data Center (ADC) sponsors a number of research projects that

use XML for scientific data representation The XML activities at the ADC are sponsored and supported by the NASA Office of Space Science Applied Information Systems Research Program (AISRP)rdquo - httpxmlcoverpagesorgnasa-adchtml

Astronomical Instrument Markup Language (AIML)

SVG ndash Scalable Vector Graphics

Muitas de outras aplicaccedilotildees listadas em httpxmlcoverpagesorgxmlhtmlapplications

6689

Arquivos - texto ndash XML - exemploltxml version=10 gtltDOCTYPE Xdmf SYSTEM Xdmfdtd []gtltXdmf xmlnsxi=httpwwww3org2001XInclude Version=20gt ltDomaingt lt-- Example of Basic Topologies --gt ltInformation Name=Descriptiongt Example of a Polyvertex Topology ltInformationgt ltGrid Name=Polyvertex GridType=Uniformgt ltTopology TopologyType=Polyvertex Dimensions=3 NodesPerElement=3gt ltDataItem Format=XML Dimensions=3 3 NumberType=Floatgt 0 1 2 4 5 6 8 9 10 ltDataItemgt ltTopologygt ltGeometry Type=XYZgt ltDataItem Format=XML Dimensions=4 4 3gt 00 00 00 10 00 00()Que mostra que a interpretaccedilatildeo (parsing) de XML eacute em geral complexa

6789

Arquivos - texto - XML

Haacute muitas bibliotecas de alto niacutevel para fazer o processamento (parsing) e entregar os dados em uma estrutura conveniente

A complexidade em processar XML estaacute em decidir o que fazer com os dados jaacute que os arquivos podem ser muito complexos

As APIs (Application Programming Interfaces) mais comuns para processar XML que satildeo implementadas em muitas linguagens

DOM (Document Object Model) ndash manteacutem todo o conteuacutedo do em uma estrutura de dados (em geral uma aacutervore) em uma variaacutevel (em geral um objeto) Esta pode ser consultada para obter os valores de interesse para os alterar e usada para escrever um arquivo

SAX (Simple API for XML) ndash Interpretador (parser) por objetos O usuaacuterio escreve uma classe herdando da classe SAX provendo os meacutetodos que vatildeo processar os campos agrave medida em que estes satildeo lidos

6889

Arquivos - binaacuterios - FITSFlexible Image Transport System

O formato mais comum para observaccedilotildees astronocircmicas Tambeacutem usado para armazenar quaisquer dados mesmo natildeo relacionados a observaccedilotildees (especialmente tabelas como eacute praacutetica do STSCI)

Conteacutem um (ou mais) cabeccedilalho(s) de texto com metadados (informaccedilotildees sobre os dados como caracteriacutesticas (necessaacuterias para os ler) origem condiccedilotildees em que foram obtidos processamento realizado etc)

SIMPLE = T image conforms to FITS standard BITPIX = 32 bits per data value NAXIS = 2 number of axes NAXIS1 = 1024 NAXIS2 = 1024 BSCALE = 100000 Scaling factor BZERO = 000000 Scaling zero-point TELESCOP= Keck II Telescope SLITNAME= 0041x226 Slit Name SLITPA = 351979 Slit position angle SLITX = 131500 X pixel of the center of the slit LST = 12010446 local apparent sidereal time (()

Depois do cabeccedilalho haacute uma (ou mais) seccedilatildeo(otildees) de dados binaacuterios Costuma(m) ser array(s) 1D (espectros) 2D (imagens) ou 3D (ldquocubos de dadosrdquo)

De inteiros ou reais inteiros satildeo comuns em contagens de instrumentos reais para valores derivados (fluxos intensidades etc)

6989

Arquivos - binaacuterios - FITSNormalmente FITS satildeo lidos escritos por bibliotecas prontas de (relativamente) alto niacutevel usuaacuterio natildeo tem que saber como os dados satildeo armazenados no arquivo nem como os ler escrever Ex (IDL com a biblioteca idlastro)

IDLgt fits_info2dspectrumfits2dspectrumfits has 3 extensionsPrimary header 288 recordsNo dataExtension 1 -- SCI Header 144 records IMAGE ( 1201 1201 )Extension 2 -- ERR Header 72 records IMAGE ( 1201 1201 )Extension 3 -- DQ Header 72 records IMAGE ( 1201 1201 )

IDLgt mydata=readfits(2dspectrumfitsexten_no=1myheader) READFITS Reading FITS extension of type IMAGE READFITS Now reading 1201 by 1201 array

IDLgt extastmyheadermyastIDLgt sz=size(mydatadimensions)IDLgt xy2ad[1sz[0]][1sz[1]]myastcorners_acorners_dIDLgt printcorners_aCorners of the data array from file 2dspectrumfits are at 14487480 33063480

IDLgt printcorners_d -00041264444 00041402222

Obteacutem os dados de coordenadas (WCS) do header

Coloca os dados no array (2D de floats) mydata e o header no array (1D de strings) myheader

Calcula as coordenadas das quinas da imagem atraveacutes do WCS

Provecirc informaccedilotildees sobre o arquivo

7089

Arquivos - binaacuterios - ISIS Cube

Formatos como FITS se adequam muito a ter uma interface de mais alto niacutevel por objetos

Tambeacutem para dados em tabelas FITS muito mais trabalhosos de ler em baixo niacutevel que se adequam muito mais a mapas ou estruturas

Exemplo (de um formato semelhante a FITS ISIS cube)

O objeto ao ser criado lecirc todo o arquivo

cube=pp_editablecube(CM_1553510065_1_ircub)

Meacutetodos fornecem os dados desejados para obter quando necessaacuterio os dados de interesse

Find out the names of the backplanesprintcubegetproperty(backnames)Get the start time of the cubeprintcubegetfromheader(START_TIME)2007-084T100057286Z

Valores no cabeccedilalho podem ser convenientemente fornecidos como um mapa

header=cubeheader_as_hash()printheader[START_TIME]2007-084T100057286Z

7189

Arquivos - binaacuterios ndash ISIS Cube

Os dados satildeo fornecidos como arraysMake a contour plot of the latitudesc=contour(cubegetsuffixbyname(LATITUDE))Get the band with wavelength nearest to 21 (in the units used in the cube)selband=cubegetbandbywavelength(21wavelengths=selwavs)

Interfaces por overload tornam o acesso ainda mais conveniente

selband=cube[21]

selwavs=cube[21]

Retorna um array com a banda de comprimento de onda mais proacuteximo de 21 (microm)

Retorna o comprimento de onda mais proacuteximo de 21 (microm) da banda retornada acima

7289

Arquivos - binaacuterios ndash ISIS Cube Alteraccedilotildees feitas ao conteuacutedo satildeo automaticamente refletidas em todos os

lugares (cabeccedilalho em particular) afetados mantendo o objeto vaacutelido que pode depois ser gravado em um novo arquivo

IDLgt printcubelinescubesamplescubebands 64 64 256

IDLgt helpcubecoreltExpressiongt FLOAT = Array[64 64 256]

IDLgt cubecore=dblarr(100100256)

A linha acima natildeo eacute uma atribuiccedilatildeo eacute uma invocaccedilatildeo de meacutetodo Eacute equivalente acubesetpropertycore=dblarr(100100256)

Eacute o trabalho da funccedilatildeo setproperty decidir se a propriedade passada (core) faz sentido e se fizer fazer todo o trabalho necessaacuterio a esta mudanccedila Para o usuaacuterio eacute tudo automaacutetico e os dados da classe satildeo vaacutelidos o tempo todo

IDLgt helpcubecoreltExpressiongt DOUBLE = Array[100 100 256]

IDLgt printcubelinescubesamplescubebands 100 100 256

IDLgt cubesaveCM_1553510065_1_ir_editedcub

7389

Arquivos - binaacuterios ndash NetCDF e HDF5

Network Common Data Form e Hierarchical Data Format

Os dois uacutenicos formatos bem estabelecidos para dados cientiacuteficos geneacutericos

Armazenam dados como vaacuterias variaacuteveis e seus metadados Para cada variaacutevel haacute (ou pode haver) os metadados

Nome Dimensotildees (do array) Unidades Comentaacuterios

Ambos permitem arrays multidimensionais

Apenas HDF5 permite estruturas (daiacute vem a hierarquia)

Autodocumentados qualquer software que saiba ler um destes formatos lecirc qualquer arquivo sem precisar de conhecimento preacutevio sobre como o arquivo foi gerado

Muito bem suportados em bibliotecas padratildeo e natildeo padratildeo em softwares interativos e visualizadores (inclusive plugins para navegadores)

httpwwwunidataucaredusoftwarenetcdf httpenwikipediaorgwikiHdf5

NetCDF eacute mais simples de usar por natildeo ter hierarquia dando menos trabalho para ler e escrever dados Se hierarquia natildeo eacute necessaacuteria eacute mais conveniente de usar que HDF5

7489

Arquivos - binaacuterios - NetCDF e HDF5Haacute tambeacutem o formato CDL uma versatildeo ASCII do NetCDF A biblioteca padratildeo do NetCDF inclui conversores entre estes formatos

$ ncdump -h refspec_g01_0ncnetcdf refspec_g01_0 dimensions nlay = 51 nwn = 400 nleg = 33 numu = 2 nlev = 52 nphi = 3 ngas = 2 nwnc = 1 scal = 1 v3 = 3 dnl = 1 nk = 1 tdisr = UNLIMITED (0 currently) na = 16

variables float alb(nwn) float z(nlay) float t(nlay) float p(nlay) float wl(nwn) float iof(nwn) float mtau(nwn) float htau(nwn) float hctaus(nwn) float gtau(nwn) float outcos(scal) float phi(nleg) float phic(scal) float umu(numu) float flux(v3 nwn nlev) float mix(nlay ngas) float c(nlay) float psat(nlay) float ga(nwnc) float wlc(nwnc) float inc(scal) int dm(scal) int ord(scal) float fbeam(scal) float wn(nwn) float tautot(nwn nlay) float htaus(nwn nlay) float htaux(nwn nlay) float taug(nwn nlay) float phase(nwn nlay nleg) float ssa(nwn nlay) float uu(nwn nphi nlev numu) float u0u(nwn nlev numu) float tray(nwn nlay) float gtauo(tdisr nwn nlay)

Haacute 14 variaacuteveis usadas como dimensotildees para as 35 variaacuteveis que satildeo arrays

Ex alb(nwn) indica que alb eacute um array 1D de nwn elementos

nwn estaacute armazenado como uma das dimensotildees e eacute 400 portanto alb tem 400 elementos

Parte do conteuacutedo de um arquivo NetCDF em formato CDL (gerado pelo programa ncdump)

7589

Arquivos - binaacuterios - NetCDF e HDF5Conteuacutedo daquele arquivo visualizado com o ncview (acompanha a biblioteca NetCDF padratildeo)

7689

Arquivos - binaacuterios - NetCDF e HDF5O conteuacutedo de todo o arquivo pode ser lido facilmente com as bibliotecas disponiacuteveis e armazenado em contecirciners convenientes Usando um objeto que gera um resultado um pouco mais conveniente

IDLgt h=pp_readncdf(refspec_g01_0nchash)IDLgt printhvar_dims ltObjHeapVar229(HASH)gtvars ltObjHeapVar152(HASH)gtdims ltObjHeapVar118(HASH)gt

IDLgt printh[vars]T 173203 175459 175848 176001 175975 Z 431869 418858 406067 393403 380464 FLUX 300660 145536 0705180 0341669 0165532 PHASE 100000 0779034 0660858 0542052 0449983 TAUTOT0694377 0693420 0693474 0693540 0693636()

IDLgt help(h[vars])[TAUTOT]ltExpressiongt FLOAT = Array[51 400]

IDLgt print(h[var_dims])[TAUTOT]NLAY NWN

IDLgt print(h[dims])[(h[var_dims])[TAUTOT]]NLAY 51NWN 400

7789

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5)

Visualizaccedilatildeo da variaacutevel selecionada

Metadados e alguns valores da variaacutevel selecionada

Variaacutevel a ser criada com o conteuacutedo desta variaacutevel do arquivo

Hierarquia das variaacuteveis do arquivo

7889

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5) Imported variable az

IDLgt helpaz Structure ltd5723f38gt 13 tags length=448 data length=444 refs=1 _NAME STRING az _ICONTYPE STRING binary _TYPE STRING DATASET _FILE STRING INTENSI_test_409OUTh5 _PATH STRING _DATA DOUBLE Array[38] _NDIMENSIONS LONG 1 _DIMENSIONS ULONG64 Array[1] _NELEMENTS ULONG64 38 _DATATYPE STRING H5T_FLOAT _STORAGESIZE ULONG 8 _PRECISION LONG 64 _SIGN STRING

IDLgt printaz_data 00000000 10000000 20000000 30000000 40000000 50000000 60000000 80000000 ()

7989

Arquivos - binaacuterios - imagens

JPEG JPEG200 TIFF GeoTIFF etc

Os formatos comuns de imagens satildeo bem suportados em muacuteltiplas plataformas para uso dentro de programas e interativamente

Alguns formatos tecircm opccedilatildeo de compressatildeo com perda eou sem perda

Armazenam imagens como arrays 2D ou 3D (3D frequumlentemente limitado a 3 ou 4 em uma das dimensotildees uma imagem em 3 ou 4 bandas) de inteiros ou (em alguns formatos) reais

Alguns formatos permitem armazenar metadados para caracterizar as imagens armazenadas

JPEG2000 e GeoTIFF (um subconjunto de TIFF) comuns em astronomia e aacutereas proacuteximas

8089

Arquivos - binaacuterios ndash imagens ndash exemplo (IDL)IDLgt printquery_tiff(issmap_2009tiffinfogeotiff=geo) 1

IDLgt helpinfo Structure ltd4eca4b8gt 18 tags length=144 data length=132 refs=1 CHANNELS LONG 4 DIMENSIONS LONG Array[2] IMAGE_INDEX LONG 0 NUM_IMAGES LONG 1 PIXEL_TYPE INT 1 TYPE STRING TIFF BITS_PER_SAMPLE LONG 8 POSITION FLOAT Array[2] RESOLUTION FLOAT Array[2] UNITS LONG 2 TILE_SIZE LONG Array[2] DESCRIPTION STRING ISS (2009) DATE_TIME STRING 20100218 012436()

IDLgt helpgeo Structure ltd4efa1b8gt 10 tags length=264 data length=262 refs=1 MODELPIXELSCALETAG DOUBLE Array[3] MODELTIEPOINTTAG DOUBLE Array[6 4] GEOGRAPHICTYPEGEOKEY INT 4035 GEOGSEMIMAJORAXISGEOKEY DOUBLE 25750000 GEOGSEMIMINORAXISGEOKEY DOUBLE 25750000()

IDLgt myimage=read_tiff(issmap_2009tiff) Lecirc a imagem para o array myimage

Obteacutem informaccedilotildees sobre o arquivo

8189

Arquivos - binaacuterios ndash formatos nativosLinguagens como IDL R Python Java tecircm seu formato nativo binaacuterio acessado em alto niacutevel Basta mandar salvar ler variaacuteveis no do arquivo a biblioteca padratildeo automagicamente faz todo o trabalho de decidir como gravar ler os dados

Conveniente de usar na proacutepria linguagem Mas raramente existem bibliotecas para ler gravar o formato nativo de uma linguagem a partir de outra Ex (IDL)

IDLgt savefile=2dspectrumsavmydatamyheadercorners_dcorners_averbosecompress SAVE Portable (XDR) compressed SAVERESTORE file SAVE Saved variable MYDATA SAVE Saved variable MYHEADER()

Pode ser lido com apenas (haacute formas mais elaboradas)

IDLgt restore2dspectrumsavverbose RESTORE Portable (XDR) compressed SAVERESTORE file RESTORE Save file written by ltunknowngtltunknowngt Thu Jan 27 191422 2011 RESTORE IDL version 801 (linux x86_64) RESTORE Restored variable MYDATA RESTORE Restored variable MYHEADER()

IDLgt helpmydatamyheadercorners_dcorners_aMYDATA FLOAT = Array[1201 1201]MYHEADER STRING = Array[144]()

8289

Arquivos - processamento em baixo niacutevel

Nem sempre um formato padratildeo eacute a melhor escolha para o problema

Nem sempre haacute escolha (pode-se ter que trabalhar com arquivos que jaacute foram escritos em algum formato proprietaacuterio)

Agraves vezes o formato eacute padratildeo mas natildeo haacute bom suporte a ele disponiacutevel

Em todos estes casos eacute necessaacuterio escrever rotinas em baixo niacutevel que vatildeo ler processar diretamente o conteuacutedo do arquivo

Preferencialmente criando interfaces de alto niacutevel para o programa que vai as usar

8389

Arquivos - processamento em baixo niacutevel - texto

Tomando o exemplo anterior onde as colunas eram de diferentes tipos

NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS dec18s0001 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0002 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0003 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 FLAT 5408757812500 460000 5 dec18s0004 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 DARK 5408757812500 460000 5

A forma mais simples de o ler diretamente eacute definir uma estrutura para receber cada linha e um array destas estruturas para receber todo o arquivo Ex (IDL)

IDLgt record=namecalmpos0filnameechlpos0d0disppos0d0targnameposdirclassmjd_obsitime0d0coadds0IDLgt nlines=file_lines(filesearch_scamtxt)IDLgt mydata=replicate(recordnlines-1)IDLgt header=

Depois de definidas as variaacuteveis que vatildeo receber os dados o arquivo pode ser lido

IDLgt openrunitfilesearch_scamtxtget_lunIDLgt readfunitheaderIDLgt readfunitmydataformat=(A14I8A15F104F104A18A19A15F158F105I15)IDLgt free_lununit

A gravaccedilatildeo de um arquivo texto poderia ser feita de forma semelhante apenas trocando openr por openw (abrir o arquivo para gravaccedilatildeo natildeo leitura) e readf por printf

O arquivo eacute aberto em uma unidade (unit) usada para especificar de onde eacute feita a leitura

Ao final o arquivo eacute fechado

8489

Arquivos - processamento em baixo niacutevel - texto

O que resulta em

IDLgt printheader NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS

IDLgt helpmydataMYDATA STRUCT = -gt ltAnonymousgt Array[4]

IDLgt helpmydata[0] Structure ltd5e38f68gt 11 tags length=136 data length=124 refs=3 NAME STRING dec18s0001 CALMPOS INT 0 FILNAME STRING NIRSPEC-5-AO ECHLPOS DOUBLE 62630000 DISPPOS DOUBLE 36450000 TARGNAME STRING HD85258 POSDIR STRING NIRSPEC-5-AOp1 CLASS STRING STAR MJD_OBS STRING 54087574 ITIME DOUBLE 10000000 COADDS INT 1

Este caso eacute mais complicado que os mais comuns por haver colunas de strings

Se todas fossem de nuacutemeros natildeo teria sido necessaacuterio especificar o formato explicitamente As colunas teriam sido adivinhadas pela biblioteca que lecirc o arquivo Poderia ter sido lido escrito soacute com um array de nuacutemeros sem estruturas

8589

Arquivos - processamento em baixo niacutevel - binaacuterio

Formatos binaacuterios podem ser definidos de qualquer forma O arquivo eacute apenas um conjunto de bytes Cabe ao software saber como os interpretar

Uma escolha comum para que sejam autodocumentados eacute incluir um cabeccedilalho de texto informando as caracteriacutesticas dos dados necessaacuterias para os ler

Ex (IDL) criar um arquivo que armazene um array de doubles com um cabeccedilalho informando as dimensotildees para que o programa que o lecirc saiba como ler os dados

Inventa dados e abre o arquivo

IDLgt data_to_write=dindgen(34)IDLgt openwunitbinary_exampledatget_lun

Escreve as dimensotildees como texto

IDLgt printfunitdimensions of the double array stored belowIDLgt printfunitsize(data_to_writedimensions)

Escreve os dados binaacuterios

IDLgt writeuunitdata_to_write

Fecha o arquivo

IDLgt free_lununit

Escreve em binaacuterio (write unformatted)

8689

Arquivos - processamento em baixo niacutevel - binaacuterio

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

dimensions of the double array stored below 3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

8789

Arquivos - processamento em baixo niacutevel - binaacuterioA leitura deste arquivo eacute igualmente simples

IDLgt header=IDLgt dims=[00]IDLgt openrunitbinary_exampledatget_lun

Lecirc as dimensotildees (armazenadas como texto)

IDLgt readfunitheaderIDLgt readfunitdims

Lecirc a parte binaacuteria depois de saber as dimensotildees

IDLgt data_read=dblarr(dims)IDLgt readuunitdata_read

Fecha o arquivo

IDLgt free_lununit

Verifica que os dados foram gravados e lidos corretamente

IDLgt printarray_equal(data_to_writedata_read) 1

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Lecirc dados binaacuterios (read unformatted)

8889

Sumaacuterio

5 ndash Slides em httpwwwppenteadonetpeapea04_strings_iopdf Strings Expressotildees regulares Arquivos

httpwwwppenteadonetpea

8989

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89

Expressotildees regulares - uso

Em casos como este tipicamente o resultado de stregex seria usado como filtro para selecionar apenas os elementos do array de strings que satisfazem agravequela expressatildeo regular

IDLgt w=where(stregex(files+irgcubboolean)null)IDLgt printfiles[w]format=(A)CM_1477476864_1_irgcubCM_1477477826_1_irgcub

Ex (IDL) Determinar que strings conteacutem uma data no formato yyyy-mm-dd

IDLgt strs=[201002012010-02-012010-2-1aaaa-mm-ddT2010-02-01J]IDLgt printstregex(strs[0-9]4-[0-9]2-[0-9]2boolean) 0 1 0 0 1

Esta expressatildeo regular especifica quatro repeticcedilotildees (4) de diacutegitos (caracteres na faixa [0-9]) seguido de um (-) seguido de duas repeticcedilotildees (2) de dois diacutegitos ([0-9]) seguido de um (-) seguido de duas repeticcedilotildees (2) de dois diacutegitos ([0-9])

Uma expressatildeo regular apenas um pouco mais elaborada poderia corresponder aos 3 formatos de data no array acima E poderia se impedir que a uacuteltima (com outros caracteres antes e depois da data) seja aceita

4189

Expressotildees regulares - regras - caracteres ldquonormaisrdquo

Uma expressatildeo regular usa caracteres ldquonormaisrdquo e especiais para especificar o que se vai procurar na ordem em que aparecem na expressatildeo

Se um caractere eacute normal (natildeo eacute um dos especiais mostrados adiante) ele especifica uma ocorrecircncia daquele caractere

Ex J eacute uma expressatildeo regular que corresponde a qualquer string onde ocorra J Jaacute JA soacute corresponde a strings que tenham JA dentro

Exs (IDL)

IDLgt strs=[JJJJJJaJAjaJa]

IDLgt printstregex(strsJboolean) 1 1 1 0 1

IDLgt printstregex(strsJAboolean) 0 0 1 0 0

4289

Expressotildees regulares - regras - caracteres especiaisCaracteres especiais tecircm outros significados Para significar literalmente aquele caractere deve ser escapado (escaped) com um

Siacutembolo significado exemplo Corresponde(m) Escape o caractere seguinte deve ser interpretado

literalmente natildeo como especial aa

Qualquer caractere ab ajb aab abb jafbc

+ Uma ou mais repeticcedilotildees do que vem agrave esquerda a+b ab aab bab baabh

() Subexpressatildeo para agrupar termos afetados por um caractere especial (como parecircnteses em notaccedilatildeo matemaacutetica)

(ab)+c abc ababc dabababcg

Zero ou mais repeticcedilotildees dos termos agrave esquerda ab abbaab caaabg

Zero ou uma repeticcedilatildeo dos termos agrave esquerda ab b ab cabd cbd

| Alternaccedilatildeo qualquer um dos dois agrave esquerda a|bc ac bc jacd jbcd

n Exatamente n repeticcedilotildees do termo agrave esquerda a2b aab daaabg

n1n2 De n1 a n2 repeticcedilotildees do termo agrave esquerda a12b ab aab aaab gaaabbd

^ Acircncora (no comeccedilo) nada agrave esquerda ^ab ab abb

$ Acircncora (no fim) nada agrave direita ab$ abaab

[] Conjunto de valores (explicado adiante)

4389

Expressotildees regulares - regras - conjuntos de valores

[] denota um conjunto de valores que pode conter

Uma lista de coisas que devem corresponder Ex [abc] signfica qualquer caractere no conjunto abc Correspondem a esta

expressatildeo abcabha

Uma lista de coisas que natildeo podem corresponder [^abc] significa qualquer coisa que natildeo seja a b ou c Correspondem a esta

expressatildeo d jgs gg

Faixas de valores [0-9] signfica qualquer diacutegito [0-9a-zA-Z] significa qualquer diacutegito ou letra

Classes de valores como algumas faixas e outros conjuntos ocorrem com muita frequumlecircncia haacute nomes

especiais para eles Estes (em IDL) vecircm entre [] ex [[digit] significa o mesmo que [0-9]

4489

Expressotildees regulares - regras - classes de valores

Classe signficado

alnum Caracteres alfanumeacutericos 0-9a-zA-Z

alpha Caracteres alfabeacuteticos a-zA-Z

cntrl Caracteres de controle ASCII (natildeo visiacuteveis coacutedigos 1 a 31 e 127)

digit Diacutegitos (decimais) 0-9

graph Caracteres visiacuteveis ASCII 33 a 126 (natildeo inclui o espaccedilo)

lower Letras minuacutesculas a-z

print Caracteres ldquoimprimiacuteveisrdquo (visiacuteveis e o espaccedilo) ASCII 32 a 126

punct Caracteres de pontuaccedilatildeo $amprsquo()+-lt=gt[]^_lsquo|~

space Os caracteres ldquoem brancordquo (blank) espaccedilo tab tab vertical CR LF (ASCII 32 e 9-13)

upper Letras maiuacutesculas A-Z

xdigit Diacutegitos hexadecimais 0-9A-Fa-f

lt Comeccedilo de palavra (palavra definida como sequumlecircncia de coisas natildeo space)

gt Fim de palavra (palavra definida como sequumlecircncia de coisas natildeo space)

Estas satildeo apenas as principais Algumas implementaccedilotildees tecircm muito mais (em particular nas linguagens que usam Unicode nativamente)

4589

Expressotildees regulares - exemplos

Determinar se strings satildeo nuacutemeros (Ex IDL)

IDLgt str=[9-18 875-812-45913E9-98d7a188d032f5]

Inteiros

IDLgt intexpr=^[-+][0-9]+$

IDLgt printstregex(strintexprboolean) 1 1 0 0 0 0 0 0 0 0

Ponto flutuante

IDLgt fpexpr=^[-+](([0-9][0-9]+)|([0-9]+[0-9]))([eEdD][-+][0-9]+)$

IDLgt printstregex(strfpexprboolean) 1 1 0 1 1 1 1 1 0 0

Sinal opcional

1 ou mais diacutegitos

Sinal opcional

0 ou mais diacutegitos opcionalmente seguidos de um ponto e 1 ou mais diacutegitos

1 ou mais diacutegitos opcionalmente seguidos de um ponto e 0 ou mais diacutegitos

ou Expoente opcional letra do expoente seguida de sinal opcional seguido de um ou mais diacutegitos

4689

Expressotildees regulares ndash extraccedilatildeo

Interpretadores de expressotildees regulares costumam oferecer mais que apenas testar se um string corresponde a uma expressatildeo

Em geral tambeacutem podem retornar que parte(s) do string corresponde(m) agrave expressatildeo

Ex (IDL) Determinar se um string conteacutem uma data incluindo os formatos

IDLgt dates=[2011-01-312011 1 3120110131something done on y2011m1d31 with something]

E extrair a data de dentro do string

IDLgt expr=[0-9]4[0-9]12[0-9]12

(4 diacutegitos)(qualquer separador)(1 a 2 diacutegitos)(qualquer separador)(1 a 2 diacutegitos)

IDLgt printstregex(datesexprextract)format=(A)2011-01-312011 1 31201101312011m1d31

Como agora separar ano mecircs e dia Com uma busca e uma extraccedilatildeo para cada Poderia ser mais eacute mais faacutecil com uma uacutenica expressatildeo regular

4789

Expressotildees regulares - aleacutem de apenas testes

Tambeacutem podem retornar que parte(s) do string correspondem agrave expressatildeo toda e agraves suas subexpressotildees (partes da expressatildeo delimitadas por parecircnteses)

Ex (IDL) Separar pedaccedilos de datas Neste caso para a expressatildeo ficar menor assumindo um formato simples (yyyy-mm-ddThhmmssfff) Mas poderia ser um formato mais livre como no exemplo anterior

IDLgt str=Stuff observed on 2011-01-31T123924983 with some instrumentIDLgt expr=([0-9]4)-([0-9]2)-([0-9]2)T([0-9]2)([0-9]2)([0-9]2[0-9]3)

(quatro diacutegitos)-(2 diacutegitos)-(2 diacutegitos)T(2 diacutegitos)(2 diacutegitos)(2 diacutegitos3 diacutegitos)

IDLgt pieces=stregex(strexprextractsubexpr)IDLgt printpiecesformat=(A)2011-01-31T12392498320110131123924983IDLgt d=julday(pieces[2]pieces[3]pieces[1]pieces[4]pieces[5]pieces[6])IDLgt printdformat=(F166) 2455593027372

Expressatildeo inteiraPrimeira subexpressatildeoSegunda subexpressatildeoTerceira subexpressatildeoQuarta subexpressatildeoQuinta subexpressatildeoSexta subexpressatildeo

4889

Expressotildees regulares - referecircncias httpxkcdcom208

Viacutedeos do Software Carpentry

httpsoftware-carpentryorg4_0regexp

4989

Arquivos

Quase todo programa precisa armazenar dados em arquivos

Podem ser pequenos arquivos de paracircmetros ou enormes arquivos de dados produzidos ou a processar

Apesar do sugerido pela praacutetica comum arquivos texto natildeo satildeo sempre a melhor escolha para armazenar dados - e haacute muitas formas diferentes de os usar

Qual eacute a melhor escolha

Assim como para linguagens ou contecirciners natildeo existe ldquoo melhor formatordquo Cada um tem suas vantagens e desvantagens

Dados diferentes (mesmo se usados pelos mesmos programas) em geral se adequam melhor a formatos diferentes

5089

Arquivos - texto X binaacuterios

Em qualquer formato arquivos satildeo armazenados como diacutegitos binaacuterios

Mas haacute duas formas principais como eles podem ser codificados

Arquivos baseados em texto (text files)

Dados satildeo transformados em caracteres usando alguma formataccedilatildeo (mesmo se impliacutecita) e escritos com alguma codificaccedilatildeo de texto (comumente mas natildeo necessariamente ASCII)

Um arquivo texto eacute um ou mais strings As mesmas conversotildees tecircm que ser feitas depara outros tipos

Arquivos ldquobinaacuteriosrdquo (binary files)

Embora todo arquivo seja binaacuterio este nome costuma ser usado soacute para aqueles em que os dados natildeo estatildeo na forma de texto

Com frequumlecircncia (nem sempre) os dados satildeo gravados de forma idecircntica a como satildeo armazenados na memoacuteria

Muitos formatos usam uma mistura de partes em texto e partes binaacuterias

Um cabeccedilalho (header) de texto que daacute informaccedilotildees (metadados) sobre os dados armazenados na parte binaacuteria que vem depois

O cabeccedilalho conteacutem em especial informaccedilotildees sobre como ler os dados binaacuterios

5189

Arquivos - texto X binaacuterios

Vantagens de arquivos texto

Legiacuteveis por pessoas (human readable)

Podem ser auto-suficientes todo o necessaacuterio para os ler e entender o que conteacutem pode ser obtido olhando o arquivo

Satildeo os menos especiacuteficos a linguagens software normalmente satildeo escritos em ASCII ou Unicode e sempre haacute algum suporte a ler escrever texto em linguagens software

Haacute alguns formatos padratildeo para texto (exs CSV XML) que satildeo suportados em muitas plataformas diferentes

5289

Arquivos - texto X binaacuterios

Vantagens de arquivos binaacuterios

Em geral natildeo haacute conversotildees entre o os dados como armazenados na memoacuteria O que torna o armazenamento mais eficiente e sem alteraccedilotildees nos valores

A maior parte dos formatos padronizados eacute binaacuteria Exs FITS cube CDF NetCDF HDF HDF5 JPEG JPEG2000 TIFF GeoTIFF MPEG etc

Eacute mais comum que haja bibliotecas prontas (ateacute de alto niacutevel) para consulta leitura e gravaccedilatildeo

Os formatos melhor desenhados satildeo autodocumentados (em texto ou binaacuterio) para os ler natildeo eacute necessaacuterio conhecimento preacutevio sobre como os dados foram armazenados

Toda linguagem plataforma costuma ter seu formato binaacuterio mais nativo que costuma ser o mais faacutecil para leitura gravaccedilatildeo Em particular nas de alto niacutevel que tecircm formatos autodocumentados (especialmente

em IDL R Python Java)

Muitos formatos tecircm opccedilatildeo de compressatildeo dos dados

5389

Arquivos - proprietaacuterios X padratildeo

Independente da escolha texto binaacuterio programas devem escolher entre usar um formato proacuteprio ou um formato padronizado

A principal vantagem de formatos proacuteprios eacute que satildeo definidos da forma mais conveniente para a aplicaccedilatildeo que os usa simplificando leitura e gravaccedilatildeo e potencialmente otimizando recursos (acesso ao disco tamanho do arquivo etc)

A principal desvantagem de formatos proacuteprios eacute ser necessaacuterio escrever todo o coacutedigo para os ler gravar

Pode dar mais trabalho que usar um formato geneacuterico que natildeo seja exatamente o que melhor se encaixa na aplicaccedilatildeo

O coacutedigo para processar o formato em geral vai ser menos completo e conveniente de usar que o de um formato bem estabelecido usado por muitos outros em muitos ambientes

Cada novo software que for usar estes arquivos vai precisar compartilhar do mesmo coacutedigo ou precisar de coacutedigo novo (em particular se em outra linguagem) para ler gravar naquele formato

Eacute necessaacuterio documentar o formato e decidir sobre como ele seraacute definido

Se outros jaacute colocaram muito trabalho desenvolvendo bons formatos padratildeo bem suportados em muitos ambientes por que ter o trabalho de reinventar (e reprogramar redocumentar e retestar) a roda

5489

Arquivos - padrotildees comuns em astronomia (exs adiante)

Texto

CSV Comma-separated values - bem suportado por muitos softwares

ldquoColunas fixasrdquo Natildeo eacute um padratildeo bem definido mas eacute praacutetica comum para tabelas (2D)

XML Extensible Markup Language - O padratildeo texto mais flexiacutevel de grande uso em programaccedilatildeo geral para armazenar qualquer coisa com frequumlecircncia de forma hieraacuterquica Bem suportado por linguagens modernas (e modernizadas) e bibliotecas das principais

linguagens gerais Alta complexidade o torna trabalhoso de usar

5589

Arquivos - padrotildees comuns em astronomia (exs adiante)Binaacuterios

FITS Flexible Image Transport System - o mais comum para observaccedilotildees astronocircmicas Conteacutem os dados (em geral arrays 1D 2D ou 3D) e documentaccedilatildeo (nos cabeccedilalhos) sobre a origem e caracteriacutesticas dos dados Tambeacutem usado para armazenar tabelas de dados quaisquer mesmo que natildeo sejam observaccedilotildees (especialmente pelo STSCI) Variam muito em qualidade de documentaccedilatildeo

NetCDF Network Common Data Form - evoluccedilatildeo do CDF autodocumentado eacute comum e bem suportado para vaacuterios arrays de dados

HDF5 Hierarchical Data Format ndash autodocumentado comum e bem suportado permitindo aleacutem de simples arrays estruturas (eacute um formato hieraacuterquico)

Formatos de imagens JPEG JPEG2000 TIFF GeoTIFF etc - voltados para arrays 2D3D de inteiros ou (em alguns casos) reais com ou sem compressatildeo JPEG2000 tem caracteriacutesticas mais avanccediladas como imagens multiresoluccedilatildeo

Formatos vetoriais PS EPS DXF SHP SVG - variados niacuteveis de suporte a armazenamento de vetores e formas em 2D ou 3D

ISIS Cube semelhante em caracteriacutesticas ao FITS mais usado em sensoriamento remoto geociecircncias e ciecircncias planetaacuterias em geral para observaccedilotildees 1D 2D ou 3D

Formatos nativos de linguagens todo o trabalho de leitura e gravaccedilatildeo eacute feito automagicamente pela biblioteca padratildeo em IDL R Python Java

5689

Arquivos texto - newlines

Apesar do que possa parecer arquivos texto natildeo tecircm intrinsecamente vaacuterias linhas Arquivos texto satildeo soacute uma sequumlecircncia 1D de caracteres em alguma codificaccedilatildeo Separaccedilatildeo em linhas (equivalente a interpretar o arquivo como 2D em linhas e colunas) eacute

especificada por convenccedilotildees Natildeo haacute apenas uma convenccedilatildeo para o fim de linhas

A mais primitiva convenccedilatildeo eacute separaccedilatildeo nenhuma estipula-se que linhas tenham um nuacutemero fixo N de caracteres e cabe ao software que lecirc o arquivo entender que uma linha nova ocorre regularmente a cada N caracteres

Eacute a forma menos portaacutevel e mais inconveniente eacute necessaacuterio o conhecimento preacutevio (ou por inspeccedilatildeo do arquivo) de quantos caracteres haacute por linha

A maior parte dos editores de texto natildeo vai saber separar linhas desta forma (por falta deste conhecimento preacutevio) Exemplo (de um FITS real)

SIMPLE = T Fits standard BITPIX = 16 Bits per pixel NAXIS = 0 Number of axes EXTEND = T File may contain extensions

O que com as linhas quebradas nos lugares certos seria

SIMPLE = T Fits standard BITPIX = 16 Bits per pixel NAXIS = 0 Number of axes EXTEND = T File may contain extensions

5789

Arquivos texto - newlines

A forma mais comum de especificar linhas eacute com um marcador do final de linha (newline)

Eacute um caractere especial natildeo normalmente presente no texto que serve para marcar fim de linhas

Mas natildeo haacute soacute um padratildeo de newline Os mais comuns

LF (Line Feed ASCII 10) ndash Unix Linux Mac OS X

CR - (Carriage Return ASCII 13) - Mac OS lt10

CR+LF (CR seguido de LF) - Windows DOS

Eacute o motivo de o Notepad (Windows) natildeo entender as quebras de linha de arquivos escritos com o formato nativo de Linux o arquivo soacute tem LF enquanto o editor espera CR+LF

Alguns sistemas (strings em vaacuterias linguagens por exemplo) usam o coacutedigo de escape n para indicar newline que eacute codificado de acordo com o padratildeo sendo usado

Em geral bibliotecas de leitura e gravaccedilatildeo de arquivos usam (default pelo menos) o newline nativo do sistema em que satildeo usadas

Programas de conversatildeo entre os sistemas satildeo comuns (ex dos2unix)

O Wordpad identifica se for usado soacute LF e quebra as linhas de acordo

5889

Arquivos - texto - CSV

Comma-separated values

O formato mais padronizado para tabelas (arrays 2D) em texto (frequentemente mas natildeo necessariamente ASCII)

Bem suportado por bibliotecas padratildeo de linguagens e outros softwares (Excel Calc Origin Google Docs etc)

Conteacutem Linhas de cabeccedilalho (opcionais mas recomendadas) linhas com qualquer texto geral

descrevendo o arquivo e em geral uma linha de tiacutetulo para as colunas da tabela Uma (apenas uma) tabela onde todas as linhas tecircm o mesmo nuacutemero de colunas

Colunas separadas por viacutergulas (opcionalmente pode ser outro separador) Linhas terminadas por newline (qualquer que seja) Strings delimitados por ldquo ldquo

Ex

NAMECALMPOSFILNAMEECHLPOSDISPPOSTARGNAMEPOSDIRCLASSMJD-OBSITIMECOADDSdec18s00010NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001dec18s00020NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001dec18s00120NIRSPEC-5-AO635800364500itan140NIRSPEC-5-AOp2 TITAN5408763000001dec18s00140NIRSPEC-5-AO626300364500itan140NIRSPEC-5-AOp1 TITAN5408763000001dec18s00151NIRSPEC-5-AO626300364500itan140NIRSPEC-5-AOp1ARC5408764000001dec18s00160NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001

Natildeo eacute necessaacuterio que as colunas tenham largura constante

Cabeccedilalho

5989

Arquivos - texto - CSVHaacute amplo suporte a leitura e gravaccedilatildeo de CSV sem precisar recorrer a procedimentos de baixo niacutevel

Podem ser diretamente importados em Excel Calc Origin Google Docs ou lido facilmente com bibliotecas padratildeo comuns Ex (IDL)

IDLgt c=read_csv(filesearch_scamcsvheader=h)IDLgt printhNAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS

IDLgt helpc Structure ltc8bca508gt 11 tags length=5256 data length=5248 refs=1 FIELD01 STRING Array[41] FIELD02 LONG Array[41] FIELD03 STRING Array[41] FIELD04 DOUBLE Array[41] FIELD05 DOUBLE Array[41] FIELD06 STRING Array[41] FIELD07 STRING Array[41] FIELD08 STRING Array[41] FIELD09 STRING Array[41] FIELD10 DOUBLE Array[41] FIELD11 LONG Array[41]

IDLgt printcfield01[03]dec18s0001 dec18s0002 dec18s0003 dec18s0004

IDLgt printcfield03[03]NIRSPEC-5-AO NIRSPEC-5-AO NIRSPEC-5-AO NIRSPEC-5-AO

6089

Arquivos - texto - CSVEx (IDL) Criaccedilatildeo de um CSV com uma tabela de valores

Criaccedilatildeo de 3 arrays 1D (12 elementos) um para cada coluna

IDLgt x=dindgen(3)IDLgt y=dindgen(4)IDLgt xx=reform(rebin(x34)12)IDLgt yy=reform(rebin(reform(y14)34)12)IDLgt f=xx+yy10IDLgt helpxxyyfXX DOUBLE = Array[12]YY DOUBLE = Array[12]F DOUBLE = Array[12]

Escrita do arquivo

IDLgt write_csvexamplecsvxxyyfheader=[XYX+10Y]

ResultadoXYX+10Y000000000000000000000000100000000000000010000000200000000000000020000000000000001000000010000000100000001000000011000000()

6189

Arquivos - texto - ldquoColunas regularesrdquoFixed column width

Natildeo eacute exatamente um padratildeo Eacute uma praacutetica comum

Armazena uma tabela (array 2D) de forma regular simples de ser interpretada e lida

Costumam ter linha(s) de cabeccedilalho descrevendo o conteuacutedo do arquivo em geral com uma linha para os nomes das colunas

As demais linhas conteacutem os dados sempre ocupando a mesma largura por coluna e escritos no mesmo formato em cada coluna

Costumam ser simples de ler inclusive interativamente (exs Excel Calc Origin read_ascii)

Ex (IDL) Uma simples tabela soacute de nuacutemeros

wavl CH4=33 wavl CH4=25 wavl CH4=10 wavl CH4=08 wavl CH4=05 wavl CH4=026 wavl CH4=02 477330000 0090130 477330000 0091110 477330000 0089250 477330000 0087000 477330000 0087140 477330000 0090080 477330000 0088110 480040000 0090930 480040000 0091930 480040000 0090160 480040000 0087930 480040000 0088110 480040000 0090950 480040000 0089090 482750000 0091710 482750000 0092730 482750000 0091060 482750000 0088850 482750000 0089080 482750000 0091810 482750000 0090060 485450000 0092530 485450000 0093570 485450000 0092000 485450000 0089810 485450000 0090100 485450000 0092730 485450000 0091090

IDLgt a=read_ascii(specs_27s_ntxtdata_start=1header=header)IDLgt printheader wavl CH4=33 wavl CH4=25 wavl CH4=10 wavl CH4=08 wavl CH4=05 wavl CH4=026 wavl CH4=02 IDLgt helpa Structure ltd423c9a8gt 1 tags length=224 data length=224 refs=1 FIELD01 FLOAT Array[14 4]

6289

Arquivos - texto - ldquoColunas regularesrdquoJaacute um arquivo um pouco mais difiacutecil de ler

NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS dec18s0001 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0002 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0003 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 FLAT 5408757812500 460000 5 dec18s0004 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 DARK 5408757812500 460000 5

Por ter colunas de tipos diferentes (strings inteiros reais) natildeo eacute possiacutevel o ler em um simples array Mas eacute faacutecil o colocar em uma estrutura de arrays onde cada campo eacute uma coluna

Especificando interativamente como interpretar as linhasIDLgt templ=ascii_template(filesearch_scamtxt)

Nome do campo (default mostrado)

Tipo do campo (identificado automaticamente)

Posiccedilatildeo (caracter) do comeccedilo (identificada automaticamente)

Linha de exemplo para verificar as colunas

6389

Arquivos - texto - ldquoColunas regularesrdquoDepois de feito o template o arquivo pode ser lido com apenas

IDLgt a=read_ascii(filesearch_scamtxttemplate=templ)IDLgt helpa Structure ltd4ec4608gt 11 tags length=416 data length=416 refs=1 FIELD01 STRING Array[4] FIELD02 LONG Array[4] FIELD03 STRING Array[4] FIELD04 FLOAT Array[4] FIELD05 FLOAT Array[4] FIELD06 STRING Array[4] FIELD07 STRING Array[4] FIELD08 STRING Array[4] FIELD09 FLOAT Array[4] FIELD10 FLOAT Array[4] FIELD11 LONG Array[4]IDLgt printafield01dec18s0001 dec18s0002 dec18s0003 dec18s0004IDLgt printafield04 626300 626300 626300 626300

O template (uma estrutura contendo dados sobre como ler o arquivo) pode ser usado para outros arquivos no mesmo formato No lugar de ter sido criado interativamente poderia ter sido lido de algum arquivo Poderia ter especificado nomes para os campos que seriam mais amigaacuteveis que coias como FIELD11

6489

Arquivos - texto - XML

Extensible Markup Language

Admite grande flexibilidade e por isso pode ter alta complexidade

Valores satildeo colocados dentro de uma estrutura em hieraacuterquica (em uma aacutervore) com os noacutes identificados pelos seus nomes (chaves)

Largamente usado em muitas aacutereas para armazenar conjuntos arbitraacuterios de quaisquer estruturas de dados

A maioria das aplicaccedilotildees usa um formato que eacute um subconjunto do XML especificado por um Schema comumente em um arquivo XML DTD (Document Type Definition)

6589

Arquivos - texto ndash XML ndash exemplos de usos

Armazenamento de dados de aplicaccedilotildees web (comum para exportar importar dados MediaWiki DokuWiki WordPress ADS Lattes etc)

Documentos Office (docx pptx xlsx) OpenOffice (odt opd ods)

Como versotildees de outros formatos FITSML XDF

ldquoScientific Dataset XML NASAs Astronomical Data Center (ADC) sponsors a number of research projects that

use XML for scientific data representation The XML activities at the ADC are sponsored and supported by the NASA Office of Space Science Applied Information Systems Research Program (AISRP)rdquo - httpxmlcoverpagesorgnasa-adchtml

Astronomical Instrument Markup Language (AIML)

SVG ndash Scalable Vector Graphics

Muitas de outras aplicaccedilotildees listadas em httpxmlcoverpagesorgxmlhtmlapplications

6689

Arquivos - texto ndash XML - exemploltxml version=10 gtltDOCTYPE Xdmf SYSTEM Xdmfdtd []gtltXdmf xmlnsxi=httpwwww3org2001XInclude Version=20gt ltDomaingt lt-- Example of Basic Topologies --gt ltInformation Name=Descriptiongt Example of a Polyvertex Topology ltInformationgt ltGrid Name=Polyvertex GridType=Uniformgt ltTopology TopologyType=Polyvertex Dimensions=3 NodesPerElement=3gt ltDataItem Format=XML Dimensions=3 3 NumberType=Floatgt 0 1 2 4 5 6 8 9 10 ltDataItemgt ltTopologygt ltGeometry Type=XYZgt ltDataItem Format=XML Dimensions=4 4 3gt 00 00 00 10 00 00()Que mostra que a interpretaccedilatildeo (parsing) de XML eacute em geral complexa

6789

Arquivos - texto - XML

Haacute muitas bibliotecas de alto niacutevel para fazer o processamento (parsing) e entregar os dados em uma estrutura conveniente

A complexidade em processar XML estaacute em decidir o que fazer com os dados jaacute que os arquivos podem ser muito complexos

As APIs (Application Programming Interfaces) mais comuns para processar XML que satildeo implementadas em muitas linguagens

DOM (Document Object Model) ndash manteacutem todo o conteuacutedo do em uma estrutura de dados (em geral uma aacutervore) em uma variaacutevel (em geral um objeto) Esta pode ser consultada para obter os valores de interesse para os alterar e usada para escrever um arquivo

SAX (Simple API for XML) ndash Interpretador (parser) por objetos O usuaacuterio escreve uma classe herdando da classe SAX provendo os meacutetodos que vatildeo processar os campos agrave medida em que estes satildeo lidos

6889

Arquivos - binaacuterios - FITSFlexible Image Transport System

O formato mais comum para observaccedilotildees astronocircmicas Tambeacutem usado para armazenar quaisquer dados mesmo natildeo relacionados a observaccedilotildees (especialmente tabelas como eacute praacutetica do STSCI)

Conteacutem um (ou mais) cabeccedilalho(s) de texto com metadados (informaccedilotildees sobre os dados como caracteriacutesticas (necessaacuterias para os ler) origem condiccedilotildees em que foram obtidos processamento realizado etc)

SIMPLE = T image conforms to FITS standard BITPIX = 32 bits per data value NAXIS = 2 number of axes NAXIS1 = 1024 NAXIS2 = 1024 BSCALE = 100000 Scaling factor BZERO = 000000 Scaling zero-point TELESCOP= Keck II Telescope SLITNAME= 0041x226 Slit Name SLITPA = 351979 Slit position angle SLITX = 131500 X pixel of the center of the slit LST = 12010446 local apparent sidereal time (()

Depois do cabeccedilalho haacute uma (ou mais) seccedilatildeo(otildees) de dados binaacuterios Costuma(m) ser array(s) 1D (espectros) 2D (imagens) ou 3D (ldquocubos de dadosrdquo)

De inteiros ou reais inteiros satildeo comuns em contagens de instrumentos reais para valores derivados (fluxos intensidades etc)

6989

Arquivos - binaacuterios - FITSNormalmente FITS satildeo lidos escritos por bibliotecas prontas de (relativamente) alto niacutevel usuaacuterio natildeo tem que saber como os dados satildeo armazenados no arquivo nem como os ler escrever Ex (IDL com a biblioteca idlastro)

IDLgt fits_info2dspectrumfits2dspectrumfits has 3 extensionsPrimary header 288 recordsNo dataExtension 1 -- SCI Header 144 records IMAGE ( 1201 1201 )Extension 2 -- ERR Header 72 records IMAGE ( 1201 1201 )Extension 3 -- DQ Header 72 records IMAGE ( 1201 1201 )

IDLgt mydata=readfits(2dspectrumfitsexten_no=1myheader) READFITS Reading FITS extension of type IMAGE READFITS Now reading 1201 by 1201 array

IDLgt extastmyheadermyastIDLgt sz=size(mydatadimensions)IDLgt xy2ad[1sz[0]][1sz[1]]myastcorners_acorners_dIDLgt printcorners_aCorners of the data array from file 2dspectrumfits are at 14487480 33063480

IDLgt printcorners_d -00041264444 00041402222

Obteacutem os dados de coordenadas (WCS) do header

Coloca os dados no array (2D de floats) mydata e o header no array (1D de strings) myheader

Calcula as coordenadas das quinas da imagem atraveacutes do WCS

Provecirc informaccedilotildees sobre o arquivo

7089

Arquivos - binaacuterios - ISIS Cube

Formatos como FITS se adequam muito a ter uma interface de mais alto niacutevel por objetos

Tambeacutem para dados em tabelas FITS muito mais trabalhosos de ler em baixo niacutevel que se adequam muito mais a mapas ou estruturas

Exemplo (de um formato semelhante a FITS ISIS cube)

O objeto ao ser criado lecirc todo o arquivo

cube=pp_editablecube(CM_1553510065_1_ircub)

Meacutetodos fornecem os dados desejados para obter quando necessaacuterio os dados de interesse

Find out the names of the backplanesprintcubegetproperty(backnames)Get the start time of the cubeprintcubegetfromheader(START_TIME)2007-084T100057286Z

Valores no cabeccedilalho podem ser convenientemente fornecidos como um mapa

header=cubeheader_as_hash()printheader[START_TIME]2007-084T100057286Z

7189

Arquivos - binaacuterios ndash ISIS Cube

Os dados satildeo fornecidos como arraysMake a contour plot of the latitudesc=contour(cubegetsuffixbyname(LATITUDE))Get the band with wavelength nearest to 21 (in the units used in the cube)selband=cubegetbandbywavelength(21wavelengths=selwavs)

Interfaces por overload tornam o acesso ainda mais conveniente

selband=cube[21]

selwavs=cube[21]

Retorna um array com a banda de comprimento de onda mais proacuteximo de 21 (microm)

Retorna o comprimento de onda mais proacuteximo de 21 (microm) da banda retornada acima

7289

Arquivos - binaacuterios ndash ISIS Cube Alteraccedilotildees feitas ao conteuacutedo satildeo automaticamente refletidas em todos os

lugares (cabeccedilalho em particular) afetados mantendo o objeto vaacutelido que pode depois ser gravado em um novo arquivo

IDLgt printcubelinescubesamplescubebands 64 64 256

IDLgt helpcubecoreltExpressiongt FLOAT = Array[64 64 256]

IDLgt cubecore=dblarr(100100256)

A linha acima natildeo eacute uma atribuiccedilatildeo eacute uma invocaccedilatildeo de meacutetodo Eacute equivalente acubesetpropertycore=dblarr(100100256)

Eacute o trabalho da funccedilatildeo setproperty decidir se a propriedade passada (core) faz sentido e se fizer fazer todo o trabalho necessaacuterio a esta mudanccedila Para o usuaacuterio eacute tudo automaacutetico e os dados da classe satildeo vaacutelidos o tempo todo

IDLgt helpcubecoreltExpressiongt DOUBLE = Array[100 100 256]

IDLgt printcubelinescubesamplescubebands 100 100 256

IDLgt cubesaveCM_1553510065_1_ir_editedcub

7389

Arquivos - binaacuterios ndash NetCDF e HDF5

Network Common Data Form e Hierarchical Data Format

Os dois uacutenicos formatos bem estabelecidos para dados cientiacuteficos geneacutericos

Armazenam dados como vaacuterias variaacuteveis e seus metadados Para cada variaacutevel haacute (ou pode haver) os metadados

Nome Dimensotildees (do array) Unidades Comentaacuterios

Ambos permitem arrays multidimensionais

Apenas HDF5 permite estruturas (daiacute vem a hierarquia)

Autodocumentados qualquer software que saiba ler um destes formatos lecirc qualquer arquivo sem precisar de conhecimento preacutevio sobre como o arquivo foi gerado

Muito bem suportados em bibliotecas padratildeo e natildeo padratildeo em softwares interativos e visualizadores (inclusive plugins para navegadores)

httpwwwunidataucaredusoftwarenetcdf httpenwikipediaorgwikiHdf5

NetCDF eacute mais simples de usar por natildeo ter hierarquia dando menos trabalho para ler e escrever dados Se hierarquia natildeo eacute necessaacuteria eacute mais conveniente de usar que HDF5

7489

Arquivos - binaacuterios - NetCDF e HDF5Haacute tambeacutem o formato CDL uma versatildeo ASCII do NetCDF A biblioteca padratildeo do NetCDF inclui conversores entre estes formatos

$ ncdump -h refspec_g01_0ncnetcdf refspec_g01_0 dimensions nlay = 51 nwn = 400 nleg = 33 numu = 2 nlev = 52 nphi = 3 ngas = 2 nwnc = 1 scal = 1 v3 = 3 dnl = 1 nk = 1 tdisr = UNLIMITED (0 currently) na = 16

variables float alb(nwn) float z(nlay) float t(nlay) float p(nlay) float wl(nwn) float iof(nwn) float mtau(nwn) float htau(nwn) float hctaus(nwn) float gtau(nwn) float outcos(scal) float phi(nleg) float phic(scal) float umu(numu) float flux(v3 nwn nlev) float mix(nlay ngas) float c(nlay) float psat(nlay) float ga(nwnc) float wlc(nwnc) float inc(scal) int dm(scal) int ord(scal) float fbeam(scal) float wn(nwn) float tautot(nwn nlay) float htaus(nwn nlay) float htaux(nwn nlay) float taug(nwn nlay) float phase(nwn nlay nleg) float ssa(nwn nlay) float uu(nwn nphi nlev numu) float u0u(nwn nlev numu) float tray(nwn nlay) float gtauo(tdisr nwn nlay)

Haacute 14 variaacuteveis usadas como dimensotildees para as 35 variaacuteveis que satildeo arrays

Ex alb(nwn) indica que alb eacute um array 1D de nwn elementos

nwn estaacute armazenado como uma das dimensotildees e eacute 400 portanto alb tem 400 elementos

Parte do conteuacutedo de um arquivo NetCDF em formato CDL (gerado pelo programa ncdump)

7589

Arquivos - binaacuterios - NetCDF e HDF5Conteuacutedo daquele arquivo visualizado com o ncview (acompanha a biblioteca NetCDF padratildeo)

7689

Arquivos - binaacuterios - NetCDF e HDF5O conteuacutedo de todo o arquivo pode ser lido facilmente com as bibliotecas disponiacuteveis e armazenado em contecirciners convenientes Usando um objeto que gera um resultado um pouco mais conveniente

IDLgt h=pp_readncdf(refspec_g01_0nchash)IDLgt printhvar_dims ltObjHeapVar229(HASH)gtvars ltObjHeapVar152(HASH)gtdims ltObjHeapVar118(HASH)gt

IDLgt printh[vars]T 173203 175459 175848 176001 175975 Z 431869 418858 406067 393403 380464 FLUX 300660 145536 0705180 0341669 0165532 PHASE 100000 0779034 0660858 0542052 0449983 TAUTOT0694377 0693420 0693474 0693540 0693636()

IDLgt help(h[vars])[TAUTOT]ltExpressiongt FLOAT = Array[51 400]

IDLgt print(h[var_dims])[TAUTOT]NLAY NWN

IDLgt print(h[dims])[(h[var_dims])[TAUTOT]]NLAY 51NWN 400

7789

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5)

Visualizaccedilatildeo da variaacutevel selecionada

Metadados e alguns valores da variaacutevel selecionada

Variaacutevel a ser criada com o conteuacutedo desta variaacutevel do arquivo

Hierarquia das variaacuteveis do arquivo

7889

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5) Imported variable az

IDLgt helpaz Structure ltd5723f38gt 13 tags length=448 data length=444 refs=1 _NAME STRING az _ICONTYPE STRING binary _TYPE STRING DATASET _FILE STRING INTENSI_test_409OUTh5 _PATH STRING _DATA DOUBLE Array[38] _NDIMENSIONS LONG 1 _DIMENSIONS ULONG64 Array[1] _NELEMENTS ULONG64 38 _DATATYPE STRING H5T_FLOAT _STORAGESIZE ULONG 8 _PRECISION LONG 64 _SIGN STRING

IDLgt printaz_data 00000000 10000000 20000000 30000000 40000000 50000000 60000000 80000000 ()

7989

Arquivos - binaacuterios - imagens

JPEG JPEG200 TIFF GeoTIFF etc

Os formatos comuns de imagens satildeo bem suportados em muacuteltiplas plataformas para uso dentro de programas e interativamente

Alguns formatos tecircm opccedilatildeo de compressatildeo com perda eou sem perda

Armazenam imagens como arrays 2D ou 3D (3D frequumlentemente limitado a 3 ou 4 em uma das dimensotildees uma imagem em 3 ou 4 bandas) de inteiros ou (em alguns formatos) reais

Alguns formatos permitem armazenar metadados para caracterizar as imagens armazenadas

JPEG2000 e GeoTIFF (um subconjunto de TIFF) comuns em astronomia e aacutereas proacuteximas

8089

Arquivos - binaacuterios ndash imagens ndash exemplo (IDL)IDLgt printquery_tiff(issmap_2009tiffinfogeotiff=geo) 1

IDLgt helpinfo Structure ltd4eca4b8gt 18 tags length=144 data length=132 refs=1 CHANNELS LONG 4 DIMENSIONS LONG Array[2] IMAGE_INDEX LONG 0 NUM_IMAGES LONG 1 PIXEL_TYPE INT 1 TYPE STRING TIFF BITS_PER_SAMPLE LONG 8 POSITION FLOAT Array[2] RESOLUTION FLOAT Array[2] UNITS LONG 2 TILE_SIZE LONG Array[2] DESCRIPTION STRING ISS (2009) DATE_TIME STRING 20100218 012436()

IDLgt helpgeo Structure ltd4efa1b8gt 10 tags length=264 data length=262 refs=1 MODELPIXELSCALETAG DOUBLE Array[3] MODELTIEPOINTTAG DOUBLE Array[6 4] GEOGRAPHICTYPEGEOKEY INT 4035 GEOGSEMIMAJORAXISGEOKEY DOUBLE 25750000 GEOGSEMIMINORAXISGEOKEY DOUBLE 25750000()

IDLgt myimage=read_tiff(issmap_2009tiff) Lecirc a imagem para o array myimage

Obteacutem informaccedilotildees sobre o arquivo

8189

Arquivos - binaacuterios ndash formatos nativosLinguagens como IDL R Python Java tecircm seu formato nativo binaacuterio acessado em alto niacutevel Basta mandar salvar ler variaacuteveis no do arquivo a biblioteca padratildeo automagicamente faz todo o trabalho de decidir como gravar ler os dados

Conveniente de usar na proacutepria linguagem Mas raramente existem bibliotecas para ler gravar o formato nativo de uma linguagem a partir de outra Ex (IDL)

IDLgt savefile=2dspectrumsavmydatamyheadercorners_dcorners_averbosecompress SAVE Portable (XDR) compressed SAVERESTORE file SAVE Saved variable MYDATA SAVE Saved variable MYHEADER()

Pode ser lido com apenas (haacute formas mais elaboradas)

IDLgt restore2dspectrumsavverbose RESTORE Portable (XDR) compressed SAVERESTORE file RESTORE Save file written by ltunknowngtltunknowngt Thu Jan 27 191422 2011 RESTORE IDL version 801 (linux x86_64) RESTORE Restored variable MYDATA RESTORE Restored variable MYHEADER()

IDLgt helpmydatamyheadercorners_dcorners_aMYDATA FLOAT = Array[1201 1201]MYHEADER STRING = Array[144]()

8289

Arquivos - processamento em baixo niacutevel

Nem sempre um formato padratildeo eacute a melhor escolha para o problema

Nem sempre haacute escolha (pode-se ter que trabalhar com arquivos que jaacute foram escritos em algum formato proprietaacuterio)

Agraves vezes o formato eacute padratildeo mas natildeo haacute bom suporte a ele disponiacutevel

Em todos estes casos eacute necessaacuterio escrever rotinas em baixo niacutevel que vatildeo ler processar diretamente o conteuacutedo do arquivo

Preferencialmente criando interfaces de alto niacutevel para o programa que vai as usar

8389

Arquivos - processamento em baixo niacutevel - texto

Tomando o exemplo anterior onde as colunas eram de diferentes tipos

NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS dec18s0001 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0002 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0003 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 FLAT 5408757812500 460000 5 dec18s0004 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 DARK 5408757812500 460000 5

A forma mais simples de o ler diretamente eacute definir uma estrutura para receber cada linha e um array destas estruturas para receber todo o arquivo Ex (IDL)

IDLgt record=namecalmpos0filnameechlpos0d0disppos0d0targnameposdirclassmjd_obsitime0d0coadds0IDLgt nlines=file_lines(filesearch_scamtxt)IDLgt mydata=replicate(recordnlines-1)IDLgt header=

Depois de definidas as variaacuteveis que vatildeo receber os dados o arquivo pode ser lido

IDLgt openrunitfilesearch_scamtxtget_lunIDLgt readfunitheaderIDLgt readfunitmydataformat=(A14I8A15F104F104A18A19A15F158F105I15)IDLgt free_lununit

A gravaccedilatildeo de um arquivo texto poderia ser feita de forma semelhante apenas trocando openr por openw (abrir o arquivo para gravaccedilatildeo natildeo leitura) e readf por printf

O arquivo eacute aberto em uma unidade (unit) usada para especificar de onde eacute feita a leitura

Ao final o arquivo eacute fechado

8489

Arquivos - processamento em baixo niacutevel - texto

O que resulta em

IDLgt printheader NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS

IDLgt helpmydataMYDATA STRUCT = -gt ltAnonymousgt Array[4]

IDLgt helpmydata[0] Structure ltd5e38f68gt 11 tags length=136 data length=124 refs=3 NAME STRING dec18s0001 CALMPOS INT 0 FILNAME STRING NIRSPEC-5-AO ECHLPOS DOUBLE 62630000 DISPPOS DOUBLE 36450000 TARGNAME STRING HD85258 POSDIR STRING NIRSPEC-5-AOp1 CLASS STRING STAR MJD_OBS STRING 54087574 ITIME DOUBLE 10000000 COADDS INT 1

Este caso eacute mais complicado que os mais comuns por haver colunas de strings

Se todas fossem de nuacutemeros natildeo teria sido necessaacuterio especificar o formato explicitamente As colunas teriam sido adivinhadas pela biblioteca que lecirc o arquivo Poderia ter sido lido escrito soacute com um array de nuacutemeros sem estruturas

8589

Arquivos - processamento em baixo niacutevel - binaacuterio

Formatos binaacuterios podem ser definidos de qualquer forma O arquivo eacute apenas um conjunto de bytes Cabe ao software saber como os interpretar

Uma escolha comum para que sejam autodocumentados eacute incluir um cabeccedilalho de texto informando as caracteriacutesticas dos dados necessaacuterias para os ler

Ex (IDL) criar um arquivo que armazene um array de doubles com um cabeccedilalho informando as dimensotildees para que o programa que o lecirc saiba como ler os dados

Inventa dados e abre o arquivo

IDLgt data_to_write=dindgen(34)IDLgt openwunitbinary_exampledatget_lun

Escreve as dimensotildees como texto

IDLgt printfunitdimensions of the double array stored belowIDLgt printfunitsize(data_to_writedimensions)

Escreve os dados binaacuterios

IDLgt writeuunitdata_to_write

Fecha o arquivo

IDLgt free_lununit

Escreve em binaacuterio (write unformatted)

8689

Arquivos - processamento em baixo niacutevel - binaacuterio

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

dimensions of the double array stored below 3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

8789

Arquivos - processamento em baixo niacutevel - binaacuterioA leitura deste arquivo eacute igualmente simples

IDLgt header=IDLgt dims=[00]IDLgt openrunitbinary_exampledatget_lun

Lecirc as dimensotildees (armazenadas como texto)

IDLgt readfunitheaderIDLgt readfunitdims

Lecirc a parte binaacuteria depois de saber as dimensotildees

IDLgt data_read=dblarr(dims)IDLgt readuunitdata_read

Fecha o arquivo

IDLgt free_lununit

Verifica que os dados foram gravados e lidos corretamente

IDLgt printarray_equal(data_to_writedata_read) 1

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Lecirc dados binaacuterios (read unformatted)

8889

Sumaacuterio

5 ndash Slides em httpwwwppenteadonetpeapea04_strings_iopdf Strings Expressotildees regulares Arquivos

httpwwwppenteadonetpea

8989

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89

Expressotildees regulares - regras - caracteres ldquonormaisrdquo

Uma expressatildeo regular usa caracteres ldquonormaisrdquo e especiais para especificar o que se vai procurar na ordem em que aparecem na expressatildeo

Se um caractere eacute normal (natildeo eacute um dos especiais mostrados adiante) ele especifica uma ocorrecircncia daquele caractere

Ex J eacute uma expressatildeo regular que corresponde a qualquer string onde ocorra J Jaacute JA soacute corresponde a strings que tenham JA dentro

Exs (IDL)

IDLgt strs=[JJJJJJaJAjaJa]

IDLgt printstregex(strsJboolean) 1 1 1 0 1

IDLgt printstregex(strsJAboolean) 0 0 1 0 0

4289

Expressotildees regulares - regras - caracteres especiaisCaracteres especiais tecircm outros significados Para significar literalmente aquele caractere deve ser escapado (escaped) com um

Siacutembolo significado exemplo Corresponde(m) Escape o caractere seguinte deve ser interpretado

literalmente natildeo como especial aa

Qualquer caractere ab ajb aab abb jafbc

+ Uma ou mais repeticcedilotildees do que vem agrave esquerda a+b ab aab bab baabh

() Subexpressatildeo para agrupar termos afetados por um caractere especial (como parecircnteses em notaccedilatildeo matemaacutetica)

(ab)+c abc ababc dabababcg

Zero ou mais repeticcedilotildees dos termos agrave esquerda ab abbaab caaabg

Zero ou uma repeticcedilatildeo dos termos agrave esquerda ab b ab cabd cbd

| Alternaccedilatildeo qualquer um dos dois agrave esquerda a|bc ac bc jacd jbcd

n Exatamente n repeticcedilotildees do termo agrave esquerda a2b aab daaabg

n1n2 De n1 a n2 repeticcedilotildees do termo agrave esquerda a12b ab aab aaab gaaabbd

^ Acircncora (no comeccedilo) nada agrave esquerda ^ab ab abb

$ Acircncora (no fim) nada agrave direita ab$ abaab

[] Conjunto de valores (explicado adiante)

4389

Expressotildees regulares - regras - conjuntos de valores

[] denota um conjunto de valores que pode conter

Uma lista de coisas que devem corresponder Ex [abc] signfica qualquer caractere no conjunto abc Correspondem a esta

expressatildeo abcabha

Uma lista de coisas que natildeo podem corresponder [^abc] significa qualquer coisa que natildeo seja a b ou c Correspondem a esta

expressatildeo d jgs gg

Faixas de valores [0-9] signfica qualquer diacutegito [0-9a-zA-Z] significa qualquer diacutegito ou letra

Classes de valores como algumas faixas e outros conjuntos ocorrem com muita frequumlecircncia haacute nomes

especiais para eles Estes (em IDL) vecircm entre [] ex [[digit] significa o mesmo que [0-9]

4489

Expressotildees regulares - regras - classes de valores

Classe signficado

alnum Caracteres alfanumeacutericos 0-9a-zA-Z

alpha Caracteres alfabeacuteticos a-zA-Z

cntrl Caracteres de controle ASCII (natildeo visiacuteveis coacutedigos 1 a 31 e 127)

digit Diacutegitos (decimais) 0-9

graph Caracteres visiacuteveis ASCII 33 a 126 (natildeo inclui o espaccedilo)

lower Letras minuacutesculas a-z

print Caracteres ldquoimprimiacuteveisrdquo (visiacuteveis e o espaccedilo) ASCII 32 a 126

punct Caracteres de pontuaccedilatildeo $amprsquo()+-lt=gt[]^_lsquo|~

space Os caracteres ldquoem brancordquo (blank) espaccedilo tab tab vertical CR LF (ASCII 32 e 9-13)

upper Letras maiuacutesculas A-Z

xdigit Diacutegitos hexadecimais 0-9A-Fa-f

lt Comeccedilo de palavra (palavra definida como sequumlecircncia de coisas natildeo space)

gt Fim de palavra (palavra definida como sequumlecircncia de coisas natildeo space)

Estas satildeo apenas as principais Algumas implementaccedilotildees tecircm muito mais (em particular nas linguagens que usam Unicode nativamente)

4589

Expressotildees regulares - exemplos

Determinar se strings satildeo nuacutemeros (Ex IDL)

IDLgt str=[9-18 875-812-45913E9-98d7a188d032f5]

Inteiros

IDLgt intexpr=^[-+][0-9]+$

IDLgt printstregex(strintexprboolean) 1 1 0 0 0 0 0 0 0 0

Ponto flutuante

IDLgt fpexpr=^[-+](([0-9][0-9]+)|([0-9]+[0-9]))([eEdD][-+][0-9]+)$

IDLgt printstregex(strfpexprboolean) 1 1 0 1 1 1 1 1 0 0

Sinal opcional

1 ou mais diacutegitos

Sinal opcional

0 ou mais diacutegitos opcionalmente seguidos de um ponto e 1 ou mais diacutegitos

1 ou mais diacutegitos opcionalmente seguidos de um ponto e 0 ou mais diacutegitos

ou Expoente opcional letra do expoente seguida de sinal opcional seguido de um ou mais diacutegitos

4689

Expressotildees regulares ndash extraccedilatildeo

Interpretadores de expressotildees regulares costumam oferecer mais que apenas testar se um string corresponde a uma expressatildeo

Em geral tambeacutem podem retornar que parte(s) do string corresponde(m) agrave expressatildeo

Ex (IDL) Determinar se um string conteacutem uma data incluindo os formatos

IDLgt dates=[2011-01-312011 1 3120110131something done on y2011m1d31 with something]

E extrair a data de dentro do string

IDLgt expr=[0-9]4[0-9]12[0-9]12

(4 diacutegitos)(qualquer separador)(1 a 2 diacutegitos)(qualquer separador)(1 a 2 diacutegitos)

IDLgt printstregex(datesexprextract)format=(A)2011-01-312011 1 31201101312011m1d31

Como agora separar ano mecircs e dia Com uma busca e uma extraccedilatildeo para cada Poderia ser mais eacute mais faacutecil com uma uacutenica expressatildeo regular

4789

Expressotildees regulares - aleacutem de apenas testes

Tambeacutem podem retornar que parte(s) do string correspondem agrave expressatildeo toda e agraves suas subexpressotildees (partes da expressatildeo delimitadas por parecircnteses)

Ex (IDL) Separar pedaccedilos de datas Neste caso para a expressatildeo ficar menor assumindo um formato simples (yyyy-mm-ddThhmmssfff) Mas poderia ser um formato mais livre como no exemplo anterior

IDLgt str=Stuff observed on 2011-01-31T123924983 with some instrumentIDLgt expr=([0-9]4)-([0-9]2)-([0-9]2)T([0-9]2)([0-9]2)([0-9]2[0-9]3)

(quatro diacutegitos)-(2 diacutegitos)-(2 diacutegitos)T(2 diacutegitos)(2 diacutegitos)(2 diacutegitos3 diacutegitos)

IDLgt pieces=stregex(strexprextractsubexpr)IDLgt printpiecesformat=(A)2011-01-31T12392498320110131123924983IDLgt d=julday(pieces[2]pieces[3]pieces[1]pieces[4]pieces[5]pieces[6])IDLgt printdformat=(F166) 2455593027372

Expressatildeo inteiraPrimeira subexpressatildeoSegunda subexpressatildeoTerceira subexpressatildeoQuarta subexpressatildeoQuinta subexpressatildeoSexta subexpressatildeo

4889

Expressotildees regulares - referecircncias httpxkcdcom208

Viacutedeos do Software Carpentry

httpsoftware-carpentryorg4_0regexp

4989

Arquivos

Quase todo programa precisa armazenar dados em arquivos

Podem ser pequenos arquivos de paracircmetros ou enormes arquivos de dados produzidos ou a processar

Apesar do sugerido pela praacutetica comum arquivos texto natildeo satildeo sempre a melhor escolha para armazenar dados - e haacute muitas formas diferentes de os usar

Qual eacute a melhor escolha

Assim como para linguagens ou contecirciners natildeo existe ldquoo melhor formatordquo Cada um tem suas vantagens e desvantagens

Dados diferentes (mesmo se usados pelos mesmos programas) em geral se adequam melhor a formatos diferentes

5089

Arquivos - texto X binaacuterios

Em qualquer formato arquivos satildeo armazenados como diacutegitos binaacuterios

Mas haacute duas formas principais como eles podem ser codificados

Arquivos baseados em texto (text files)

Dados satildeo transformados em caracteres usando alguma formataccedilatildeo (mesmo se impliacutecita) e escritos com alguma codificaccedilatildeo de texto (comumente mas natildeo necessariamente ASCII)

Um arquivo texto eacute um ou mais strings As mesmas conversotildees tecircm que ser feitas depara outros tipos

Arquivos ldquobinaacuteriosrdquo (binary files)

Embora todo arquivo seja binaacuterio este nome costuma ser usado soacute para aqueles em que os dados natildeo estatildeo na forma de texto

Com frequumlecircncia (nem sempre) os dados satildeo gravados de forma idecircntica a como satildeo armazenados na memoacuteria

Muitos formatos usam uma mistura de partes em texto e partes binaacuterias

Um cabeccedilalho (header) de texto que daacute informaccedilotildees (metadados) sobre os dados armazenados na parte binaacuteria que vem depois

O cabeccedilalho conteacutem em especial informaccedilotildees sobre como ler os dados binaacuterios

5189

Arquivos - texto X binaacuterios

Vantagens de arquivos texto

Legiacuteveis por pessoas (human readable)

Podem ser auto-suficientes todo o necessaacuterio para os ler e entender o que conteacutem pode ser obtido olhando o arquivo

Satildeo os menos especiacuteficos a linguagens software normalmente satildeo escritos em ASCII ou Unicode e sempre haacute algum suporte a ler escrever texto em linguagens software

Haacute alguns formatos padratildeo para texto (exs CSV XML) que satildeo suportados em muitas plataformas diferentes

5289

Arquivos - texto X binaacuterios

Vantagens de arquivos binaacuterios

Em geral natildeo haacute conversotildees entre o os dados como armazenados na memoacuteria O que torna o armazenamento mais eficiente e sem alteraccedilotildees nos valores

A maior parte dos formatos padronizados eacute binaacuteria Exs FITS cube CDF NetCDF HDF HDF5 JPEG JPEG2000 TIFF GeoTIFF MPEG etc

Eacute mais comum que haja bibliotecas prontas (ateacute de alto niacutevel) para consulta leitura e gravaccedilatildeo

Os formatos melhor desenhados satildeo autodocumentados (em texto ou binaacuterio) para os ler natildeo eacute necessaacuterio conhecimento preacutevio sobre como os dados foram armazenados

Toda linguagem plataforma costuma ter seu formato binaacuterio mais nativo que costuma ser o mais faacutecil para leitura gravaccedilatildeo Em particular nas de alto niacutevel que tecircm formatos autodocumentados (especialmente

em IDL R Python Java)

Muitos formatos tecircm opccedilatildeo de compressatildeo dos dados

5389

Arquivos - proprietaacuterios X padratildeo

Independente da escolha texto binaacuterio programas devem escolher entre usar um formato proacuteprio ou um formato padronizado

A principal vantagem de formatos proacuteprios eacute que satildeo definidos da forma mais conveniente para a aplicaccedilatildeo que os usa simplificando leitura e gravaccedilatildeo e potencialmente otimizando recursos (acesso ao disco tamanho do arquivo etc)

A principal desvantagem de formatos proacuteprios eacute ser necessaacuterio escrever todo o coacutedigo para os ler gravar

Pode dar mais trabalho que usar um formato geneacuterico que natildeo seja exatamente o que melhor se encaixa na aplicaccedilatildeo

O coacutedigo para processar o formato em geral vai ser menos completo e conveniente de usar que o de um formato bem estabelecido usado por muitos outros em muitos ambientes

Cada novo software que for usar estes arquivos vai precisar compartilhar do mesmo coacutedigo ou precisar de coacutedigo novo (em particular se em outra linguagem) para ler gravar naquele formato

Eacute necessaacuterio documentar o formato e decidir sobre como ele seraacute definido

Se outros jaacute colocaram muito trabalho desenvolvendo bons formatos padratildeo bem suportados em muitos ambientes por que ter o trabalho de reinventar (e reprogramar redocumentar e retestar) a roda

5489

Arquivos - padrotildees comuns em astronomia (exs adiante)

Texto

CSV Comma-separated values - bem suportado por muitos softwares

ldquoColunas fixasrdquo Natildeo eacute um padratildeo bem definido mas eacute praacutetica comum para tabelas (2D)

XML Extensible Markup Language - O padratildeo texto mais flexiacutevel de grande uso em programaccedilatildeo geral para armazenar qualquer coisa com frequumlecircncia de forma hieraacuterquica Bem suportado por linguagens modernas (e modernizadas) e bibliotecas das principais

linguagens gerais Alta complexidade o torna trabalhoso de usar

5589

Arquivos - padrotildees comuns em astronomia (exs adiante)Binaacuterios

FITS Flexible Image Transport System - o mais comum para observaccedilotildees astronocircmicas Conteacutem os dados (em geral arrays 1D 2D ou 3D) e documentaccedilatildeo (nos cabeccedilalhos) sobre a origem e caracteriacutesticas dos dados Tambeacutem usado para armazenar tabelas de dados quaisquer mesmo que natildeo sejam observaccedilotildees (especialmente pelo STSCI) Variam muito em qualidade de documentaccedilatildeo

NetCDF Network Common Data Form - evoluccedilatildeo do CDF autodocumentado eacute comum e bem suportado para vaacuterios arrays de dados

HDF5 Hierarchical Data Format ndash autodocumentado comum e bem suportado permitindo aleacutem de simples arrays estruturas (eacute um formato hieraacuterquico)

Formatos de imagens JPEG JPEG2000 TIFF GeoTIFF etc - voltados para arrays 2D3D de inteiros ou (em alguns casos) reais com ou sem compressatildeo JPEG2000 tem caracteriacutesticas mais avanccediladas como imagens multiresoluccedilatildeo

Formatos vetoriais PS EPS DXF SHP SVG - variados niacuteveis de suporte a armazenamento de vetores e formas em 2D ou 3D

ISIS Cube semelhante em caracteriacutesticas ao FITS mais usado em sensoriamento remoto geociecircncias e ciecircncias planetaacuterias em geral para observaccedilotildees 1D 2D ou 3D

Formatos nativos de linguagens todo o trabalho de leitura e gravaccedilatildeo eacute feito automagicamente pela biblioteca padratildeo em IDL R Python Java

5689

Arquivos texto - newlines

Apesar do que possa parecer arquivos texto natildeo tecircm intrinsecamente vaacuterias linhas Arquivos texto satildeo soacute uma sequumlecircncia 1D de caracteres em alguma codificaccedilatildeo Separaccedilatildeo em linhas (equivalente a interpretar o arquivo como 2D em linhas e colunas) eacute

especificada por convenccedilotildees Natildeo haacute apenas uma convenccedilatildeo para o fim de linhas

A mais primitiva convenccedilatildeo eacute separaccedilatildeo nenhuma estipula-se que linhas tenham um nuacutemero fixo N de caracteres e cabe ao software que lecirc o arquivo entender que uma linha nova ocorre regularmente a cada N caracteres

Eacute a forma menos portaacutevel e mais inconveniente eacute necessaacuterio o conhecimento preacutevio (ou por inspeccedilatildeo do arquivo) de quantos caracteres haacute por linha

A maior parte dos editores de texto natildeo vai saber separar linhas desta forma (por falta deste conhecimento preacutevio) Exemplo (de um FITS real)

SIMPLE = T Fits standard BITPIX = 16 Bits per pixel NAXIS = 0 Number of axes EXTEND = T File may contain extensions

O que com as linhas quebradas nos lugares certos seria

SIMPLE = T Fits standard BITPIX = 16 Bits per pixel NAXIS = 0 Number of axes EXTEND = T File may contain extensions

5789

Arquivos texto - newlines

A forma mais comum de especificar linhas eacute com um marcador do final de linha (newline)

Eacute um caractere especial natildeo normalmente presente no texto que serve para marcar fim de linhas

Mas natildeo haacute soacute um padratildeo de newline Os mais comuns

LF (Line Feed ASCII 10) ndash Unix Linux Mac OS X

CR - (Carriage Return ASCII 13) - Mac OS lt10

CR+LF (CR seguido de LF) - Windows DOS

Eacute o motivo de o Notepad (Windows) natildeo entender as quebras de linha de arquivos escritos com o formato nativo de Linux o arquivo soacute tem LF enquanto o editor espera CR+LF

Alguns sistemas (strings em vaacuterias linguagens por exemplo) usam o coacutedigo de escape n para indicar newline que eacute codificado de acordo com o padratildeo sendo usado

Em geral bibliotecas de leitura e gravaccedilatildeo de arquivos usam (default pelo menos) o newline nativo do sistema em que satildeo usadas

Programas de conversatildeo entre os sistemas satildeo comuns (ex dos2unix)

O Wordpad identifica se for usado soacute LF e quebra as linhas de acordo

5889

Arquivos - texto - CSV

Comma-separated values

O formato mais padronizado para tabelas (arrays 2D) em texto (frequentemente mas natildeo necessariamente ASCII)

Bem suportado por bibliotecas padratildeo de linguagens e outros softwares (Excel Calc Origin Google Docs etc)

Conteacutem Linhas de cabeccedilalho (opcionais mas recomendadas) linhas com qualquer texto geral

descrevendo o arquivo e em geral uma linha de tiacutetulo para as colunas da tabela Uma (apenas uma) tabela onde todas as linhas tecircm o mesmo nuacutemero de colunas

Colunas separadas por viacutergulas (opcionalmente pode ser outro separador) Linhas terminadas por newline (qualquer que seja) Strings delimitados por ldquo ldquo

Ex

NAMECALMPOSFILNAMEECHLPOSDISPPOSTARGNAMEPOSDIRCLASSMJD-OBSITIMECOADDSdec18s00010NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001dec18s00020NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001dec18s00120NIRSPEC-5-AO635800364500itan140NIRSPEC-5-AOp2 TITAN5408763000001dec18s00140NIRSPEC-5-AO626300364500itan140NIRSPEC-5-AOp1 TITAN5408763000001dec18s00151NIRSPEC-5-AO626300364500itan140NIRSPEC-5-AOp1ARC5408764000001dec18s00160NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001

Natildeo eacute necessaacuterio que as colunas tenham largura constante

Cabeccedilalho

5989

Arquivos - texto - CSVHaacute amplo suporte a leitura e gravaccedilatildeo de CSV sem precisar recorrer a procedimentos de baixo niacutevel

Podem ser diretamente importados em Excel Calc Origin Google Docs ou lido facilmente com bibliotecas padratildeo comuns Ex (IDL)

IDLgt c=read_csv(filesearch_scamcsvheader=h)IDLgt printhNAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS

IDLgt helpc Structure ltc8bca508gt 11 tags length=5256 data length=5248 refs=1 FIELD01 STRING Array[41] FIELD02 LONG Array[41] FIELD03 STRING Array[41] FIELD04 DOUBLE Array[41] FIELD05 DOUBLE Array[41] FIELD06 STRING Array[41] FIELD07 STRING Array[41] FIELD08 STRING Array[41] FIELD09 STRING Array[41] FIELD10 DOUBLE Array[41] FIELD11 LONG Array[41]

IDLgt printcfield01[03]dec18s0001 dec18s0002 dec18s0003 dec18s0004

IDLgt printcfield03[03]NIRSPEC-5-AO NIRSPEC-5-AO NIRSPEC-5-AO NIRSPEC-5-AO

6089

Arquivos - texto - CSVEx (IDL) Criaccedilatildeo de um CSV com uma tabela de valores

Criaccedilatildeo de 3 arrays 1D (12 elementos) um para cada coluna

IDLgt x=dindgen(3)IDLgt y=dindgen(4)IDLgt xx=reform(rebin(x34)12)IDLgt yy=reform(rebin(reform(y14)34)12)IDLgt f=xx+yy10IDLgt helpxxyyfXX DOUBLE = Array[12]YY DOUBLE = Array[12]F DOUBLE = Array[12]

Escrita do arquivo

IDLgt write_csvexamplecsvxxyyfheader=[XYX+10Y]

ResultadoXYX+10Y000000000000000000000000100000000000000010000000200000000000000020000000000000001000000010000000100000001000000011000000()

6189

Arquivos - texto - ldquoColunas regularesrdquoFixed column width

Natildeo eacute exatamente um padratildeo Eacute uma praacutetica comum

Armazena uma tabela (array 2D) de forma regular simples de ser interpretada e lida

Costumam ter linha(s) de cabeccedilalho descrevendo o conteuacutedo do arquivo em geral com uma linha para os nomes das colunas

As demais linhas conteacutem os dados sempre ocupando a mesma largura por coluna e escritos no mesmo formato em cada coluna

Costumam ser simples de ler inclusive interativamente (exs Excel Calc Origin read_ascii)

Ex (IDL) Uma simples tabela soacute de nuacutemeros

wavl CH4=33 wavl CH4=25 wavl CH4=10 wavl CH4=08 wavl CH4=05 wavl CH4=026 wavl CH4=02 477330000 0090130 477330000 0091110 477330000 0089250 477330000 0087000 477330000 0087140 477330000 0090080 477330000 0088110 480040000 0090930 480040000 0091930 480040000 0090160 480040000 0087930 480040000 0088110 480040000 0090950 480040000 0089090 482750000 0091710 482750000 0092730 482750000 0091060 482750000 0088850 482750000 0089080 482750000 0091810 482750000 0090060 485450000 0092530 485450000 0093570 485450000 0092000 485450000 0089810 485450000 0090100 485450000 0092730 485450000 0091090

IDLgt a=read_ascii(specs_27s_ntxtdata_start=1header=header)IDLgt printheader wavl CH4=33 wavl CH4=25 wavl CH4=10 wavl CH4=08 wavl CH4=05 wavl CH4=026 wavl CH4=02 IDLgt helpa Structure ltd423c9a8gt 1 tags length=224 data length=224 refs=1 FIELD01 FLOAT Array[14 4]

6289

Arquivos - texto - ldquoColunas regularesrdquoJaacute um arquivo um pouco mais difiacutecil de ler

NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS dec18s0001 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0002 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0003 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 FLAT 5408757812500 460000 5 dec18s0004 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 DARK 5408757812500 460000 5

Por ter colunas de tipos diferentes (strings inteiros reais) natildeo eacute possiacutevel o ler em um simples array Mas eacute faacutecil o colocar em uma estrutura de arrays onde cada campo eacute uma coluna

Especificando interativamente como interpretar as linhasIDLgt templ=ascii_template(filesearch_scamtxt)

Nome do campo (default mostrado)

Tipo do campo (identificado automaticamente)

Posiccedilatildeo (caracter) do comeccedilo (identificada automaticamente)

Linha de exemplo para verificar as colunas

6389

Arquivos - texto - ldquoColunas regularesrdquoDepois de feito o template o arquivo pode ser lido com apenas

IDLgt a=read_ascii(filesearch_scamtxttemplate=templ)IDLgt helpa Structure ltd4ec4608gt 11 tags length=416 data length=416 refs=1 FIELD01 STRING Array[4] FIELD02 LONG Array[4] FIELD03 STRING Array[4] FIELD04 FLOAT Array[4] FIELD05 FLOAT Array[4] FIELD06 STRING Array[4] FIELD07 STRING Array[4] FIELD08 STRING Array[4] FIELD09 FLOAT Array[4] FIELD10 FLOAT Array[4] FIELD11 LONG Array[4]IDLgt printafield01dec18s0001 dec18s0002 dec18s0003 dec18s0004IDLgt printafield04 626300 626300 626300 626300

O template (uma estrutura contendo dados sobre como ler o arquivo) pode ser usado para outros arquivos no mesmo formato No lugar de ter sido criado interativamente poderia ter sido lido de algum arquivo Poderia ter especificado nomes para os campos que seriam mais amigaacuteveis que coias como FIELD11

6489

Arquivos - texto - XML

Extensible Markup Language

Admite grande flexibilidade e por isso pode ter alta complexidade

Valores satildeo colocados dentro de uma estrutura em hieraacuterquica (em uma aacutervore) com os noacutes identificados pelos seus nomes (chaves)

Largamente usado em muitas aacutereas para armazenar conjuntos arbitraacuterios de quaisquer estruturas de dados

A maioria das aplicaccedilotildees usa um formato que eacute um subconjunto do XML especificado por um Schema comumente em um arquivo XML DTD (Document Type Definition)

6589

Arquivos - texto ndash XML ndash exemplos de usos

Armazenamento de dados de aplicaccedilotildees web (comum para exportar importar dados MediaWiki DokuWiki WordPress ADS Lattes etc)

Documentos Office (docx pptx xlsx) OpenOffice (odt opd ods)

Como versotildees de outros formatos FITSML XDF

ldquoScientific Dataset XML NASAs Astronomical Data Center (ADC) sponsors a number of research projects that

use XML for scientific data representation The XML activities at the ADC are sponsored and supported by the NASA Office of Space Science Applied Information Systems Research Program (AISRP)rdquo - httpxmlcoverpagesorgnasa-adchtml

Astronomical Instrument Markup Language (AIML)

SVG ndash Scalable Vector Graphics

Muitas de outras aplicaccedilotildees listadas em httpxmlcoverpagesorgxmlhtmlapplications

6689

Arquivos - texto ndash XML - exemploltxml version=10 gtltDOCTYPE Xdmf SYSTEM Xdmfdtd []gtltXdmf xmlnsxi=httpwwww3org2001XInclude Version=20gt ltDomaingt lt-- Example of Basic Topologies --gt ltInformation Name=Descriptiongt Example of a Polyvertex Topology ltInformationgt ltGrid Name=Polyvertex GridType=Uniformgt ltTopology TopologyType=Polyvertex Dimensions=3 NodesPerElement=3gt ltDataItem Format=XML Dimensions=3 3 NumberType=Floatgt 0 1 2 4 5 6 8 9 10 ltDataItemgt ltTopologygt ltGeometry Type=XYZgt ltDataItem Format=XML Dimensions=4 4 3gt 00 00 00 10 00 00()Que mostra que a interpretaccedilatildeo (parsing) de XML eacute em geral complexa

6789

Arquivos - texto - XML

Haacute muitas bibliotecas de alto niacutevel para fazer o processamento (parsing) e entregar os dados em uma estrutura conveniente

A complexidade em processar XML estaacute em decidir o que fazer com os dados jaacute que os arquivos podem ser muito complexos

As APIs (Application Programming Interfaces) mais comuns para processar XML que satildeo implementadas em muitas linguagens

DOM (Document Object Model) ndash manteacutem todo o conteuacutedo do em uma estrutura de dados (em geral uma aacutervore) em uma variaacutevel (em geral um objeto) Esta pode ser consultada para obter os valores de interesse para os alterar e usada para escrever um arquivo

SAX (Simple API for XML) ndash Interpretador (parser) por objetos O usuaacuterio escreve uma classe herdando da classe SAX provendo os meacutetodos que vatildeo processar os campos agrave medida em que estes satildeo lidos

6889

Arquivos - binaacuterios - FITSFlexible Image Transport System

O formato mais comum para observaccedilotildees astronocircmicas Tambeacutem usado para armazenar quaisquer dados mesmo natildeo relacionados a observaccedilotildees (especialmente tabelas como eacute praacutetica do STSCI)

Conteacutem um (ou mais) cabeccedilalho(s) de texto com metadados (informaccedilotildees sobre os dados como caracteriacutesticas (necessaacuterias para os ler) origem condiccedilotildees em que foram obtidos processamento realizado etc)

SIMPLE = T image conforms to FITS standard BITPIX = 32 bits per data value NAXIS = 2 number of axes NAXIS1 = 1024 NAXIS2 = 1024 BSCALE = 100000 Scaling factor BZERO = 000000 Scaling zero-point TELESCOP= Keck II Telescope SLITNAME= 0041x226 Slit Name SLITPA = 351979 Slit position angle SLITX = 131500 X pixel of the center of the slit LST = 12010446 local apparent sidereal time (()

Depois do cabeccedilalho haacute uma (ou mais) seccedilatildeo(otildees) de dados binaacuterios Costuma(m) ser array(s) 1D (espectros) 2D (imagens) ou 3D (ldquocubos de dadosrdquo)

De inteiros ou reais inteiros satildeo comuns em contagens de instrumentos reais para valores derivados (fluxos intensidades etc)

6989

Arquivos - binaacuterios - FITSNormalmente FITS satildeo lidos escritos por bibliotecas prontas de (relativamente) alto niacutevel usuaacuterio natildeo tem que saber como os dados satildeo armazenados no arquivo nem como os ler escrever Ex (IDL com a biblioteca idlastro)

IDLgt fits_info2dspectrumfits2dspectrumfits has 3 extensionsPrimary header 288 recordsNo dataExtension 1 -- SCI Header 144 records IMAGE ( 1201 1201 )Extension 2 -- ERR Header 72 records IMAGE ( 1201 1201 )Extension 3 -- DQ Header 72 records IMAGE ( 1201 1201 )

IDLgt mydata=readfits(2dspectrumfitsexten_no=1myheader) READFITS Reading FITS extension of type IMAGE READFITS Now reading 1201 by 1201 array

IDLgt extastmyheadermyastIDLgt sz=size(mydatadimensions)IDLgt xy2ad[1sz[0]][1sz[1]]myastcorners_acorners_dIDLgt printcorners_aCorners of the data array from file 2dspectrumfits are at 14487480 33063480

IDLgt printcorners_d -00041264444 00041402222

Obteacutem os dados de coordenadas (WCS) do header

Coloca os dados no array (2D de floats) mydata e o header no array (1D de strings) myheader

Calcula as coordenadas das quinas da imagem atraveacutes do WCS

Provecirc informaccedilotildees sobre o arquivo

7089

Arquivos - binaacuterios - ISIS Cube

Formatos como FITS se adequam muito a ter uma interface de mais alto niacutevel por objetos

Tambeacutem para dados em tabelas FITS muito mais trabalhosos de ler em baixo niacutevel que se adequam muito mais a mapas ou estruturas

Exemplo (de um formato semelhante a FITS ISIS cube)

O objeto ao ser criado lecirc todo o arquivo

cube=pp_editablecube(CM_1553510065_1_ircub)

Meacutetodos fornecem os dados desejados para obter quando necessaacuterio os dados de interesse

Find out the names of the backplanesprintcubegetproperty(backnames)Get the start time of the cubeprintcubegetfromheader(START_TIME)2007-084T100057286Z

Valores no cabeccedilalho podem ser convenientemente fornecidos como um mapa

header=cubeheader_as_hash()printheader[START_TIME]2007-084T100057286Z

7189

Arquivos - binaacuterios ndash ISIS Cube

Os dados satildeo fornecidos como arraysMake a contour plot of the latitudesc=contour(cubegetsuffixbyname(LATITUDE))Get the band with wavelength nearest to 21 (in the units used in the cube)selband=cubegetbandbywavelength(21wavelengths=selwavs)

Interfaces por overload tornam o acesso ainda mais conveniente

selband=cube[21]

selwavs=cube[21]

Retorna um array com a banda de comprimento de onda mais proacuteximo de 21 (microm)

Retorna o comprimento de onda mais proacuteximo de 21 (microm) da banda retornada acima

7289

Arquivos - binaacuterios ndash ISIS Cube Alteraccedilotildees feitas ao conteuacutedo satildeo automaticamente refletidas em todos os

lugares (cabeccedilalho em particular) afetados mantendo o objeto vaacutelido que pode depois ser gravado em um novo arquivo

IDLgt printcubelinescubesamplescubebands 64 64 256

IDLgt helpcubecoreltExpressiongt FLOAT = Array[64 64 256]

IDLgt cubecore=dblarr(100100256)

A linha acima natildeo eacute uma atribuiccedilatildeo eacute uma invocaccedilatildeo de meacutetodo Eacute equivalente acubesetpropertycore=dblarr(100100256)

Eacute o trabalho da funccedilatildeo setproperty decidir se a propriedade passada (core) faz sentido e se fizer fazer todo o trabalho necessaacuterio a esta mudanccedila Para o usuaacuterio eacute tudo automaacutetico e os dados da classe satildeo vaacutelidos o tempo todo

IDLgt helpcubecoreltExpressiongt DOUBLE = Array[100 100 256]

IDLgt printcubelinescubesamplescubebands 100 100 256

IDLgt cubesaveCM_1553510065_1_ir_editedcub

7389

Arquivos - binaacuterios ndash NetCDF e HDF5

Network Common Data Form e Hierarchical Data Format

Os dois uacutenicos formatos bem estabelecidos para dados cientiacuteficos geneacutericos

Armazenam dados como vaacuterias variaacuteveis e seus metadados Para cada variaacutevel haacute (ou pode haver) os metadados

Nome Dimensotildees (do array) Unidades Comentaacuterios

Ambos permitem arrays multidimensionais

Apenas HDF5 permite estruturas (daiacute vem a hierarquia)

Autodocumentados qualquer software que saiba ler um destes formatos lecirc qualquer arquivo sem precisar de conhecimento preacutevio sobre como o arquivo foi gerado

Muito bem suportados em bibliotecas padratildeo e natildeo padratildeo em softwares interativos e visualizadores (inclusive plugins para navegadores)

httpwwwunidataucaredusoftwarenetcdf httpenwikipediaorgwikiHdf5

NetCDF eacute mais simples de usar por natildeo ter hierarquia dando menos trabalho para ler e escrever dados Se hierarquia natildeo eacute necessaacuteria eacute mais conveniente de usar que HDF5

7489

Arquivos - binaacuterios - NetCDF e HDF5Haacute tambeacutem o formato CDL uma versatildeo ASCII do NetCDF A biblioteca padratildeo do NetCDF inclui conversores entre estes formatos

$ ncdump -h refspec_g01_0ncnetcdf refspec_g01_0 dimensions nlay = 51 nwn = 400 nleg = 33 numu = 2 nlev = 52 nphi = 3 ngas = 2 nwnc = 1 scal = 1 v3 = 3 dnl = 1 nk = 1 tdisr = UNLIMITED (0 currently) na = 16

variables float alb(nwn) float z(nlay) float t(nlay) float p(nlay) float wl(nwn) float iof(nwn) float mtau(nwn) float htau(nwn) float hctaus(nwn) float gtau(nwn) float outcos(scal) float phi(nleg) float phic(scal) float umu(numu) float flux(v3 nwn nlev) float mix(nlay ngas) float c(nlay) float psat(nlay) float ga(nwnc) float wlc(nwnc) float inc(scal) int dm(scal) int ord(scal) float fbeam(scal) float wn(nwn) float tautot(nwn nlay) float htaus(nwn nlay) float htaux(nwn nlay) float taug(nwn nlay) float phase(nwn nlay nleg) float ssa(nwn nlay) float uu(nwn nphi nlev numu) float u0u(nwn nlev numu) float tray(nwn nlay) float gtauo(tdisr nwn nlay)

Haacute 14 variaacuteveis usadas como dimensotildees para as 35 variaacuteveis que satildeo arrays

Ex alb(nwn) indica que alb eacute um array 1D de nwn elementos

nwn estaacute armazenado como uma das dimensotildees e eacute 400 portanto alb tem 400 elementos

Parte do conteuacutedo de um arquivo NetCDF em formato CDL (gerado pelo programa ncdump)

7589

Arquivos - binaacuterios - NetCDF e HDF5Conteuacutedo daquele arquivo visualizado com o ncview (acompanha a biblioteca NetCDF padratildeo)

7689

Arquivos - binaacuterios - NetCDF e HDF5O conteuacutedo de todo o arquivo pode ser lido facilmente com as bibliotecas disponiacuteveis e armazenado em contecirciners convenientes Usando um objeto que gera um resultado um pouco mais conveniente

IDLgt h=pp_readncdf(refspec_g01_0nchash)IDLgt printhvar_dims ltObjHeapVar229(HASH)gtvars ltObjHeapVar152(HASH)gtdims ltObjHeapVar118(HASH)gt

IDLgt printh[vars]T 173203 175459 175848 176001 175975 Z 431869 418858 406067 393403 380464 FLUX 300660 145536 0705180 0341669 0165532 PHASE 100000 0779034 0660858 0542052 0449983 TAUTOT0694377 0693420 0693474 0693540 0693636()

IDLgt help(h[vars])[TAUTOT]ltExpressiongt FLOAT = Array[51 400]

IDLgt print(h[var_dims])[TAUTOT]NLAY NWN

IDLgt print(h[dims])[(h[var_dims])[TAUTOT]]NLAY 51NWN 400

7789

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5)

Visualizaccedilatildeo da variaacutevel selecionada

Metadados e alguns valores da variaacutevel selecionada

Variaacutevel a ser criada com o conteuacutedo desta variaacutevel do arquivo

Hierarquia das variaacuteveis do arquivo

7889

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5) Imported variable az

IDLgt helpaz Structure ltd5723f38gt 13 tags length=448 data length=444 refs=1 _NAME STRING az _ICONTYPE STRING binary _TYPE STRING DATASET _FILE STRING INTENSI_test_409OUTh5 _PATH STRING _DATA DOUBLE Array[38] _NDIMENSIONS LONG 1 _DIMENSIONS ULONG64 Array[1] _NELEMENTS ULONG64 38 _DATATYPE STRING H5T_FLOAT _STORAGESIZE ULONG 8 _PRECISION LONG 64 _SIGN STRING

IDLgt printaz_data 00000000 10000000 20000000 30000000 40000000 50000000 60000000 80000000 ()

7989

Arquivos - binaacuterios - imagens

JPEG JPEG200 TIFF GeoTIFF etc

Os formatos comuns de imagens satildeo bem suportados em muacuteltiplas plataformas para uso dentro de programas e interativamente

Alguns formatos tecircm opccedilatildeo de compressatildeo com perda eou sem perda

Armazenam imagens como arrays 2D ou 3D (3D frequumlentemente limitado a 3 ou 4 em uma das dimensotildees uma imagem em 3 ou 4 bandas) de inteiros ou (em alguns formatos) reais

Alguns formatos permitem armazenar metadados para caracterizar as imagens armazenadas

JPEG2000 e GeoTIFF (um subconjunto de TIFF) comuns em astronomia e aacutereas proacuteximas

8089

Arquivos - binaacuterios ndash imagens ndash exemplo (IDL)IDLgt printquery_tiff(issmap_2009tiffinfogeotiff=geo) 1

IDLgt helpinfo Structure ltd4eca4b8gt 18 tags length=144 data length=132 refs=1 CHANNELS LONG 4 DIMENSIONS LONG Array[2] IMAGE_INDEX LONG 0 NUM_IMAGES LONG 1 PIXEL_TYPE INT 1 TYPE STRING TIFF BITS_PER_SAMPLE LONG 8 POSITION FLOAT Array[2] RESOLUTION FLOAT Array[2] UNITS LONG 2 TILE_SIZE LONG Array[2] DESCRIPTION STRING ISS (2009) DATE_TIME STRING 20100218 012436()

IDLgt helpgeo Structure ltd4efa1b8gt 10 tags length=264 data length=262 refs=1 MODELPIXELSCALETAG DOUBLE Array[3] MODELTIEPOINTTAG DOUBLE Array[6 4] GEOGRAPHICTYPEGEOKEY INT 4035 GEOGSEMIMAJORAXISGEOKEY DOUBLE 25750000 GEOGSEMIMINORAXISGEOKEY DOUBLE 25750000()

IDLgt myimage=read_tiff(issmap_2009tiff) Lecirc a imagem para o array myimage

Obteacutem informaccedilotildees sobre o arquivo

8189

Arquivos - binaacuterios ndash formatos nativosLinguagens como IDL R Python Java tecircm seu formato nativo binaacuterio acessado em alto niacutevel Basta mandar salvar ler variaacuteveis no do arquivo a biblioteca padratildeo automagicamente faz todo o trabalho de decidir como gravar ler os dados

Conveniente de usar na proacutepria linguagem Mas raramente existem bibliotecas para ler gravar o formato nativo de uma linguagem a partir de outra Ex (IDL)

IDLgt savefile=2dspectrumsavmydatamyheadercorners_dcorners_averbosecompress SAVE Portable (XDR) compressed SAVERESTORE file SAVE Saved variable MYDATA SAVE Saved variable MYHEADER()

Pode ser lido com apenas (haacute formas mais elaboradas)

IDLgt restore2dspectrumsavverbose RESTORE Portable (XDR) compressed SAVERESTORE file RESTORE Save file written by ltunknowngtltunknowngt Thu Jan 27 191422 2011 RESTORE IDL version 801 (linux x86_64) RESTORE Restored variable MYDATA RESTORE Restored variable MYHEADER()

IDLgt helpmydatamyheadercorners_dcorners_aMYDATA FLOAT = Array[1201 1201]MYHEADER STRING = Array[144]()

8289

Arquivos - processamento em baixo niacutevel

Nem sempre um formato padratildeo eacute a melhor escolha para o problema

Nem sempre haacute escolha (pode-se ter que trabalhar com arquivos que jaacute foram escritos em algum formato proprietaacuterio)

Agraves vezes o formato eacute padratildeo mas natildeo haacute bom suporte a ele disponiacutevel

Em todos estes casos eacute necessaacuterio escrever rotinas em baixo niacutevel que vatildeo ler processar diretamente o conteuacutedo do arquivo

Preferencialmente criando interfaces de alto niacutevel para o programa que vai as usar

8389

Arquivos - processamento em baixo niacutevel - texto

Tomando o exemplo anterior onde as colunas eram de diferentes tipos

NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS dec18s0001 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0002 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0003 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 FLAT 5408757812500 460000 5 dec18s0004 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 DARK 5408757812500 460000 5

A forma mais simples de o ler diretamente eacute definir uma estrutura para receber cada linha e um array destas estruturas para receber todo o arquivo Ex (IDL)

IDLgt record=namecalmpos0filnameechlpos0d0disppos0d0targnameposdirclassmjd_obsitime0d0coadds0IDLgt nlines=file_lines(filesearch_scamtxt)IDLgt mydata=replicate(recordnlines-1)IDLgt header=

Depois de definidas as variaacuteveis que vatildeo receber os dados o arquivo pode ser lido

IDLgt openrunitfilesearch_scamtxtget_lunIDLgt readfunitheaderIDLgt readfunitmydataformat=(A14I8A15F104F104A18A19A15F158F105I15)IDLgt free_lununit

A gravaccedilatildeo de um arquivo texto poderia ser feita de forma semelhante apenas trocando openr por openw (abrir o arquivo para gravaccedilatildeo natildeo leitura) e readf por printf

O arquivo eacute aberto em uma unidade (unit) usada para especificar de onde eacute feita a leitura

Ao final o arquivo eacute fechado

8489

Arquivos - processamento em baixo niacutevel - texto

O que resulta em

IDLgt printheader NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS

IDLgt helpmydataMYDATA STRUCT = -gt ltAnonymousgt Array[4]

IDLgt helpmydata[0] Structure ltd5e38f68gt 11 tags length=136 data length=124 refs=3 NAME STRING dec18s0001 CALMPOS INT 0 FILNAME STRING NIRSPEC-5-AO ECHLPOS DOUBLE 62630000 DISPPOS DOUBLE 36450000 TARGNAME STRING HD85258 POSDIR STRING NIRSPEC-5-AOp1 CLASS STRING STAR MJD_OBS STRING 54087574 ITIME DOUBLE 10000000 COADDS INT 1

Este caso eacute mais complicado que os mais comuns por haver colunas de strings

Se todas fossem de nuacutemeros natildeo teria sido necessaacuterio especificar o formato explicitamente As colunas teriam sido adivinhadas pela biblioteca que lecirc o arquivo Poderia ter sido lido escrito soacute com um array de nuacutemeros sem estruturas

8589

Arquivos - processamento em baixo niacutevel - binaacuterio

Formatos binaacuterios podem ser definidos de qualquer forma O arquivo eacute apenas um conjunto de bytes Cabe ao software saber como os interpretar

Uma escolha comum para que sejam autodocumentados eacute incluir um cabeccedilalho de texto informando as caracteriacutesticas dos dados necessaacuterias para os ler

Ex (IDL) criar um arquivo que armazene um array de doubles com um cabeccedilalho informando as dimensotildees para que o programa que o lecirc saiba como ler os dados

Inventa dados e abre o arquivo

IDLgt data_to_write=dindgen(34)IDLgt openwunitbinary_exampledatget_lun

Escreve as dimensotildees como texto

IDLgt printfunitdimensions of the double array stored belowIDLgt printfunitsize(data_to_writedimensions)

Escreve os dados binaacuterios

IDLgt writeuunitdata_to_write

Fecha o arquivo

IDLgt free_lununit

Escreve em binaacuterio (write unformatted)

8689

Arquivos - processamento em baixo niacutevel - binaacuterio

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

dimensions of the double array stored below 3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

8789

Arquivos - processamento em baixo niacutevel - binaacuterioA leitura deste arquivo eacute igualmente simples

IDLgt header=IDLgt dims=[00]IDLgt openrunitbinary_exampledatget_lun

Lecirc as dimensotildees (armazenadas como texto)

IDLgt readfunitheaderIDLgt readfunitdims

Lecirc a parte binaacuteria depois de saber as dimensotildees

IDLgt data_read=dblarr(dims)IDLgt readuunitdata_read

Fecha o arquivo

IDLgt free_lununit

Verifica que os dados foram gravados e lidos corretamente

IDLgt printarray_equal(data_to_writedata_read) 1

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Lecirc dados binaacuterios (read unformatted)

8889

Sumaacuterio

5 ndash Slides em httpwwwppenteadonetpeapea04_strings_iopdf Strings Expressotildees regulares Arquivos

httpwwwppenteadonetpea

8989

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89

Expressotildees regulares - regras - caracteres especiaisCaracteres especiais tecircm outros significados Para significar literalmente aquele caractere deve ser escapado (escaped) com um

Siacutembolo significado exemplo Corresponde(m) Escape o caractere seguinte deve ser interpretado

literalmente natildeo como especial aa

Qualquer caractere ab ajb aab abb jafbc

+ Uma ou mais repeticcedilotildees do que vem agrave esquerda a+b ab aab bab baabh

() Subexpressatildeo para agrupar termos afetados por um caractere especial (como parecircnteses em notaccedilatildeo matemaacutetica)

(ab)+c abc ababc dabababcg

Zero ou mais repeticcedilotildees dos termos agrave esquerda ab abbaab caaabg

Zero ou uma repeticcedilatildeo dos termos agrave esquerda ab b ab cabd cbd

| Alternaccedilatildeo qualquer um dos dois agrave esquerda a|bc ac bc jacd jbcd

n Exatamente n repeticcedilotildees do termo agrave esquerda a2b aab daaabg

n1n2 De n1 a n2 repeticcedilotildees do termo agrave esquerda a12b ab aab aaab gaaabbd

^ Acircncora (no comeccedilo) nada agrave esquerda ^ab ab abb

$ Acircncora (no fim) nada agrave direita ab$ abaab

[] Conjunto de valores (explicado adiante)

4389

Expressotildees regulares - regras - conjuntos de valores

[] denota um conjunto de valores que pode conter

Uma lista de coisas que devem corresponder Ex [abc] signfica qualquer caractere no conjunto abc Correspondem a esta

expressatildeo abcabha

Uma lista de coisas que natildeo podem corresponder [^abc] significa qualquer coisa que natildeo seja a b ou c Correspondem a esta

expressatildeo d jgs gg

Faixas de valores [0-9] signfica qualquer diacutegito [0-9a-zA-Z] significa qualquer diacutegito ou letra

Classes de valores como algumas faixas e outros conjuntos ocorrem com muita frequumlecircncia haacute nomes

especiais para eles Estes (em IDL) vecircm entre [] ex [[digit] significa o mesmo que [0-9]

4489

Expressotildees regulares - regras - classes de valores

Classe signficado

alnum Caracteres alfanumeacutericos 0-9a-zA-Z

alpha Caracteres alfabeacuteticos a-zA-Z

cntrl Caracteres de controle ASCII (natildeo visiacuteveis coacutedigos 1 a 31 e 127)

digit Diacutegitos (decimais) 0-9

graph Caracteres visiacuteveis ASCII 33 a 126 (natildeo inclui o espaccedilo)

lower Letras minuacutesculas a-z

print Caracteres ldquoimprimiacuteveisrdquo (visiacuteveis e o espaccedilo) ASCII 32 a 126

punct Caracteres de pontuaccedilatildeo $amprsquo()+-lt=gt[]^_lsquo|~

space Os caracteres ldquoem brancordquo (blank) espaccedilo tab tab vertical CR LF (ASCII 32 e 9-13)

upper Letras maiuacutesculas A-Z

xdigit Diacutegitos hexadecimais 0-9A-Fa-f

lt Comeccedilo de palavra (palavra definida como sequumlecircncia de coisas natildeo space)

gt Fim de palavra (palavra definida como sequumlecircncia de coisas natildeo space)

Estas satildeo apenas as principais Algumas implementaccedilotildees tecircm muito mais (em particular nas linguagens que usam Unicode nativamente)

4589

Expressotildees regulares - exemplos

Determinar se strings satildeo nuacutemeros (Ex IDL)

IDLgt str=[9-18 875-812-45913E9-98d7a188d032f5]

Inteiros

IDLgt intexpr=^[-+][0-9]+$

IDLgt printstregex(strintexprboolean) 1 1 0 0 0 0 0 0 0 0

Ponto flutuante

IDLgt fpexpr=^[-+](([0-9][0-9]+)|([0-9]+[0-9]))([eEdD][-+][0-9]+)$

IDLgt printstregex(strfpexprboolean) 1 1 0 1 1 1 1 1 0 0

Sinal opcional

1 ou mais diacutegitos

Sinal opcional

0 ou mais diacutegitos opcionalmente seguidos de um ponto e 1 ou mais diacutegitos

1 ou mais diacutegitos opcionalmente seguidos de um ponto e 0 ou mais diacutegitos

ou Expoente opcional letra do expoente seguida de sinal opcional seguido de um ou mais diacutegitos

4689

Expressotildees regulares ndash extraccedilatildeo

Interpretadores de expressotildees regulares costumam oferecer mais que apenas testar se um string corresponde a uma expressatildeo

Em geral tambeacutem podem retornar que parte(s) do string corresponde(m) agrave expressatildeo

Ex (IDL) Determinar se um string conteacutem uma data incluindo os formatos

IDLgt dates=[2011-01-312011 1 3120110131something done on y2011m1d31 with something]

E extrair a data de dentro do string

IDLgt expr=[0-9]4[0-9]12[0-9]12

(4 diacutegitos)(qualquer separador)(1 a 2 diacutegitos)(qualquer separador)(1 a 2 diacutegitos)

IDLgt printstregex(datesexprextract)format=(A)2011-01-312011 1 31201101312011m1d31

Como agora separar ano mecircs e dia Com uma busca e uma extraccedilatildeo para cada Poderia ser mais eacute mais faacutecil com uma uacutenica expressatildeo regular

4789

Expressotildees regulares - aleacutem de apenas testes

Tambeacutem podem retornar que parte(s) do string correspondem agrave expressatildeo toda e agraves suas subexpressotildees (partes da expressatildeo delimitadas por parecircnteses)

Ex (IDL) Separar pedaccedilos de datas Neste caso para a expressatildeo ficar menor assumindo um formato simples (yyyy-mm-ddThhmmssfff) Mas poderia ser um formato mais livre como no exemplo anterior

IDLgt str=Stuff observed on 2011-01-31T123924983 with some instrumentIDLgt expr=([0-9]4)-([0-9]2)-([0-9]2)T([0-9]2)([0-9]2)([0-9]2[0-9]3)

(quatro diacutegitos)-(2 diacutegitos)-(2 diacutegitos)T(2 diacutegitos)(2 diacutegitos)(2 diacutegitos3 diacutegitos)

IDLgt pieces=stregex(strexprextractsubexpr)IDLgt printpiecesformat=(A)2011-01-31T12392498320110131123924983IDLgt d=julday(pieces[2]pieces[3]pieces[1]pieces[4]pieces[5]pieces[6])IDLgt printdformat=(F166) 2455593027372

Expressatildeo inteiraPrimeira subexpressatildeoSegunda subexpressatildeoTerceira subexpressatildeoQuarta subexpressatildeoQuinta subexpressatildeoSexta subexpressatildeo

4889

Expressotildees regulares - referecircncias httpxkcdcom208

Viacutedeos do Software Carpentry

httpsoftware-carpentryorg4_0regexp

4989

Arquivos

Quase todo programa precisa armazenar dados em arquivos

Podem ser pequenos arquivos de paracircmetros ou enormes arquivos de dados produzidos ou a processar

Apesar do sugerido pela praacutetica comum arquivos texto natildeo satildeo sempre a melhor escolha para armazenar dados - e haacute muitas formas diferentes de os usar

Qual eacute a melhor escolha

Assim como para linguagens ou contecirciners natildeo existe ldquoo melhor formatordquo Cada um tem suas vantagens e desvantagens

Dados diferentes (mesmo se usados pelos mesmos programas) em geral se adequam melhor a formatos diferentes

5089

Arquivos - texto X binaacuterios

Em qualquer formato arquivos satildeo armazenados como diacutegitos binaacuterios

Mas haacute duas formas principais como eles podem ser codificados

Arquivos baseados em texto (text files)

Dados satildeo transformados em caracteres usando alguma formataccedilatildeo (mesmo se impliacutecita) e escritos com alguma codificaccedilatildeo de texto (comumente mas natildeo necessariamente ASCII)

Um arquivo texto eacute um ou mais strings As mesmas conversotildees tecircm que ser feitas depara outros tipos

Arquivos ldquobinaacuteriosrdquo (binary files)

Embora todo arquivo seja binaacuterio este nome costuma ser usado soacute para aqueles em que os dados natildeo estatildeo na forma de texto

Com frequumlecircncia (nem sempre) os dados satildeo gravados de forma idecircntica a como satildeo armazenados na memoacuteria

Muitos formatos usam uma mistura de partes em texto e partes binaacuterias

Um cabeccedilalho (header) de texto que daacute informaccedilotildees (metadados) sobre os dados armazenados na parte binaacuteria que vem depois

O cabeccedilalho conteacutem em especial informaccedilotildees sobre como ler os dados binaacuterios

5189

Arquivos - texto X binaacuterios

Vantagens de arquivos texto

Legiacuteveis por pessoas (human readable)

Podem ser auto-suficientes todo o necessaacuterio para os ler e entender o que conteacutem pode ser obtido olhando o arquivo

Satildeo os menos especiacuteficos a linguagens software normalmente satildeo escritos em ASCII ou Unicode e sempre haacute algum suporte a ler escrever texto em linguagens software

Haacute alguns formatos padratildeo para texto (exs CSV XML) que satildeo suportados em muitas plataformas diferentes

5289

Arquivos - texto X binaacuterios

Vantagens de arquivos binaacuterios

Em geral natildeo haacute conversotildees entre o os dados como armazenados na memoacuteria O que torna o armazenamento mais eficiente e sem alteraccedilotildees nos valores

A maior parte dos formatos padronizados eacute binaacuteria Exs FITS cube CDF NetCDF HDF HDF5 JPEG JPEG2000 TIFF GeoTIFF MPEG etc

Eacute mais comum que haja bibliotecas prontas (ateacute de alto niacutevel) para consulta leitura e gravaccedilatildeo

Os formatos melhor desenhados satildeo autodocumentados (em texto ou binaacuterio) para os ler natildeo eacute necessaacuterio conhecimento preacutevio sobre como os dados foram armazenados

Toda linguagem plataforma costuma ter seu formato binaacuterio mais nativo que costuma ser o mais faacutecil para leitura gravaccedilatildeo Em particular nas de alto niacutevel que tecircm formatos autodocumentados (especialmente

em IDL R Python Java)

Muitos formatos tecircm opccedilatildeo de compressatildeo dos dados

5389

Arquivos - proprietaacuterios X padratildeo

Independente da escolha texto binaacuterio programas devem escolher entre usar um formato proacuteprio ou um formato padronizado

A principal vantagem de formatos proacuteprios eacute que satildeo definidos da forma mais conveniente para a aplicaccedilatildeo que os usa simplificando leitura e gravaccedilatildeo e potencialmente otimizando recursos (acesso ao disco tamanho do arquivo etc)

A principal desvantagem de formatos proacuteprios eacute ser necessaacuterio escrever todo o coacutedigo para os ler gravar

Pode dar mais trabalho que usar um formato geneacuterico que natildeo seja exatamente o que melhor se encaixa na aplicaccedilatildeo

O coacutedigo para processar o formato em geral vai ser menos completo e conveniente de usar que o de um formato bem estabelecido usado por muitos outros em muitos ambientes

Cada novo software que for usar estes arquivos vai precisar compartilhar do mesmo coacutedigo ou precisar de coacutedigo novo (em particular se em outra linguagem) para ler gravar naquele formato

Eacute necessaacuterio documentar o formato e decidir sobre como ele seraacute definido

Se outros jaacute colocaram muito trabalho desenvolvendo bons formatos padratildeo bem suportados em muitos ambientes por que ter o trabalho de reinventar (e reprogramar redocumentar e retestar) a roda

5489

Arquivos - padrotildees comuns em astronomia (exs adiante)

Texto

CSV Comma-separated values - bem suportado por muitos softwares

ldquoColunas fixasrdquo Natildeo eacute um padratildeo bem definido mas eacute praacutetica comum para tabelas (2D)

XML Extensible Markup Language - O padratildeo texto mais flexiacutevel de grande uso em programaccedilatildeo geral para armazenar qualquer coisa com frequumlecircncia de forma hieraacuterquica Bem suportado por linguagens modernas (e modernizadas) e bibliotecas das principais

linguagens gerais Alta complexidade o torna trabalhoso de usar

5589

Arquivos - padrotildees comuns em astronomia (exs adiante)Binaacuterios

FITS Flexible Image Transport System - o mais comum para observaccedilotildees astronocircmicas Conteacutem os dados (em geral arrays 1D 2D ou 3D) e documentaccedilatildeo (nos cabeccedilalhos) sobre a origem e caracteriacutesticas dos dados Tambeacutem usado para armazenar tabelas de dados quaisquer mesmo que natildeo sejam observaccedilotildees (especialmente pelo STSCI) Variam muito em qualidade de documentaccedilatildeo

NetCDF Network Common Data Form - evoluccedilatildeo do CDF autodocumentado eacute comum e bem suportado para vaacuterios arrays de dados

HDF5 Hierarchical Data Format ndash autodocumentado comum e bem suportado permitindo aleacutem de simples arrays estruturas (eacute um formato hieraacuterquico)

Formatos de imagens JPEG JPEG2000 TIFF GeoTIFF etc - voltados para arrays 2D3D de inteiros ou (em alguns casos) reais com ou sem compressatildeo JPEG2000 tem caracteriacutesticas mais avanccediladas como imagens multiresoluccedilatildeo

Formatos vetoriais PS EPS DXF SHP SVG - variados niacuteveis de suporte a armazenamento de vetores e formas em 2D ou 3D

ISIS Cube semelhante em caracteriacutesticas ao FITS mais usado em sensoriamento remoto geociecircncias e ciecircncias planetaacuterias em geral para observaccedilotildees 1D 2D ou 3D

Formatos nativos de linguagens todo o trabalho de leitura e gravaccedilatildeo eacute feito automagicamente pela biblioteca padratildeo em IDL R Python Java

5689

Arquivos texto - newlines

Apesar do que possa parecer arquivos texto natildeo tecircm intrinsecamente vaacuterias linhas Arquivos texto satildeo soacute uma sequumlecircncia 1D de caracteres em alguma codificaccedilatildeo Separaccedilatildeo em linhas (equivalente a interpretar o arquivo como 2D em linhas e colunas) eacute

especificada por convenccedilotildees Natildeo haacute apenas uma convenccedilatildeo para o fim de linhas

A mais primitiva convenccedilatildeo eacute separaccedilatildeo nenhuma estipula-se que linhas tenham um nuacutemero fixo N de caracteres e cabe ao software que lecirc o arquivo entender que uma linha nova ocorre regularmente a cada N caracteres

Eacute a forma menos portaacutevel e mais inconveniente eacute necessaacuterio o conhecimento preacutevio (ou por inspeccedilatildeo do arquivo) de quantos caracteres haacute por linha

A maior parte dos editores de texto natildeo vai saber separar linhas desta forma (por falta deste conhecimento preacutevio) Exemplo (de um FITS real)

SIMPLE = T Fits standard BITPIX = 16 Bits per pixel NAXIS = 0 Number of axes EXTEND = T File may contain extensions

O que com as linhas quebradas nos lugares certos seria

SIMPLE = T Fits standard BITPIX = 16 Bits per pixel NAXIS = 0 Number of axes EXTEND = T File may contain extensions

5789

Arquivos texto - newlines

A forma mais comum de especificar linhas eacute com um marcador do final de linha (newline)

Eacute um caractere especial natildeo normalmente presente no texto que serve para marcar fim de linhas

Mas natildeo haacute soacute um padratildeo de newline Os mais comuns

LF (Line Feed ASCII 10) ndash Unix Linux Mac OS X

CR - (Carriage Return ASCII 13) - Mac OS lt10

CR+LF (CR seguido de LF) - Windows DOS

Eacute o motivo de o Notepad (Windows) natildeo entender as quebras de linha de arquivos escritos com o formato nativo de Linux o arquivo soacute tem LF enquanto o editor espera CR+LF

Alguns sistemas (strings em vaacuterias linguagens por exemplo) usam o coacutedigo de escape n para indicar newline que eacute codificado de acordo com o padratildeo sendo usado

Em geral bibliotecas de leitura e gravaccedilatildeo de arquivos usam (default pelo menos) o newline nativo do sistema em que satildeo usadas

Programas de conversatildeo entre os sistemas satildeo comuns (ex dos2unix)

O Wordpad identifica se for usado soacute LF e quebra as linhas de acordo

5889

Arquivos - texto - CSV

Comma-separated values

O formato mais padronizado para tabelas (arrays 2D) em texto (frequentemente mas natildeo necessariamente ASCII)

Bem suportado por bibliotecas padratildeo de linguagens e outros softwares (Excel Calc Origin Google Docs etc)

Conteacutem Linhas de cabeccedilalho (opcionais mas recomendadas) linhas com qualquer texto geral

descrevendo o arquivo e em geral uma linha de tiacutetulo para as colunas da tabela Uma (apenas uma) tabela onde todas as linhas tecircm o mesmo nuacutemero de colunas

Colunas separadas por viacutergulas (opcionalmente pode ser outro separador) Linhas terminadas por newline (qualquer que seja) Strings delimitados por ldquo ldquo

Ex

NAMECALMPOSFILNAMEECHLPOSDISPPOSTARGNAMEPOSDIRCLASSMJD-OBSITIMECOADDSdec18s00010NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001dec18s00020NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001dec18s00120NIRSPEC-5-AO635800364500itan140NIRSPEC-5-AOp2 TITAN5408763000001dec18s00140NIRSPEC-5-AO626300364500itan140NIRSPEC-5-AOp1 TITAN5408763000001dec18s00151NIRSPEC-5-AO626300364500itan140NIRSPEC-5-AOp1ARC5408764000001dec18s00160NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001

Natildeo eacute necessaacuterio que as colunas tenham largura constante

Cabeccedilalho

5989

Arquivos - texto - CSVHaacute amplo suporte a leitura e gravaccedilatildeo de CSV sem precisar recorrer a procedimentos de baixo niacutevel

Podem ser diretamente importados em Excel Calc Origin Google Docs ou lido facilmente com bibliotecas padratildeo comuns Ex (IDL)

IDLgt c=read_csv(filesearch_scamcsvheader=h)IDLgt printhNAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS

IDLgt helpc Structure ltc8bca508gt 11 tags length=5256 data length=5248 refs=1 FIELD01 STRING Array[41] FIELD02 LONG Array[41] FIELD03 STRING Array[41] FIELD04 DOUBLE Array[41] FIELD05 DOUBLE Array[41] FIELD06 STRING Array[41] FIELD07 STRING Array[41] FIELD08 STRING Array[41] FIELD09 STRING Array[41] FIELD10 DOUBLE Array[41] FIELD11 LONG Array[41]

IDLgt printcfield01[03]dec18s0001 dec18s0002 dec18s0003 dec18s0004

IDLgt printcfield03[03]NIRSPEC-5-AO NIRSPEC-5-AO NIRSPEC-5-AO NIRSPEC-5-AO

6089

Arquivos - texto - CSVEx (IDL) Criaccedilatildeo de um CSV com uma tabela de valores

Criaccedilatildeo de 3 arrays 1D (12 elementos) um para cada coluna

IDLgt x=dindgen(3)IDLgt y=dindgen(4)IDLgt xx=reform(rebin(x34)12)IDLgt yy=reform(rebin(reform(y14)34)12)IDLgt f=xx+yy10IDLgt helpxxyyfXX DOUBLE = Array[12]YY DOUBLE = Array[12]F DOUBLE = Array[12]

Escrita do arquivo

IDLgt write_csvexamplecsvxxyyfheader=[XYX+10Y]

ResultadoXYX+10Y000000000000000000000000100000000000000010000000200000000000000020000000000000001000000010000000100000001000000011000000()

6189

Arquivos - texto - ldquoColunas regularesrdquoFixed column width

Natildeo eacute exatamente um padratildeo Eacute uma praacutetica comum

Armazena uma tabela (array 2D) de forma regular simples de ser interpretada e lida

Costumam ter linha(s) de cabeccedilalho descrevendo o conteuacutedo do arquivo em geral com uma linha para os nomes das colunas

As demais linhas conteacutem os dados sempre ocupando a mesma largura por coluna e escritos no mesmo formato em cada coluna

Costumam ser simples de ler inclusive interativamente (exs Excel Calc Origin read_ascii)

Ex (IDL) Uma simples tabela soacute de nuacutemeros

wavl CH4=33 wavl CH4=25 wavl CH4=10 wavl CH4=08 wavl CH4=05 wavl CH4=026 wavl CH4=02 477330000 0090130 477330000 0091110 477330000 0089250 477330000 0087000 477330000 0087140 477330000 0090080 477330000 0088110 480040000 0090930 480040000 0091930 480040000 0090160 480040000 0087930 480040000 0088110 480040000 0090950 480040000 0089090 482750000 0091710 482750000 0092730 482750000 0091060 482750000 0088850 482750000 0089080 482750000 0091810 482750000 0090060 485450000 0092530 485450000 0093570 485450000 0092000 485450000 0089810 485450000 0090100 485450000 0092730 485450000 0091090

IDLgt a=read_ascii(specs_27s_ntxtdata_start=1header=header)IDLgt printheader wavl CH4=33 wavl CH4=25 wavl CH4=10 wavl CH4=08 wavl CH4=05 wavl CH4=026 wavl CH4=02 IDLgt helpa Structure ltd423c9a8gt 1 tags length=224 data length=224 refs=1 FIELD01 FLOAT Array[14 4]

6289

Arquivos - texto - ldquoColunas regularesrdquoJaacute um arquivo um pouco mais difiacutecil de ler

NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS dec18s0001 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0002 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0003 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 FLAT 5408757812500 460000 5 dec18s0004 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 DARK 5408757812500 460000 5

Por ter colunas de tipos diferentes (strings inteiros reais) natildeo eacute possiacutevel o ler em um simples array Mas eacute faacutecil o colocar em uma estrutura de arrays onde cada campo eacute uma coluna

Especificando interativamente como interpretar as linhasIDLgt templ=ascii_template(filesearch_scamtxt)

Nome do campo (default mostrado)

Tipo do campo (identificado automaticamente)

Posiccedilatildeo (caracter) do comeccedilo (identificada automaticamente)

Linha de exemplo para verificar as colunas

6389

Arquivos - texto - ldquoColunas regularesrdquoDepois de feito o template o arquivo pode ser lido com apenas

IDLgt a=read_ascii(filesearch_scamtxttemplate=templ)IDLgt helpa Structure ltd4ec4608gt 11 tags length=416 data length=416 refs=1 FIELD01 STRING Array[4] FIELD02 LONG Array[4] FIELD03 STRING Array[4] FIELD04 FLOAT Array[4] FIELD05 FLOAT Array[4] FIELD06 STRING Array[4] FIELD07 STRING Array[4] FIELD08 STRING Array[4] FIELD09 FLOAT Array[4] FIELD10 FLOAT Array[4] FIELD11 LONG Array[4]IDLgt printafield01dec18s0001 dec18s0002 dec18s0003 dec18s0004IDLgt printafield04 626300 626300 626300 626300

O template (uma estrutura contendo dados sobre como ler o arquivo) pode ser usado para outros arquivos no mesmo formato No lugar de ter sido criado interativamente poderia ter sido lido de algum arquivo Poderia ter especificado nomes para os campos que seriam mais amigaacuteveis que coias como FIELD11

6489

Arquivos - texto - XML

Extensible Markup Language

Admite grande flexibilidade e por isso pode ter alta complexidade

Valores satildeo colocados dentro de uma estrutura em hieraacuterquica (em uma aacutervore) com os noacutes identificados pelos seus nomes (chaves)

Largamente usado em muitas aacutereas para armazenar conjuntos arbitraacuterios de quaisquer estruturas de dados

A maioria das aplicaccedilotildees usa um formato que eacute um subconjunto do XML especificado por um Schema comumente em um arquivo XML DTD (Document Type Definition)

6589

Arquivos - texto ndash XML ndash exemplos de usos

Armazenamento de dados de aplicaccedilotildees web (comum para exportar importar dados MediaWiki DokuWiki WordPress ADS Lattes etc)

Documentos Office (docx pptx xlsx) OpenOffice (odt opd ods)

Como versotildees de outros formatos FITSML XDF

ldquoScientific Dataset XML NASAs Astronomical Data Center (ADC) sponsors a number of research projects that

use XML for scientific data representation The XML activities at the ADC are sponsored and supported by the NASA Office of Space Science Applied Information Systems Research Program (AISRP)rdquo - httpxmlcoverpagesorgnasa-adchtml

Astronomical Instrument Markup Language (AIML)

SVG ndash Scalable Vector Graphics

Muitas de outras aplicaccedilotildees listadas em httpxmlcoverpagesorgxmlhtmlapplications

6689

Arquivos - texto ndash XML - exemploltxml version=10 gtltDOCTYPE Xdmf SYSTEM Xdmfdtd []gtltXdmf xmlnsxi=httpwwww3org2001XInclude Version=20gt ltDomaingt lt-- Example of Basic Topologies --gt ltInformation Name=Descriptiongt Example of a Polyvertex Topology ltInformationgt ltGrid Name=Polyvertex GridType=Uniformgt ltTopology TopologyType=Polyvertex Dimensions=3 NodesPerElement=3gt ltDataItem Format=XML Dimensions=3 3 NumberType=Floatgt 0 1 2 4 5 6 8 9 10 ltDataItemgt ltTopologygt ltGeometry Type=XYZgt ltDataItem Format=XML Dimensions=4 4 3gt 00 00 00 10 00 00()Que mostra que a interpretaccedilatildeo (parsing) de XML eacute em geral complexa

6789

Arquivos - texto - XML

Haacute muitas bibliotecas de alto niacutevel para fazer o processamento (parsing) e entregar os dados em uma estrutura conveniente

A complexidade em processar XML estaacute em decidir o que fazer com os dados jaacute que os arquivos podem ser muito complexos

As APIs (Application Programming Interfaces) mais comuns para processar XML que satildeo implementadas em muitas linguagens

DOM (Document Object Model) ndash manteacutem todo o conteuacutedo do em uma estrutura de dados (em geral uma aacutervore) em uma variaacutevel (em geral um objeto) Esta pode ser consultada para obter os valores de interesse para os alterar e usada para escrever um arquivo

SAX (Simple API for XML) ndash Interpretador (parser) por objetos O usuaacuterio escreve uma classe herdando da classe SAX provendo os meacutetodos que vatildeo processar os campos agrave medida em que estes satildeo lidos

6889

Arquivos - binaacuterios - FITSFlexible Image Transport System

O formato mais comum para observaccedilotildees astronocircmicas Tambeacutem usado para armazenar quaisquer dados mesmo natildeo relacionados a observaccedilotildees (especialmente tabelas como eacute praacutetica do STSCI)

Conteacutem um (ou mais) cabeccedilalho(s) de texto com metadados (informaccedilotildees sobre os dados como caracteriacutesticas (necessaacuterias para os ler) origem condiccedilotildees em que foram obtidos processamento realizado etc)

SIMPLE = T image conforms to FITS standard BITPIX = 32 bits per data value NAXIS = 2 number of axes NAXIS1 = 1024 NAXIS2 = 1024 BSCALE = 100000 Scaling factor BZERO = 000000 Scaling zero-point TELESCOP= Keck II Telescope SLITNAME= 0041x226 Slit Name SLITPA = 351979 Slit position angle SLITX = 131500 X pixel of the center of the slit LST = 12010446 local apparent sidereal time (()

Depois do cabeccedilalho haacute uma (ou mais) seccedilatildeo(otildees) de dados binaacuterios Costuma(m) ser array(s) 1D (espectros) 2D (imagens) ou 3D (ldquocubos de dadosrdquo)

De inteiros ou reais inteiros satildeo comuns em contagens de instrumentos reais para valores derivados (fluxos intensidades etc)

6989

Arquivos - binaacuterios - FITSNormalmente FITS satildeo lidos escritos por bibliotecas prontas de (relativamente) alto niacutevel usuaacuterio natildeo tem que saber como os dados satildeo armazenados no arquivo nem como os ler escrever Ex (IDL com a biblioteca idlastro)

IDLgt fits_info2dspectrumfits2dspectrumfits has 3 extensionsPrimary header 288 recordsNo dataExtension 1 -- SCI Header 144 records IMAGE ( 1201 1201 )Extension 2 -- ERR Header 72 records IMAGE ( 1201 1201 )Extension 3 -- DQ Header 72 records IMAGE ( 1201 1201 )

IDLgt mydata=readfits(2dspectrumfitsexten_no=1myheader) READFITS Reading FITS extension of type IMAGE READFITS Now reading 1201 by 1201 array

IDLgt extastmyheadermyastIDLgt sz=size(mydatadimensions)IDLgt xy2ad[1sz[0]][1sz[1]]myastcorners_acorners_dIDLgt printcorners_aCorners of the data array from file 2dspectrumfits are at 14487480 33063480

IDLgt printcorners_d -00041264444 00041402222

Obteacutem os dados de coordenadas (WCS) do header

Coloca os dados no array (2D de floats) mydata e o header no array (1D de strings) myheader

Calcula as coordenadas das quinas da imagem atraveacutes do WCS

Provecirc informaccedilotildees sobre o arquivo

7089

Arquivos - binaacuterios - ISIS Cube

Formatos como FITS se adequam muito a ter uma interface de mais alto niacutevel por objetos

Tambeacutem para dados em tabelas FITS muito mais trabalhosos de ler em baixo niacutevel que se adequam muito mais a mapas ou estruturas

Exemplo (de um formato semelhante a FITS ISIS cube)

O objeto ao ser criado lecirc todo o arquivo

cube=pp_editablecube(CM_1553510065_1_ircub)

Meacutetodos fornecem os dados desejados para obter quando necessaacuterio os dados de interesse

Find out the names of the backplanesprintcubegetproperty(backnames)Get the start time of the cubeprintcubegetfromheader(START_TIME)2007-084T100057286Z

Valores no cabeccedilalho podem ser convenientemente fornecidos como um mapa

header=cubeheader_as_hash()printheader[START_TIME]2007-084T100057286Z

7189

Arquivos - binaacuterios ndash ISIS Cube

Os dados satildeo fornecidos como arraysMake a contour plot of the latitudesc=contour(cubegetsuffixbyname(LATITUDE))Get the band with wavelength nearest to 21 (in the units used in the cube)selband=cubegetbandbywavelength(21wavelengths=selwavs)

Interfaces por overload tornam o acesso ainda mais conveniente

selband=cube[21]

selwavs=cube[21]

Retorna um array com a banda de comprimento de onda mais proacuteximo de 21 (microm)

Retorna o comprimento de onda mais proacuteximo de 21 (microm) da banda retornada acima

7289

Arquivos - binaacuterios ndash ISIS Cube Alteraccedilotildees feitas ao conteuacutedo satildeo automaticamente refletidas em todos os

lugares (cabeccedilalho em particular) afetados mantendo o objeto vaacutelido que pode depois ser gravado em um novo arquivo

IDLgt printcubelinescubesamplescubebands 64 64 256

IDLgt helpcubecoreltExpressiongt FLOAT = Array[64 64 256]

IDLgt cubecore=dblarr(100100256)

A linha acima natildeo eacute uma atribuiccedilatildeo eacute uma invocaccedilatildeo de meacutetodo Eacute equivalente acubesetpropertycore=dblarr(100100256)

Eacute o trabalho da funccedilatildeo setproperty decidir se a propriedade passada (core) faz sentido e se fizer fazer todo o trabalho necessaacuterio a esta mudanccedila Para o usuaacuterio eacute tudo automaacutetico e os dados da classe satildeo vaacutelidos o tempo todo

IDLgt helpcubecoreltExpressiongt DOUBLE = Array[100 100 256]

IDLgt printcubelinescubesamplescubebands 100 100 256

IDLgt cubesaveCM_1553510065_1_ir_editedcub

7389

Arquivos - binaacuterios ndash NetCDF e HDF5

Network Common Data Form e Hierarchical Data Format

Os dois uacutenicos formatos bem estabelecidos para dados cientiacuteficos geneacutericos

Armazenam dados como vaacuterias variaacuteveis e seus metadados Para cada variaacutevel haacute (ou pode haver) os metadados

Nome Dimensotildees (do array) Unidades Comentaacuterios

Ambos permitem arrays multidimensionais

Apenas HDF5 permite estruturas (daiacute vem a hierarquia)

Autodocumentados qualquer software que saiba ler um destes formatos lecirc qualquer arquivo sem precisar de conhecimento preacutevio sobre como o arquivo foi gerado

Muito bem suportados em bibliotecas padratildeo e natildeo padratildeo em softwares interativos e visualizadores (inclusive plugins para navegadores)

httpwwwunidataucaredusoftwarenetcdf httpenwikipediaorgwikiHdf5

NetCDF eacute mais simples de usar por natildeo ter hierarquia dando menos trabalho para ler e escrever dados Se hierarquia natildeo eacute necessaacuteria eacute mais conveniente de usar que HDF5

7489

Arquivos - binaacuterios - NetCDF e HDF5Haacute tambeacutem o formato CDL uma versatildeo ASCII do NetCDF A biblioteca padratildeo do NetCDF inclui conversores entre estes formatos

$ ncdump -h refspec_g01_0ncnetcdf refspec_g01_0 dimensions nlay = 51 nwn = 400 nleg = 33 numu = 2 nlev = 52 nphi = 3 ngas = 2 nwnc = 1 scal = 1 v3 = 3 dnl = 1 nk = 1 tdisr = UNLIMITED (0 currently) na = 16

variables float alb(nwn) float z(nlay) float t(nlay) float p(nlay) float wl(nwn) float iof(nwn) float mtau(nwn) float htau(nwn) float hctaus(nwn) float gtau(nwn) float outcos(scal) float phi(nleg) float phic(scal) float umu(numu) float flux(v3 nwn nlev) float mix(nlay ngas) float c(nlay) float psat(nlay) float ga(nwnc) float wlc(nwnc) float inc(scal) int dm(scal) int ord(scal) float fbeam(scal) float wn(nwn) float tautot(nwn nlay) float htaus(nwn nlay) float htaux(nwn nlay) float taug(nwn nlay) float phase(nwn nlay nleg) float ssa(nwn nlay) float uu(nwn nphi nlev numu) float u0u(nwn nlev numu) float tray(nwn nlay) float gtauo(tdisr nwn nlay)

Haacute 14 variaacuteveis usadas como dimensotildees para as 35 variaacuteveis que satildeo arrays

Ex alb(nwn) indica que alb eacute um array 1D de nwn elementos

nwn estaacute armazenado como uma das dimensotildees e eacute 400 portanto alb tem 400 elementos

Parte do conteuacutedo de um arquivo NetCDF em formato CDL (gerado pelo programa ncdump)

7589

Arquivos - binaacuterios - NetCDF e HDF5Conteuacutedo daquele arquivo visualizado com o ncview (acompanha a biblioteca NetCDF padratildeo)

7689

Arquivos - binaacuterios - NetCDF e HDF5O conteuacutedo de todo o arquivo pode ser lido facilmente com as bibliotecas disponiacuteveis e armazenado em contecirciners convenientes Usando um objeto que gera um resultado um pouco mais conveniente

IDLgt h=pp_readncdf(refspec_g01_0nchash)IDLgt printhvar_dims ltObjHeapVar229(HASH)gtvars ltObjHeapVar152(HASH)gtdims ltObjHeapVar118(HASH)gt

IDLgt printh[vars]T 173203 175459 175848 176001 175975 Z 431869 418858 406067 393403 380464 FLUX 300660 145536 0705180 0341669 0165532 PHASE 100000 0779034 0660858 0542052 0449983 TAUTOT0694377 0693420 0693474 0693540 0693636()

IDLgt help(h[vars])[TAUTOT]ltExpressiongt FLOAT = Array[51 400]

IDLgt print(h[var_dims])[TAUTOT]NLAY NWN

IDLgt print(h[dims])[(h[var_dims])[TAUTOT]]NLAY 51NWN 400

7789

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5)

Visualizaccedilatildeo da variaacutevel selecionada

Metadados e alguns valores da variaacutevel selecionada

Variaacutevel a ser criada com o conteuacutedo desta variaacutevel do arquivo

Hierarquia das variaacuteveis do arquivo

7889

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5) Imported variable az

IDLgt helpaz Structure ltd5723f38gt 13 tags length=448 data length=444 refs=1 _NAME STRING az _ICONTYPE STRING binary _TYPE STRING DATASET _FILE STRING INTENSI_test_409OUTh5 _PATH STRING _DATA DOUBLE Array[38] _NDIMENSIONS LONG 1 _DIMENSIONS ULONG64 Array[1] _NELEMENTS ULONG64 38 _DATATYPE STRING H5T_FLOAT _STORAGESIZE ULONG 8 _PRECISION LONG 64 _SIGN STRING

IDLgt printaz_data 00000000 10000000 20000000 30000000 40000000 50000000 60000000 80000000 ()

7989

Arquivos - binaacuterios - imagens

JPEG JPEG200 TIFF GeoTIFF etc

Os formatos comuns de imagens satildeo bem suportados em muacuteltiplas plataformas para uso dentro de programas e interativamente

Alguns formatos tecircm opccedilatildeo de compressatildeo com perda eou sem perda

Armazenam imagens como arrays 2D ou 3D (3D frequumlentemente limitado a 3 ou 4 em uma das dimensotildees uma imagem em 3 ou 4 bandas) de inteiros ou (em alguns formatos) reais

Alguns formatos permitem armazenar metadados para caracterizar as imagens armazenadas

JPEG2000 e GeoTIFF (um subconjunto de TIFF) comuns em astronomia e aacutereas proacuteximas

8089

Arquivos - binaacuterios ndash imagens ndash exemplo (IDL)IDLgt printquery_tiff(issmap_2009tiffinfogeotiff=geo) 1

IDLgt helpinfo Structure ltd4eca4b8gt 18 tags length=144 data length=132 refs=1 CHANNELS LONG 4 DIMENSIONS LONG Array[2] IMAGE_INDEX LONG 0 NUM_IMAGES LONG 1 PIXEL_TYPE INT 1 TYPE STRING TIFF BITS_PER_SAMPLE LONG 8 POSITION FLOAT Array[2] RESOLUTION FLOAT Array[2] UNITS LONG 2 TILE_SIZE LONG Array[2] DESCRIPTION STRING ISS (2009) DATE_TIME STRING 20100218 012436()

IDLgt helpgeo Structure ltd4efa1b8gt 10 tags length=264 data length=262 refs=1 MODELPIXELSCALETAG DOUBLE Array[3] MODELTIEPOINTTAG DOUBLE Array[6 4] GEOGRAPHICTYPEGEOKEY INT 4035 GEOGSEMIMAJORAXISGEOKEY DOUBLE 25750000 GEOGSEMIMINORAXISGEOKEY DOUBLE 25750000()

IDLgt myimage=read_tiff(issmap_2009tiff) Lecirc a imagem para o array myimage

Obteacutem informaccedilotildees sobre o arquivo

8189

Arquivos - binaacuterios ndash formatos nativosLinguagens como IDL R Python Java tecircm seu formato nativo binaacuterio acessado em alto niacutevel Basta mandar salvar ler variaacuteveis no do arquivo a biblioteca padratildeo automagicamente faz todo o trabalho de decidir como gravar ler os dados

Conveniente de usar na proacutepria linguagem Mas raramente existem bibliotecas para ler gravar o formato nativo de uma linguagem a partir de outra Ex (IDL)

IDLgt savefile=2dspectrumsavmydatamyheadercorners_dcorners_averbosecompress SAVE Portable (XDR) compressed SAVERESTORE file SAVE Saved variable MYDATA SAVE Saved variable MYHEADER()

Pode ser lido com apenas (haacute formas mais elaboradas)

IDLgt restore2dspectrumsavverbose RESTORE Portable (XDR) compressed SAVERESTORE file RESTORE Save file written by ltunknowngtltunknowngt Thu Jan 27 191422 2011 RESTORE IDL version 801 (linux x86_64) RESTORE Restored variable MYDATA RESTORE Restored variable MYHEADER()

IDLgt helpmydatamyheadercorners_dcorners_aMYDATA FLOAT = Array[1201 1201]MYHEADER STRING = Array[144]()

8289

Arquivos - processamento em baixo niacutevel

Nem sempre um formato padratildeo eacute a melhor escolha para o problema

Nem sempre haacute escolha (pode-se ter que trabalhar com arquivos que jaacute foram escritos em algum formato proprietaacuterio)

Agraves vezes o formato eacute padratildeo mas natildeo haacute bom suporte a ele disponiacutevel

Em todos estes casos eacute necessaacuterio escrever rotinas em baixo niacutevel que vatildeo ler processar diretamente o conteuacutedo do arquivo

Preferencialmente criando interfaces de alto niacutevel para o programa que vai as usar

8389

Arquivos - processamento em baixo niacutevel - texto

Tomando o exemplo anterior onde as colunas eram de diferentes tipos

NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS dec18s0001 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0002 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0003 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 FLAT 5408757812500 460000 5 dec18s0004 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 DARK 5408757812500 460000 5

A forma mais simples de o ler diretamente eacute definir uma estrutura para receber cada linha e um array destas estruturas para receber todo o arquivo Ex (IDL)

IDLgt record=namecalmpos0filnameechlpos0d0disppos0d0targnameposdirclassmjd_obsitime0d0coadds0IDLgt nlines=file_lines(filesearch_scamtxt)IDLgt mydata=replicate(recordnlines-1)IDLgt header=

Depois de definidas as variaacuteveis que vatildeo receber os dados o arquivo pode ser lido

IDLgt openrunitfilesearch_scamtxtget_lunIDLgt readfunitheaderIDLgt readfunitmydataformat=(A14I8A15F104F104A18A19A15F158F105I15)IDLgt free_lununit

A gravaccedilatildeo de um arquivo texto poderia ser feita de forma semelhante apenas trocando openr por openw (abrir o arquivo para gravaccedilatildeo natildeo leitura) e readf por printf

O arquivo eacute aberto em uma unidade (unit) usada para especificar de onde eacute feita a leitura

Ao final o arquivo eacute fechado

8489

Arquivos - processamento em baixo niacutevel - texto

O que resulta em

IDLgt printheader NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS

IDLgt helpmydataMYDATA STRUCT = -gt ltAnonymousgt Array[4]

IDLgt helpmydata[0] Structure ltd5e38f68gt 11 tags length=136 data length=124 refs=3 NAME STRING dec18s0001 CALMPOS INT 0 FILNAME STRING NIRSPEC-5-AO ECHLPOS DOUBLE 62630000 DISPPOS DOUBLE 36450000 TARGNAME STRING HD85258 POSDIR STRING NIRSPEC-5-AOp1 CLASS STRING STAR MJD_OBS STRING 54087574 ITIME DOUBLE 10000000 COADDS INT 1

Este caso eacute mais complicado que os mais comuns por haver colunas de strings

Se todas fossem de nuacutemeros natildeo teria sido necessaacuterio especificar o formato explicitamente As colunas teriam sido adivinhadas pela biblioteca que lecirc o arquivo Poderia ter sido lido escrito soacute com um array de nuacutemeros sem estruturas

8589

Arquivos - processamento em baixo niacutevel - binaacuterio

Formatos binaacuterios podem ser definidos de qualquer forma O arquivo eacute apenas um conjunto de bytes Cabe ao software saber como os interpretar

Uma escolha comum para que sejam autodocumentados eacute incluir um cabeccedilalho de texto informando as caracteriacutesticas dos dados necessaacuterias para os ler

Ex (IDL) criar um arquivo que armazene um array de doubles com um cabeccedilalho informando as dimensotildees para que o programa que o lecirc saiba como ler os dados

Inventa dados e abre o arquivo

IDLgt data_to_write=dindgen(34)IDLgt openwunitbinary_exampledatget_lun

Escreve as dimensotildees como texto

IDLgt printfunitdimensions of the double array stored belowIDLgt printfunitsize(data_to_writedimensions)

Escreve os dados binaacuterios

IDLgt writeuunitdata_to_write

Fecha o arquivo

IDLgt free_lununit

Escreve em binaacuterio (write unformatted)

8689

Arquivos - processamento em baixo niacutevel - binaacuterio

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

dimensions of the double array stored below 3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

8789

Arquivos - processamento em baixo niacutevel - binaacuterioA leitura deste arquivo eacute igualmente simples

IDLgt header=IDLgt dims=[00]IDLgt openrunitbinary_exampledatget_lun

Lecirc as dimensotildees (armazenadas como texto)

IDLgt readfunitheaderIDLgt readfunitdims

Lecirc a parte binaacuteria depois de saber as dimensotildees

IDLgt data_read=dblarr(dims)IDLgt readuunitdata_read

Fecha o arquivo

IDLgt free_lununit

Verifica que os dados foram gravados e lidos corretamente

IDLgt printarray_equal(data_to_writedata_read) 1

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Lecirc dados binaacuterios (read unformatted)

8889

Sumaacuterio

5 ndash Slides em httpwwwppenteadonetpeapea04_strings_iopdf Strings Expressotildees regulares Arquivos

httpwwwppenteadonetpea

8989

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89

Expressotildees regulares - regras - conjuntos de valores

[] denota um conjunto de valores que pode conter

Uma lista de coisas que devem corresponder Ex [abc] signfica qualquer caractere no conjunto abc Correspondem a esta

expressatildeo abcabha

Uma lista de coisas que natildeo podem corresponder [^abc] significa qualquer coisa que natildeo seja a b ou c Correspondem a esta

expressatildeo d jgs gg

Faixas de valores [0-9] signfica qualquer diacutegito [0-9a-zA-Z] significa qualquer diacutegito ou letra

Classes de valores como algumas faixas e outros conjuntos ocorrem com muita frequumlecircncia haacute nomes

especiais para eles Estes (em IDL) vecircm entre [] ex [[digit] significa o mesmo que [0-9]

4489

Expressotildees regulares - regras - classes de valores

Classe signficado

alnum Caracteres alfanumeacutericos 0-9a-zA-Z

alpha Caracteres alfabeacuteticos a-zA-Z

cntrl Caracteres de controle ASCII (natildeo visiacuteveis coacutedigos 1 a 31 e 127)

digit Diacutegitos (decimais) 0-9

graph Caracteres visiacuteveis ASCII 33 a 126 (natildeo inclui o espaccedilo)

lower Letras minuacutesculas a-z

print Caracteres ldquoimprimiacuteveisrdquo (visiacuteveis e o espaccedilo) ASCII 32 a 126

punct Caracteres de pontuaccedilatildeo $amprsquo()+-lt=gt[]^_lsquo|~

space Os caracteres ldquoem brancordquo (blank) espaccedilo tab tab vertical CR LF (ASCII 32 e 9-13)

upper Letras maiuacutesculas A-Z

xdigit Diacutegitos hexadecimais 0-9A-Fa-f

lt Comeccedilo de palavra (palavra definida como sequumlecircncia de coisas natildeo space)

gt Fim de palavra (palavra definida como sequumlecircncia de coisas natildeo space)

Estas satildeo apenas as principais Algumas implementaccedilotildees tecircm muito mais (em particular nas linguagens que usam Unicode nativamente)

4589

Expressotildees regulares - exemplos

Determinar se strings satildeo nuacutemeros (Ex IDL)

IDLgt str=[9-18 875-812-45913E9-98d7a188d032f5]

Inteiros

IDLgt intexpr=^[-+][0-9]+$

IDLgt printstregex(strintexprboolean) 1 1 0 0 0 0 0 0 0 0

Ponto flutuante

IDLgt fpexpr=^[-+](([0-9][0-9]+)|([0-9]+[0-9]))([eEdD][-+][0-9]+)$

IDLgt printstregex(strfpexprboolean) 1 1 0 1 1 1 1 1 0 0

Sinal opcional

1 ou mais diacutegitos

Sinal opcional

0 ou mais diacutegitos opcionalmente seguidos de um ponto e 1 ou mais diacutegitos

1 ou mais diacutegitos opcionalmente seguidos de um ponto e 0 ou mais diacutegitos

ou Expoente opcional letra do expoente seguida de sinal opcional seguido de um ou mais diacutegitos

4689

Expressotildees regulares ndash extraccedilatildeo

Interpretadores de expressotildees regulares costumam oferecer mais que apenas testar se um string corresponde a uma expressatildeo

Em geral tambeacutem podem retornar que parte(s) do string corresponde(m) agrave expressatildeo

Ex (IDL) Determinar se um string conteacutem uma data incluindo os formatos

IDLgt dates=[2011-01-312011 1 3120110131something done on y2011m1d31 with something]

E extrair a data de dentro do string

IDLgt expr=[0-9]4[0-9]12[0-9]12

(4 diacutegitos)(qualquer separador)(1 a 2 diacutegitos)(qualquer separador)(1 a 2 diacutegitos)

IDLgt printstregex(datesexprextract)format=(A)2011-01-312011 1 31201101312011m1d31

Como agora separar ano mecircs e dia Com uma busca e uma extraccedilatildeo para cada Poderia ser mais eacute mais faacutecil com uma uacutenica expressatildeo regular

4789

Expressotildees regulares - aleacutem de apenas testes

Tambeacutem podem retornar que parte(s) do string correspondem agrave expressatildeo toda e agraves suas subexpressotildees (partes da expressatildeo delimitadas por parecircnteses)

Ex (IDL) Separar pedaccedilos de datas Neste caso para a expressatildeo ficar menor assumindo um formato simples (yyyy-mm-ddThhmmssfff) Mas poderia ser um formato mais livre como no exemplo anterior

IDLgt str=Stuff observed on 2011-01-31T123924983 with some instrumentIDLgt expr=([0-9]4)-([0-9]2)-([0-9]2)T([0-9]2)([0-9]2)([0-9]2[0-9]3)

(quatro diacutegitos)-(2 diacutegitos)-(2 diacutegitos)T(2 diacutegitos)(2 diacutegitos)(2 diacutegitos3 diacutegitos)

IDLgt pieces=stregex(strexprextractsubexpr)IDLgt printpiecesformat=(A)2011-01-31T12392498320110131123924983IDLgt d=julday(pieces[2]pieces[3]pieces[1]pieces[4]pieces[5]pieces[6])IDLgt printdformat=(F166) 2455593027372

Expressatildeo inteiraPrimeira subexpressatildeoSegunda subexpressatildeoTerceira subexpressatildeoQuarta subexpressatildeoQuinta subexpressatildeoSexta subexpressatildeo

4889

Expressotildees regulares - referecircncias httpxkcdcom208

Viacutedeos do Software Carpentry

httpsoftware-carpentryorg4_0regexp

4989

Arquivos

Quase todo programa precisa armazenar dados em arquivos

Podem ser pequenos arquivos de paracircmetros ou enormes arquivos de dados produzidos ou a processar

Apesar do sugerido pela praacutetica comum arquivos texto natildeo satildeo sempre a melhor escolha para armazenar dados - e haacute muitas formas diferentes de os usar

Qual eacute a melhor escolha

Assim como para linguagens ou contecirciners natildeo existe ldquoo melhor formatordquo Cada um tem suas vantagens e desvantagens

Dados diferentes (mesmo se usados pelos mesmos programas) em geral se adequam melhor a formatos diferentes

5089

Arquivos - texto X binaacuterios

Em qualquer formato arquivos satildeo armazenados como diacutegitos binaacuterios

Mas haacute duas formas principais como eles podem ser codificados

Arquivos baseados em texto (text files)

Dados satildeo transformados em caracteres usando alguma formataccedilatildeo (mesmo se impliacutecita) e escritos com alguma codificaccedilatildeo de texto (comumente mas natildeo necessariamente ASCII)

Um arquivo texto eacute um ou mais strings As mesmas conversotildees tecircm que ser feitas depara outros tipos

Arquivos ldquobinaacuteriosrdquo (binary files)

Embora todo arquivo seja binaacuterio este nome costuma ser usado soacute para aqueles em que os dados natildeo estatildeo na forma de texto

Com frequumlecircncia (nem sempre) os dados satildeo gravados de forma idecircntica a como satildeo armazenados na memoacuteria

Muitos formatos usam uma mistura de partes em texto e partes binaacuterias

Um cabeccedilalho (header) de texto que daacute informaccedilotildees (metadados) sobre os dados armazenados na parte binaacuteria que vem depois

O cabeccedilalho conteacutem em especial informaccedilotildees sobre como ler os dados binaacuterios

5189

Arquivos - texto X binaacuterios

Vantagens de arquivos texto

Legiacuteveis por pessoas (human readable)

Podem ser auto-suficientes todo o necessaacuterio para os ler e entender o que conteacutem pode ser obtido olhando o arquivo

Satildeo os menos especiacuteficos a linguagens software normalmente satildeo escritos em ASCII ou Unicode e sempre haacute algum suporte a ler escrever texto em linguagens software

Haacute alguns formatos padratildeo para texto (exs CSV XML) que satildeo suportados em muitas plataformas diferentes

5289

Arquivos - texto X binaacuterios

Vantagens de arquivos binaacuterios

Em geral natildeo haacute conversotildees entre o os dados como armazenados na memoacuteria O que torna o armazenamento mais eficiente e sem alteraccedilotildees nos valores

A maior parte dos formatos padronizados eacute binaacuteria Exs FITS cube CDF NetCDF HDF HDF5 JPEG JPEG2000 TIFF GeoTIFF MPEG etc

Eacute mais comum que haja bibliotecas prontas (ateacute de alto niacutevel) para consulta leitura e gravaccedilatildeo

Os formatos melhor desenhados satildeo autodocumentados (em texto ou binaacuterio) para os ler natildeo eacute necessaacuterio conhecimento preacutevio sobre como os dados foram armazenados

Toda linguagem plataforma costuma ter seu formato binaacuterio mais nativo que costuma ser o mais faacutecil para leitura gravaccedilatildeo Em particular nas de alto niacutevel que tecircm formatos autodocumentados (especialmente

em IDL R Python Java)

Muitos formatos tecircm opccedilatildeo de compressatildeo dos dados

5389

Arquivos - proprietaacuterios X padratildeo

Independente da escolha texto binaacuterio programas devem escolher entre usar um formato proacuteprio ou um formato padronizado

A principal vantagem de formatos proacuteprios eacute que satildeo definidos da forma mais conveniente para a aplicaccedilatildeo que os usa simplificando leitura e gravaccedilatildeo e potencialmente otimizando recursos (acesso ao disco tamanho do arquivo etc)

A principal desvantagem de formatos proacuteprios eacute ser necessaacuterio escrever todo o coacutedigo para os ler gravar

Pode dar mais trabalho que usar um formato geneacuterico que natildeo seja exatamente o que melhor se encaixa na aplicaccedilatildeo

O coacutedigo para processar o formato em geral vai ser menos completo e conveniente de usar que o de um formato bem estabelecido usado por muitos outros em muitos ambientes

Cada novo software que for usar estes arquivos vai precisar compartilhar do mesmo coacutedigo ou precisar de coacutedigo novo (em particular se em outra linguagem) para ler gravar naquele formato

Eacute necessaacuterio documentar o formato e decidir sobre como ele seraacute definido

Se outros jaacute colocaram muito trabalho desenvolvendo bons formatos padratildeo bem suportados em muitos ambientes por que ter o trabalho de reinventar (e reprogramar redocumentar e retestar) a roda

5489

Arquivos - padrotildees comuns em astronomia (exs adiante)

Texto

CSV Comma-separated values - bem suportado por muitos softwares

ldquoColunas fixasrdquo Natildeo eacute um padratildeo bem definido mas eacute praacutetica comum para tabelas (2D)

XML Extensible Markup Language - O padratildeo texto mais flexiacutevel de grande uso em programaccedilatildeo geral para armazenar qualquer coisa com frequumlecircncia de forma hieraacuterquica Bem suportado por linguagens modernas (e modernizadas) e bibliotecas das principais

linguagens gerais Alta complexidade o torna trabalhoso de usar

5589

Arquivos - padrotildees comuns em astronomia (exs adiante)Binaacuterios

FITS Flexible Image Transport System - o mais comum para observaccedilotildees astronocircmicas Conteacutem os dados (em geral arrays 1D 2D ou 3D) e documentaccedilatildeo (nos cabeccedilalhos) sobre a origem e caracteriacutesticas dos dados Tambeacutem usado para armazenar tabelas de dados quaisquer mesmo que natildeo sejam observaccedilotildees (especialmente pelo STSCI) Variam muito em qualidade de documentaccedilatildeo

NetCDF Network Common Data Form - evoluccedilatildeo do CDF autodocumentado eacute comum e bem suportado para vaacuterios arrays de dados

HDF5 Hierarchical Data Format ndash autodocumentado comum e bem suportado permitindo aleacutem de simples arrays estruturas (eacute um formato hieraacuterquico)

Formatos de imagens JPEG JPEG2000 TIFF GeoTIFF etc - voltados para arrays 2D3D de inteiros ou (em alguns casos) reais com ou sem compressatildeo JPEG2000 tem caracteriacutesticas mais avanccediladas como imagens multiresoluccedilatildeo

Formatos vetoriais PS EPS DXF SHP SVG - variados niacuteveis de suporte a armazenamento de vetores e formas em 2D ou 3D

ISIS Cube semelhante em caracteriacutesticas ao FITS mais usado em sensoriamento remoto geociecircncias e ciecircncias planetaacuterias em geral para observaccedilotildees 1D 2D ou 3D

Formatos nativos de linguagens todo o trabalho de leitura e gravaccedilatildeo eacute feito automagicamente pela biblioteca padratildeo em IDL R Python Java

5689

Arquivos texto - newlines

Apesar do que possa parecer arquivos texto natildeo tecircm intrinsecamente vaacuterias linhas Arquivos texto satildeo soacute uma sequumlecircncia 1D de caracteres em alguma codificaccedilatildeo Separaccedilatildeo em linhas (equivalente a interpretar o arquivo como 2D em linhas e colunas) eacute

especificada por convenccedilotildees Natildeo haacute apenas uma convenccedilatildeo para o fim de linhas

A mais primitiva convenccedilatildeo eacute separaccedilatildeo nenhuma estipula-se que linhas tenham um nuacutemero fixo N de caracteres e cabe ao software que lecirc o arquivo entender que uma linha nova ocorre regularmente a cada N caracteres

Eacute a forma menos portaacutevel e mais inconveniente eacute necessaacuterio o conhecimento preacutevio (ou por inspeccedilatildeo do arquivo) de quantos caracteres haacute por linha

A maior parte dos editores de texto natildeo vai saber separar linhas desta forma (por falta deste conhecimento preacutevio) Exemplo (de um FITS real)

SIMPLE = T Fits standard BITPIX = 16 Bits per pixel NAXIS = 0 Number of axes EXTEND = T File may contain extensions

O que com as linhas quebradas nos lugares certos seria

SIMPLE = T Fits standard BITPIX = 16 Bits per pixel NAXIS = 0 Number of axes EXTEND = T File may contain extensions

5789

Arquivos texto - newlines

A forma mais comum de especificar linhas eacute com um marcador do final de linha (newline)

Eacute um caractere especial natildeo normalmente presente no texto que serve para marcar fim de linhas

Mas natildeo haacute soacute um padratildeo de newline Os mais comuns

LF (Line Feed ASCII 10) ndash Unix Linux Mac OS X

CR - (Carriage Return ASCII 13) - Mac OS lt10

CR+LF (CR seguido de LF) - Windows DOS

Eacute o motivo de o Notepad (Windows) natildeo entender as quebras de linha de arquivos escritos com o formato nativo de Linux o arquivo soacute tem LF enquanto o editor espera CR+LF

Alguns sistemas (strings em vaacuterias linguagens por exemplo) usam o coacutedigo de escape n para indicar newline que eacute codificado de acordo com o padratildeo sendo usado

Em geral bibliotecas de leitura e gravaccedilatildeo de arquivos usam (default pelo menos) o newline nativo do sistema em que satildeo usadas

Programas de conversatildeo entre os sistemas satildeo comuns (ex dos2unix)

O Wordpad identifica se for usado soacute LF e quebra as linhas de acordo

5889

Arquivos - texto - CSV

Comma-separated values

O formato mais padronizado para tabelas (arrays 2D) em texto (frequentemente mas natildeo necessariamente ASCII)

Bem suportado por bibliotecas padratildeo de linguagens e outros softwares (Excel Calc Origin Google Docs etc)

Conteacutem Linhas de cabeccedilalho (opcionais mas recomendadas) linhas com qualquer texto geral

descrevendo o arquivo e em geral uma linha de tiacutetulo para as colunas da tabela Uma (apenas uma) tabela onde todas as linhas tecircm o mesmo nuacutemero de colunas

Colunas separadas por viacutergulas (opcionalmente pode ser outro separador) Linhas terminadas por newline (qualquer que seja) Strings delimitados por ldquo ldquo

Ex

NAMECALMPOSFILNAMEECHLPOSDISPPOSTARGNAMEPOSDIRCLASSMJD-OBSITIMECOADDSdec18s00010NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001dec18s00020NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001dec18s00120NIRSPEC-5-AO635800364500itan140NIRSPEC-5-AOp2 TITAN5408763000001dec18s00140NIRSPEC-5-AO626300364500itan140NIRSPEC-5-AOp1 TITAN5408763000001dec18s00151NIRSPEC-5-AO626300364500itan140NIRSPEC-5-AOp1ARC5408764000001dec18s00160NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001

Natildeo eacute necessaacuterio que as colunas tenham largura constante

Cabeccedilalho

5989

Arquivos - texto - CSVHaacute amplo suporte a leitura e gravaccedilatildeo de CSV sem precisar recorrer a procedimentos de baixo niacutevel

Podem ser diretamente importados em Excel Calc Origin Google Docs ou lido facilmente com bibliotecas padratildeo comuns Ex (IDL)

IDLgt c=read_csv(filesearch_scamcsvheader=h)IDLgt printhNAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS

IDLgt helpc Structure ltc8bca508gt 11 tags length=5256 data length=5248 refs=1 FIELD01 STRING Array[41] FIELD02 LONG Array[41] FIELD03 STRING Array[41] FIELD04 DOUBLE Array[41] FIELD05 DOUBLE Array[41] FIELD06 STRING Array[41] FIELD07 STRING Array[41] FIELD08 STRING Array[41] FIELD09 STRING Array[41] FIELD10 DOUBLE Array[41] FIELD11 LONG Array[41]

IDLgt printcfield01[03]dec18s0001 dec18s0002 dec18s0003 dec18s0004

IDLgt printcfield03[03]NIRSPEC-5-AO NIRSPEC-5-AO NIRSPEC-5-AO NIRSPEC-5-AO

6089

Arquivos - texto - CSVEx (IDL) Criaccedilatildeo de um CSV com uma tabela de valores

Criaccedilatildeo de 3 arrays 1D (12 elementos) um para cada coluna

IDLgt x=dindgen(3)IDLgt y=dindgen(4)IDLgt xx=reform(rebin(x34)12)IDLgt yy=reform(rebin(reform(y14)34)12)IDLgt f=xx+yy10IDLgt helpxxyyfXX DOUBLE = Array[12]YY DOUBLE = Array[12]F DOUBLE = Array[12]

Escrita do arquivo

IDLgt write_csvexamplecsvxxyyfheader=[XYX+10Y]

ResultadoXYX+10Y000000000000000000000000100000000000000010000000200000000000000020000000000000001000000010000000100000001000000011000000()

6189

Arquivos - texto - ldquoColunas regularesrdquoFixed column width

Natildeo eacute exatamente um padratildeo Eacute uma praacutetica comum

Armazena uma tabela (array 2D) de forma regular simples de ser interpretada e lida

Costumam ter linha(s) de cabeccedilalho descrevendo o conteuacutedo do arquivo em geral com uma linha para os nomes das colunas

As demais linhas conteacutem os dados sempre ocupando a mesma largura por coluna e escritos no mesmo formato em cada coluna

Costumam ser simples de ler inclusive interativamente (exs Excel Calc Origin read_ascii)

Ex (IDL) Uma simples tabela soacute de nuacutemeros

wavl CH4=33 wavl CH4=25 wavl CH4=10 wavl CH4=08 wavl CH4=05 wavl CH4=026 wavl CH4=02 477330000 0090130 477330000 0091110 477330000 0089250 477330000 0087000 477330000 0087140 477330000 0090080 477330000 0088110 480040000 0090930 480040000 0091930 480040000 0090160 480040000 0087930 480040000 0088110 480040000 0090950 480040000 0089090 482750000 0091710 482750000 0092730 482750000 0091060 482750000 0088850 482750000 0089080 482750000 0091810 482750000 0090060 485450000 0092530 485450000 0093570 485450000 0092000 485450000 0089810 485450000 0090100 485450000 0092730 485450000 0091090

IDLgt a=read_ascii(specs_27s_ntxtdata_start=1header=header)IDLgt printheader wavl CH4=33 wavl CH4=25 wavl CH4=10 wavl CH4=08 wavl CH4=05 wavl CH4=026 wavl CH4=02 IDLgt helpa Structure ltd423c9a8gt 1 tags length=224 data length=224 refs=1 FIELD01 FLOAT Array[14 4]

6289

Arquivos - texto - ldquoColunas regularesrdquoJaacute um arquivo um pouco mais difiacutecil de ler

NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS dec18s0001 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0002 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0003 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 FLAT 5408757812500 460000 5 dec18s0004 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 DARK 5408757812500 460000 5

Por ter colunas de tipos diferentes (strings inteiros reais) natildeo eacute possiacutevel o ler em um simples array Mas eacute faacutecil o colocar em uma estrutura de arrays onde cada campo eacute uma coluna

Especificando interativamente como interpretar as linhasIDLgt templ=ascii_template(filesearch_scamtxt)

Nome do campo (default mostrado)

Tipo do campo (identificado automaticamente)

Posiccedilatildeo (caracter) do comeccedilo (identificada automaticamente)

Linha de exemplo para verificar as colunas

6389

Arquivos - texto - ldquoColunas regularesrdquoDepois de feito o template o arquivo pode ser lido com apenas

IDLgt a=read_ascii(filesearch_scamtxttemplate=templ)IDLgt helpa Structure ltd4ec4608gt 11 tags length=416 data length=416 refs=1 FIELD01 STRING Array[4] FIELD02 LONG Array[4] FIELD03 STRING Array[4] FIELD04 FLOAT Array[4] FIELD05 FLOAT Array[4] FIELD06 STRING Array[4] FIELD07 STRING Array[4] FIELD08 STRING Array[4] FIELD09 FLOAT Array[4] FIELD10 FLOAT Array[4] FIELD11 LONG Array[4]IDLgt printafield01dec18s0001 dec18s0002 dec18s0003 dec18s0004IDLgt printafield04 626300 626300 626300 626300

O template (uma estrutura contendo dados sobre como ler o arquivo) pode ser usado para outros arquivos no mesmo formato No lugar de ter sido criado interativamente poderia ter sido lido de algum arquivo Poderia ter especificado nomes para os campos que seriam mais amigaacuteveis que coias como FIELD11

6489

Arquivos - texto - XML

Extensible Markup Language

Admite grande flexibilidade e por isso pode ter alta complexidade

Valores satildeo colocados dentro de uma estrutura em hieraacuterquica (em uma aacutervore) com os noacutes identificados pelos seus nomes (chaves)

Largamente usado em muitas aacutereas para armazenar conjuntos arbitraacuterios de quaisquer estruturas de dados

A maioria das aplicaccedilotildees usa um formato que eacute um subconjunto do XML especificado por um Schema comumente em um arquivo XML DTD (Document Type Definition)

6589

Arquivos - texto ndash XML ndash exemplos de usos

Armazenamento de dados de aplicaccedilotildees web (comum para exportar importar dados MediaWiki DokuWiki WordPress ADS Lattes etc)

Documentos Office (docx pptx xlsx) OpenOffice (odt opd ods)

Como versotildees de outros formatos FITSML XDF

ldquoScientific Dataset XML NASAs Astronomical Data Center (ADC) sponsors a number of research projects that

use XML for scientific data representation The XML activities at the ADC are sponsored and supported by the NASA Office of Space Science Applied Information Systems Research Program (AISRP)rdquo - httpxmlcoverpagesorgnasa-adchtml

Astronomical Instrument Markup Language (AIML)

SVG ndash Scalable Vector Graphics

Muitas de outras aplicaccedilotildees listadas em httpxmlcoverpagesorgxmlhtmlapplications

6689

Arquivos - texto ndash XML - exemploltxml version=10 gtltDOCTYPE Xdmf SYSTEM Xdmfdtd []gtltXdmf xmlnsxi=httpwwww3org2001XInclude Version=20gt ltDomaingt lt-- Example of Basic Topologies --gt ltInformation Name=Descriptiongt Example of a Polyvertex Topology ltInformationgt ltGrid Name=Polyvertex GridType=Uniformgt ltTopology TopologyType=Polyvertex Dimensions=3 NodesPerElement=3gt ltDataItem Format=XML Dimensions=3 3 NumberType=Floatgt 0 1 2 4 5 6 8 9 10 ltDataItemgt ltTopologygt ltGeometry Type=XYZgt ltDataItem Format=XML Dimensions=4 4 3gt 00 00 00 10 00 00()Que mostra que a interpretaccedilatildeo (parsing) de XML eacute em geral complexa

6789

Arquivos - texto - XML

Haacute muitas bibliotecas de alto niacutevel para fazer o processamento (parsing) e entregar os dados em uma estrutura conveniente

A complexidade em processar XML estaacute em decidir o que fazer com os dados jaacute que os arquivos podem ser muito complexos

As APIs (Application Programming Interfaces) mais comuns para processar XML que satildeo implementadas em muitas linguagens

DOM (Document Object Model) ndash manteacutem todo o conteuacutedo do em uma estrutura de dados (em geral uma aacutervore) em uma variaacutevel (em geral um objeto) Esta pode ser consultada para obter os valores de interesse para os alterar e usada para escrever um arquivo

SAX (Simple API for XML) ndash Interpretador (parser) por objetos O usuaacuterio escreve uma classe herdando da classe SAX provendo os meacutetodos que vatildeo processar os campos agrave medida em que estes satildeo lidos

6889

Arquivos - binaacuterios - FITSFlexible Image Transport System

O formato mais comum para observaccedilotildees astronocircmicas Tambeacutem usado para armazenar quaisquer dados mesmo natildeo relacionados a observaccedilotildees (especialmente tabelas como eacute praacutetica do STSCI)

Conteacutem um (ou mais) cabeccedilalho(s) de texto com metadados (informaccedilotildees sobre os dados como caracteriacutesticas (necessaacuterias para os ler) origem condiccedilotildees em que foram obtidos processamento realizado etc)

SIMPLE = T image conforms to FITS standard BITPIX = 32 bits per data value NAXIS = 2 number of axes NAXIS1 = 1024 NAXIS2 = 1024 BSCALE = 100000 Scaling factor BZERO = 000000 Scaling zero-point TELESCOP= Keck II Telescope SLITNAME= 0041x226 Slit Name SLITPA = 351979 Slit position angle SLITX = 131500 X pixel of the center of the slit LST = 12010446 local apparent sidereal time (()

Depois do cabeccedilalho haacute uma (ou mais) seccedilatildeo(otildees) de dados binaacuterios Costuma(m) ser array(s) 1D (espectros) 2D (imagens) ou 3D (ldquocubos de dadosrdquo)

De inteiros ou reais inteiros satildeo comuns em contagens de instrumentos reais para valores derivados (fluxos intensidades etc)

6989

Arquivos - binaacuterios - FITSNormalmente FITS satildeo lidos escritos por bibliotecas prontas de (relativamente) alto niacutevel usuaacuterio natildeo tem que saber como os dados satildeo armazenados no arquivo nem como os ler escrever Ex (IDL com a biblioteca idlastro)

IDLgt fits_info2dspectrumfits2dspectrumfits has 3 extensionsPrimary header 288 recordsNo dataExtension 1 -- SCI Header 144 records IMAGE ( 1201 1201 )Extension 2 -- ERR Header 72 records IMAGE ( 1201 1201 )Extension 3 -- DQ Header 72 records IMAGE ( 1201 1201 )

IDLgt mydata=readfits(2dspectrumfitsexten_no=1myheader) READFITS Reading FITS extension of type IMAGE READFITS Now reading 1201 by 1201 array

IDLgt extastmyheadermyastIDLgt sz=size(mydatadimensions)IDLgt xy2ad[1sz[0]][1sz[1]]myastcorners_acorners_dIDLgt printcorners_aCorners of the data array from file 2dspectrumfits are at 14487480 33063480

IDLgt printcorners_d -00041264444 00041402222

Obteacutem os dados de coordenadas (WCS) do header

Coloca os dados no array (2D de floats) mydata e o header no array (1D de strings) myheader

Calcula as coordenadas das quinas da imagem atraveacutes do WCS

Provecirc informaccedilotildees sobre o arquivo

7089

Arquivos - binaacuterios - ISIS Cube

Formatos como FITS se adequam muito a ter uma interface de mais alto niacutevel por objetos

Tambeacutem para dados em tabelas FITS muito mais trabalhosos de ler em baixo niacutevel que se adequam muito mais a mapas ou estruturas

Exemplo (de um formato semelhante a FITS ISIS cube)

O objeto ao ser criado lecirc todo o arquivo

cube=pp_editablecube(CM_1553510065_1_ircub)

Meacutetodos fornecem os dados desejados para obter quando necessaacuterio os dados de interesse

Find out the names of the backplanesprintcubegetproperty(backnames)Get the start time of the cubeprintcubegetfromheader(START_TIME)2007-084T100057286Z

Valores no cabeccedilalho podem ser convenientemente fornecidos como um mapa

header=cubeheader_as_hash()printheader[START_TIME]2007-084T100057286Z

7189

Arquivos - binaacuterios ndash ISIS Cube

Os dados satildeo fornecidos como arraysMake a contour plot of the latitudesc=contour(cubegetsuffixbyname(LATITUDE))Get the band with wavelength nearest to 21 (in the units used in the cube)selband=cubegetbandbywavelength(21wavelengths=selwavs)

Interfaces por overload tornam o acesso ainda mais conveniente

selband=cube[21]

selwavs=cube[21]

Retorna um array com a banda de comprimento de onda mais proacuteximo de 21 (microm)

Retorna o comprimento de onda mais proacuteximo de 21 (microm) da banda retornada acima

7289

Arquivos - binaacuterios ndash ISIS Cube Alteraccedilotildees feitas ao conteuacutedo satildeo automaticamente refletidas em todos os

lugares (cabeccedilalho em particular) afetados mantendo o objeto vaacutelido que pode depois ser gravado em um novo arquivo

IDLgt printcubelinescubesamplescubebands 64 64 256

IDLgt helpcubecoreltExpressiongt FLOAT = Array[64 64 256]

IDLgt cubecore=dblarr(100100256)

A linha acima natildeo eacute uma atribuiccedilatildeo eacute uma invocaccedilatildeo de meacutetodo Eacute equivalente acubesetpropertycore=dblarr(100100256)

Eacute o trabalho da funccedilatildeo setproperty decidir se a propriedade passada (core) faz sentido e se fizer fazer todo o trabalho necessaacuterio a esta mudanccedila Para o usuaacuterio eacute tudo automaacutetico e os dados da classe satildeo vaacutelidos o tempo todo

IDLgt helpcubecoreltExpressiongt DOUBLE = Array[100 100 256]

IDLgt printcubelinescubesamplescubebands 100 100 256

IDLgt cubesaveCM_1553510065_1_ir_editedcub

7389

Arquivos - binaacuterios ndash NetCDF e HDF5

Network Common Data Form e Hierarchical Data Format

Os dois uacutenicos formatos bem estabelecidos para dados cientiacuteficos geneacutericos

Armazenam dados como vaacuterias variaacuteveis e seus metadados Para cada variaacutevel haacute (ou pode haver) os metadados

Nome Dimensotildees (do array) Unidades Comentaacuterios

Ambos permitem arrays multidimensionais

Apenas HDF5 permite estruturas (daiacute vem a hierarquia)

Autodocumentados qualquer software que saiba ler um destes formatos lecirc qualquer arquivo sem precisar de conhecimento preacutevio sobre como o arquivo foi gerado

Muito bem suportados em bibliotecas padratildeo e natildeo padratildeo em softwares interativos e visualizadores (inclusive plugins para navegadores)

httpwwwunidataucaredusoftwarenetcdf httpenwikipediaorgwikiHdf5

NetCDF eacute mais simples de usar por natildeo ter hierarquia dando menos trabalho para ler e escrever dados Se hierarquia natildeo eacute necessaacuteria eacute mais conveniente de usar que HDF5

7489

Arquivos - binaacuterios - NetCDF e HDF5Haacute tambeacutem o formato CDL uma versatildeo ASCII do NetCDF A biblioteca padratildeo do NetCDF inclui conversores entre estes formatos

$ ncdump -h refspec_g01_0ncnetcdf refspec_g01_0 dimensions nlay = 51 nwn = 400 nleg = 33 numu = 2 nlev = 52 nphi = 3 ngas = 2 nwnc = 1 scal = 1 v3 = 3 dnl = 1 nk = 1 tdisr = UNLIMITED (0 currently) na = 16

variables float alb(nwn) float z(nlay) float t(nlay) float p(nlay) float wl(nwn) float iof(nwn) float mtau(nwn) float htau(nwn) float hctaus(nwn) float gtau(nwn) float outcos(scal) float phi(nleg) float phic(scal) float umu(numu) float flux(v3 nwn nlev) float mix(nlay ngas) float c(nlay) float psat(nlay) float ga(nwnc) float wlc(nwnc) float inc(scal) int dm(scal) int ord(scal) float fbeam(scal) float wn(nwn) float tautot(nwn nlay) float htaus(nwn nlay) float htaux(nwn nlay) float taug(nwn nlay) float phase(nwn nlay nleg) float ssa(nwn nlay) float uu(nwn nphi nlev numu) float u0u(nwn nlev numu) float tray(nwn nlay) float gtauo(tdisr nwn nlay)

Haacute 14 variaacuteveis usadas como dimensotildees para as 35 variaacuteveis que satildeo arrays

Ex alb(nwn) indica que alb eacute um array 1D de nwn elementos

nwn estaacute armazenado como uma das dimensotildees e eacute 400 portanto alb tem 400 elementos

Parte do conteuacutedo de um arquivo NetCDF em formato CDL (gerado pelo programa ncdump)

7589

Arquivos - binaacuterios - NetCDF e HDF5Conteuacutedo daquele arquivo visualizado com o ncview (acompanha a biblioteca NetCDF padratildeo)

7689

Arquivos - binaacuterios - NetCDF e HDF5O conteuacutedo de todo o arquivo pode ser lido facilmente com as bibliotecas disponiacuteveis e armazenado em contecirciners convenientes Usando um objeto que gera um resultado um pouco mais conveniente

IDLgt h=pp_readncdf(refspec_g01_0nchash)IDLgt printhvar_dims ltObjHeapVar229(HASH)gtvars ltObjHeapVar152(HASH)gtdims ltObjHeapVar118(HASH)gt

IDLgt printh[vars]T 173203 175459 175848 176001 175975 Z 431869 418858 406067 393403 380464 FLUX 300660 145536 0705180 0341669 0165532 PHASE 100000 0779034 0660858 0542052 0449983 TAUTOT0694377 0693420 0693474 0693540 0693636()

IDLgt help(h[vars])[TAUTOT]ltExpressiongt FLOAT = Array[51 400]

IDLgt print(h[var_dims])[TAUTOT]NLAY NWN

IDLgt print(h[dims])[(h[var_dims])[TAUTOT]]NLAY 51NWN 400

7789

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5)

Visualizaccedilatildeo da variaacutevel selecionada

Metadados e alguns valores da variaacutevel selecionada

Variaacutevel a ser criada com o conteuacutedo desta variaacutevel do arquivo

Hierarquia das variaacuteveis do arquivo

7889

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5) Imported variable az

IDLgt helpaz Structure ltd5723f38gt 13 tags length=448 data length=444 refs=1 _NAME STRING az _ICONTYPE STRING binary _TYPE STRING DATASET _FILE STRING INTENSI_test_409OUTh5 _PATH STRING _DATA DOUBLE Array[38] _NDIMENSIONS LONG 1 _DIMENSIONS ULONG64 Array[1] _NELEMENTS ULONG64 38 _DATATYPE STRING H5T_FLOAT _STORAGESIZE ULONG 8 _PRECISION LONG 64 _SIGN STRING

IDLgt printaz_data 00000000 10000000 20000000 30000000 40000000 50000000 60000000 80000000 ()

7989

Arquivos - binaacuterios - imagens

JPEG JPEG200 TIFF GeoTIFF etc

Os formatos comuns de imagens satildeo bem suportados em muacuteltiplas plataformas para uso dentro de programas e interativamente

Alguns formatos tecircm opccedilatildeo de compressatildeo com perda eou sem perda

Armazenam imagens como arrays 2D ou 3D (3D frequumlentemente limitado a 3 ou 4 em uma das dimensotildees uma imagem em 3 ou 4 bandas) de inteiros ou (em alguns formatos) reais

Alguns formatos permitem armazenar metadados para caracterizar as imagens armazenadas

JPEG2000 e GeoTIFF (um subconjunto de TIFF) comuns em astronomia e aacutereas proacuteximas

8089

Arquivos - binaacuterios ndash imagens ndash exemplo (IDL)IDLgt printquery_tiff(issmap_2009tiffinfogeotiff=geo) 1

IDLgt helpinfo Structure ltd4eca4b8gt 18 tags length=144 data length=132 refs=1 CHANNELS LONG 4 DIMENSIONS LONG Array[2] IMAGE_INDEX LONG 0 NUM_IMAGES LONG 1 PIXEL_TYPE INT 1 TYPE STRING TIFF BITS_PER_SAMPLE LONG 8 POSITION FLOAT Array[2] RESOLUTION FLOAT Array[2] UNITS LONG 2 TILE_SIZE LONG Array[2] DESCRIPTION STRING ISS (2009) DATE_TIME STRING 20100218 012436()

IDLgt helpgeo Structure ltd4efa1b8gt 10 tags length=264 data length=262 refs=1 MODELPIXELSCALETAG DOUBLE Array[3] MODELTIEPOINTTAG DOUBLE Array[6 4] GEOGRAPHICTYPEGEOKEY INT 4035 GEOGSEMIMAJORAXISGEOKEY DOUBLE 25750000 GEOGSEMIMINORAXISGEOKEY DOUBLE 25750000()

IDLgt myimage=read_tiff(issmap_2009tiff) Lecirc a imagem para o array myimage

Obteacutem informaccedilotildees sobre o arquivo

8189

Arquivos - binaacuterios ndash formatos nativosLinguagens como IDL R Python Java tecircm seu formato nativo binaacuterio acessado em alto niacutevel Basta mandar salvar ler variaacuteveis no do arquivo a biblioteca padratildeo automagicamente faz todo o trabalho de decidir como gravar ler os dados

Conveniente de usar na proacutepria linguagem Mas raramente existem bibliotecas para ler gravar o formato nativo de uma linguagem a partir de outra Ex (IDL)

IDLgt savefile=2dspectrumsavmydatamyheadercorners_dcorners_averbosecompress SAVE Portable (XDR) compressed SAVERESTORE file SAVE Saved variable MYDATA SAVE Saved variable MYHEADER()

Pode ser lido com apenas (haacute formas mais elaboradas)

IDLgt restore2dspectrumsavverbose RESTORE Portable (XDR) compressed SAVERESTORE file RESTORE Save file written by ltunknowngtltunknowngt Thu Jan 27 191422 2011 RESTORE IDL version 801 (linux x86_64) RESTORE Restored variable MYDATA RESTORE Restored variable MYHEADER()

IDLgt helpmydatamyheadercorners_dcorners_aMYDATA FLOAT = Array[1201 1201]MYHEADER STRING = Array[144]()

8289

Arquivos - processamento em baixo niacutevel

Nem sempre um formato padratildeo eacute a melhor escolha para o problema

Nem sempre haacute escolha (pode-se ter que trabalhar com arquivos que jaacute foram escritos em algum formato proprietaacuterio)

Agraves vezes o formato eacute padratildeo mas natildeo haacute bom suporte a ele disponiacutevel

Em todos estes casos eacute necessaacuterio escrever rotinas em baixo niacutevel que vatildeo ler processar diretamente o conteuacutedo do arquivo

Preferencialmente criando interfaces de alto niacutevel para o programa que vai as usar

8389

Arquivos - processamento em baixo niacutevel - texto

Tomando o exemplo anterior onde as colunas eram de diferentes tipos

NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS dec18s0001 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0002 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0003 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 FLAT 5408757812500 460000 5 dec18s0004 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 DARK 5408757812500 460000 5

A forma mais simples de o ler diretamente eacute definir uma estrutura para receber cada linha e um array destas estruturas para receber todo o arquivo Ex (IDL)

IDLgt record=namecalmpos0filnameechlpos0d0disppos0d0targnameposdirclassmjd_obsitime0d0coadds0IDLgt nlines=file_lines(filesearch_scamtxt)IDLgt mydata=replicate(recordnlines-1)IDLgt header=

Depois de definidas as variaacuteveis que vatildeo receber os dados o arquivo pode ser lido

IDLgt openrunitfilesearch_scamtxtget_lunIDLgt readfunitheaderIDLgt readfunitmydataformat=(A14I8A15F104F104A18A19A15F158F105I15)IDLgt free_lununit

A gravaccedilatildeo de um arquivo texto poderia ser feita de forma semelhante apenas trocando openr por openw (abrir o arquivo para gravaccedilatildeo natildeo leitura) e readf por printf

O arquivo eacute aberto em uma unidade (unit) usada para especificar de onde eacute feita a leitura

Ao final o arquivo eacute fechado

8489

Arquivos - processamento em baixo niacutevel - texto

O que resulta em

IDLgt printheader NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS

IDLgt helpmydataMYDATA STRUCT = -gt ltAnonymousgt Array[4]

IDLgt helpmydata[0] Structure ltd5e38f68gt 11 tags length=136 data length=124 refs=3 NAME STRING dec18s0001 CALMPOS INT 0 FILNAME STRING NIRSPEC-5-AO ECHLPOS DOUBLE 62630000 DISPPOS DOUBLE 36450000 TARGNAME STRING HD85258 POSDIR STRING NIRSPEC-5-AOp1 CLASS STRING STAR MJD_OBS STRING 54087574 ITIME DOUBLE 10000000 COADDS INT 1

Este caso eacute mais complicado que os mais comuns por haver colunas de strings

Se todas fossem de nuacutemeros natildeo teria sido necessaacuterio especificar o formato explicitamente As colunas teriam sido adivinhadas pela biblioteca que lecirc o arquivo Poderia ter sido lido escrito soacute com um array de nuacutemeros sem estruturas

8589

Arquivos - processamento em baixo niacutevel - binaacuterio

Formatos binaacuterios podem ser definidos de qualquer forma O arquivo eacute apenas um conjunto de bytes Cabe ao software saber como os interpretar

Uma escolha comum para que sejam autodocumentados eacute incluir um cabeccedilalho de texto informando as caracteriacutesticas dos dados necessaacuterias para os ler

Ex (IDL) criar um arquivo que armazene um array de doubles com um cabeccedilalho informando as dimensotildees para que o programa que o lecirc saiba como ler os dados

Inventa dados e abre o arquivo

IDLgt data_to_write=dindgen(34)IDLgt openwunitbinary_exampledatget_lun

Escreve as dimensotildees como texto

IDLgt printfunitdimensions of the double array stored belowIDLgt printfunitsize(data_to_writedimensions)

Escreve os dados binaacuterios

IDLgt writeuunitdata_to_write

Fecha o arquivo

IDLgt free_lununit

Escreve em binaacuterio (write unformatted)

8689

Arquivos - processamento em baixo niacutevel - binaacuterio

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

dimensions of the double array stored below 3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

8789

Arquivos - processamento em baixo niacutevel - binaacuterioA leitura deste arquivo eacute igualmente simples

IDLgt header=IDLgt dims=[00]IDLgt openrunitbinary_exampledatget_lun

Lecirc as dimensotildees (armazenadas como texto)

IDLgt readfunitheaderIDLgt readfunitdims

Lecirc a parte binaacuteria depois de saber as dimensotildees

IDLgt data_read=dblarr(dims)IDLgt readuunitdata_read

Fecha o arquivo

IDLgt free_lununit

Verifica que os dados foram gravados e lidos corretamente

IDLgt printarray_equal(data_to_writedata_read) 1

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Lecirc dados binaacuterios (read unformatted)

8889

Sumaacuterio

5 ndash Slides em httpwwwppenteadonetpeapea04_strings_iopdf Strings Expressotildees regulares Arquivos

httpwwwppenteadonetpea

8989

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89

Expressotildees regulares - regras - classes de valores

Classe signficado

alnum Caracteres alfanumeacutericos 0-9a-zA-Z

alpha Caracteres alfabeacuteticos a-zA-Z

cntrl Caracteres de controle ASCII (natildeo visiacuteveis coacutedigos 1 a 31 e 127)

digit Diacutegitos (decimais) 0-9

graph Caracteres visiacuteveis ASCII 33 a 126 (natildeo inclui o espaccedilo)

lower Letras minuacutesculas a-z

print Caracteres ldquoimprimiacuteveisrdquo (visiacuteveis e o espaccedilo) ASCII 32 a 126

punct Caracteres de pontuaccedilatildeo $amprsquo()+-lt=gt[]^_lsquo|~

space Os caracteres ldquoem brancordquo (blank) espaccedilo tab tab vertical CR LF (ASCII 32 e 9-13)

upper Letras maiuacutesculas A-Z

xdigit Diacutegitos hexadecimais 0-9A-Fa-f

lt Comeccedilo de palavra (palavra definida como sequumlecircncia de coisas natildeo space)

gt Fim de palavra (palavra definida como sequumlecircncia de coisas natildeo space)

Estas satildeo apenas as principais Algumas implementaccedilotildees tecircm muito mais (em particular nas linguagens que usam Unicode nativamente)

4589

Expressotildees regulares - exemplos

Determinar se strings satildeo nuacutemeros (Ex IDL)

IDLgt str=[9-18 875-812-45913E9-98d7a188d032f5]

Inteiros

IDLgt intexpr=^[-+][0-9]+$

IDLgt printstregex(strintexprboolean) 1 1 0 0 0 0 0 0 0 0

Ponto flutuante

IDLgt fpexpr=^[-+](([0-9][0-9]+)|([0-9]+[0-9]))([eEdD][-+][0-9]+)$

IDLgt printstregex(strfpexprboolean) 1 1 0 1 1 1 1 1 0 0

Sinal opcional

1 ou mais diacutegitos

Sinal opcional

0 ou mais diacutegitos opcionalmente seguidos de um ponto e 1 ou mais diacutegitos

1 ou mais diacutegitos opcionalmente seguidos de um ponto e 0 ou mais diacutegitos

ou Expoente opcional letra do expoente seguida de sinal opcional seguido de um ou mais diacutegitos

4689

Expressotildees regulares ndash extraccedilatildeo

Interpretadores de expressotildees regulares costumam oferecer mais que apenas testar se um string corresponde a uma expressatildeo

Em geral tambeacutem podem retornar que parte(s) do string corresponde(m) agrave expressatildeo

Ex (IDL) Determinar se um string conteacutem uma data incluindo os formatos

IDLgt dates=[2011-01-312011 1 3120110131something done on y2011m1d31 with something]

E extrair a data de dentro do string

IDLgt expr=[0-9]4[0-9]12[0-9]12

(4 diacutegitos)(qualquer separador)(1 a 2 diacutegitos)(qualquer separador)(1 a 2 diacutegitos)

IDLgt printstregex(datesexprextract)format=(A)2011-01-312011 1 31201101312011m1d31

Como agora separar ano mecircs e dia Com uma busca e uma extraccedilatildeo para cada Poderia ser mais eacute mais faacutecil com uma uacutenica expressatildeo regular

4789

Expressotildees regulares - aleacutem de apenas testes

Tambeacutem podem retornar que parte(s) do string correspondem agrave expressatildeo toda e agraves suas subexpressotildees (partes da expressatildeo delimitadas por parecircnteses)

Ex (IDL) Separar pedaccedilos de datas Neste caso para a expressatildeo ficar menor assumindo um formato simples (yyyy-mm-ddThhmmssfff) Mas poderia ser um formato mais livre como no exemplo anterior

IDLgt str=Stuff observed on 2011-01-31T123924983 with some instrumentIDLgt expr=([0-9]4)-([0-9]2)-([0-9]2)T([0-9]2)([0-9]2)([0-9]2[0-9]3)

(quatro diacutegitos)-(2 diacutegitos)-(2 diacutegitos)T(2 diacutegitos)(2 diacutegitos)(2 diacutegitos3 diacutegitos)

IDLgt pieces=stregex(strexprextractsubexpr)IDLgt printpiecesformat=(A)2011-01-31T12392498320110131123924983IDLgt d=julday(pieces[2]pieces[3]pieces[1]pieces[4]pieces[5]pieces[6])IDLgt printdformat=(F166) 2455593027372

Expressatildeo inteiraPrimeira subexpressatildeoSegunda subexpressatildeoTerceira subexpressatildeoQuarta subexpressatildeoQuinta subexpressatildeoSexta subexpressatildeo

4889

Expressotildees regulares - referecircncias httpxkcdcom208

Viacutedeos do Software Carpentry

httpsoftware-carpentryorg4_0regexp

4989

Arquivos

Quase todo programa precisa armazenar dados em arquivos

Podem ser pequenos arquivos de paracircmetros ou enormes arquivos de dados produzidos ou a processar

Apesar do sugerido pela praacutetica comum arquivos texto natildeo satildeo sempre a melhor escolha para armazenar dados - e haacute muitas formas diferentes de os usar

Qual eacute a melhor escolha

Assim como para linguagens ou contecirciners natildeo existe ldquoo melhor formatordquo Cada um tem suas vantagens e desvantagens

Dados diferentes (mesmo se usados pelos mesmos programas) em geral se adequam melhor a formatos diferentes

5089

Arquivos - texto X binaacuterios

Em qualquer formato arquivos satildeo armazenados como diacutegitos binaacuterios

Mas haacute duas formas principais como eles podem ser codificados

Arquivos baseados em texto (text files)

Dados satildeo transformados em caracteres usando alguma formataccedilatildeo (mesmo se impliacutecita) e escritos com alguma codificaccedilatildeo de texto (comumente mas natildeo necessariamente ASCII)

Um arquivo texto eacute um ou mais strings As mesmas conversotildees tecircm que ser feitas depara outros tipos

Arquivos ldquobinaacuteriosrdquo (binary files)

Embora todo arquivo seja binaacuterio este nome costuma ser usado soacute para aqueles em que os dados natildeo estatildeo na forma de texto

Com frequumlecircncia (nem sempre) os dados satildeo gravados de forma idecircntica a como satildeo armazenados na memoacuteria

Muitos formatos usam uma mistura de partes em texto e partes binaacuterias

Um cabeccedilalho (header) de texto que daacute informaccedilotildees (metadados) sobre os dados armazenados na parte binaacuteria que vem depois

O cabeccedilalho conteacutem em especial informaccedilotildees sobre como ler os dados binaacuterios

5189

Arquivos - texto X binaacuterios

Vantagens de arquivos texto

Legiacuteveis por pessoas (human readable)

Podem ser auto-suficientes todo o necessaacuterio para os ler e entender o que conteacutem pode ser obtido olhando o arquivo

Satildeo os menos especiacuteficos a linguagens software normalmente satildeo escritos em ASCII ou Unicode e sempre haacute algum suporte a ler escrever texto em linguagens software

Haacute alguns formatos padratildeo para texto (exs CSV XML) que satildeo suportados em muitas plataformas diferentes

5289

Arquivos - texto X binaacuterios

Vantagens de arquivos binaacuterios

Em geral natildeo haacute conversotildees entre o os dados como armazenados na memoacuteria O que torna o armazenamento mais eficiente e sem alteraccedilotildees nos valores

A maior parte dos formatos padronizados eacute binaacuteria Exs FITS cube CDF NetCDF HDF HDF5 JPEG JPEG2000 TIFF GeoTIFF MPEG etc

Eacute mais comum que haja bibliotecas prontas (ateacute de alto niacutevel) para consulta leitura e gravaccedilatildeo

Os formatos melhor desenhados satildeo autodocumentados (em texto ou binaacuterio) para os ler natildeo eacute necessaacuterio conhecimento preacutevio sobre como os dados foram armazenados

Toda linguagem plataforma costuma ter seu formato binaacuterio mais nativo que costuma ser o mais faacutecil para leitura gravaccedilatildeo Em particular nas de alto niacutevel que tecircm formatos autodocumentados (especialmente

em IDL R Python Java)

Muitos formatos tecircm opccedilatildeo de compressatildeo dos dados

5389

Arquivos - proprietaacuterios X padratildeo

Independente da escolha texto binaacuterio programas devem escolher entre usar um formato proacuteprio ou um formato padronizado

A principal vantagem de formatos proacuteprios eacute que satildeo definidos da forma mais conveniente para a aplicaccedilatildeo que os usa simplificando leitura e gravaccedilatildeo e potencialmente otimizando recursos (acesso ao disco tamanho do arquivo etc)

A principal desvantagem de formatos proacuteprios eacute ser necessaacuterio escrever todo o coacutedigo para os ler gravar

Pode dar mais trabalho que usar um formato geneacuterico que natildeo seja exatamente o que melhor se encaixa na aplicaccedilatildeo

O coacutedigo para processar o formato em geral vai ser menos completo e conveniente de usar que o de um formato bem estabelecido usado por muitos outros em muitos ambientes

Cada novo software que for usar estes arquivos vai precisar compartilhar do mesmo coacutedigo ou precisar de coacutedigo novo (em particular se em outra linguagem) para ler gravar naquele formato

Eacute necessaacuterio documentar o formato e decidir sobre como ele seraacute definido

Se outros jaacute colocaram muito trabalho desenvolvendo bons formatos padratildeo bem suportados em muitos ambientes por que ter o trabalho de reinventar (e reprogramar redocumentar e retestar) a roda

5489

Arquivos - padrotildees comuns em astronomia (exs adiante)

Texto

CSV Comma-separated values - bem suportado por muitos softwares

ldquoColunas fixasrdquo Natildeo eacute um padratildeo bem definido mas eacute praacutetica comum para tabelas (2D)

XML Extensible Markup Language - O padratildeo texto mais flexiacutevel de grande uso em programaccedilatildeo geral para armazenar qualquer coisa com frequumlecircncia de forma hieraacuterquica Bem suportado por linguagens modernas (e modernizadas) e bibliotecas das principais

linguagens gerais Alta complexidade o torna trabalhoso de usar

5589

Arquivos - padrotildees comuns em astronomia (exs adiante)Binaacuterios

FITS Flexible Image Transport System - o mais comum para observaccedilotildees astronocircmicas Conteacutem os dados (em geral arrays 1D 2D ou 3D) e documentaccedilatildeo (nos cabeccedilalhos) sobre a origem e caracteriacutesticas dos dados Tambeacutem usado para armazenar tabelas de dados quaisquer mesmo que natildeo sejam observaccedilotildees (especialmente pelo STSCI) Variam muito em qualidade de documentaccedilatildeo

NetCDF Network Common Data Form - evoluccedilatildeo do CDF autodocumentado eacute comum e bem suportado para vaacuterios arrays de dados

HDF5 Hierarchical Data Format ndash autodocumentado comum e bem suportado permitindo aleacutem de simples arrays estruturas (eacute um formato hieraacuterquico)

Formatos de imagens JPEG JPEG2000 TIFF GeoTIFF etc - voltados para arrays 2D3D de inteiros ou (em alguns casos) reais com ou sem compressatildeo JPEG2000 tem caracteriacutesticas mais avanccediladas como imagens multiresoluccedilatildeo

Formatos vetoriais PS EPS DXF SHP SVG - variados niacuteveis de suporte a armazenamento de vetores e formas em 2D ou 3D

ISIS Cube semelhante em caracteriacutesticas ao FITS mais usado em sensoriamento remoto geociecircncias e ciecircncias planetaacuterias em geral para observaccedilotildees 1D 2D ou 3D

Formatos nativos de linguagens todo o trabalho de leitura e gravaccedilatildeo eacute feito automagicamente pela biblioteca padratildeo em IDL R Python Java

5689

Arquivos texto - newlines

Apesar do que possa parecer arquivos texto natildeo tecircm intrinsecamente vaacuterias linhas Arquivos texto satildeo soacute uma sequumlecircncia 1D de caracteres em alguma codificaccedilatildeo Separaccedilatildeo em linhas (equivalente a interpretar o arquivo como 2D em linhas e colunas) eacute

especificada por convenccedilotildees Natildeo haacute apenas uma convenccedilatildeo para o fim de linhas

A mais primitiva convenccedilatildeo eacute separaccedilatildeo nenhuma estipula-se que linhas tenham um nuacutemero fixo N de caracteres e cabe ao software que lecirc o arquivo entender que uma linha nova ocorre regularmente a cada N caracteres

Eacute a forma menos portaacutevel e mais inconveniente eacute necessaacuterio o conhecimento preacutevio (ou por inspeccedilatildeo do arquivo) de quantos caracteres haacute por linha

A maior parte dos editores de texto natildeo vai saber separar linhas desta forma (por falta deste conhecimento preacutevio) Exemplo (de um FITS real)

SIMPLE = T Fits standard BITPIX = 16 Bits per pixel NAXIS = 0 Number of axes EXTEND = T File may contain extensions

O que com as linhas quebradas nos lugares certos seria

SIMPLE = T Fits standard BITPIX = 16 Bits per pixel NAXIS = 0 Number of axes EXTEND = T File may contain extensions

5789

Arquivos texto - newlines

A forma mais comum de especificar linhas eacute com um marcador do final de linha (newline)

Eacute um caractere especial natildeo normalmente presente no texto que serve para marcar fim de linhas

Mas natildeo haacute soacute um padratildeo de newline Os mais comuns

LF (Line Feed ASCII 10) ndash Unix Linux Mac OS X

CR - (Carriage Return ASCII 13) - Mac OS lt10

CR+LF (CR seguido de LF) - Windows DOS

Eacute o motivo de o Notepad (Windows) natildeo entender as quebras de linha de arquivos escritos com o formato nativo de Linux o arquivo soacute tem LF enquanto o editor espera CR+LF

Alguns sistemas (strings em vaacuterias linguagens por exemplo) usam o coacutedigo de escape n para indicar newline que eacute codificado de acordo com o padratildeo sendo usado

Em geral bibliotecas de leitura e gravaccedilatildeo de arquivos usam (default pelo menos) o newline nativo do sistema em que satildeo usadas

Programas de conversatildeo entre os sistemas satildeo comuns (ex dos2unix)

O Wordpad identifica se for usado soacute LF e quebra as linhas de acordo

5889

Arquivos - texto - CSV

Comma-separated values

O formato mais padronizado para tabelas (arrays 2D) em texto (frequentemente mas natildeo necessariamente ASCII)

Bem suportado por bibliotecas padratildeo de linguagens e outros softwares (Excel Calc Origin Google Docs etc)

Conteacutem Linhas de cabeccedilalho (opcionais mas recomendadas) linhas com qualquer texto geral

descrevendo o arquivo e em geral uma linha de tiacutetulo para as colunas da tabela Uma (apenas uma) tabela onde todas as linhas tecircm o mesmo nuacutemero de colunas

Colunas separadas por viacutergulas (opcionalmente pode ser outro separador) Linhas terminadas por newline (qualquer que seja) Strings delimitados por ldquo ldquo

Ex

NAMECALMPOSFILNAMEECHLPOSDISPPOSTARGNAMEPOSDIRCLASSMJD-OBSITIMECOADDSdec18s00010NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001dec18s00020NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001dec18s00120NIRSPEC-5-AO635800364500itan140NIRSPEC-5-AOp2 TITAN5408763000001dec18s00140NIRSPEC-5-AO626300364500itan140NIRSPEC-5-AOp1 TITAN5408763000001dec18s00151NIRSPEC-5-AO626300364500itan140NIRSPEC-5-AOp1ARC5408764000001dec18s00160NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001

Natildeo eacute necessaacuterio que as colunas tenham largura constante

Cabeccedilalho

5989

Arquivos - texto - CSVHaacute amplo suporte a leitura e gravaccedilatildeo de CSV sem precisar recorrer a procedimentos de baixo niacutevel

Podem ser diretamente importados em Excel Calc Origin Google Docs ou lido facilmente com bibliotecas padratildeo comuns Ex (IDL)

IDLgt c=read_csv(filesearch_scamcsvheader=h)IDLgt printhNAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS

IDLgt helpc Structure ltc8bca508gt 11 tags length=5256 data length=5248 refs=1 FIELD01 STRING Array[41] FIELD02 LONG Array[41] FIELD03 STRING Array[41] FIELD04 DOUBLE Array[41] FIELD05 DOUBLE Array[41] FIELD06 STRING Array[41] FIELD07 STRING Array[41] FIELD08 STRING Array[41] FIELD09 STRING Array[41] FIELD10 DOUBLE Array[41] FIELD11 LONG Array[41]

IDLgt printcfield01[03]dec18s0001 dec18s0002 dec18s0003 dec18s0004

IDLgt printcfield03[03]NIRSPEC-5-AO NIRSPEC-5-AO NIRSPEC-5-AO NIRSPEC-5-AO

6089

Arquivos - texto - CSVEx (IDL) Criaccedilatildeo de um CSV com uma tabela de valores

Criaccedilatildeo de 3 arrays 1D (12 elementos) um para cada coluna

IDLgt x=dindgen(3)IDLgt y=dindgen(4)IDLgt xx=reform(rebin(x34)12)IDLgt yy=reform(rebin(reform(y14)34)12)IDLgt f=xx+yy10IDLgt helpxxyyfXX DOUBLE = Array[12]YY DOUBLE = Array[12]F DOUBLE = Array[12]

Escrita do arquivo

IDLgt write_csvexamplecsvxxyyfheader=[XYX+10Y]

ResultadoXYX+10Y000000000000000000000000100000000000000010000000200000000000000020000000000000001000000010000000100000001000000011000000()

6189

Arquivos - texto - ldquoColunas regularesrdquoFixed column width

Natildeo eacute exatamente um padratildeo Eacute uma praacutetica comum

Armazena uma tabela (array 2D) de forma regular simples de ser interpretada e lida

Costumam ter linha(s) de cabeccedilalho descrevendo o conteuacutedo do arquivo em geral com uma linha para os nomes das colunas

As demais linhas conteacutem os dados sempre ocupando a mesma largura por coluna e escritos no mesmo formato em cada coluna

Costumam ser simples de ler inclusive interativamente (exs Excel Calc Origin read_ascii)

Ex (IDL) Uma simples tabela soacute de nuacutemeros

wavl CH4=33 wavl CH4=25 wavl CH4=10 wavl CH4=08 wavl CH4=05 wavl CH4=026 wavl CH4=02 477330000 0090130 477330000 0091110 477330000 0089250 477330000 0087000 477330000 0087140 477330000 0090080 477330000 0088110 480040000 0090930 480040000 0091930 480040000 0090160 480040000 0087930 480040000 0088110 480040000 0090950 480040000 0089090 482750000 0091710 482750000 0092730 482750000 0091060 482750000 0088850 482750000 0089080 482750000 0091810 482750000 0090060 485450000 0092530 485450000 0093570 485450000 0092000 485450000 0089810 485450000 0090100 485450000 0092730 485450000 0091090

IDLgt a=read_ascii(specs_27s_ntxtdata_start=1header=header)IDLgt printheader wavl CH4=33 wavl CH4=25 wavl CH4=10 wavl CH4=08 wavl CH4=05 wavl CH4=026 wavl CH4=02 IDLgt helpa Structure ltd423c9a8gt 1 tags length=224 data length=224 refs=1 FIELD01 FLOAT Array[14 4]

6289

Arquivos - texto - ldquoColunas regularesrdquoJaacute um arquivo um pouco mais difiacutecil de ler

NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS dec18s0001 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0002 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0003 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 FLAT 5408757812500 460000 5 dec18s0004 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 DARK 5408757812500 460000 5

Por ter colunas de tipos diferentes (strings inteiros reais) natildeo eacute possiacutevel o ler em um simples array Mas eacute faacutecil o colocar em uma estrutura de arrays onde cada campo eacute uma coluna

Especificando interativamente como interpretar as linhasIDLgt templ=ascii_template(filesearch_scamtxt)

Nome do campo (default mostrado)

Tipo do campo (identificado automaticamente)

Posiccedilatildeo (caracter) do comeccedilo (identificada automaticamente)

Linha de exemplo para verificar as colunas

6389

Arquivos - texto - ldquoColunas regularesrdquoDepois de feito o template o arquivo pode ser lido com apenas

IDLgt a=read_ascii(filesearch_scamtxttemplate=templ)IDLgt helpa Structure ltd4ec4608gt 11 tags length=416 data length=416 refs=1 FIELD01 STRING Array[4] FIELD02 LONG Array[4] FIELD03 STRING Array[4] FIELD04 FLOAT Array[4] FIELD05 FLOAT Array[4] FIELD06 STRING Array[4] FIELD07 STRING Array[4] FIELD08 STRING Array[4] FIELD09 FLOAT Array[4] FIELD10 FLOAT Array[4] FIELD11 LONG Array[4]IDLgt printafield01dec18s0001 dec18s0002 dec18s0003 dec18s0004IDLgt printafield04 626300 626300 626300 626300

O template (uma estrutura contendo dados sobre como ler o arquivo) pode ser usado para outros arquivos no mesmo formato No lugar de ter sido criado interativamente poderia ter sido lido de algum arquivo Poderia ter especificado nomes para os campos que seriam mais amigaacuteveis que coias como FIELD11

6489

Arquivos - texto - XML

Extensible Markup Language

Admite grande flexibilidade e por isso pode ter alta complexidade

Valores satildeo colocados dentro de uma estrutura em hieraacuterquica (em uma aacutervore) com os noacutes identificados pelos seus nomes (chaves)

Largamente usado em muitas aacutereas para armazenar conjuntos arbitraacuterios de quaisquer estruturas de dados

A maioria das aplicaccedilotildees usa um formato que eacute um subconjunto do XML especificado por um Schema comumente em um arquivo XML DTD (Document Type Definition)

6589

Arquivos - texto ndash XML ndash exemplos de usos

Armazenamento de dados de aplicaccedilotildees web (comum para exportar importar dados MediaWiki DokuWiki WordPress ADS Lattes etc)

Documentos Office (docx pptx xlsx) OpenOffice (odt opd ods)

Como versotildees de outros formatos FITSML XDF

ldquoScientific Dataset XML NASAs Astronomical Data Center (ADC) sponsors a number of research projects that

use XML for scientific data representation The XML activities at the ADC are sponsored and supported by the NASA Office of Space Science Applied Information Systems Research Program (AISRP)rdquo - httpxmlcoverpagesorgnasa-adchtml

Astronomical Instrument Markup Language (AIML)

SVG ndash Scalable Vector Graphics

Muitas de outras aplicaccedilotildees listadas em httpxmlcoverpagesorgxmlhtmlapplications

6689

Arquivos - texto ndash XML - exemploltxml version=10 gtltDOCTYPE Xdmf SYSTEM Xdmfdtd []gtltXdmf xmlnsxi=httpwwww3org2001XInclude Version=20gt ltDomaingt lt-- Example of Basic Topologies --gt ltInformation Name=Descriptiongt Example of a Polyvertex Topology ltInformationgt ltGrid Name=Polyvertex GridType=Uniformgt ltTopology TopologyType=Polyvertex Dimensions=3 NodesPerElement=3gt ltDataItem Format=XML Dimensions=3 3 NumberType=Floatgt 0 1 2 4 5 6 8 9 10 ltDataItemgt ltTopologygt ltGeometry Type=XYZgt ltDataItem Format=XML Dimensions=4 4 3gt 00 00 00 10 00 00()Que mostra que a interpretaccedilatildeo (parsing) de XML eacute em geral complexa

6789

Arquivos - texto - XML

Haacute muitas bibliotecas de alto niacutevel para fazer o processamento (parsing) e entregar os dados em uma estrutura conveniente

A complexidade em processar XML estaacute em decidir o que fazer com os dados jaacute que os arquivos podem ser muito complexos

As APIs (Application Programming Interfaces) mais comuns para processar XML que satildeo implementadas em muitas linguagens

DOM (Document Object Model) ndash manteacutem todo o conteuacutedo do em uma estrutura de dados (em geral uma aacutervore) em uma variaacutevel (em geral um objeto) Esta pode ser consultada para obter os valores de interesse para os alterar e usada para escrever um arquivo

SAX (Simple API for XML) ndash Interpretador (parser) por objetos O usuaacuterio escreve uma classe herdando da classe SAX provendo os meacutetodos que vatildeo processar os campos agrave medida em que estes satildeo lidos

6889

Arquivos - binaacuterios - FITSFlexible Image Transport System

O formato mais comum para observaccedilotildees astronocircmicas Tambeacutem usado para armazenar quaisquer dados mesmo natildeo relacionados a observaccedilotildees (especialmente tabelas como eacute praacutetica do STSCI)

Conteacutem um (ou mais) cabeccedilalho(s) de texto com metadados (informaccedilotildees sobre os dados como caracteriacutesticas (necessaacuterias para os ler) origem condiccedilotildees em que foram obtidos processamento realizado etc)

SIMPLE = T image conforms to FITS standard BITPIX = 32 bits per data value NAXIS = 2 number of axes NAXIS1 = 1024 NAXIS2 = 1024 BSCALE = 100000 Scaling factor BZERO = 000000 Scaling zero-point TELESCOP= Keck II Telescope SLITNAME= 0041x226 Slit Name SLITPA = 351979 Slit position angle SLITX = 131500 X pixel of the center of the slit LST = 12010446 local apparent sidereal time (()

Depois do cabeccedilalho haacute uma (ou mais) seccedilatildeo(otildees) de dados binaacuterios Costuma(m) ser array(s) 1D (espectros) 2D (imagens) ou 3D (ldquocubos de dadosrdquo)

De inteiros ou reais inteiros satildeo comuns em contagens de instrumentos reais para valores derivados (fluxos intensidades etc)

6989

Arquivos - binaacuterios - FITSNormalmente FITS satildeo lidos escritos por bibliotecas prontas de (relativamente) alto niacutevel usuaacuterio natildeo tem que saber como os dados satildeo armazenados no arquivo nem como os ler escrever Ex (IDL com a biblioteca idlastro)

IDLgt fits_info2dspectrumfits2dspectrumfits has 3 extensionsPrimary header 288 recordsNo dataExtension 1 -- SCI Header 144 records IMAGE ( 1201 1201 )Extension 2 -- ERR Header 72 records IMAGE ( 1201 1201 )Extension 3 -- DQ Header 72 records IMAGE ( 1201 1201 )

IDLgt mydata=readfits(2dspectrumfitsexten_no=1myheader) READFITS Reading FITS extension of type IMAGE READFITS Now reading 1201 by 1201 array

IDLgt extastmyheadermyastIDLgt sz=size(mydatadimensions)IDLgt xy2ad[1sz[0]][1sz[1]]myastcorners_acorners_dIDLgt printcorners_aCorners of the data array from file 2dspectrumfits are at 14487480 33063480

IDLgt printcorners_d -00041264444 00041402222

Obteacutem os dados de coordenadas (WCS) do header

Coloca os dados no array (2D de floats) mydata e o header no array (1D de strings) myheader

Calcula as coordenadas das quinas da imagem atraveacutes do WCS

Provecirc informaccedilotildees sobre o arquivo

7089

Arquivos - binaacuterios - ISIS Cube

Formatos como FITS se adequam muito a ter uma interface de mais alto niacutevel por objetos

Tambeacutem para dados em tabelas FITS muito mais trabalhosos de ler em baixo niacutevel que se adequam muito mais a mapas ou estruturas

Exemplo (de um formato semelhante a FITS ISIS cube)

O objeto ao ser criado lecirc todo o arquivo

cube=pp_editablecube(CM_1553510065_1_ircub)

Meacutetodos fornecem os dados desejados para obter quando necessaacuterio os dados de interesse

Find out the names of the backplanesprintcubegetproperty(backnames)Get the start time of the cubeprintcubegetfromheader(START_TIME)2007-084T100057286Z

Valores no cabeccedilalho podem ser convenientemente fornecidos como um mapa

header=cubeheader_as_hash()printheader[START_TIME]2007-084T100057286Z

7189

Arquivos - binaacuterios ndash ISIS Cube

Os dados satildeo fornecidos como arraysMake a contour plot of the latitudesc=contour(cubegetsuffixbyname(LATITUDE))Get the band with wavelength nearest to 21 (in the units used in the cube)selband=cubegetbandbywavelength(21wavelengths=selwavs)

Interfaces por overload tornam o acesso ainda mais conveniente

selband=cube[21]

selwavs=cube[21]

Retorna um array com a banda de comprimento de onda mais proacuteximo de 21 (microm)

Retorna o comprimento de onda mais proacuteximo de 21 (microm) da banda retornada acima

7289

Arquivos - binaacuterios ndash ISIS Cube Alteraccedilotildees feitas ao conteuacutedo satildeo automaticamente refletidas em todos os

lugares (cabeccedilalho em particular) afetados mantendo o objeto vaacutelido que pode depois ser gravado em um novo arquivo

IDLgt printcubelinescubesamplescubebands 64 64 256

IDLgt helpcubecoreltExpressiongt FLOAT = Array[64 64 256]

IDLgt cubecore=dblarr(100100256)

A linha acima natildeo eacute uma atribuiccedilatildeo eacute uma invocaccedilatildeo de meacutetodo Eacute equivalente acubesetpropertycore=dblarr(100100256)

Eacute o trabalho da funccedilatildeo setproperty decidir se a propriedade passada (core) faz sentido e se fizer fazer todo o trabalho necessaacuterio a esta mudanccedila Para o usuaacuterio eacute tudo automaacutetico e os dados da classe satildeo vaacutelidos o tempo todo

IDLgt helpcubecoreltExpressiongt DOUBLE = Array[100 100 256]

IDLgt printcubelinescubesamplescubebands 100 100 256

IDLgt cubesaveCM_1553510065_1_ir_editedcub

7389

Arquivos - binaacuterios ndash NetCDF e HDF5

Network Common Data Form e Hierarchical Data Format

Os dois uacutenicos formatos bem estabelecidos para dados cientiacuteficos geneacutericos

Armazenam dados como vaacuterias variaacuteveis e seus metadados Para cada variaacutevel haacute (ou pode haver) os metadados

Nome Dimensotildees (do array) Unidades Comentaacuterios

Ambos permitem arrays multidimensionais

Apenas HDF5 permite estruturas (daiacute vem a hierarquia)

Autodocumentados qualquer software que saiba ler um destes formatos lecirc qualquer arquivo sem precisar de conhecimento preacutevio sobre como o arquivo foi gerado

Muito bem suportados em bibliotecas padratildeo e natildeo padratildeo em softwares interativos e visualizadores (inclusive plugins para navegadores)

httpwwwunidataucaredusoftwarenetcdf httpenwikipediaorgwikiHdf5

NetCDF eacute mais simples de usar por natildeo ter hierarquia dando menos trabalho para ler e escrever dados Se hierarquia natildeo eacute necessaacuteria eacute mais conveniente de usar que HDF5

7489

Arquivos - binaacuterios - NetCDF e HDF5Haacute tambeacutem o formato CDL uma versatildeo ASCII do NetCDF A biblioteca padratildeo do NetCDF inclui conversores entre estes formatos

$ ncdump -h refspec_g01_0ncnetcdf refspec_g01_0 dimensions nlay = 51 nwn = 400 nleg = 33 numu = 2 nlev = 52 nphi = 3 ngas = 2 nwnc = 1 scal = 1 v3 = 3 dnl = 1 nk = 1 tdisr = UNLIMITED (0 currently) na = 16

variables float alb(nwn) float z(nlay) float t(nlay) float p(nlay) float wl(nwn) float iof(nwn) float mtau(nwn) float htau(nwn) float hctaus(nwn) float gtau(nwn) float outcos(scal) float phi(nleg) float phic(scal) float umu(numu) float flux(v3 nwn nlev) float mix(nlay ngas) float c(nlay) float psat(nlay) float ga(nwnc) float wlc(nwnc) float inc(scal) int dm(scal) int ord(scal) float fbeam(scal) float wn(nwn) float tautot(nwn nlay) float htaus(nwn nlay) float htaux(nwn nlay) float taug(nwn nlay) float phase(nwn nlay nleg) float ssa(nwn nlay) float uu(nwn nphi nlev numu) float u0u(nwn nlev numu) float tray(nwn nlay) float gtauo(tdisr nwn nlay)

Haacute 14 variaacuteveis usadas como dimensotildees para as 35 variaacuteveis que satildeo arrays

Ex alb(nwn) indica que alb eacute um array 1D de nwn elementos

nwn estaacute armazenado como uma das dimensotildees e eacute 400 portanto alb tem 400 elementos

Parte do conteuacutedo de um arquivo NetCDF em formato CDL (gerado pelo programa ncdump)

7589

Arquivos - binaacuterios - NetCDF e HDF5Conteuacutedo daquele arquivo visualizado com o ncview (acompanha a biblioteca NetCDF padratildeo)

7689

Arquivos - binaacuterios - NetCDF e HDF5O conteuacutedo de todo o arquivo pode ser lido facilmente com as bibliotecas disponiacuteveis e armazenado em contecirciners convenientes Usando um objeto que gera um resultado um pouco mais conveniente

IDLgt h=pp_readncdf(refspec_g01_0nchash)IDLgt printhvar_dims ltObjHeapVar229(HASH)gtvars ltObjHeapVar152(HASH)gtdims ltObjHeapVar118(HASH)gt

IDLgt printh[vars]T 173203 175459 175848 176001 175975 Z 431869 418858 406067 393403 380464 FLUX 300660 145536 0705180 0341669 0165532 PHASE 100000 0779034 0660858 0542052 0449983 TAUTOT0694377 0693420 0693474 0693540 0693636()

IDLgt help(h[vars])[TAUTOT]ltExpressiongt FLOAT = Array[51 400]

IDLgt print(h[var_dims])[TAUTOT]NLAY NWN

IDLgt print(h[dims])[(h[var_dims])[TAUTOT]]NLAY 51NWN 400

7789

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5)

Visualizaccedilatildeo da variaacutevel selecionada

Metadados e alguns valores da variaacutevel selecionada

Variaacutevel a ser criada com o conteuacutedo desta variaacutevel do arquivo

Hierarquia das variaacuteveis do arquivo

7889

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5) Imported variable az

IDLgt helpaz Structure ltd5723f38gt 13 tags length=448 data length=444 refs=1 _NAME STRING az _ICONTYPE STRING binary _TYPE STRING DATASET _FILE STRING INTENSI_test_409OUTh5 _PATH STRING _DATA DOUBLE Array[38] _NDIMENSIONS LONG 1 _DIMENSIONS ULONG64 Array[1] _NELEMENTS ULONG64 38 _DATATYPE STRING H5T_FLOAT _STORAGESIZE ULONG 8 _PRECISION LONG 64 _SIGN STRING

IDLgt printaz_data 00000000 10000000 20000000 30000000 40000000 50000000 60000000 80000000 ()

7989

Arquivos - binaacuterios - imagens

JPEG JPEG200 TIFF GeoTIFF etc

Os formatos comuns de imagens satildeo bem suportados em muacuteltiplas plataformas para uso dentro de programas e interativamente

Alguns formatos tecircm opccedilatildeo de compressatildeo com perda eou sem perda

Armazenam imagens como arrays 2D ou 3D (3D frequumlentemente limitado a 3 ou 4 em uma das dimensotildees uma imagem em 3 ou 4 bandas) de inteiros ou (em alguns formatos) reais

Alguns formatos permitem armazenar metadados para caracterizar as imagens armazenadas

JPEG2000 e GeoTIFF (um subconjunto de TIFF) comuns em astronomia e aacutereas proacuteximas

8089

Arquivos - binaacuterios ndash imagens ndash exemplo (IDL)IDLgt printquery_tiff(issmap_2009tiffinfogeotiff=geo) 1

IDLgt helpinfo Structure ltd4eca4b8gt 18 tags length=144 data length=132 refs=1 CHANNELS LONG 4 DIMENSIONS LONG Array[2] IMAGE_INDEX LONG 0 NUM_IMAGES LONG 1 PIXEL_TYPE INT 1 TYPE STRING TIFF BITS_PER_SAMPLE LONG 8 POSITION FLOAT Array[2] RESOLUTION FLOAT Array[2] UNITS LONG 2 TILE_SIZE LONG Array[2] DESCRIPTION STRING ISS (2009) DATE_TIME STRING 20100218 012436()

IDLgt helpgeo Structure ltd4efa1b8gt 10 tags length=264 data length=262 refs=1 MODELPIXELSCALETAG DOUBLE Array[3] MODELTIEPOINTTAG DOUBLE Array[6 4] GEOGRAPHICTYPEGEOKEY INT 4035 GEOGSEMIMAJORAXISGEOKEY DOUBLE 25750000 GEOGSEMIMINORAXISGEOKEY DOUBLE 25750000()

IDLgt myimage=read_tiff(issmap_2009tiff) Lecirc a imagem para o array myimage

Obteacutem informaccedilotildees sobre o arquivo

8189

Arquivos - binaacuterios ndash formatos nativosLinguagens como IDL R Python Java tecircm seu formato nativo binaacuterio acessado em alto niacutevel Basta mandar salvar ler variaacuteveis no do arquivo a biblioteca padratildeo automagicamente faz todo o trabalho de decidir como gravar ler os dados

Conveniente de usar na proacutepria linguagem Mas raramente existem bibliotecas para ler gravar o formato nativo de uma linguagem a partir de outra Ex (IDL)

IDLgt savefile=2dspectrumsavmydatamyheadercorners_dcorners_averbosecompress SAVE Portable (XDR) compressed SAVERESTORE file SAVE Saved variable MYDATA SAVE Saved variable MYHEADER()

Pode ser lido com apenas (haacute formas mais elaboradas)

IDLgt restore2dspectrumsavverbose RESTORE Portable (XDR) compressed SAVERESTORE file RESTORE Save file written by ltunknowngtltunknowngt Thu Jan 27 191422 2011 RESTORE IDL version 801 (linux x86_64) RESTORE Restored variable MYDATA RESTORE Restored variable MYHEADER()

IDLgt helpmydatamyheadercorners_dcorners_aMYDATA FLOAT = Array[1201 1201]MYHEADER STRING = Array[144]()

8289

Arquivos - processamento em baixo niacutevel

Nem sempre um formato padratildeo eacute a melhor escolha para o problema

Nem sempre haacute escolha (pode-se ter que trabalhar com arquivos que jaacute foram escritos em algum formato proprietaacuterio)

Agraves vezes o formato eacute padratildeo mas natildeo haacute bom suporte a ele disponiacutevel

Em todos estes casos eacute necessaacuterio escrever rotinas em baixo niacutevel que vatildeo ler processar diretamente o conteuacutedo do arquivo

Preferencialmente criando interfaces de alto niacutevel para o programa que vai as usar

8389

Arquivos - processamento em baixo niacutevel - texto

Tomando o exemplo anterior onde as colunas eram de diferentes tipos

NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS dec18s0001 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0002 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0003 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 FLAT 5408757812500 460000 5 dec18s0004 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 DARK 5408757812500 460000 5

A forma mais simples de o ler diretamente eacute definir uma estrutura para receber cada linha e um array destas estruturas para receber todo o arquivo Ex (IDL)

IDLgt record=namecalmpos0filnameechlpos0d0disppos0d0targnameposdirclassmjd_obsitime0d0coadds0IDLgt nlines=file_lines(filesearch_scamtxt)IDLgt mydata=replicate(recordnlines-1)IDLgt header=

Depois de definidas as variaacuteveis que vatildeo receber os dados o arquivo pode ser lido

IDLgt openrunitfilesearch_scamtxtget_lunIDLgt readfunitheaderIDLgt readfunitmydataformat=(A14I8A15F104F104A18A19A15F158F105I15)IDLgt free_lununit

A gravaccedilatildeo de um arquivo texto poderia ser feita de forma semelhante apenas trocando openr por openw (abrir o arquivo para gravaccedilatildeo natildeo leitura) e readf por printf

O arquivo eacute aberto em uma unidade (unit) usada para especificar de onde eacute feita a leitura

Ao final o arquivo eacute fechado

8489

Arquivos - processamento em baixo niacutevel - texto

O que resulta em

IDLgt printheader NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS

IDLgt helpmydataMYDATA STRUCT = -gt ltAnonymousgt Array[4]

IDLgt helpmydata[0] Structure ltd5e38f68gt 11 tags length=136 data length=124 refs=3 NAME STRING dec18s0001 CALMPOS INT 0 FILNAME STRING NIRSPEC-5-AO ECHLPOS DOUBLE 62630000 DISPPOS DOUBLE 36450000 TARGNAME STRING HD85258 POSDIR STRING NIRSPEC-5-AOp1 CLASS STRING STAR MJD_OBS STRING 54087574 ITIME DOUBLE 10000000 COADDS INT 1

Este caso eacute mais complicado que os mais comuns por haver colunas de strings

Se todas fossem de nuacutemeros natildeo teria sido necessaacuterio especificar o formato explicitamente As colunas teriam sido adivinhadas pela biblioteca que lecirc o arquivo Poderia ter sido lido escrito soacute com um array de nuacutemeros sem estruturas

8589

Arquivos - processamento em baixo niacutevel - binaacuterio

Formatos binaacuterios podem ser definidos de qualquer forma O arquivo eacute apenas um conjunto de bytes Cabe ao software saber como os interpretar

Uma escolha comum para que sejam autodocumentados eacute incluir um cabeccedilalho de texto informando as caracteriacutesticas dos dados necessaacuterias para os ler

Ex (IDL) criar um arquivo que armazene um array de doubles com um cabeccedilalho informando as dimensotildees para que o programa que o lecirc saiba como ler os dados

Inventa dados e abre o arquivo

IDLgt data_to_write=dindgen(34)IDLgt openwunitbinary_exampledatget_lun

Escreve as dimensotildees como texto

IDLgt printfunitdimensions of the double array stored belowIDLgt printfunitsize(data_to_writedimensions)

Escreve os dados binaacuterios

IDLgt writeuunitdata_to_write

Fecha o arquivo

IDLgt free_lununit

Escreve em binaacuterio (write unformatted)

8689

Arquivos - processamento em baixo niacutevel - binaacuterio

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

dimensions of the double array stored below 3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

8789

Arquivos - processamento em baixo niacutevel - binaacuterioA leitura deste arquivo eacute igualmente simples

IDLgt header=IDLgt dims=[00]IDLgt openrunitbinary_exampledatget_lun

Lecirc as dimensotildees (armazenadas como texto)

IDLgt readfunitheaderIDLgt readfunitdims

Lecirc a parte binaacuteria depois de saber as dimensotildees

IDLgt data_read=dblarr(dims)IDLgt readuunitdata_read

Fecha o arquivo

IDLgt free_lununit

Verifica que os dados foram gravados e lidos corretamente

IDLgt printarray_equal(data_to_writedata_read) 1

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Lecirc dados binaacuterios (read unformatted)

8889

Sumaacuterio

5 ndash Slides em httpwwwppenteadonetpeapea04_strings_iopdf Strings Expressotildees regulares Arquivos

httpwwwppenteadonetpea

8989

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89

Expressotildees regulares - exemplos

Determinar se strings satildeo nuacutemeros (Ex IDL)

IDLgt str=[9-18 875-812-45913E9-98d7a188d032f5]

Inteiros

IDLgt intexpr=^[-+][0-9]+$

IDLgt printstregex(strintexprboolean) 1 1 0 0 0 0 0 0 0 0

Ponto flutuante

IDLgt fpexpr=^[-+](([0-9][0-9]+)|([0-9]+[0-9]))([eEdD][-+][0-9]+)$

IDLgt printstregex(strfpexprboolean) 1 1 0 1 1 1 1 1 0 0

Sinal opcional

1 ou mais diacutegitos

Sinal opcional

0 ou mais diacutegitos opcionalmente seguidos de um ponto e 1 ou mais diacutegitos

1 ou mais diacutegitos opcionalmente seguidos de um ponto e 0 ou mais diacutegitos

ou Expoente opcional letra do expoente seguida de sinal opcional seguido de um ou mais diacutegitos

4689

Expressotildees regulares ndash extraccedilatildeo

Interpretadores de expressotildees regulares costumam oferecer mais que apenas testar se um string corresponde a uma expressatildeo

Em geral tambeacutem podem retornar que parte(s) do string corresponde(m) agrave expressatildeo

Ex (IDL) Determinar se um string conteacutem uma data incluindo os formatos

IDLgt dates=[2011-01-312011 1 3120110131something done on y2011m1d31 with something]

E extrair a data de dentro do string

IDLgt expr=[0-9]4[0-9]12[0-9]12

(4 diacutegitos)(qualquer separador)(1 a 2 diacutegitos)(qualquer separador)(1 a 2 diacutegitos)

IDLgt printstregex(datesexprextract)format=(A)2011-01-312011 1 31201101312011m1d31

Como agora separar ano mecircs e dia Com uma busca e uma extraccedilatildeo para cada Poderia ser mais eacute mais faacutecil com uma uacutenica expressatildeo regular

4789

Expressotildees regulares - aleacutem de apenas testes

Tambeacutem podem retornar que parte(s) do string correspondem agrave expressatildeo toda e agraves suas subexpressotildees (partes da expressatildeo delimitadas por parecircnteses)

Ex (IDL) Separar pedaccedilos de datas Neste caso para a expressatildeo ficar menor assumindo um formato simples (yyyy-mm-ddThhmmssfff) Mas poderia ser um formato mais livre como no exemplo anterior

IDLgt str=Stuff observed on 2011-01-31T123924983 with some instrumentIDLgt expr=([0-9]4)-([0-9]2)-([0-9]2)T([0-9]2)([0-9]2)([0-9]2[0-9]3)

(quatro diacutegitos)-(2 diacutegitos)-(2 diacutegitos)T(2 diacutegitos)(2 diacutegitos)(2 diacutegitos3 diacutegitos)

IDLgt pieces=stregex(strexprextractsubexpr)IDLgt printpiecesformat=(A)2011-01-31T12392498320110131123924983IDLgt d=julday(pieces[2]pieces[3]pieces[1]pieces[4]pieces[5]pieces[6])IDLgt printdformat=(F166) 2455593027372

Expressatildeo inteiraPrimeira subexpressatildeoSegunda subexpressatildeoTerceira subexpressatildeoQuarta subexpressatildeoQuinta subexpressatildeoSexta subexpressatildeo

4889

Expressotildees regulares - referecircncias httpxkcdcom208

Viacutedeos do Software Carpentry

httpsoftware-carpentryorg4_0regexp

4989

Arquivos

Quase todo programa precisa armazenar dados em arquivos

Podem ser pequenos arquivos de paracircmetros ou enormes arquivos de dados produzidos ou a processar

Apesar do sugerido pela praacutetica comum arquivos texto natildeo satildeo sempre a melhor escolha para armazenar dados - e haacute muitas formas diferentes de os usar

Qual eacute a melhor escolha

Assim como para linguagens ou contecirciners natildeo existe ldquoo melhor formatordquo Cada um tem suas vantagens e desvantagens

Dados diferentes (mesmo se usados pelos mesmos programas) em geral se adequam melhor a formatos diferentes

5089

Arquivos - texto X binaacuterios

Em qualquer formato arquivos satildeo armazenados como diacutegitos binaacuterios

Mas haacute duas formas principais como eles podem ser codificados

Arquivos baseados em texto (text files)

Dados satildeo transformados em caracteres usando alguma formataccedilatildeo (mesmo se impliacutecita) e escritos com alguma codificaccedilatildeo de texto (comumente mas natildeo necessariamente ASCII)

Um arquivo texto eacute um ou mais strings As mesmas conversotildees tecircm que ser feitas depara outros tipos

Arquivos ldquobinaacuteriosrdquo (binary files)

Embora todo arquivo seja binaacuterio este nome costuma ser usado soacute para aqueles em que os dados natildeo estatildeo na forma de texto

Com frequumlecircncia (nem sempre) os dados satildeo gravados de forma idecircntica a como satildeo armazenados na memoacuteria

Muitos formatos usam uma mistura de partes em texto e partes binaacuterias

Um cabeccedilalho (header) de texto que daacute informaccedilotildees (metadados) sobre os dados armazenados na parte binaacuteria que vem depois

O cabeccedilalho conteacutem em especial informaccedilotildees sobre como ler os dados binaacuterios

5189

Arquivos - texto X binaacuterios

Vantagens de arquivos texto

Legiacuteveis por pessoas (human readable)

Podem ser auto-suficientes todo o necessaacuterio para os ler e entender o que conteacutem pode ser obtido olhando o arquivo

Satildeo os menos especiacuteficos a linguagens software normalmente satildeo escritos em ASCII ou Unicode e sempre haacute algum suporte a ler escrever texto em linguagens software

Haacute alguns formatos padratildeo para texto (exs CSV XML) que satildeo suportados em muitas plataformas diferentes

5289

Arquivos - texto X binaacuterios

Vantagens de arquivos binaacuterios

Em geral natildeo haacute conversotildees entre o os dados como armazenados na memoacuteria O que torna o armazenamento mais eficiente e sem alteraccedilotildees nos valores

A maior parte dos formatos padronizados eacute binaacuteria Exs FITS cube CDF NetCDF HDF HDF5 JPEG JPEG2000 TIFF GeoTIFF MPEG etc

Eacute mais comum que haja bibliotecas prontas (ateacute de alto niacutevel) para consulta leitura e gravaccedilatildeo

Os formatos melhor desenhados satildeo autodocumentados (em texto ou binaacuterio) para os ler natildeo eacute necessaacuterio conhecimento preacutevio sobre como os dados foram armazenados

Toda linguagem plataforma costuma ter seu formato binaacuterio mais nativo que costuma ser o mais faacutecil para leitura gravaccedilatildeo Em particular nas de alto niacutevel que tecircm formatos autodocumentados (especialmente

em IDL R Python Java)

Muitos formatos tecircm opccedilatildeo de compressatildeo dos dados

5389

Arquivos - proprietaacuterios X padratildeo

Independente da escolha texto binaacuterio programas devem escolher entre usar um formato proacuteprio ou um formato padronizado

A principal vantagem de formatos proacuteprios eacute que satildeo definidos da forma mais conveniente para a aplicaccedilatildeo que os usa simplificando leitura e gravaccedilatildeo e potencialmente otimizando recursos (acesso ao disco tamanho do arquivo etc)

A principal desvantagem de formatos proacuteprios eacute ser necessaacuterio escrever todo o coacutedigo para os ler gravar

Pode dar mais trabalho que usar um formato geneacuterico que natildeo seja exatamente o que melhor se encaixa na aplicaccedilatildeo

O coacutedigo para processar o formato em geral vai ser menos completo e conveniente de usar que o de um formato bem estabelecido usado por muitos outros em muitos ambientes

Cada novo software que for usar estes arquivos vai precisar compartilhar do mesmo coacutedigo ou precisar de coacutedigo novo (em particular se em outra linguagem) para ler gravar naquele formato

Eacute necessaacuterio documentar o formato e decidir sobre como ele seraacute definido

Se outros jaacute colocaram muito trabalho desenvolvendo bons formatos padratildeo bem suportados em muitos ambientes por que ter o trabalho de reinventar (e reprogramar redocumentar e retestar) a roda

5489

Arquivos - padrotildees comuns em astronomia (exs adiante)

Texto

CSV Comma-separated values - bem suportado por muitos softwares

ldquoColunas fixasrdquo Natildeo eacute um padratildeo bem definido mas eacute praacutetica comum para tabelas (2D)

XML Extensible Markup Language - O padratildeo texto mais flexiacutevel de grande uso em programaccedilatildeo geral para armazenar qualquer coisa com frequumlecircncia de forma hieraacuterquica Bem suportado por linguagens modernas (e modernizadas) e bibliotecas das principais

linguagens gerais Alta complexidade o torna trabalhoso de usar

5589

Arquivos - padrotildees comuns em astronomia (exs adiante)Binaacuterios

FITS Flexible Image Transport System - o mais comum para observaccedilotildees astronocircmicas Conteacutem os dados (em geral arrays 1D 2D ou 3D) e documentaccedilatildeo (nos cabeccedilalhos) sobre a origem e caracteriacutesticas dos dados Tambeacutem usado para armazenar tabelas de dados quaisquer mesmo que natildeo sejam observaccedilotildees (especialmente pelo STSCI) Variam muito em qualidade de documentaccedilatildeo

NetCDF Network Common Data Form - evoluccedilatildeo do CDF autodocumentado eacute comum e bem suportado para vaacuterios arrays de dados

HDF5 Hierarchical Data Format ndash autodocumentado comum e bem suportado permitindo aleacutem de simples arrays estruturas (eacute um formato hieraacuterquico)

Formatos de imagens JPEG JPEG2000 TIFF GeoTIFF etc - voltados para arrays 2D3D de inteiros ou (em alguns casos) reais com ou sem compressatildeo JPEG2000 tem caracteriacutesticas mais avanccediladas como imagens multiresoluccedilatildeo

Formatos vetoriais PS EPS DXF SHP SVG - variados niacuteveis de suporte a armazenamento de vetores e formas em 2D ou 3D

ISIS Cube semelhante em caracteriacutesticas ao FITS mais usado em sensoriamento remoto geociecircncias e ciecircncias planetaacuterias em geral para observaccedilotildees 1D 2D ou 3D

Formatos nativos de linguagens todo o trabalho de leitura e gravaccedilatildeo eacute feito automagicamente pela biblioteca padratildeo em IDL R Python Java

5689

Arquivos texto - newlines

Apesar do que possa parecer arquivos texto natildeo tecircm intrinsecamente vaacuterias linhas Arquivos texto satildeo soacute uma sequumlecircncia 1D de caracteres em alguma codificaccedilatildeo Separaccedilatildeo em linhas (equivalente a interpretar o arquivo como 2D em linhas e colunas) eacute

especificada por convenccedilotildees Natildeo haacute apenas uma convenccedilatildeo para o fim de linhas

A mais primitiva convenccedilatildeo eacute separaccedilatildeo nenhuma estipula-se que linhas tenham um nuacutemero fixo N de caracteres e cabe ao software que lecirc o arquivo entender que uma linha nova ocorre regularmente a cada N caracteres

Eacute a forma menos portaacutevel e mais inconveniente eacute necessaacuterio o conhecimento preacutevio (ou por inspeccedilatildeo do arquivo) de quantos caracteres haacute por linha

A maior parte dos editores de texto natildeo vai saber separar linhas desta forma (por falta deste conhecimento preacutevio) Exemplo (de um FITS real)

SIMPLE = T Fits standard BITPIX = 16 Bits per pixel NAXIS = 0 Number of axes EXTEND = T File may contain extensions

O que com as linhas quebradas nos lugares certos seria

SIMPLE = T Fits standard BITPIX = 16 Bits per pixel NAXIS = 0 Number of axes EXTEND = T File may contain extensions

5789

Arquivos texto - newlines

A forma mais comum de especificar linhas eacute com um marcador do final de linha (newline)

Eacute um caractere especial natildeo normalmente presente no texto que serve para marcar fim de linhas

Mas natildeo haacute soacute um padratildeo de newline Os mais comuns

LF (Line Feed ASCII 10) ndash Unix Linux Mac OS X

CR - (Carriage Return ASCII 13) - Mac OS lt10

CR+LF (CR seguido de LF) - Windows DOS

Eacute o motivo de o Notepad (Windows) natildeo entender as quebras de linha de arquivos escritos com o formato nativo de Linux o arquivo soacute tem LF enquanto o editor espera CR+LF

Alguns sistemas (strings em vaacuterias linguagens por exemplo) usam o coacutedigo de escape n para indicar newline que eacute codificado de acordo com o padratildeo sendo usado

Em geral bibliotecas de leitura e gravaccedilatildeo de arquivos usam (default pelo menos) o newline nativo do sistema em que satildeo usadas

Programas de conversatildeo entre os sistemas satildeo comuns (ex dos2unix)

O Wordpad identifica se for usado soacute LF e quebra as linhas de acordo

5889

Arquivos - texto - CSV

Comma-separated values

O formato mais padronizado para tabelas (arrays 2D) em texto (frequentemente mas natildeo necessariamente ASCII)

Bem suportado por bibliotecas padratildeo de linguagens e outros softwares (Excel Calc Origin Google Docs etc)

Conteacutem Linhas de cabeccedilalho (opcionais mas recomendadas) linhas com qualquer texto geral

descrevendo o arquivo e em geral uma linha de tiacutetulo para as colunas da tabela Uma (apenas uma) tabela onde todas as linhas tecircm o mesmo nuacutemero de colunas

Colunas separadas por viacutergulas (opcionalmente pode ser outro separador) Linhas terminadas por newline (qualquer que seja) Strings delimitados por ldquo ldquo

Ex

NAMECALMPOSFILNAMEECHLPOSDISPPOSTARGNAMEPOSDIRCLASSMJD-OBSITIMECOADDSdec18s00010NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001dec18s00020NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001dec18s00120NIRSPEC-5-AO635800364500itan140NIRSPEC-5-AOp2 TITAN5408763000001dec18s00140NIRSPEC-5-AO626300364500itan140NIRSPEC-5-AOp1 TITAN5408763000001dec18s00151NIRSPEC-5-AO626300364500itan140NIRSPEC-5-AOp1ARC5408764000001dec18s00160NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001

Natildeo eacute necessaacuterio que as colunas tenham largura constante

Cabeccedilalho

5989

Arquivos - texto - CSVHaacute amplo suporte a leitura e gravaccedilatildeo de CSV sem precisar recorrer a procedimentos de baixo niacutevel

Podem ser diretamente importados em Excel Calc Origin Google Docs ou lido facilmente com bibliotecas padratildeo comuns Ex (IDL)

IDLgt c=read_csv(filesearch_scamcsvheader=h)IDLgt printhNAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS

IDLgt helpc Structure ltc8bca508gt 11 tags length=5256 data length=5248 refs=1 FIELD01 STRING Array[41] FIELD02 LONG Array[41] FIELD03 STRING Array[41] FIELD04 DOUBLE Array[41] FIELD05 DOUBLE Array[41] FIELD06 STRING Array[41] FIELD07 STRING Array[41] FIELD08 STRING Array[41] FIELD09 STRING Array[41] FIELD10 DOUBLE Array[41] FIELD11 LONG Array[41]

IDLgt printcfield01[03]dec18s0001 dec18s0002 dec18s0003 dec18s0004

IDLgt printcfield03[03]NIRSPEC-5-AO NIRSPEC-5-AO NIRSPEC-5-AO NIRSPEC-5-AO

6089

Arquivos - texto - CSVEx (IDL) Criaccedilatildeo de um CSV com uma tabela de valores

Criaccedilatildeo de 3 arrays 1D (12 elementos) um para cada coluna

IDLgt x=dindgen(3)IDLgt y=dindgen(4)IDLgt xx=reform(rebin(x34)12)IDLgt yy=reform(rebin(reform(y14)34)12)IDLgt f=xx+yy10IDLgt helpxxyyfXX DOUBLE = Array[12]YY DOUBLE = Array[12]F DOUBLE = Array[12]

Escrita do arquivo

IDLgt write_csvexamplecsvxxyyfheader=[XYX+10Y]

ResultadoXYX+10Y000000000000000000000000100000000000000010000000200000000000000020000000000000001000000010000000100000001000000011000000()

6189

Arquivos - texto - ldquoColunas regularesrdquoFixed column width

Natildeo eacute exatamente um padratildeo Eacute uma praacutetica comum

Armazena uma tabela (array 2D) de forma regular simples de ser interpretada e lida

Costumam ter linha(s) de cabeccedilalho descrevendo o conteuacutedo do arquivo em geral com uma linha para os nomes das colunas

As demais linhas conteacutem os dados sempre ocupando a mesma largura por coluna e escritos no mesmo formato em cada coluna

Costumam ser simples de ler inclusive interativamente (exs Excel Calc Origin read_ascii)

Ex (IDL) Uma simples tabela soacute de nuacutemeros

wavl CH4=33 wavl CH4=25 wavl CH4=10 wavl CH4=08 wavl CH4=05 wavl CH4=026 wavl CH4=02 477330000 0090130 477330000 0091110 477330000 0089250 477330000 0087000 477330000 0087140 477330000 0090080 477330000 0088110 480040000 0090930 480040000 0091930 480040000 0090160 480040000 0087930 480040000 0088110 480040000 0090950 480040000 0089090 482750000 0091710 482750000 0092730 482750000 0091060 482750000 0088850 482750000 0089080 482750000 0091810 482750000 0090060 485450000 0092530 485450000 0093570 485450000 0092000 485450000 0089810 485450000 0090100 485450000 0092730 485450000 0091090

IDLgt a=read_ascii(specs_27s_ntxtdata_start=1header=header)IDLgt printheader wavl CH4=33 wavl CH4=25 wavl CH4=10 wavl CH4=08 wavl CH4=05 wavl CH4=026 wavl CH4=02 IDLgt helpa Structure ltd423c9a8gt 1 tags length=224 data length=224 refs=1 FIELD01 FLOAT Array[14 4]

6289

Arquivos - texto - ldquoColunas regularesrdquoJaacute um arquivo um pouco mais difiacutecil de ler

NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS dec18s0001 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0002 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0003 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 FLAT 5408757812500 460000 5 dec18s0004 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 DARK 5408757812500 460000 5

Por ter colunas de tipos diferentes (strings inteiros reais) natildeo eacute possiacutevel o ler em um simples array Mas eacute faacutecil o colocar em uma estrutura de arrays onde cada campo eacute uma coluna

Especificando interativamente como interpretar as linhasIDLgt templ=ascii_template(filesearch_scamtxt)

Nome do campo (default mostrado)

Tipo do campo (identificado automaticamente)

Posiccedilatildeo (caracter) do comeccedilo (identificada automaticamente)

Linha de exemplo para verificar as colunas

6389

Arquivos - texto - ldquoColunas regularesrdquoDepois de feito o template o arquivo pode ser lido com apenas

IDLgt a=read_ascii(filesearch_scamtxttemplate=templ)IDLgt helpa Structure ltd4ec4608gt 11 tags length=416 data length=416 refs=1 FIELD01 STRING Array[4] FIELD02 LONG Array[4] FIELD03 STRING Array[4] FIELD04 FLOAT Array[4] FIELD05 FLOAT Array[4] FIELD06 STRING Array[4] FIELD07 STRING Array[4] FIELD08 STRING Array[4] FIELD09 FLOAT Array[4] FIELD10 FLOAT Array[4] FIELD11 LONG Array[4]IDLgt printafield01dec18s0001 dec18s0002 dec18s0003 dec18s0004IDLgt printafield04 626300 626300 626300 626300

O template (uma estrutura contendo dados sobre como ler o arquivo) pode ser usado para outros arquivos no mesmo formato No lugar de ter sido criado interativamente poderia ter sido lido de algum arquivo Poderia ter especificado nomes para os campos que seriam mais amigaacuteveis que coias como FIELD11

6489

Arquivos - texto - XML

Extensible Markup Language

Admite grande flexibilidade e por isso pode ter alta complexidade

Valores satildeo colocados dentro de uma estrutura em hieraacuterquica (em uma aacutervore) com os noacutes identificados pelos seus nomes (chaves)

Largamente usado em muitas aacutereas para armazenar conjuntos arbitraacuterios de quaisquer estruturas de dados

A maioria das aplicaccedilotildees usa um formato que eacute um subconjunto do XML especificado por um Schema comumente em um arquivo XML DTD (Document Type Definition)

6589

Arquivos - texto ndash XML ndash exemplos de usos

Armazenamento de dados de aplicaccedilotildees web (comum para exportar importar dados MediaWiki DokuWiki WordPress ADS Lattes etc)

Documentos Office (docx pptx xlsx) OpenOffice (odt opd ods)

Como versotildees de outros formatos FITSML XDF

ldquoScientific Dataset XML NASAs Astronomical Data Center (ADC) sponsors a number of research projects that

use XML for scientific data representation The XML activities at the ADC are sponsored and supported by the NASA Office of Space Science Applied Information Systems Research Program (AISRP)rdquo - httpxmlcoverpagesorgnasa-adchtml

Astronomical Instrument Markup Language (AIML)

SVG ndash Scalable Vector Graphics

Muitas de outras aplicaccedilotildees listadas em httpxmlcoverpagesorgxmlhtmlapplications

6689

Arquivos - texto ndash XML - exemploltxml version=10 gtltDOCTYPE Xdmf SYSTEM Xdmfdtd []gtltXdmf xmlnsxi=httpwwww3org2001XInclude Version=20gt ltDomaingt lt-- Example of Basic Topologies --gt ltInformation Name=Descriptiongt Example of a Polyvertex Topology ltInformationgt ltGrid Name=Polyvertex GridType=Uniformgt ltTopology TopologyType=Polyvertex Dimensions=3 NodesPerElement=3gt ltDataItem Format=XML Dimensions=3 3 NumberType=Floatgt 0 1 2 4 5 6 8 9 10 ltDataItemgt ltTopologygt ltGeometry Type=XYZgt ltDataItem Format=XML Dimensions=4 4 3gt 00 00 00 10 00 00()Que mostra que a interpretaccedilatildeo (parsing) de XML eacute em geral complexa

6789

Arquivos - texto - XML

Haacute muitas bibliotecas de alto niacutevel para fazer o processamento (parsing) e entregar os dados em uma estrutura conveniente

A complexidade em processar XML estaacute em decidir o que fazer com os dados jaacute que os arquivos podem ser muito complexos

As APIs (Application Programming Interfaces) mais comuns para processar XML que satildeo implementadas em muitas linguagens

DOM (Document Object Model) ndash manteacutem todo o conteuacutedo do em uma estrutura de dados (em geral uma aacutervore) em uma variaacutevel (em geral um objeto) Esta pode ser consultada para obter os valores de interesse para os alterar e usada para escrever um arquivo

SAX (Simple API for XML) ndash Interpretador (parser) por objetos O usuaacuterio escreve uma classe herdando da classe SAX provendo os meacutetodos que vatildeo processar os campos agrave medida em que estes satildeo lidos

6889

Arquivos - binaacuterios - FITSFlexible Image Transport System

O formato mais comum para observaccedilotildees astronocircmicas Tambeacutem usado para armazenar quaisquer dados mesmo natildeo relacionados a observaccedilotildees (especialmente tabelas como eacute praacutetica do STSCI)

Conteacutem um (ou mais) cabeccedilalho(s) de texto com metadados (informaccedilotildees sobre os dados como caracteriacutesticas (necessaacuterias para os ler) origem condiccedilotildees em que foram obtidos processamento realizado etc)

SIMPLE = T image conforms to FITS standard BITPIX = 32 bits per data value NAXIS = 2 number of axes NAXIS1 = 1024 NAXIS2 = 1024 BSCALE = 100000 Scaling factor BZERO = 000000 Scaling zero-point TELESCOP= Keck II Telescope SLITNAME= 0041x226 Slit Name SLITPA = 351979 Slit position angle SLITX = 131500 X pixel of the center of the slit LST = 12010446 local apparent sidereal time (()

Depois do cabeccedilalho haacute uma (ou mais) seccedilatildeo(otildees) de dados binaacuterios Costuma(m) ser array(s) 1D (espectros) 2D (imagens) ou 3D (ldquocubos de dadosrdquo)

De inteiros ou reais inteiros satildeo comuns em contagens de instrumentos reais para valores derivados (fluxos intensidades etc)

6989

Arquivos - binaacuterios - FITSNormalmente FITS satildeo lidos escritos por bibliotecas prontas de (relativamente) alto niacutevel usuaacuterio natildeo tem que saber como os dados satildeo armazenados no arquivo nem como os ler escrever Ex (IDL com a biblioteca idlastro)

IDLgt fits_info2dspectrumfits2dspectrumfits has 3 extensionsPrimary header 288 recordsNo dataExtension 1 -- SCI Header 144 records IMAGE ( 1201 1201 )Extension 2 -- ERR Header 72 records IMAGE ( 1201 1201 )Extension 3 -- DQ Header 72 records IMAGE ( 1201 1201 )

IDLgt mydata=readfits(2dspectrumfitsexten_no=1myheader) READFITS Reading FITS extension of type IMAGE READFITS Now reading 1201 by 1201 array

IDLgt extastmyheadermyastIDLgt sz=size(mydatadimensions)IDLgt xy2ad[1sz[0]][1sz[1]]myastcorners_acorners_dIDLgt printcorners_aCorners of the data array from file 2dspectrumfits are at 14487480 33063480

IDLgt printcorners_d -00041264444 00041402222

Obteacutem os dados de coordenadas (WCS) do header

Coloca os dados no array (2D de floats) mydata e o header no array (1D de strings) myheader

Calcula as coordenadas das quinas da imagem atraveacutes do WCS

Provecirc informaccedilotildees sobre o arquivo

7089

Arquivos - binaacuterios - ISIS Cube

Formatos como FITS se adequam muito a ter uma interface de mais alto niacutevel por objetos

Tambeacutem para dados em tabelas FITS muito mais trabalhosos de ler em baixo niacutevel que se adequam muito mais a mapas ou estruturas

Exemplo (de um formato semelhante a FITS ISIS cube)

O objeto ao ser criado lecirc todo o arquivo

cube=pp_editablecube(CM_1553510065_1_ircub)

Meacutetodos fornecem os dados desejados para obter quando necessaacuterio os dados de interesse

Find out the names of the backplanesprintcubegetproperty(backnames)Get the start time of the cubeprintcubegetfromheader(START_TIME)2007-084T100057286Z

Valores no cabeccedilalho podem ser convenientemente fornecidos como um mapa

header=cubeheader_as_hash()printheader[START_TIME]2007-084T100057286Z

7189

Arquivos - binaacuterios ndash ISIS Cube

Os dados satildeo fornecidos como arraysMake a contour plot of the latitudesc=contour(cubegetsuffixbyname(LATITUDE))Get the band with wavelength nearest to 21 (in the units used in the cube)selband=cubegetbandbywavelength(21wavelengths=selwavs)

Interfaces por overload tornam o acesso ainda mais conveniente

selband=cube[21]

selwavs=cube[21]

Retorna um array com a banda de comprimento de onda mais proacuteximo de 21 (microm)

Retorna o comprimento de onda mais proacuteximo de 21 (microm) da banda retornada acima

7289

Arquivos - binaacuterios ndash ISIS Cube Alteraccedilotildees feitas ao conteuacutedo satildeo automaticamente refletidas em todos os

lugares (cabeccedilalho em particular) afetados mantendo o objeto vaacutelido que pode depois ser gravado em um novo arquivo

IDLgt printcubelinescubesamplescubebands 64 64 256

IDLgt helpcubecoreltExpressiongt FLOAT = Array[64 64 256]

IDLgt cubecore=dblarr(100100256)

A linha acima natildeo eacute uma atribuiccedilatildeo eacute uma invocaccedilatildeo de meacutetodo Eacute equivalente acubesetpropertycore=dblarr(100100256)

Eacute o trabalho da funccedilatildeo setproperty decidir se a propriedade passada (core) faz sentido e se fizer fazer todo o trabalho necessaacuterio a esta mudanccedila Para o usuaacuterio eacute tudo automaacutetico e os dados da classe satildeo vaacutelidos o tempo todo

IDLgt helpcubecoreltExpressiongt DOUBLE = Array[100 100 256]

IDLgt printcubelinescubesamplescubebands 100 100 256

IDLgt cubesaveCM_1553510065_1_ir_editedcub

7389

Arquivos - binaacuterios ndash NetCDF e HDF5

Network Common Data Form e Hierarchical Data Format

Os dois uacutenicos formatos bem estabelecidos para dados cientiacuteficos geneacutericos

Armazenam dados como vaacuterias variaacuteveis e seus metadados Para cada variaacutevel haacute (ou pode haver) os metadados

Nome Dimensotildees (do array) Unidades Comentaacuterios

Ambos permitem arrays multidimensionais

Apenas HDF5 permite estruturas (daiacute vem a hierarquia)

Autodocumentados qualquer software que saiba ler um destes formatos lecirc qualquer arquivo sem precisar de conhecimento preacutevio sobre como o arquivo foi gerado

Muito bem suportados em bibliotecas padratildeo e natildeo padratildeo em softwares interativos e visualizadores (inclusive plugins para navegadores)

httpwwwunidataucaredusoftwarenetcdf httpenwikipediaorgwikiHdf5

NetCDF eacute mais simples de usar por natildeo ter hierarquia dando menos trabalho para ler e escrever dados Se hierarquia natildeo eacute necessaacuteria eacute mais conveniente de usar que HDF5

7489

Arquivos - binaacuterios - NetCDF e HDF5Haacute tambeacutem o formato CDL uma versatildeo ASCII do NetCDF A biblioteca padratildeo do NetCDF inclui conversores entre estes formatos

$ ncdump -h refspec_g01_0ncnetcdf refspec_g01_0 dimensions nlay = 51 nwn = 400 nleg = 33 numu = 2 nlev = 52 nphi = 3 ngas = 2 nwnc = 1 scal = 1 v3 = 3 dnl = 1 nk = 1 tdisr = UNLIMITED (0 currently) na = 16

variables float alb(nwn) float z(nlay) float t(nlay) float p(nlay) float wl(nwn) float iof(nwn) float mtau(nwn) float htau(nwn) float hctaus(nwn) float gtau(nwn) float outcos(scal) float phi(nleg) float phic(scal) float umu(numu) float flux(v3 nwn nlev) float mix(nlay ngas) float c(nlay) float psat(nlay) float ga(nwnc) float wlc(nwnc) float inc(scal) int dm(scal) int ord(scal) float fbeam(scal) float wn(nwn) float tautot(nwn nlay) float htaus(nwn nlay) float htaux(nwn nlay) float taug(nwn nlay) float phase(nwn nlay nleg) float ssa(nwn nlay) float uu(nwn nphi nlev numu) float u0u(nwn nlev numu) float tray(nwn nlay) float gtauo(tdisr nwn nlay)

Haacute 14 variaacuteveis usadas como dimensotildees para as 35 variaacuteveis que satildeo arrays

Ex alb(nwn) indica que alb eacute um array 1D de nwn elementos

nwn estaacute armazenado como uma das dimensotildees e eacute 400 portanto alb tem 400 elementos

Parte do conteuacutedo de um arquivo NetCDF em formato CDL (gerado pelo programa ncdump)

7589

Arquivos - binaacuterios - NetCDF e HDF5Conteuacutedo daquele arquivo visualizado com o ncview (acompanha a biblioteca NetCDF padratildeo)

7689

Arquivos - binaacuterios - NetCDF e HDF5O conteuacutedo de todo o arquivo pode ser lido facilmente com as bibliotecas disponiacuteveis e armazenado em contecirciners convenientes Usando um objeto que gera um resultado um pouco mais conveniente

IDLgt h=pp_readncdf(refspec_g01_0nchash)IDLgt printhvar_dims ltObjHeapVar229(HASH)gtvars ltObjHeapVar152(HASH)gtdims ltObjHeapVar118(HASH)gt

IDLgt printh[vars]T 173203 175459 175848 176001 175975 Z 431869 418858 406067 393403 380464 FLUX 300660 145536 0705180 0341669 0165532 PHASE 100000 0779034 0660858 0542052 0449983 TAUTOT0694377 0693420 0693474 0693540 0693636()

IDLgt help(h[vars])[TAUTOT]ltExpressiongt FLOAT = Array[51 400]

IDLgt print(h[var_dims])[TAUTOT]NLAY NWN

IDLgt print(h[dims])[(h[var_dims])[TAUTOT]]NLAY 51NWN 400

7789

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5)

Visualizaccedilatildeo da variaacutevel selecionada

Metadados e alguns valores da variaacutevel selecionada

Variaacutevel a ser criada com o conteuacutedo desta variaacutevel do arquivo

Hierarquia das variaacuteveis do arquivo

7889

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5) Imported variable az

IDLgt helpaz Structure ltd5723f38gt 13 tags length=448 data length=444 refs=1 _NAME STRING az _ICONTYPE STRING binary _TYPE STRING DATASET _FILE STRING INTENSI_test_409OUTh5 _PATH STRING _DATA DOUBLE Array[38] _NDIMENSIONS LONG 1 _DIMENSIONS ULONG64 Array[1] _NELEMENTS ULONG64 38 _DATATYPE STRING H5T_FLOAT _STORAGESIZE ULONG 8 _PRECISION LONG 64 _SIGN STRING

IDLgt printaz_data 00000000 10000000 20000000 30000000 40000000 50000000 60000000 80000000 ()

7989

Arquivos - binaacuterios - imagens

JPEG JPEG200 TIFF GeoTIFF etc

Os formatos comuns de imagens satildeo bem suportados em muacuteltiplas plataformas para uso dentro de programas e interativamente

Alguns formatos tecircm opccedilatildeo de compressatildeo com perda eou sem perda

Armazenam imagens como arrays 2D ou 3D (3D frequumlentemente limitado a 3 ou 4 em uma das dimensotildees uma imagem em 3 ou 4 bandas) de inteiros ou (em alguns formatos) reais

Alguns formatos permitem armazenar metadados para caracterizar as imagens armazenadas

JPEG2000 e GeoTIFF (um subconjunto de TIFF) comuns em astronomia e aacutereas proacuteximas

8089

Arquivos - binaacuterios ndash imagens ndash exemplo (IDL)IDLgt printquery_tiff(issmap_2009tiffinfogeotiff=geo) 1

IDLgt helpinfo Structure ltd4eca4b8gt 18 tags length=144 data length=132 refs=1 CHANNELS LONG 4 DIMENSIONS LONG Array[2] IMAGE_INDEX LONG 0 NUM_IMAGES LONG 1 PIXEL_TYPE INT 1 TYPE STRING TIFF BITS_PER_SAMPLE LONG 8 POSITION FLOAT Array[2] RESOLUTION FLOAT Array[2] UNITS LONG 2 TILE_SIZE LONG Array[2] DESCRIPTION STRING ISS (2009) DATE_TIME STRING 20100218 012436()

IDLgt helpgeo Structure ltd4efa1b8gt 10 tags length=264 data length=262 refs=1 MODELPIXELSCALETAG DOUBLE Array[3] MODELTIEPOINTTAG DOUBLE Array[6 4] GEOGRAPHICTYPEGEOKEY INT 4035 GEOGSEMIMAJORAXISGEOKEY DOUBLE 25750000 GEOGSEMIMINORAXISGEOKEY DOUBLE 25750000()

IDLgt myimage=read_tiff(issmap_2009tiff) Lecirc a imagem para o array myimage

Obteacutem informaccedilotildees sobre o arquivo

8189

Arquivos - binaacuterios ndash formatos nativosLinguagens como IDL R Python Java tecircm seu formato nativo binaacuterio acessado em alto niacutevel Basta mandar salvar ler variaacuteveis no do arquivo a biblioteca padratildeo automagicamente faz todo o trabalho de decidir como gravar ler os dados

Conveniente de usar na proacutepria linguagem Mas raramente existem bibliotecas para ler gravar o formato nativo de uma linguagem a partir de outra Ex (IDL)

IDLgt savefile=2dspectrumsavmydatamyheadercorners_dcorners_averbosecompress SAVE Portable (XDR) compressed SAVERESTORE file SAVE Saved variable MYDATA SAVE Saved variable MYHEADER()

Pode ser lido com apenas (haacute formas mais elaboradas)

IDLgt restore2dspectrumsavverbose RESTORE Portable (XDR) compressed SAVERESTORE file RESTORE Save file written by ltunknowngtltunknowngt Thu Jan 27 191422 2011 RESTORE IDL version 801 (linux x86_64) RESTORE Restored variable MYDATA RESTORE Restored variable MYHEADER()

IDLgt helpmydatamyheadercorners_dcorners_aMYDATA FLOAT = Array[1201 1201]MYHEADER STRING = Array[144]()

8289

Arquivos - processamento em baixo niacutevel

Nem sempre um formato padratildeo eacute a melhor escolha para o problema

Nem sempre haacute escolha (pode-se ter que trabalhar com arquivos que jaacute foram escritos em algum formato proprietaacuterio)

Agraves vezes o formato eacute padratildeo mas natildeo haacute bom suporte a ele disponiacutevel

Em todos estes casos eacute necessaacuterio escrever rotinas em baixo niacutevel que vatildeo ler processar diretamente o conteuacutedo do arquivo

Preferencialmente criando interfaces de alto niacutevel para o programa que vai as usar

8389

Arquivos - processamento em baixo niacutevel - texto

Tomando o exemplo anterior onde as colunas eram de diferentes tipos

NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS dec18s0001 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0002 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0003 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 FLAT 5408757812500 460000 5 dec18s0004 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 DARK 5408757812500 460000 5

A forma mais simples de o ler diretamente eacute definir uma estrutura para receber cada linha e um array destas estruturas para receber todo o arquivo Ex (IDL)

IDLgt record=namecalmpos0filnameechlpos0d0disppos0d0targnameposdirclassmjd_obsitime0d0coadds0IDLgt nlines=file_lines(filesearch_scamtxt)IDLgt mydata=replicate(recordnlines-1)IDLgt header=

Depois de definidas as variaacuteveis que vatildeo receber os dados o arquivo pode ser lido

IDLgt openrunitfilesearch_scamtxtget_lunIDLgt readfunitheaderIDLgt readfunitmydataformat=(A14I8A15F104F104A18A19A15F158F105I15)IDLgt free_lununit

A gravaccedilatildeo de um arquivo texto poderia ser feita de forma semelhante apenas trocando openr por openw (abrir o arquivo para gravaccedilatildeo natildeo leitura) e readf por printf

O arquivo eacute aberto em uma unidade (unit) usada para especificar de onde eacute feita a leitura

Ao final o arquivo eacute fechado

8489

Arquivos - processamento em baixo niacutevel - texto

O que resulta em

IDLgt printheader NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS

IDLgt helpmydataMYDATA STRUCT = -gt ltAnonymousgt Array[4]

IDLgt helpmydata[0] Structure ltd5e38f68gt 11 tags length=136 data length=124 refs=3 NAME STRING dec18s0001 CALMPOS INT 0 FILNAME STRING NIRSPEC-5-AO ECHLPOS DOUBLE 62630000 DISPPOS DOUBLE 36450000 TARGNAME STRING HD85258 POSDIR STRING NIRSPEC-5-AOp1 CLASS STRING STAR MJD_OBS STRING 54087574 ITIME DOUBLE 10000000 COADDS INT 1

Este caso eacute mais complicado que os mais comuns por haver colunas de strings

Se todas fossem de nuacutemeros natildeo teria sido necessaacuterio especificar o formato explicitamente As colunas teriam sido adivinhadas pela biblioteca que lecirc o arquivo Poderia ter sido lido escrito soacute com um array de nuacutemeros sem estruturas

8589

Arquivos - processamento em baixo niacutevel - binaacuterio

Formatos binaacuterios podem ser definidos de qualquer forma O arquivo eacute apenas um conjunto de bytes Cabe ao software saber como os interpretar

Uma escolha comum para que sejam autodocumentados eacute incluir um cabeccedilalho de texto informando as caracteriacutesticas dos dados necessaacuterias para os ler

Ex (IDL) criar um arquivo que armazene um array de doubles com um cabeccedilalho informando as dimensotildees para que o programa que o lecirc saiba como ler os dados

Inventa dados e abre o arquivo

IDLgt data_to_write=dindgen(34)IDLgt openwunitbinary_exampledatget_lun

Escreve as dimensotildees como texto

IDLgt printfunitdimensions of the double array stored belowIDLgt printfunitsize(data_to_writedimensions)

Escreve os dados binaacuterios

IDLgt writeuunitdata_to_write

Fecha o arquivo

IDLgt free_lununit

Escreve em binaacuterio (write unformatted)

8689

Arquivos - processamento em baixo niacutevel - binaacuterio

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

dimensions of the double array stored below 3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

8789

Arquivos - processamento em baixo niacutevel - binaacuterioA leitura deste arquivo eacute igualmente simples

IDLgt header=IDLgt dims=[00]IDLgt openrunitbinary_exampledatget_lun

Lecirc as dimensotildees (armazenadas como texto)

IDLgt readfunitheaderIDLgt readfunitdims

Lecirc a parte binaacuteria depois de saber as dimensotildees

IDLgt data_read=dblarr(dims)IDLgt readuunitdata_read

Fecha o arquivo

IDLgt free_lununit

Verifica que os dados foram gravados e lidos corretamente

IDLgt printarray_equal(data_to_writedata_read) 1

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Lecirc dados binaacuterios (read unformatted)

8889

Sumaacuterio

5 ndash Slides em httpwwwppenteadonetpeapea04_strings_iopdf Strings Expressotildees regulares Arquivos

httpwwwppenteadonetpea

8989

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89

Expressotildees regulares ndash extraccedilatildeo

Interpretadores de expressotildees regulares costumam oferecer mais que apenas testar se um string corresponde a uma expressatildeo

Em geral tambeacutem podem retornar que parte(s) do string corresponde(m) agrave expressatildeo

Ex (IDL) Determinar se um string conteacutem uma data incluindo os formatos

IDLgt dates=[2011-01-312011 1 3120110131something done on y2011m1d31 with something]

E extrair a data de dentro do string

IDLgt expr=[0-9]4[0-9]12[0-9]12

(4 diacutegitos)(qualquer separador)(1 a 2 diacutegitos)(qualquer separador)(1 a 2 diacutegitos)

IDLgt printstregex(datesexprextract)format=(A)2011-01-312011 1 31201101312011m1d31

Como agora separar ano mecircs e dia Com uma busca e uma extraccedilatildeo para cada Poderia ser mais eacute mais faacutecil com uma uacutenica expressatildeo regular

4789

Expressotildees regulares - aleacutem de apenas testes

Tambeacutem podem retornar que parte(s) do string correspondem agrave expressatildeo toda e agraves suas subexpressotildees (partes da expressatildeo delimitadas por parecircnteses)

Ex (IDL) Separar pedaccedilos de datas Neste caso para a expressatildeo ficar menor assumindo um formato simples (yyyy-mm-ddThhmmssfff) Mas poderia ser um formato mais livre como no exemplo anterior

IDLgt str=Stuff observed on 2011-01-31T123924983 with some instrumentIDLgt expr=([0-9]4)-([0-9]2)-([0-9]2)T([0-9]2)([0-9]2)([0-9]2[0-9]3)

(quatro diacutegitos)-(2 diacutegitos)-(2 diacutegitos)T(2 diacutegitos)(2 diacutegitos)(2 diacutegitos3 diacutegitos)

IDLgt pieces=stregex(strexprextractsubexpr)IDLgt printpiecesformat=(A)2011-01-31T12392498320110131123924983IDLgt d=julday(pieces[2]pieces[3]pieces[1]pieces[4]pieces[5]pieces[6])IDLgt printdformat=(F166) 2455593027372

Expressatildeo inteiraPrimeira subexpressatildeoSegunda subexpressatildeoTerceira subexpressatildeoQuarta subexpressatildeoQuinta subexpressatildeoSexta subexpressatildeo

4889

Expressotildees regulares - referecircncias httpxkcdcom208

Viacutedeos do Software Carpentry

httpsoftware-carpentryorg4_0regexp

4989

Arquivos

Quase todo programa precisa armazenar dados em arquivos

Podem ser pequenos arquivos de paracircmetros ou enormes arquivos de dados produzidos ou a processar

Apesar do sugerido pela praacutetica comum arquivos texto natildeo satildeo sempre a melhor escolha para armazenar dados - e haacute muitas formas diferentes de os usar

Qual eacute a melhor escolha

Assim como para linguagens ou contecirciners natildeo existe ldquoo melhor formatordquo Cada um tem suas vantagens e desvantagens

Dados diferentes (mesmo se usados pelos mesmos programas) em geral se adequam melhor a formatos diferentes

5089

Arquivos - texto X binaacuterios

Em qualquer formato arquivos satildeo armazenados como diacutegitos binaacuterios

Mas haacute duas formas principais como eles podem ser codificados

Arquivos baseados em texto (text files)

Dados satildeo transformados em caracteres usando alguma formataccedilatildeo (mesmo se impliacutecita) e escritos com alguma codificaccedilatildeo de texto (comumente mas natildeo necessariamente ASCII)

Um arquivo texto eacute um ou mais strings As mesmas conversotildees tecircm que ser feitas depara outros tipos

Arquivos ldquobinaacuteriosrdquo (binary files)

Embora todo arquivo seja binaacuterio este nome costuma ser usado soacute para aqueles em que os dados natildeo estatildeo na forma de texto

Com frequumlecircncia (nem sempre) os dados satildeo gravados de forma idecircntica a como satildeo armazenados na memoacuteria

Muitos formatos usam uma mistura de partes em texto e partes binaacuterias

Um cabeccedilalho (header) de texto que daacute informaccedilotildees (metadados) sobre os dados armazenados na parte binaacuteria que vem depois

O cabeccedilalho conteacutem em especial informaccedilotildees sobre como ler os dados binaacuterios

5189

Arquivos - texto X binaacuterios

Vantagens de arquivos texto

Legiacuteveis por pessoas (human readable)

Podem ser auto-suficientes todo o necessaacuterio para os ler e entender o que conteacutem pode ser obtido olhando o arquivo

Satildeo os menos especiacuteficos a linguagens software normalmente satildeo escritos em ASCII ou Unicode e sempre haacute algum suporte a ler escrever texto em linguagens software

Haacute alguns formatos padratildeo para texto (exs CSV XML) que satildeo suportados em muitas plataformas diferentes

5289

Arquivos - texto X binaacuterios

Vantagens de arquivos binaacuterios

Em geral natildeo haacute conversotildees entre o os dados como armazenados na memoacuteria O que torna o armazenamento mais eficiente e sem alteraccedilotildees nos valores

A maior parte dos formatos padronizados eacute binaacuteria Exs FITS cube CDF NetCDF HDF HDF5 JPEG JPEG2000 TIFF GeoTIFF MPEG etc

Eacute mais comum que haja bibliotecas prontas (ateacute de alto niacutevel) para consulta leitura e gravaccedilatildeo

Os formatos melhor desenhados satildeo autodocumentados (em texto ou binaacuterio) para os ler natildeo eacute necessaacuterio conhecimento preacutevio sobre como os dados foram armazenados

Toda linguagem plataforma costuma ter seu formato binaacuterio mais nativo que costuma ser o mais faacutecil para leitura gravaccedilatildeo Em particular nas de alto niacutevel que tecircm formatos autodocumentados (especialmente

em IDL R Python Java)

Muitos formatos tecircm opccedilatildeo de compressatildeo dos dados

5389

Arquivos - proprietaacuterios X padratildeo

Independente da escolha texto binaacuterio programas devem escolher entre usar um formato proacuteprio ou um formato padronizado

A principal vantagem de formatos proacuteprios eacute que satildeo definidos da forma mais conveniente para a aplicaccedilatildeo que os usa simplificando leitura e gravaccedilatildeo e potencialmente otimizando recursos (acesso ao disco tamanho do arquivo etc)

A principal desvantagem de formatos proacuteprios eacute ser necessaacuterio escrever todo o coacutedigo para os ler gravar

Pode dar mais trabalho que usar um formato geneacuterico que natildeo seja exatamente o que melhor se encaixa na aplicaccedilatildeo

O coacutedigo para processar o formato em geral vai ser menos completo e conveniente de usar que o de um formato bem estabelecido usado por muitos outros em muitos ambientes

Cada novo software que for usar estes arquivos vai precisar compartilhar do mesmo coacutedigo ou precisar de coacutedigo novo (em particular se em outra linguagem) para ler gravar naquele formato

Eacute necessaacuterio documentar o formato e decidir sobre como ele seraacute definido

Se outros jaacute colocaram muito trabalho desenvolvendo bons formatos padratildeo bem suportados em muitos ambientes por que ter o trabalho de reinventar (e reprogramar redocumentar e retestar) a roda

5489

Arquivos - padrotildees comuns em astronomia (exs adiante)

Texto

CSV Comma-separated values - bem suportado por muitos softwares

ldquoColunas fixasrdquo Natildeo eacute um padratildeo bem definido mas eacute praacutetica comum para tabelas (2D)

XML Extensible Markup Language - O padratildeo texto mais flexiacutevel de grande uso em programaccedilatildeo geral para armazenar qualquer coisa com frequumlecircncia de forma hieraacuterquica Bem suportado por linguagens modernas (e modernizadas) e bibliotecas das principais

linguagens gerais Alta complexidade o torna trabalhoso de usar

5589

Arquivos - padrotildees comuns em astronomia (exs adiante)Binaacuterios

FITS Flexible Image Transport System - o mais comum para observaccedilotildees astronocircmicas Conteacutem os dados (em geral arrays 1D 2D ou 3D) e documentaccedilatildeo (nos cabeccedilalhos) sobre a origem e caracteriacutesticas dos dados Tambeacutem usado para armazenar tabelas de dados quaisquer mesmo que natildeo sejam observaccedilotildees (especialmente pelo STSCI) Variam muito em qualidade de documentaccedilatildeo

NetCDF Network Common Data Form - evoluccedilatildeo do CDF autodocumentado eacute comum e bem suportado para vaacuterios arrays de dados

HDF5 Hierarchical Data Format ndash autodocumentado comum e bem suportado permitindo aleacutem de simples arrays estruturas (eacute um formato hieraacuterquico)

Formatos de imagens JPEG JPEG2000 TIFF GeoTIFF etc - voltados para arrays 2D3D de inteiros ou (em alguns casos) reais com ou sem compressatildeo JPEG2000 tem caracteriacutesticas mais avanccediladas como imagens multiresoluccedilatildeo

Formatos vetoriais PS EPS DXF SHP SVG - variados niacuteveis de suporte a armazenamento de vetores e formas em 2D ou 3D

ISIS Cube semelhante em caracteriacutesticas ao FITS mais usado em sensoriamento remoto geociecircncias e ciecircncias planetaacuterias em geral para observaccedilotildees 1D 2D ou 3D

Formatos nativos de linguagens todo o trabalho de leitura e gravaccedilatildeo eacute feito automagicamente pela biblioteca padratildeo em IDL R Python Java

5689

Arquivos texto - newlines

Apesar do que possa parecer arquivos texto natildeo tecircm intrinsecamente vaacuterias linhas Arquivos texto satildeo soacute uma sequumlecircncia 1D de caracteres em alguma codificaccedilatildeo Separaccedilatildeo em linhas (equivalente a interpretar o arquivo como 2D em linhas e colunas) eacute

especificada por convenccedilotildees Natildeo haacute apenas uma convenccedilatildeo para o fim de linhas

A mais primitiva convenccedilatildeo eacute separaccedilatildeo nenhuma estipula-se que linhas tenham um nuacutemero fixo N de caracteres e cabe ao software que lecirc o arquivo entender que uma linha nova ocorre regularmente a cada N caracteres

Eacute a forma menos portaacutevel e mais inconveniente eacute necessaacuterio o conhecimento preacutevio (ou por inspeccedilatildeo do arquivo) de quantos caracteres haacute por linha

A maior parte dos editores de texto natildeo vai saber separar linhas desta forma (por falta deste conhecimento preacutevio) Exemplo (de um FITS real)

SIMPLE = T Fits standard BITPIX = 16 Bits per pixel NAXIS = 0 Number of axes EXTEND = T File may contain extensions

O que com as linhas quebradas nos lugares certos seria

SIMPLE = T Fits standard BITPIX = 16 Bits per pixel NAXIS = 0 Number of axes EXTEND = T File may contain extensions

5789

Arquivos texto - newlines

A forma mais comum de especificar linhas eacute com um marcador do final de linha (newline)

Eacute um caractere especial natildeo normalmente presente no texto que serve para marcar fim de linhas

Mas natildeo haacute soacute um padratildeo de newline Os mais comuns

LF (Line Feed ASCII 10) ndash Unix Linux Mac OS X

CR - (Carriage Return ASCII 13) - Mac OS lt10

CR+LF (CR seguido de LF) - Windows DOS

Eacute o motivo de o Notepad (Windows) natildeo entender as quebras de linha de arquivos escritos com o formato nativo de Linux o arquivo soacute tem LF enquanto o editor espera CR+LF

Alguns sistemas (strings em vaacuterias linguagens por exemplo) usam o coacutedigo de escape n para indicar newline que eacute codificado de acordo com o padratildeo sendo usado

Em geral bibliotecas de leitura e gravaccedilatildeo de arquivos usam (default pelo menos) o newline nativo do sistema em que satildeo usadas

Programas de conversatildeo entre os sistemas satildeo comuns (ex dos2unix)

O Wordpad identifica se for usado soacute LF e quebra as linhas de acordo

5889

Arquivos - texto - CSV

Comma-separated values

O formato mais padronizado para tabelas (arrays 2D) em texto (frequentemente mas natildeo necessariamente ASCII)

Bem suportado por bibliotecas padratildeo de linguagens e outros softwares (Excel Calc Origin Google Docs etc)

Conteacutem Linhas de cabeccedilalho (opcionais mas recomendadas) linhas com qualquer texto geral

descrevendo o arquivo e em geral uma linha de tiacutetulo para as colunas da tabela Uma (apenas uma) tabela onde todas as linhas tecircm o mesmo nuacutemero de colunas

Colunas separadas por viacutergulas (opcionalmente pode ser outro separador) Linhas terminadas por newline (qualquer que seja) Strings delimitados por ldquo ldquo

Ex

NAMECALMPOSFILNAMEECHLPOSDISPPOSTARGNAMEPOSDIRCLASSMJD-OBSITIMECOADDSdec18s00010NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001dec18s00020NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001dec18s00120NIRSPEC-5-AO635800364500itan140NIRSPEC-5-AOp2 TITAN5408763000001dec18s00140NIRSPEC-5-AO626300364500itan140NIRSPEC-5-AOp1 TITAN5408763000001dec18s00151NIRSPEC-5-AO626300364500itan140NIRSPEC-5-AOp1ARC5408764000001dec18s00160NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001

Natildeo eacute necessaacuterio que as colunas tenham largura constante

Cabeccedilalho

5989

Arquivos - texto - CSVHaacute amplo suporte a leitura e gravaccedilatildeo de CSV sem precisar recorrer a procedimentos de baixo niacutevel

Podem ser diretamente importados em Excel Calc Origin Google Docs ou lido facilmente com bibliotecas padratildeo comuns Ex (IDL)

IDLgt c=read_csv(filesearch_scamcsvheader=h)IDLgt printhNAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS

IDLgt helpc Structure ltc8bca508gt 11 tags length=5256 data length=5248 refs=1 FIELD01 STRING Array[41] FIELD02 LONG Array[41] FIELD03 STRING Array[41] FIELD04 DOUBLE Array[41] FIELD05 DOUBLE Array[41] FIELD06 STRING Array[41] FIELD07 STRING Array[41] FIELD08 STRING Array[41] FIELD09 STRING Array[41] FIELD10 DOUBLE Array[41] FIELD11 LONG Array[41]

IDLgt printcfield01[03]dec18s0001 dec18s0002 dec18s0003 dec18s0004

IDLgt printcfield03[03]NIRSPEC-5-AO NIRSPEC-5-AO NIRSPEC-5-AO NIRSPEC-5-AO

6089

Arquivos - texto - CSVEx (IDL) Criaccedilatildeo de um CSV com uma tabela de valores

Criaccedilatildeo de 3 arrays 1D (12 elementos) um para cada coluna

IDLgt x=dindgen(3)IDLgt y=dindgen(4)IDLgt xx=reform(rebin(x34)12)IDLgt yy=reform(rebin(reform(y14)34)12)IDLgt f=xx+yy10IDLgt helpxxyyfXX DOUBLE = Array[12]YY DOUBLE = Array[12]F DOUBLE = Array[12]

Escrita do arquivo

IDLgt write_csvexamplecsvxxyyfheader=[XYX+10Y]

ResultadoXYX+10Y000000000000000000000000100000000000000010000000200000000000000020000000000000001000000010000000100000001000000011000000()

6189

Arquivos - texto - ldquoColunas regularesrdquoFixed column width

Natildeo eacute exatamente um padratildeo Eacute uma praacutetica comum

Armazena uma tabela (array 2D) de forma regular simples de ser interpretada e lida

Costumam ter linha(s) de cabeccedilalho descrevendo o conteuacutedo do arquivo em geral com uma linha para os nomes das colunas

As demais linhas conteacutem os dados sempre ocupando a mesma largura por coluna e escritos no mesmo formato em cada coluna

Costumam ser simples de ler inclusive interativamente (exs Excel Calc Origin read_ascii)

Ex (IDL) Uma simples tabela soacute de nuacutemeros

wavl CH4=33 wavl CH4=25 wavl CH4=10 wavl CH4=08 wavl CH4=05 wavl CH4=026 wavl CH4=02 477330000 0090130 477330000 0091110 477330000 0089250 477330000 0087000 477330000 0087140 477330000 0090080 477330000 0088110 480040000 0090930 480040000 0091930 480040000 0090160 480040000 0087930 480040000 0088110 480040000 0090950 480040000 0089090 482750000 0091710 482750000 0092730 482750000 0091060 482750000 0088850 482750000 0089080 482750000 0091810 482750000 0090060 485450000 0092530 485450000 0093570 485450000 0092000 485450000 0089810 485450000 0090100 485450000 0092730 485450000 0091090

IDLgt a=read_ascii(specs_27s_ntxtdata_start=1header=header)IDLgt printheader wavl CH4=33 wavl CH4=25 wavl CH4=10 wavl CH4=08 wavl CH4=05 wavl CH4=026 wavl CH4=02 IDLgt helpa Structure ltd423c9a8gt 1 tags length=224 data length=224 refs=1 FIELD01 FLOAT Array[14 4]

6289

Arquivos - texto - ldquoColunas regularesrdquoJaacute um arquivo um pouco mais difiacutecil de ler

NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS dec18s0001 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0002 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0003 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 FLAT 5408757812500 460000 5 dec18s0004 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 DARK 5408757812500 460000 5

Por ter colunas de tipos diferentes (strings inteiros reais) natildeo eacute possiacutevel o ler em um simples array Mas eacute faacutecil o colocar em uma estrutura de arrays onde cada campo eacute uma coluna

Especificando interativamente como interpretar as linhasIDLgt templ=ascii_template(filesearch_scamtxt)

Nome do campo (default mostrado)

Tipo do campo (identificado automaticamente)

Posiccedilatildeo (caracter) do comeccedilo (identificada automaticamente)

Linha de exemplo para verificar as colunas

6389

Arquivos - texto - ldquoColunas regularesrdquoDepois de feito o template o arquivo pode ser lido com apenas

IDLgt a=read_ascii(filesearch_scamtxttemplate=templ)IDLgt helpa Structure ltd4ec4608gt 11 tags length=416 data length=416 refs=1 FIELD01 STRING Array[4] FIELD02 LONG Array[4] FIELD03 STRING Array[4] FIELD04 FLOAT Array[4] FIELD05 FLOAT Array[4] FIELD06 STRING Array[4] FIELD07 STRING Array[4] FIELD08 STRING Array[4] FIELD09 FLOAT Array[4] FIELD10 FLOAT Array[4] FIELD11 LONG Array[4]IDLgt printafield01dec18s0001 dec18s0002 dec18s0003 dec18s0004IDLgt printafield04 626300 626300 626300 626300

O template (uma estrutura contendo dados sobre como ler o arquivo) pode ser usado para outros arquivos no mesmo formato No lugar de ter sido criado interativamente poderia ter sido lido de algum arquivo Poderia ter especificado nomes para os campos que seriam mais amigaacuteveis que coias como FIELD11

6489

Arquivos - texto - XML

Extensible Markup Language

Admite grande flexibilidade e por isso pode ter alta complexidade

Valores satildeo colocados dentro de uma estrutura em hieraacuterquica (em uma aacutervore) com os noacutes identificados pelos seus nomes (chaves)

Largamente usado em muitas aacutereas para armazenar conjuntos arbitraacuterios de quaisquer estruturas de dados

A maioria das aplicaccedilotildees usa um formato que eacute um subconjunto do XML especificado por um Schema comumente em um arquivo XML DTD (Document Type Definition)

6589

Arquivos - texto ndash XML ndash exemplos de usos

Armazenamento de dados de aplicaccedilotildees web (comum para exportar importar dados MediaWiki DokuWiki WordPress ADS Lattes etc)

Documentos Office (docx pptx xlsx) OpenOffice (odt opd ods)

Como versotildees de outros formatos FITSML XDF

ldquoScientific Dataset XML NASAs Astronomical Data Center (ADC) sponsors a number of research projects that

use XML for scientific data representation The XML activities at the ADC are sponsored and supported by the NASA Office of Space Science Applied Information Systems Research Program (AISRP)rdquo - httpxmlcoverpagesorgnasa-adchtml

Astronomical Instrument Markup Language (AIML)

SVG ndash Scalable Vector Graphics

Muitas de outras aplicaccedilotildees listadas em httpxmlcoverpagesorgxmlhtmlapplications

6689

Arquivos - texto ndash XML - exemploltxml version=10 gtltDOCTYPE Xdmf SYSTEM Xdmfdtd []gtltXdmf xmlnsxi=httpwwww3org2001XInclude Version=20gt ltDomaingt lt-- Example of Basic Topologies --gt ltInformation Name=Descriptiongt Example of a Polyvertex Topology ltInformationgt ltGrid Name=Polyvertex GridType=Uniformgt ltTopology TopologyType=Polyvertex Dimensions=3 NodesPerElement=3gt ltDataItem Format=XML Dimensions=3 3 NumberType=Floatgt 0 1 2 4 5 6 8 9 10 ltDataItemgt ltTopologygt ltGeometry Type=XYZgt ltDataItem Format=XML Dimensions=4 4 3gt 00 00 00 10 00 00()Que mostra que a interpretaccedilatildeo (parsing) de XML eacute em geral complexa

6789

Arquivos - texto - XML

Haacute muitas bibliotecas de alto niacutevel para fazer o processamento (parsing) e entregar os dados em uma estrutura conveniente

A complexidade em processar XML estaacute em decidir o que fazer com os dados jaacute que os arquivos podem ser muito complexos

As APIs (Application Programming Interfaces) mais comuns para processar XML que satildeo implementadas em muitas linguagens

DOM (Document Object Model) ndash manteacutem todo o conteuacutedo do em uma estrutura de dados (em geral uma aacutervore) em uma variaacutevel (em geral um objeto) Esta pode ser consultada para obter os valores de interesse para os alterar e usada para escrever um arquivo

SAX (Simple API for XML) ndash Interpretador (parser) por objetos O usuaacuterio escreve uma classe herdando da classe SAX provendo os meacutetodos que vatildeo processar os campos agrave medida em que estes satildeo lidos

6889

Arquivos - binaacuterios - FITSFlexible Image Transport System

O formato mais comum para observaccedilotildees astronocircmicas Tambeacutem usado para armazenar quaisquer dados mesmo natildeo relacionados a observaccedilotildees (especialmente tabelas como eacute praacutetica do STSCI)

Conteacutem um (ou mais) cabeccedilalho(s) de texto com metadados (informaccedilotildees sobre os dados como caracteriacutesticas (necessaacuterias para os ler) origem condiccedilotildees em que foram obtidos processamento realizado etc)

SIMPLE = T image conforms to FITS standard BITPIX = 32 bits per data value NAXIS = 2 number of axes NAXIS1 = 1024 NAXIS2 = 1024 BSCALE = 100000 Scaling factor BZERO = 000000 Scaling zero-point TELESCOP= Keck II Telescope SLITNAME= 0041x226 Slit Name SLITPA = 351979 Slit position angle SLITX = 131500 X pixel of the center of the slit LST = 12010446 local apparent sidereal time (()

Depois do cabeccedilalho haacute uma (ou mais) seccedilatildeo(otildees) de dados binaacuterios Costuma(m) ser array(s) 1D (espectros) 2D (imagens) ou 3D (ldquocubos de dadosrdquo)

De inteiros ou reais inteiros satildeo comuns em contagens de instrumentos reais para valores derivados (fluxos intensidades etc)

6989

Arquivos - binaacuterios - FITSNormalmente FITS satildeo lidos escritos por bibliotecas prontas de (relativamente) alto niacutevel usuaacuterio natildeo tem que saber como os dados satildeo armazenados no arquivo nem como os ler escrever Ex (IDL com a biblioteca idlastro)

IDLgt fits_info2dspectrumfits2dspectrumfits has 3 extensionsPrimary header 288 recordsNo dataExtension 1 -- SCI Header 144 records IMAGE ( 1201 1201 )Extension 2 -- ERR Header 72 records IMAGE ( 1201 1201 )Extension 3 -- DQ Header 72 records IMAGE ( 1201 1201 )

IDLgt mydata=readfits(2dspectrumfitsexten_no=1myheader) READFITS Reading FITS extension of type IMAGE READFITS Now reading 1201 by 1201 array

IDLgt extastmyheadermyastIDLgt sz=size(mydatadimensions)IDLgt xy2ad[1sz[0]][1sz[1]]myastcorners_acorners_dIDLgt printcorners_aCorners of the data array from file 2dspectrumfits are at 14487480 33063480

IDLgt printcorners_d -00041264444 00041402222

Obteacutem os dados de coordenadas (WCS) do header

Coloca os dados no array (2D de floats) mydata e o header no array (1D de strings) myheader

Calcula as coordenadas das quinas da imagem atraveacutes do WCS

Provecirc informaccedilotildees sobre o arquivo

7089

Arquivos - binaacuterios - ISIS Cube

Formatos como FITS se adequam muito a ter uma interface de mais alto niacutevel por objetos

Tambeacutem para dados em tabelas FITS muito mais trabalhosos de ler em baixo niacutevel que se adequam muito mais a mapas ou estruturas

Exemplo (de um formato semelhante a FITS ISIS cube)

O objeto ao ser criado lecirc todo o arquivo

cube=pp_editablecube(CM_1553510065_1_ircub)

Meacutetodos fornecem os dados desejados para obter quando necessaacuterio os dados de interesse

Find out the names of the backplanesprintcubegetproperty(backnames)Get the start time of the cubeprintcubegetfromheader(START_TIME)2007-084T100057286Z

Valores no cabeccedilalho podem ser convenientemente fornecidos como um mapa

header=cubeheader_as_hash()printheader[START_TIME]2007-084T100057286Z

7189

Arquivos - binaacuterios ndash ISIS Cube

Os dados satildeo fornecidos como arraysMake a contour plot of the latitudesc=contour(cubegetsuffixbyname(LATITUDE))Get the band with wavelength nearest to 21 (in the units used in the cube)selband=cubegetbandbywavelength(21wavelengths=selwavs)

Interfaces por overload tornam o acesso ainda mais conveniente

selband=cube[21]

selwavs=cube[21]

Retorna um array com a banda de comprimento de onda mais proacuteximo de 21 (microm)

Retorna o comprimento de onda mais proacuteximo de 21 (microm) da banda retornada acima

7289

Arquivos - binaacuterios ndash ISIS Cube Alteraccedilotildees feitas ao conteuacutedo satildeo automaticamente refletidas em todos os

lugares (cabeccedilalho em particular) afetados mantendo o objeto vaacutelido que pode depois ser gravado em um novo arquivo

IDLgt printcubelinescubesamplescubebands 64 64 256

IDLgt helpcubecoreltExpressiongt FLOAT = Array[64 64 256]

IDLgt cubecore=dblarr(100100256)

A linha acima natildeo eacute uma atribuiccedilatildeo eacute uma invocaccedilatildeo de meacutetodo Eacute equivalente acubesetpropertycore=dblarr(100100256)

Eacute o trabalho da funccedilatildeo setproperty decidir se a propriedade passada (core) faz sentido e se fizer fazer todo o trabalho necessaacuterio a esta mudanccedila Para o usuaacuterio eacute tudo automaacutetico e os dados da classe satildeo vaacutelidos o tempo todo

IDLgt helpcubecoreltExpressiongt DOUBLE = Array[100 100 256]

IDLgt printcubelinescubesamplescubebands 100 100 256

IDLgt cubesaveCM_1553510065_1_ir_editedcub

7389

Arquivos - binaacuterios ndash NetCDF e HDF5

Network Common Data Form e Hierarchical Data Format

Os dois uacutenicos formatos bem estabelecidos para dados cientiacuteficos geneacutericos

Armazenam dados como vaacuterias variaacuteveis e seus metadados Para cada variaacutevel haacute (ou pode haver) os metadados

Nome Dimensotildees (do array) Unidades Comentaacuterios

Ambos permitem arrays multidimensionais

Apenas HDF5 permite estruturas (daiacute vem a hierarquia)

Autodocumentados qualquer software que saiba ler um destes formatos lecirc qualquer arquivo sem precisar de conhecimento preacutevio sobre como o arquivo foi gerado

Muito bem suportados em bibliotecas padratildeo e natildeo padratildeo em softwares interativos e visualizadores (inclusive plugins para navegadores)

httpwwwunidataucaredusoftwarenetcdf httpenwikipediaorgwikiHdf5

NetCDF eacute mais simples de usar por natildeo ter hierarquia dando menos trabalho para ler e escrever dados Se hierarquia natildeo eacute necessaacuteria eacute mais conveniente de usar que HDF5

7489

Arquivos - binaacuterios - NetCDF e HDF5Haacute tambeacutem o formato CDL uma versatildeo ASCII do NetCDF A biblioteca padratildeo do NetCDF inclui conversores entre estes formatos

$ ncdump -h refspec_g01_0ncnetcdf refspec_g01_0 dimensions nlay = 51 nwn = 400 nleg = 33 numu = 2 nlev = 52 nphi = 3 ngas = 2 nwnc = 1 scal = 1 v3 = 3 dnl = 1 nk = 1 tdisr = UNLIMITED (0 currently) na = 16

variables float alb(nwn) float z(nlay) float t(nlay) float p(nlay) float wl(nwn) float iof(nwn) float mtau(nwn) float htau(nwn) float hctaus(nwn) float gtau(nwn) float outcos(scal) float phi(nleg) float phic(scal) float umu(numu) float flux(v3 nwn nlev) float mix(nlay ngas) float c(nlay) float psat(nlay) float ga(nwnc) float wlc(nwnc) float inc(scal) int dm(scal) int ord(scal) float fbeam(scal) float wn(nwn) float tautot(nwn nlay) float htaus(nwn nlay) float htaux(nwn nlay) float taug(nwn nlay) float phase(nwn nlay nleg) float ssa(nwn nlay) float uu(nwn nphi nlev numu) float u0u(nwn nlev numu) float tray(nwn nlay) float gtauo(tdisr nwn nlay)

Haacute 14 variaacuteveis usadas como dimensotildees para as 35 variaacuteveis que satildeo arrays

Ex alb(nwn) indica que alb eacute um array 1D de nwn elementos

nwn estaacute armazenado como uma das dimensotildees e eacute 400 portanto alb tem 400 elementos

Parte do conteuacutedo de um arquivo NetCDF em formato CDL (gerado pelo programa ncdump)

7589

Arquivos - binaacuterios - NetCDF e HDF5Conteuacutedo daquele arquivo visualizado com o ncview (acompanha a biblioteca NetCDF padratildeo)

7689

Arquivos - binaacuterios - NetCDF e HDF5O conteuacutedo de todo o arquivo pode ser lido facilmente com as bibliotecas disponiacuteveis e armazenado em contecirciners convenientes Usando um objeto que gera um resultado um pouco mais conveniente

IDLgt h=pp_readncdf(refspec_g01_0nchash)IDLgt printhvar_dims ltObjHeapVar229(HASH)gtvars ltObjHeapVar152(HASH)gtdims ltObjHeapVar118(HASH)gt

IDLgt printh[vars]T 173203 175459 175848 176001 175975 Z 431869 418858 406067 393403 380464 FLUX 300660 145536 0705180 0341669 0165532 PHASE 100000 0779034 0660858 0542052 0449983 TAUTOT0694377 0693420 0693474 0693540 0693636()

IDLgt help(h[vars])[TAUTOT]ltExpressiongt FLOAT = Array[51 400]

IDLgt print(h[var_dims])[TAUTOT]NLAY NWN

IDLgt print(h[dims])[(h[var_dims])[TAUTOT]]NLAY 51NWN 400

7789

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5)

Visualizaccedilatildeo da variaacutevel selecionada

Metadados e alguns valores da variaacutevel selecionada

Variaacutevel a ser criada com o conteuacutedo desta variaacutevel do arquivo

Hierarquia das variaacuteveis do arquivo

7889

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5) Imported variable az

IDLgt helpaz Structure ltd5723f38gt 13 tags length=448 data length=444 refs=1 _NAME STRING az _ICONTYPE STRING binary _TYPE STRING DATASET _FILE STRING INTENSI_test_409OUTh5 _PATH STRING _DATA DOUBLE Array[38] _NDIMENSIONS LONG 1 _DIMENSIONS ULONG64 Array[1] _NELEMENTS ULONG64 38 _DATATYPE STRING H5T_FLOAT _STORAGESIZE ULONG 8 _PRECISION LONG 64 _SIGN STRING

IDLgt printaz_data 00000000 10000000 20000000 30000000 40000000 50000000 60000000 80000000 ()

7989

Arquivos - binaacuterios - imagens

JPEG JPEG200 TIFF GeoTIFF etc

Os formatos comuns de imagens satildeo bem suportados em muacuteltiplas plataformas para uso dentro de programas e interativamente

Alguns formatos tecircm opccedilatildeo de compressatildeo com perda eou sem perda

Armazenam imagens como arrays 2D ou 3D (3D frequumlentemente limitado a 3 ou 4 em uma das dimensotildees uma imagem em 3 ou 4 bandas) de inteiros ou (em alguns formatos) reais

Alguns formatos permitem armazenar metadados para caracterizar as imagens armazenadas

JPEG2000 e GeoTIFF (um subconjunto de TIFF) comuns em astronomia e aacutereas proacuteximas

8089

Arquivos - binaacuterios ndash imagens ndash exemplo (IDL)IDLgt printquery_tiff(issmap_2009tiffinfogeotiff=geo) 1

IDLgt helpinfo Structure ltd4eca4b8gt 18 tags length=144 data length=132 refs=1 CHANNELS LONG 4 DIMENSIONS LONG Array[2] IMAGE_INDEX LONG 0 NUM_IMAGES LONG 1 PIXEL_TYPE INT 1 TYPE STRING TIFF BITS_PER_SAMPLE LONG 8 POSITION FLOAT Array[2] RESOLUTION FLOAT Array[2] UNITS LONG 2 TILE_SIZE LONG Array[2] DESCRIPTION STRING ISS (2009) DATE_TIME STRING 20100218 012436()

IDLgt helpgeo Structure ltd4efa1b8gt 10 tags length=264 data length=262 refs=1 MODELPIXELSCALETAG DOUBLE Array[3] MODELTIEPOINTTAG DOUBLE Array[6 4] GEOGRAPHICTYPEGEOKEY INT 4035 GEOGSEMIMAJORAXISGEOKEY DOUBLE 25750000 GEOGSEMIMINORAXISGEOKEY DOUBLE 25750000()

IDLgt myimage=read_tiff(issmap_2009tiff) Lecirc a imagem para o array myimage

Obteacutem informaccedilotildees sobre o arquivo

8189

Arquivos - binaacuterios ndash formatos nativosLinguagens como IDL R Python Java tecircm seu formato nativo binaacuterio acessado em alto niacutevel Basta mandar salvar ler variaacuteveis no do arquivo a biblioteca padratildeo automagicamente faz todo o trabalho de decidir como gravar ler os dados

Conveniente de usar na proacutepria linguagem Mas raramente existem bibliotecas para ler gravar o formato nativo de uma linguagem a partir de outra Ex (IDL)

IDLgt savefile=2dspectrumsavmydatamyheadercorners_dcorners_averbosecompress SAVE Portable (XDR) compressed SAVERESTORE file SAVE Saved variable MYDATA SAVE Saved variable MYHEADER()

Pode ser lido com apenas (haacute formas mais elaboradas)

IDLgt restore2dspectrumsavverbose RESTORE Portable (XDR) compressed SAVERESTORE file RESTORE Save file written by ltunknowngtltunknowngt Thu Jan 27 191422 2011 RESTORE IDL version 801 (linux x86_64) RESTORE Restored variable MYDATA RESTORE Restored variable MYHEADER()

IDLgt helpmydatamyheadercorners_dcorners_aMYDATA FLOAT = Array[1201 1201]MYHEADER STRING = Array[144]()

8289

Arquivos - processamento em baixo niacutevel

Nem sempre um formato padratildeo eacute a melhor escolha para o problema

Nem sempre haacute escolha (pode-se ter que trabalhar com arquivos que jaacute foram escritos em algum formato proprietaacuterio)

Agraves vezes o formato eacute padratildeo mas natildeo haacute bom suporte a ele disponiacutevel

Em todos estes casos eacute necessaacuterio escrever rotinas em baixo niacutevel que vatildeo ler processar diretamente o conteuacutedo do arquivo

Preferencialmente criando interfaces de alto niacutevel para o programa que vai as usar

8389

Arquivos - processamento em baixo niacutevel - texto

Tomando o exemplo anterior onde as colunas eram de diferentes tipos

NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS dec18s0001 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0002 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0003 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 FLAT 5408757812500 460000 5 dec18s0004 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 DARK 5408757812500 460000 5

A forma mais simples de o ler diretamente eacute definir uma estrutura para receber cada linha e um array destas estruturas para receber todo o arquivo Ex (IDL)

IDLgt record=namecalmpos0filnameechlpos0d0disppos0d0targnameposdirclassmjd_obsitime0d0coadds0IDLgt nlines=file_lines(filesearch_scamtxt)IDLgt mydata=replicate(recordnlines-1)IDLgt header=

Depois de definidas as variaacuteveis que vatildeo receber os dados o arquivo pode ser lido

IDLgt openrunitfilesearch_scamtxtget_lunIDLgt readfunitheaderIDLgt readfunitmydataformat=(A14I8A15F104F104A18A19A15F158F105I15)IDLgt free_lununit

A gravaccedilatildeo de um arquivo texto poderia ser feita de forma semelhante apenas trocando openr por openw (abrir o arquivo para gravaccedilatildeo natildeo leitura) e readf por printf

O arquivo eacute aberto em uma unidade (unit) usada para especificar de onde eacute feita a leitura

Ao final o arquivo eacute fechado

8489

Arquivos - processamento em baixo niacutevel - texto

O que resulta em

IDLgt printheader NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS

IDLgt helpmydataMYDATA STRUCT = -gt ltAnonymousgt Array[4]

IDLgt helpmydata[0] Structure ltd5e38f68gt 11 tags length=136 data length=124 refs=3 NAME STRING dec18s0001 CALMPOS INT 0 FILNAME STRING NIRSPEC-5-AO ECHLPOS DOUBLE 62630000 DISPPOS DOUBLE 36450000 TARGNAME STRING HD85258 POSDIR STRING NIRSPEC-5-AOp1 CLASS STRING STAR MJD_OBS STRING 54087574 ITIME DOUBLE 10000000 COADDS INT 1

Este caso eacute mais complicado que os mais comuns por haver colunas de strings

Se todas fossem de nuacutemeros natildeo teria sido necessaacuterio especificar o formato explicitamente As colunas teriam sido adivinhadas pela biblioteca que lecirc o arquivo Poderia ter sido lido escrito soacute com um array de nuacutemeros sem estruturas

8589

Arquivos - processamento em baixo niacutevel - binaacuterio

Formatos binaacuterios podem ser definidos de qualquer forma O arquivo eacute apenas um conjunto de bytes Cabe ao software saber como os interpretar

Uma escolha comum para que sejam autodocumentados eacute incluir um cabeccedilalho de texto informando as caracteriacutesticas dos dados necessaacuterias para os ler

Ex (IDL) criar um arquivo que armazene um array de doubles com um cabeccedilalho informando as dimensotildees para que o programa que o lecirc saiba como ler os dados

Inventa dados e abre o arquivo

IDLgt data_to_write=dindgen(34)IDLgt openwunitbinary_exampledatget_lun

Escreve as dimensotildees como texto

IDLgt printfunitdimensions of the double array stored belowIDLgt printfunitsize(data_to_writedimensions)

Escreve os dados binaacuterios

IDLgt writeuunitdata_to_write

Fecha o arquivo

IDLgt free_lununit

Escreve em binaacuterio (write unformatted)

8689

Arquivos - processamento em baixo niacutevel - binaacuterio

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

dimensions of the double array stored below 3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

8789

Arquivos - processamento em baixo niacutevel - binaacuterioA leitura deste arquivo eacute igualmente simples

IDLgt header=IDLgt dims=[00]IDLgt openrunitbinary_exampledatget_lun

Lecirc as dimensotildees (armazenadas como texto)

IDLgt readfunitheaderIDLgt readfunitdims

Lecirc a parte binaacuteria depois de saber as dimensotildees

IDLgt data_read=dblarr(dims)IDLgt readuunitdata_read

Fecha o arquivo

IDLgt free_lununit

Verifica que os dados foram gravados e lidos corretamente

IDLgt printarray_equal(data_to_writedata_read) 1

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Lecirc dados binaacuterios (read unformatted)

8889

Sumaacuterio

5 ndash Slides em httpwwwppenteadonetpeapea04_strings_iopdf Strings Expressotildees regulares Arquivos

httpwwwppenteadonetpea

8989

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89

Expressotildees regulares - aleacutem de apenas testes

Tambeacutem podem retornar que parte(s) do string correspondem agrave expressatildeo toda e agraves suas subexpressotildees (partes da expressatildeo delimitadas por parecircnteses)

Ex (IDL) Separar pedaccedilos de datas Neste caso para a expressatildeo ficar menor assumindo um formato simples (yyyy-mm-ddThhmmssfff) Mas poderia ser um formato mais livre como no exemplo anterior

IDLgt str=Stuff observed on 2011-01-31T123924983 with some instrumentIDLgt expr=([0-9]4)-([0-9]2)-([0-9]2)T([0-9]2)([0-9]2)([0-9]2[0-9]3)

(quatro diacutegitos)-(2 diacutegitos)-(2 diacutegitos)T(2 diacutegitos)(2 diacutegitos)(2 diacutegitos3 diacutegitos)

IDLgt pieces=stregex(strexprextractsubexpr)IDLgt printpiecesformat=(A)2011-01-31T12392498320110131123924983IDLgt d=julday(pieces[2]pieces[3]pieces[1]pieces[4]pieces[5]pieces[6])IDLgt printdformat=(F166) 2455593027372

Expressatildeo inteiraPrimeira subexpressatildeoSegunda subexpressatildeoTerceira subexpressatildeoQuarta subexpressatildeoQuinta subexpressatildeoSexta subexpressatildeo

4889

Expressotildees regulares - referecircncias httpxkcdcom208

Viacutedeos do Software Carpentry

httpsoftware-carpentryorg4_0regexp

4989

Arquivos

Quase todo programa precisa armazenar dados em arquivos

Podem ser pequenos arquivos de paracircmetros ou enormes arquivos de dados produzidos ou a processar

Apesar do sugerido pela praacutetica comum arquivos texto natildeo satildeo sempre a melhor escolha para armazenar dados - e haacute muitas formas diferentes de os usar

Qual eacute a melhor escolha

Assim como para linguagens ou contecirciners natildeo existe ldquoo melhor formatordquo Cada um tem suas vantagens e desvantagens

Dados diferentes (mesmo se usados pelos mesmos programas) em geral se adequam melhor a formatos diferentes

5089

Arquivos - texto X binaacuterios

Em qualquer formato arquivos satildeo armazenados como diacutegitos binaacuterios

Mas haacute duas formas principais como eles podem ser codificados

Arquivos baseados em texto (text files)

Dados satildeo transformados em caracteres usando alguma formataccedilatildeo (mesmo se impliacutecita) e escritos com alguma codificaccedilatildeo de texto (comumente mas natildeo necessariamente ASCII)

Um arquivo texto eacute um ou mais strings As mesmas conversotildees tecircm que ser feitas depara outros tipos

Arquivos ldquobinaacuteriosrdquo (binary files)

Embora todo arquivo seja binaacuterio este nome costuma ser usado soacute para aqueles em que os dados natildeo estatildeo na forma de texto

Com frequumlecircncia (nem sempre) os dados satildeo gravados de forma idecircntica a como satildeo armazenados na memoacuteria

Muitos formatos usam uma mistura de partes em texto e partes binaacuterias

Um cabeccedilalho (header) de texto que daacute informaccedilotildees (metadados) sobre os dados armazenados na parte binaacuteria que vem depois

O cabeccedilalho conteacutem em especial informaccedilotildees sobre como ler os dados binaacuterios

5189

Arquivos - texto X binaacuterios

Vantagens de arquivos texto

Legiacuteveis por pessoas (human readable)

Podem ser auto-suficientes todo o necessaacuterio para os ler e entender o que conteacutem pode ser obtido olhando o arquivo

Satildeo os menos especiacuteficos a linguagens software normalmente satildeo escritos em ASCII ou Unicode e sempre haacute algum suporte a ler escrever texto em linguagens software

Haacute alguns formatos padratildeo para texto (exs CSV XML) que satildeo suportados em muitas plataformas diferentes

5289

Arquivos - texto X binaacuterios

Vantagens de arquivos binaacuterios

Em geral natildeo haacute conversotildees entre o os dados como armazenados na memoacuteria O que torna o armazenamento mais eficiente e sem alteraccedilotildees nos valores

A maior parte dos formatos padronizados eacute binaacuteria Exs FITS cube CDF NetCDF HDF HDF5 JPEG JPEG2000 TIFF GeoTIFF MPEG etc

Eacute mais comum que haja bibliotecas prontas (ateacute de alto niacutevel) para consulta leitura e gravaccedilatildeo

Os formatos melhor desenhados satildeo autodocumentados (em texto ou binaacuterio) para os ler natildeo eacute necessaacuterio conhecimento preacutevio sobre como os dados foram armazenados

Toda linguagem plataforma costuma ter seu formato binaacuterio mais nativo que costuma ser o mais faacutecil para leitura gravaccedilatildeo Em particular nas de alto niacutevel que tecircm formatos autodocumentados (especialmente

em IDL R Python Java)

Muitos formatos tecircm opccedilatildeo de compressatildeo dos dados

5389

Arquivos - proprietaacuterios X padratildeo

Independente da escolha texto binaacuterio programas devem escolher entre usar um formato proacuteprio ou um formato padronizado

A principal vantagem de formatos proacuteprios eacute que satildeo definidos da forma mais conveniente para a aplicaccedilatildeo que os usa simplificando leitura e gravaccedilatildeo e potencialmente otimizando recursos (acesso ao disco tamanho do arquivo etc)

A principal desvantagem de formatos proacuteprios eacute ser necessaacuterio escrever todo o coacutedigo para os ler gravar

Pode dar mais trabalho que usar um formato geneacuterico que natildeo seja exatamente o que melhor se encaixa na aplicaccedilatildeo

O coacutedigo para processar o formato em geral vai ser menos completo e conveniente de usar que o de um formato bem estabelecido usado por muitos outros em muitos ambientes

Cada novo software que for usar estes arquivos vai precisar compartilhar do mesmo coacutedigo ou precisar de coacutedigo novo (em particular se em outra linguagem) para ler gravar naquele formato

Eacute necessaacuterio documentar o formato e decidir sobre como ele seraacute definido

Se outros jaacute colocaram muito trabalho desenvolvendo bons formatos padratildeo bem suportados em muitos ambientes por que ter o trabalho de reinventar (e reprogramar redocumentar e retestar) a roda

5489

Arquivos - padrotildees comuns em astronomia (exs adiante)

Texto

CSV Comma-separated values - bem suportado por muitos softwares

ldquoColunas fixasrdquo Natildeo eacute um padratildeo bem definido mas eacute praacutetica comum para tabelas (2D)

XML Extensible Markup Language - O padratildeo texto mais flexiacutevel de grande uso em programaccedilatildeo geral para armazenar qualquer coisa com frequumlecircncia de forma hieraacuterquica Bem suportado por linguagens modernas (e modernizadas) e bibliotecas das principais

linguagens gerais Alta complexidade o torna trabalhoso de usar

5589

Arquivos - padrotildees comuns em astronomia (exs adiante)Binaacuterios

FITS Flexible Image Transport System - o mais comum para observaccedilotildees astronocircmicas Conteacutem os dados (em geral arrays 1D 2D ou 3D) e documentaccedilatildeo (nos cabeccedilalhos) sobre a origem e caracteriacutesticas dos dados Tambeacutem usado para armazenar tabelas de dados quaisquer mesmo que natildeo sejam observaccedilotildees (especialmente pelo STSCI) Variam muito em qualidade de documentaccedilatildeo

NetCDF Network Common Data Form - evoluccedilatildeo do CDF autodocumentado eacute comum e bem suportado para vaacuterios arrays de dados

HDF5 Hierarchical Data Format ndash autodocumentado comum e bem suportado permitindo aleacutem de simples arrays estruturas (eacute um formato hieraacuterquico)

Formatos de imagens JPEG JPEG2000 TIFF GeoTIFF etc - voltados para arrays 2D3D de inteiros ou (em alguns casos) reais com ou sem compressatildeo JPEG2000 tem caracteriacutesticas mais avanccediladas como imagens multiresoluccedilatildeo

Formatos vetoriais PS EPS DXF SHP SVG - variados niacuteveis de suporte a armazenamento de vetores e formas em 2D ou 3D

ISIS Cube semelhante em caracteriacutesticas ao FITS mais usado em sensoriamento remoto geociecircncias e ciecircncias planetaacuterias em geral para observaccedilotildees 1D 2D ou 3D

Formatos nativos de linguagens todo o trabalho de leitura e gravaccedilatildeo eacute feito automagicamente pela biblioteca padratildeo em IDL R Python Java

5689

Arquivos texto - newlines

Apesar do que possa parecer arquivos texto natildeo tecircm intrinsecamente vaacuterias linhas Arquivos texto satildeo soacute uma sequumlecircncia 1D de caracteres em alguma codificaccedilatildeo Separaccedilatildeo em linhas (equivalente a interpretar o arquivo como 2D em linhas e colunas) eacute

especificada por convenccedilotildees Natildeo haacute apenas uma convenccedilatildeo para o fim de linhas

A mais primitiva convenccedilatildeo eacute separaccedilatildeo nenhuma estipula-se que linhas tenham um nuacutemero fixo N de caracteres e cabe ao software que lecirc o arquivo entender que uma linha nova ocorre regularmente a cada N caracteres

Eacute a forma menos portaacutevel e mais inconveniente eacute necessaacuterio o conhecimento preacutevio (ou por inspeccedilatildeo do arquivo) de quantos caracteres haacute por linha

A maior parte dos editores de texto natildeo vai saber separar linhas desta forma (por falta deste conhecimento preacutevio) Exemplo (de um FITS real)

SIMPLE = T Fits standard BITPIX = 16 Bits per pixel NAXIS = 0 Number of axes EXTEND = T File may contain extensions

O que com as linhas quebradas nos lugares certos seria

SIMPLE = T Fits standard BITPIX = 16 Bits per pixel NAXIS = 0 Number of axes EXTEND = T File may contain extensions

5789

Arquivos texto - newlines

A forma mais comum de especificar linhas eacute com um marcador do final de linha (newline)

Eacute um caractere especial natildeo normalmente presente no texto que serve para marcar fim de linhas

Mas natildeo haacute soacute um padratildeo de newline Os mais comuns

LF (Line Feed ASCII 10) ndash Unix Linux Mac OS X

CR - (Carriage Return ASCII 13) - Mac OS lt10

CR+LF (CR seguido de LF) - Windows DOS

Eacute o motivo de o Notepad (Windows) natildeo entender as quebras de linha de arquivos escritos com o formato nativo de Linux o arquivo soacute tem LF enquanto o editor espera CR+LF

Alguns sistemas (strings em vaacuterias linguagens por exemplo) usam o coacutedigo de escape n para indicar newline que eacute codificado de acordo com o padratildeo sendo usado

Em geral bibliotecas de leitura e gravaccedilatildeo de arquivos usam (default pelo menos) o newline nativo do sistema em que satildeo usadas

Programas de conversatildeo entre os sistemas satildeo comuns (ex dos2unix)

O Wordpad identifica se for usado soacute LF e quebra as linhas de acordo

5889

Arquivos - texto - CSV

Comma-separated values

O formato mais padronizado para tabelas (arrays 2D) em texto (frequentemente mas natildeo necessariamente ASCII)

Bem suportado por bibliotecas padratildeo de linguagens e outros softwares (Excel Calc Origin Google Docs etc)

Conteacutem Linhas de cabeccedilalho (opcionais mas recomendadas) linhas com qualquer texto geral

descrevendo o arquivo e em geral uma linha de tiacutetulo para as colunas da tabela Uma (apenas uma) tabela onde todas as linhas tecircm o mesmo nuacutemero de colunas

Colunas separadas por viacutergulas (opcionalmente pode ser outro separador) Linhas terminadas por newline (qualquer que seja) Strings delimitados por ldquo ldquo

Ex

NAMECALMPOSFILNAMEECHLPOSDISPPOSTARGNAMEPOSDIRCLASSMJD-OBSITIMECOADDSdec18s00010NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001dec18s00020NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001dec18s00120NIRSPEC-5-AO635800364500itan140NIRSPEC-5-AOp2 TITAN5408763000001dec18s00140NIRSPEC-5-AO626300364500itan140NIRSPEC-5-AOp1 TITAN5408763000001dec18s00151NIRSPEC-5-AO626300364500itan140NIRSPEC-5-AOp1ARC5408764000001dec18s00160NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001

Natildeo eacute necessaacuterio que as colunas tenham largura constante

Cabeccedilalho

5989

Arquivos - texto - CSVHaacute amplo suporte a leitura e gravaccedilatildeo de CSV sem precisar recorrer a procedimentos de baixo niacutevel

Podem ser diretamente importados em Excel Calc Origin Google Docs ou lido facilmente com bibliotecas padratildeo comuns Ex (IDL)

IDLgt c=read_csv(filesearch_scamcsvheader=h)IDLgt printhNAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS

IDLgt helpc Structure ltc8bca508gt 11 tags length=5256 data length=5248 refs=1 FIELD01 STRING Array[41] FIELD02 LONG Array[41] FIELD03 STRING Array[41] FIELD04 DOUBLE Array[41] FIELD05 DOUBLE Array[41] FIELD06 STRING Array[41] FIELD07 STRING Array[41] FIELD08 STRING Array[41] FIELD09 STRING Array[41] FIELD10 DOUBLE Array[41] FIELD11 LONG Array[41]

IDLgt printcfield01[03]dec18s0001 dec18s0002 dec18s0003 dec18s0004

IDLgt printcfield03[03]NIRSPEC-5-AO NIRSPEC-5-AO NIRSPEC-5-AO NIRSPEC-5-AO

6089

Arquivos - texto - CSVEx (IDL) Criaccedilatildeo de um CSV com uma tabela de valores

Criaccedilatildeo de 3 arrays 1D (12 elementos) um para cada coluna

IDLgt x=dindgen(3)IDLgt y=dindgen(4)IDLgt xx=reform(rebin(x34)12)IDLgt yy=reform(rebin(reform(y14)34)12)IDLgt f=xx+yy10IDLgt helpxxyyfXX DOUBLE = Array[12]YY DOUBLE = Array[12]F DOUBLE = Array[12]

Escrita do arquivo

IDLgt write_csvexamplecsvxxyyfheader=[XYX+10Y]

ResultadoXYX+10Y000000000000000000000000100000000000000010000000200000000000000020000000000000001000000010000000100000001000000011000000()

6189

Arquivos - texto - ldquoColunas regularesrdquoFixed column width

Natildeo eacute exatamente um padratildeo Eacute uma praacutetica comum

Armazena uma tabela (array 2D) de forma regular simples de ser interpretada e lida

Costumam ter linha(s) de cabeccedilalho descrevendo o conteuacutedo do arquivo em geral com uma linha para os nomes das colunas

As demais linhas conteacutem os dados sempre ocupando a mesma largura por coluna e escritos no mesmo formato em cada coluna

Costumam ser simples de ler inclusive interativamente (exs Excel Calc Origin read_ascii)

Ex (IDL) Uma simples tabela soacute de nuacutemeros

wavl CH4=33 wavl CH4=25 wavl CH4=10 wavl CH4=08 wavl CH4=05 wavl CH4=026 wavl CH4=02 477330000 0090130 477330000 0091110 477330000 0089250 477330000 0087000 477330000 0087140 477330000 0090080 477330000 0088110 480040000 0090930 480040000 0091930 480040000 0090160 480040000 0087930 480040000 0088110 480040000 0090950 480040000 0089090 482750000 0091710 482750000 0092730 482750000 0091060 482750000 0088850 482750000 0089080 482750000 0091810 482750000 0090060 485450000 0092530 485450000 0093570 485450000 0092000 485450000 0089810 485450000 0090100 485450000 0092730 485450000 0091090

IDLgt a=read_ascii(specs_27s_ntxtdata_start=1header=header)IDLgt printheader wavl CH4=33 wavl CH4=25 wavl CH4=10 wavl CH4=08 wavl CH4=05 wavl CH4=026 wavl CH4=02 IDLgt helpa Structure ltd423c9a8gt 1 tags length=224 data length=224 refs=1 FIELD01 FLOAT Array[14 4]

6289

Arquivos - texto - ldquoColunas regularesrdquoJaacute um arquivo um pouco mais difiacutecil de ler

NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS dec18s0001 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0002 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0003 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 FLAT 5408757812500 460000 5 dec18s0004 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 DARK 5408757812500 460000 5

Por ter colunas de tipos diferentes (strings inteiros reais) natildeo eacute possiacutevel o ler em um simples array Mas eacute faacutecil o colocar em uma estrutura de arrays onde cada campo eacute uma coluna

Especificando interativamente como interpretar as linhasIDLgt templ=ascii_template(filesearch_scamtxt)

Nome do campo (default mostrado)

Tipo do campo (identificado automaticamente)

Posiccedilatildeo (caracter) do comeccedilo (identificada automaticamente)

Linha de exemplo para verificar as colunas

6389

Arquivos - texto - ldquoColunas regularesrdquoDepois de feito o template o arquivo pode ser lido com apenas

IDLgt a=read_ascii(filesearch_scamtxttemplate=templ)IDLgt helpa Structure ltd4ec4608gt 11 tags length=416 data length=416 refs=1 FIELD01 STRING Array[4] FIELD02 LONG Array[4] FIELD03 STRING Array[4] FIELD04 FLOAT Array[4] FIELD05 FLOAT Array[4] FIELD06 STRING Array[4] FIELD07 STRING Array[4] FIELD08 STRING Array[4] FIELD09 FLOAT Array[4] FIELD10 FLOAT Array[4] FIELD11 LONG Array[4]IDLgt printafield01dec18s0001 dec18s0002 dec18s0003 dec18s0004IDLgt printafield04 626300 626300 626300 626300

O template (uma estrutura contendo dados sobre como ler o arquivo) pode ser usado para outros arquivos no mesmo formato No lugar de ter sido criado interativamente poderia ter sido lido de algum arquivo Poderia ter especificado nomes para os campos que seriam mais amigaacuteveis que coias como FIELD11

6489

Arquivos - texto - XML

Extensible Markup Language

Admite grande flexibilidade e por isso pode ter alta complexidade

Valores satildeo colocados dentro de uma estrutura em hieraacuterquica (em uma aacutervore) com os noacutes identificados pelos seus nomes (chaves)

Largamente usado em muitas aacutereas para armazenar conjuntos arbitraacuterios de quaisquer estruturas de dados

A maioria das aplicaccedilotildees usa um formato que eacute um subconjunto do XML especificado por um Schema comumente em um arquivo XML DTD (Document Type Definition)

6589

Arquivos - texto ndash XML ndash exemplos de usos

Armazenamento de dados de aplicaccedilotildees web (comum para exportar importar dados MediaWiki DokuWiki WordPress ADS Lattes etc)

Documentos Office (docx pptx xlsx) OpenOffice (odt opd ods)

Como versotildees de outros formatos FITSML XDF

ldquoScientific Dataset XML NASAs Astronomical Data Center (ADC) sponsors a number of research projects that

use XML for scientific data representation The XML activities at the ADC are sponsored and supported by the NASA Office of Space Science Applied Information Systems Research Program (AISRP)rdquo - httpxmlcoverpagesorgnasa-adchtml

Astronomical Instrument Markup Language (AIML)

SVG ndash Scalable Vector Graphics

Muitas de outras aplicaccedilotildees listadas em httpxmlcoverpagesorgxmlhtmlapplications

6689

Arquivos - texto ndash XML - exemploltxml version=10 gtltDOCTYPE Xdmf SYSTEM Xdmfdtd []gtltXdmf xmlnsxi=httpwwww3org2001XInclude Version=20gt ltDomaingt lt-- Example of Basic Topologies --gt ltInformation Name=Descriptiongt Example of a Polyvertex Topology ltInformationgt ltGrid Name=Polyvertex GridType=Uniformgt ltTopology TopologyType=Polyvertex Dimensions=3 NodesPerElement=3gt ltDataItem Format=XML Dimensions=3 3 NumberType=Floatgt 0 1 2 4 5 6 8 9 10 ltDataItemgt ltTopologygt ltGeometry Type=XYZgt ltDataItem Format=XML Dimensions=4 4 3gt 00 00 00 10 00 00()Que mostra que a interpretaccedilatildeo (parsing) de XML eacute em geral complexa

6789

Arquivos - texto - XML

Haacute muitas bibliotecas de alto niacutevel para fazer o processamento (parsing) e entregar os dados em uma estrutura conveniente

A complexidade em processar XML estaacute em decidir o que fazer com os dados jaacute que os arquivos podem ser muito complexos

As APIs (Application Programming Interfaces) mais comuns para processar XML que satildeo implementadas em muitas linguagens

DOM (Document Object Model) ndash manteacutem todo o conteuacutedo do em uma estrutura de dados (em geral uma aacutervore) em uma variaacutevel (em geral um objeto) Esta pode ser consultada para obter os valores de interesse para os alterar e usada para escrever um arquivo

SAX (Simple API for XML) ndash Interpretador (parser) por objetos O usuaacuterio escreve uma classe herdando da classe SAX provendo os meacutetodos que vatildeo processar os campos agrave medida em que estes satildeo lidos

6889

Arquivos - binaacuterios - FITSFlexible Image Transport System

O formato mais comum para observaccedilotildees astronocircmicas Tambeacutem usado para armazenar quaisquer dados mesmo natildeo relacionados a observaccedilotildees (especialmente tabelas como eacute praacutetica do STSCI)

Conteacutem um (ou mais) cabeccedilalho(s) de texto com metadados (informaccedilotildees sobre os dados como caracteriacutesticas (necessaacuterias para os ler) origem condiccedilotildees em que foram obtidos processamento realizado etc)

SIMPLE = T image conforms to FITS standard BITPIX = 32 bits per data value NAXIS = 2 number of axes NAXIS1 = 1024 NAXIS2 = 1024 BSCALE = 100000 Scaling factor BZERO = 000000 Scaling zero-point TELESCOP= Keck II Telescope SLITNAME= 0041x226 Slit Name SLITPA = 351979 Slit position angle SLITX = 131500 X pixel of the center of the slit LST = 12010446 local apparent sidereal time (()

Depois do cabeccedilalho haacute uma (ou mais) seccedilatildeo(otildees) de dados binaacuterios Costuma(m) ser array(s) 1D (espectros) 2D (imagens) ou 3D (ldquocubos de dadosrdquo)

De inteiros ou reais inteiros satildeo comuns em contagens de instrumentos reais para valores derivados (fluxos intensidades etc)

6989

Arquivos - binaacuterios - FITSNormalmente FITS satildeo lidos escritos por bibliotecas prontas de (relativamente) alto niacutevel usuaacuterio natildeo tem que saber como os dados satildeo armazenados no arquivo nem como os ler escrever Ex (IDL com a biblioteca idlastro)

IDLgt fits_info2dspectrumfits2dspectrumfits has 3 extensionsPrimary header 288 recordsNo dataExtension 1 -- SCI Header 144 records IMAGE ( 1201 1201 )Extension 2 -- ERR Header 72 records IMAGE ( 1201 1201 )Extension 3 -- DQ Header 72 records IMAGE ( 1201 1201 )

IDLgt mydata=readfits(2dspectrumfitsexten_no=1myheader) READFITS Reading FITS extension of type IMAGE READFITS Now reading 1201 by 1201 array

IDLgt extastmyheadermyastIDLgt sz=size(mydatadimensions)IDLgt xy2ad[1sz[0]][1sz[1]]myastcorners_acorners_dIDLgt printcorners_aCorners of the data array from file 2dspectrumfits are at 14487480 33063480

IDLgt printcorners_d -00041264444 00041402222

Obteacutem os dados de coordenadas (WCS) do header

Coloca os dados no array (2D de floats) mydata e o header no array (1D de strings) myheader

Calcula as coordenadas das quinas da imagem atraveacutes do WCS

Provecirc informaccedilotildees sobre o arquivo

7089

Arquivos - binaacuterios - ISIS Cube

Formatos como FITS se adequam muito a ter uma interface de mais alto niacutevel por objetos

Tambeacutem para dados em tabelas FITS muito mais trabalhosos de ler em baixo niacutevel que se adequam muito mais a mapas ou estruturas

Exemplo (de um formato semelhante a FITS ISIS cube)

O objeto ao ser criado lecirc todo o arquivo

cube=pp_editablecube(CM_1553510065_1_ircub)

Meacutetodos fornecem os dados desejados para obter quando necessaacuterio os dados de interesse

Find out the names of the backplanesprintcubegetproperty(backnames)Get the start time of the cubeprintcubegetfromheader(START_TIME)2007-084T100057286Z

Valores no cabeccedilalho podem ser convenientemente fornecidos como um mapa

header=cubeheader_as_hash()printheader[START_TIME]2007-084T100057286Z

7189

Arquivos - binaacuterios ndash ISIS Cube

Os dados satildeo fornecidos como arraysMake a contour plot of the latitudesc=contour(cubegetsuffixbyname(LATITUDE))Get the band with wavelength nearest to 21 (in the units used in the cube)selband=cubegetbandbywavelength(21wavelengths=selwavs)

Interfaces por overload tornam o acesso ainda mais conveniente

selband=cube[21]

selwavs=cube[21]

Retorna um array com a banda de comprimento de onda mais proacuteximo de 21 (microm)

Retorna o comprimento de onda mais proacuteximo de 21 (microm) da banda retornada acima

7289

Arquivos - binaacuterios ndash ISIS Cube Alteraccedilotildees feitas ao conteuacutedo satildeo automaticamente refletidas em todos os

lugares (cabeccedilalho em particular) afetados mantendo o objeto vaacutelido que pode depois ser gravado em um novo arquivo

IDLgt printcubelinescubesamplescubebands 64 64 256

IDLgt helpcubecoreltExpressiongt FLOAT = Array[64 64 256]

IDLgt cubecore=dblarr(100100256)

A linha acima natildeo eacute uma atribuiccedilatildeo eacute uma invocaccedilatildeo de meacutetodo Eacute equivalente acubesetpropertycore=dblarr(100100256)

Eacute o trabalho da funccedilatildeo setproperty decidir se a propriedade passada (core) faz sentido e se fizer fazer todo o trabalho necessaacuterio a esta mudanccedila Para o usuaacuterio eacute tudo automaacutetico e os dados da classe satildeo vaacutelidos o tempo todo

IDLgt helpcubecoreltExpressiongt DOUBLE = Array[100 100 256]

IDLgt printcubelinescubesamplescubebands 100 100 256

IDLgt cubesaveCM_1553510065_1_ir_editedcub

7389

Arquivos - binaacuterios ndash NetCDF e HDF5

Network Common Data Form e Hierarchical Data Format

Os dois uacutenicos formatos bem estabelecidos para dados cientiacuteficos geneacutericos

Armazenam dados como vaacuterias variaacuteveis e seus metadados Para cada variaacutevel haacute (ou pode haver) os metadados

Nome Dimensotildees (do array) Unidades Comentaacuterios

Ambos permitem arrays multidimensionais

Apenas HDF5 permite estruturas (daiacute vem a hierarquia)

Autodocumentados qualquer software que saiba ler um destes formatos lecirc qualquer arquivo sem precisar de conhecimento preacutevio sobre como o arquivo foi gerado

Muito bem suportados em bibliotecas padratildeo e natildeo padratildeo em softwares interativos e visualizadores (inclusive plugins para navegadores)

httpwwwunidataucaredusoftwarenetcdf httpenwikipediaorgwikiHdf5

NetCDF eacute mais simples de usar por natildeo ter hierarquia dando menos trabalho para ler e escrever dados Se hierarquia natildeo eacute necessaacuteria eacute mais conveniente de usar que HDF5

7489

Arquivos - binaacuterios - NetCDF e HDF5Haacute tambeacutem o formato CDL uma versatildeo ASCII do NetCDF A biblioteca padratildeo do NetCDF inclui conversores entre estes formatos

$ ncdump -h refspec_g01_0ncnetcdf refspec_g01_0 dimensions nlay = 51 nwn = 400 nleg = 33 numu = 2 nlev = 52 nphi = 3 ngas = 2 nwnc = 1 scal = 1 v3 = 3 dnl = 1 nk = 1 tdisr = UNLIMITED (0 currently) na = 16

variables float alb(nwn) float z(nlay) float t(nlay) float p(nlay) float wl(nwn) float iof(nwn) float mtau(nwn) float htau(nwn) float hctaus(nwn) float gtau(nwn) float outcos(scal) float phi(nleg) float phic(scal) float umu(numu) float flux(v3 nwn nlev) float mix(nlay ngas) float c(nlay) float psat(nlay) float ga(nwnc) float wlc(nwnc) float inc(scal) int dm(scal) int ord(scal) float fbeam(scal) float wn(nwn) float tautot(nwn nlay) float htaus(nwn nlay) float htaux(nwn nlay) float taug(nwn nlay) float phase(nwn nlay nleg) float ssa(nwn nlay) float uu(nwn nphi nlev numu) float u0u(nwn nlev numu) float tray(nwn nlay) float gtauo(tdisr nwn nlay)

Haacute 14 variaacuteveis usadas como dimensotildees para as 35 variaacuteveis que satildeo arrays

Ex alb(nwn) indica que alb eacute um array 1D de nwn elementos

nwn estaacute armazenado como uma das dimensotildees e eacute 400 portanto alb tem 400 elementos

Parte do conteuacutedo de um arquivo NetCDF em formato CDL (gerado pelo programa ncdump)

7589

Arquivos - binaacuterios - NetCDF e HDF5Conteuacutedo daquele arquivo visualizado com o ncview (acompanha a biblioteca NetCDF padratildeo)

7689

Arquivos - binaacuterios - NetCDF e HDF5O conteuacutedo de todo o arquivo pode ser lido facilmente com as bibliotecas disponiacuteveis e armazenado em contecirciners convenientes Usando um objeto que gera um resultado um pouco mais conveniente

IDLgt h=pp_readncdf(refspec_g01_0nchash)IDLgt printhvar_dims ltObjHeapVar229(HASH)gtvars ltObjHeapVar152(HASH)gtdims ltObjHeapVar118(HASH)gt

IDLgt printh[vars]T 173203 175459 175848 176001 175975 Z 431869 418858 406067 393403 380464 FLUX 300660 145536 0705180 0341669 0165532 PHASE 100000 0779034 0660858 0542052 0449983 TAUTOT0694377 0693420 0693474 0693540 0693636()

IDLgt help(h[vars])[TAUTOT]ltExpressiongt FLOAT = Array[51 400]

IDLgt print(h[var_dims])[TAUTOT]NLAY NWN

IDLgt print(h[dims])[(h[var_dims])[TAUTOT]]NLAY 51NWN 400

7789

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5)

Visualizaccedilatildeo da variaacutevel selecionada

Metadados e alguns valores da variaacutevel selecionada

Variaacutevel a ser criada com o conteuacutedo desta variaacutevel do arquivo

Hierarquia das variaacuteveis do arquivo

7889

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5) Imported variable az

IDLgt helpaz Structure ltd5723f38gt 13 tags length=448 data length=444 refs=1 _NAME STRING az _ICONTYPE STRING binary _TYPE STRING DATASET _FILE STRING INTENSI_test_409OUTh5 _PATH STRING _DATA DOUBLE Array[38] _NDIMENSIONS LONG 1 _DIMENSIONS ULONG64 Array[1] _NELEMENTS ULONG64 38 _DATATYPE STRING H5T_FLOAT _STORAGESIZE ULONG 8 _PRECISION LONG 64 _SIGN STRING

IDLgt printaz_data 00000000 10000000 20000000 30000000 40000000 50000000 60000000 80000000 ()

7989

Arquivos - binaacuterios - imagens

JPEG JPEG200 TIFF GeoTIFF etc

Os formatos comuns de imagens satildeo bem suportados em muacuteltiplas plataformas para uso dentro de programas e interativamente

Alguns formatos tecircm opccedilatildeo de compressatildeo com perda eou sem perda

Armazenam imagens como arrays 2D ou 3D (3D frequumlentemente limitado a 3 ou 4 em uma das dimensotildees uma imagem em 3 ou 4 bandas) de inteiros ou (em alguns formatos) reais

Alguns formatos permitem armazenar metadados para caracterizar as imagens armazenadas

JPEG2000 e GeoTIFF (um subconjunto de TIFF) comuns em astronomia e aacutereas proacuteximas

8089

Arquivos - binaacuterios ndash imagens ndash exemplo (IDL)IDLgt printquery_tiff(issmap_2009tiffinfogeotiff=geo) 1

IDLgt helpinfo Structure ltd4eca4b8gt 18 tags length=144 data length=132 refs=1 CHANNELS LONG 4 DIMENSIONS LONG Array[2] IMAGE_INDEX LONG 0 NUM_IMAGES LONG 1 PIXEL_TYPE INT 1 TYPE STRING TIFF BITS_PER_SAMPLE LONG 8 POSITION FLOAT Array[2] RESOLUTION FLOAT Array[2] UNITS LONG 2 TILE_SIZE LONG Array[2] DESCRIPTION STRING ISS (2009) DATE_TIME STRING 20100218 012436()

IDLgt helpgeo Structure ltd4efa1b8gt 10 tags length=264 data length=262 refs=1 MODELPIXELSCALETAG DOUBLE Array[3] MODELTIEPOINTTAG DOUBLE Array[6 4] GEOGRAPHICTYPEGEOKEY INT 4035 GEOGSEMIMAJORAXISGEOKEY DOUBLE 25750000 GEOGSEMIMINORAXISGEOKEY DOUBLE 25750000()

IDLgt myimage=read_tiff(issmap_2009tiff) Lecirc a imagem para o array myimage

Obteacutem informaccedilotildees sobre o arquivo

8189

Arquivos - binaacuterios ndash formatos nativosLinguagens como IDL R Python Java tecircm seu formato nativo binaacuterio acessado em alto niacutevel Basta mandar salvar ler variaacuteveis no do arquivo a biblioteca padratildeo automagicamente faz todo o trabalho de decidir como gravar ler os dados

Conveniente de usar na proacutepria linguagem Mas raramente existem bibliotecas para ler gravar o formato nativo de uma linguagem a partir de outra Ex (IDL)

IDLgt savefile=2dspectrumsavmydatamyheadercorners_dcorners_averbosecompress SAVE Portable (XDR) compressed SAVERESTORE file SAVE Saved variable MYDATA SAVE Saved variable MYHEADER()

Pode ser lido com apenas (haacute formas mais elaboradas)

IDLgt restore2dspectrumsavverbose RESTORE Portable (XDR) compressed SAVERESTORE file RESTORE Save file written by ltunknowngtltunknowngt Thu Jan 27 191422 2011 RESTORE IDL version 801 (linux x86_64) RESTORE Restored variable MYDATA RESTORE Restored variable MYHEADER()

IDLgt helpmydatamyheadercorners_dcorners_aMYDATA FLOAT = Array[1201 1201]MYHEADER STRING = Array[144]()

8289

Arquivos - processamento em baixo niacutevel

Nem sempre um formato padratildeo eacute a melhor escolha para o problema

Nem sempre haacute escolha (pode-se ter que trabalhar com arquivos que jaacute foram escritos em algum formato proprietaacuterio)

Agraves vezes o formato eacute padratildeo mas natildeo haacute bom suporte a ele disponiacutevel

Em todos estes casos eacute necessaacuterio escrever rotinas em baixo niacutevel que vatildeo ler processar diretamente o conteuacutedo do arquivo

Preferencialmente criando interfaces de alto niacutevel para o programa que vai as usar

8389

Arquivos - processamento em baixo niacutevel - texto

Tomando o exemplo anterior onde as colunas eram de diferentes tipos

NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS dec18s0001 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0002 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0003 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 FLAT 5408757812500 460000 5 dec18s0004 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 DARK 5408757812500 460000 5

A forma mais simples de o ler diretamente eacute definir uma estrutura para receber cada linha e um array destas estruturas para receber todo o arquivo Ex (IDL)

IDLgt record=namecalmpos0filnameechlpos0d0disppos0d0targnameposdirclassmjd_obsitime0d0coadds0IDLgt nlines=file_lines(filesearch_scamtxt)IDLgt mydata=replicate(recordnlines-1)IDLgt header=

Depois de definidas as variaacuteveis que vatildeo receber os dados o arquivo pode ser lido

IDLgt openrunitfilesearch_scamtxtget_lunIDLgt readfunitheaderIDLgt readfunitmydataformat=(A14I8A15F104F104A18A19A15F158F105I15)IDLgt free_lununit

A gravaccedilatildeo de um arquivo texto poderia ser feita de forma semelhante apenas trocando openr por openw (abrir o arquivo para gravaccedilatildeo natildeo leitura) e readf por printf

O arquivo eacute aberto em uma unidade (unit) usada para especificar de onde eacute feita a leitura

Ao final o arquivo eacute fechado

8489

Arquivos - processamento em baixo niacutevel - texto

O que resulta em

IDLgt printheader NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS

IDLgt helpmydataMYDATA STRUCT = -gt ltAnonymousgt Array[4]

IDLgt helpmydata[0] Structure ltd5e38f68gt 11 tags length=136 data length=124 refs=3 NAME STRING dec18s0001 CALMPOS INT 0 FILNAME STRING NIRSPEC-5-AO ECHLPOS DOUBLE 62630000 DISPPOS DOUBLE 36450000 TARGNAME STRING HD85258 POSDIR STRING NIRSPEC-5-AOp1 CLASS STRING STAR MJD_OBS STRING 54087574 ITIME DOUBLE 10000000 COADDS INT 1

Este caso eacute mais complicado que os mais comuns por haver colunas de strings

Se todas fossem de nuacutemeros natildeo teria sido necessaacuterio especificar o formato explicitamente As colunas teriam sido adivinhadas pela biblioteca que lecirc o arquivo Poderia ter sido lido escrito soacute com um array de nuacutemeros sem estruturas

8589

Arquivos - processamento em baixo niacutevel - binaacuterio

Formatos binaacuterios podem ser definidos de qualquer forma O arquivo eacute apenas um conjunto de bytes Cabe ao software saber como os interpretar

Uma escolha comum para que sejam autodocumentados eacute incluir um cabeccedilalho de texto informando as caracteriacutesticas dos dados necessaacuterias para os ler

Ex (IDL) criar um arquivo que armazene um array de doubles com um cabeccedilalho informando as dimensotildees para que o programa que o lecirc saiba como ler os dados

Inventa dados e abre o arquivo

IDLgt data_to_write=dindgen(34)IDLgt openwunitbinary_exampledatget_lun

Escreve as dimensotildees como texto

IDLgt printfunitdimensions of the double array stored belowIDLgt printfunitsize(data_to_writedimensions)

Escreve os dados binaacuterios

IDLgt writeuunitdata_to_write

Fecha o arquivo

IDLgt free_lununit

Escreve em binaacuterio (write unformatted)

8689

Arquivos - processamento em baixo niacutevel - binaacuterio

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

dimensions of the double array stored below 3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

8789

Arquivos - processamento em baixo niacutevel - binaacuterioA leitura deste arquivo eacute igualmente simples

IDLgt header=IDLgt dims=[00]IDLgt openrunitbinary_exampledatget_lun

Lecirc as dimensotildees (armazenadas como texto)

IDLgt readfunitheaderIDLgt readfunitdims

Lecirc a parte binaacuteria depois de saber as dimensotildees

IDLgt data_read=dblarr(dims)IDLgt readuunitdata_read

Fecha o arquivo

IDLgt free_lununit

Verifica que os dados foram gravados e lidos corretamente

IDLgt printarray_equal(data_to_writedata_read) 1

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Lecirc dados binaacuterios (read unformatted)

8889

Sumaacuterio

5 ndash Slides em httpwwwppenteadonetpeapea04_strings_iopdf Strings Expressotildees regulares Arquivos

httpwwwppenteadonetpea

8989

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89

Expressotildees regulares - referecircncias httpxkcdcom208

Viacutedeos do Software Carpentry

httpsoftware-carpentryorg4_0regexp

4989

Arquivos

Quase todo programa precisa armazenar dados em arquivos

Podem ser pequenos arquivos de paracircmetros ou enormes arquivos de dados produzidos ou a processar

Apesar do sugerido pela praacutetica comum arquivos texto natildeo satildeo sempre a melhor escolha para armazenar dados - e haacute muitas formas diferentes de os usar

Qual eacute a melhor escolha

Assim como para linguagens ou contecirciners natildeo existe ldquoo melhor formatordquo Cada um tem suas vantagens e desvantagens

Dados diferentes (mesmo se usados pelos mesmos programas) em geral se adequam melhor a formatos diferentes

5089

Arquivos - texto X binaacuterios

Em qualquer formato arquivos satildeo armazenados como diacutegitos binaacuterios

Mas haacute duas formas principais como eles podem ser codificados

Arquivos baseados em texto (text files)

Dados satildeo transformados em caracteres usando alguma formataccedilatildeo (mesmo se impliacutecita) e escritos com alguma codificaccedilatildeo de texto (comumente mas natildeo necessariamente ASCII)

Um arquivo texto eacute um ou mais strings As mesmas conversotildees tecircm que ser feitas depara outros tipos

Arquivos ldquobinaacuteriosrdquo (binary files)

Embora todo arquivo seja binaacuterio este nome costuma ser usado soacute para aqueles em que os dados natildeo estatildeo na forma de texto

Com frequumlecircncia (nem sempre) os dados satildeo gravados de forma idecircntica a como satildeo armazenados na memoacuteria

Muitos formatos usam uma mistura de partes em texto e partes binaacuterias

Um cabeccedilalho (header) de texto que daacute informaccedilotildees (metadados) sobre os dados armazenados na parte binaacuteria que vem depois

O cabeccedilalho conteacutem em especial informaccedilotildees sobre como ler os dados binaacuterios

5189

Arquivos - texto X binaacuterios

Vantagens de arquivos texto

Legiacuteveis por pessoas (human readable)

Podem ser auto-suficientes todo o necessaacuterio para os ler e entender o que conteacutem pode ser obtido olhando o arquivo

Satildeo os menos especiacuteficos a linguagens software normalmente satildeo escritos em ASCII ou Unicode e sempre haacute algum suporte a ler escrever texto em linguagens software

Haacute alguns formatos padratildeo para texto (exs CSV XML) que satildeo suportados em muitas plataformas diferentes

5289

Arquivos - texto X binaacuterios

Vantagens de arquivos binaacuterios

Em geral natildeo haacute conversotildees entre o os dados como armazenados na memoacuteria O que torna o armazenamento mais eficiente e sem alteraccedilotildees nos valores

A maior parte dos formatos padronizados eacute binaacuteria Exs FITS cube CDF NetCDF HDF HDF5 JPEG JPEG2000 TIFF GeoTIFF MPEG etc

Eacute mais comum que haja bibliotecas prontas (ateacute de alto niacutevel) para consulta leitura e gravaccedilatildeo

Os formatos melhor desenhados satildeo autodocumentados (em texto ou binaacuterio) para os ler natildeo eacute necessaacuterio conhecimento preacutevio sobre como os dados foram armazenados

Toda linguagem plataforma costuma ter seu formato binaacuterio mais nativo que costuma ser o mais faacutecil para leitura gravaccedilatildeo Em particular nas de alto niacutevel que tecircm formatos autodocumentados (especialmente

em IDL R Python Java)

Muitos formatos tecircm opccedilatildeo de compressatildeo dos dados

5389

Arquivos - proprietaacuterios X padratildeo

Independente da escolha texto binaacuterio programas devem escolher entre usar um formato proacuteprio ou um formato padronizado

A principal vantagem de formatos proacuteprios eacute que satildeo definidos da forma mais conveniente para a aplicaccedilatildeo que os usa simplificando leitura e gravaccedilatildeo e potencialmente otimizando recursos (acesso ao disco tamanho do arquivo etc)

A principal desvantagem de formatos proacuteprios eacute ser necessaacuterio escrever todo o coacutedigo para os ler gravar

Pode dar mais trabalho que usar um formato geneacuterico que natildeo seja exatamente o que melhor se encaixa na aplicaccedilatildeo

O coacutedigo para processar o formato em geral vai ser menos completo e conveniente de usar que o de um formato bem estabelecido usado por muitos outros em muitos ambientes

Cada novo software que for usar estes arquivos vai precisar compartilhar do mesmo coacutedigo ou precisar de coacutedigo novo (em particular se em outra linguagem) para ler gravar naquele formato

Eacute necessaacuterio documentar o formato e decidir sobre como ele seraacute definido

Se outros jaacute colocaram muito trabalho desenvolvendo bons formatos padratildeo bem suportados em muitos ambientes por que ter o trabalho de reinventar (e reprogramar redocumentar e retestar) a roda

5489

Arquivos - padrotildees comuns em astronomia (exs adiante)

Texto

CSV Comma-separated values - bem suportado por muitos softwares

ldquoColunas fixasrdquo Natildeo eacute um padratildeo bem definido mas eacute praacutetica comum para tabelas (2D)

XML Extensible Markup Language - O padratildeo texto mais flexiacutevel de grande uso em programaccedilatildeo geral para armazenar qualquer coisa com frequumlecircncia de forma hieraacuterquica Bem suportado por linguagens modernas (e modernizadas) e bibliotecas das principais

linguagens gerais Alta complexidade o torna trabalhoso de usar

5589

Arquivos - padrotildees comuns em astronomia (exs adiante)Binaacuterios

FITS Flexible Image Transport System - o mais comum para observaccedilotildees astronocircmicas Conteacutem os dados (em geral arrays 1D 2D ou 3D) e documentaccedilatildeo (nos cabeccedilalhos) sobre a origem e caracteriacutesticas dos dados Tambeacutem usado para armazenar tabelas de dados quaisquer mesmo que natildeo sejam observaccedilotildees (especialmente pelo STSCI) Variam muito em qualidade de documentaccedilatildeo

NetCDF Network Common Data Form - evoluccedilatildeo do CDF autodocumentado eacute comum e bem suportado para vaacuterios arrays de dados

HDF5 Hierarchical Data Format ndash autodocumentado comum e bem suportado permitindo aleacutem de simples arrays estruturas (eacute um formato hieraacuterquico)

Formatos de imagens JPEG JPEG2000 TIFF GeoTIFF etc - voltados para arrays 2D3D de inteiros ou (em alguns casos) reais com ou sem compressatildeo JPEG2000 tem caracteriacutesticas mais avanccediladas como imagens multiresoluccedilatildeo

Formatos vetoriais PS EPS DXF SHP SVG - variados niacuteveis de suporte a armazenamento de vetores e formas em 2D ou 3D

ISIS Cube semelhante em caracteriacutesticas ao FITS mais usado em sensoriamento remoto geociecircncias e ciecircncias planetaacuterias em geral para observaccedilotildees 1D 2D ou 3D

Formatos nativos de linguagens todo o trabalho de leitura e gravaccedilatildeo eacute feito automagicamente pela biblioteca padratildeo em IDL R Python Java

5689

Arquivos texto - newlines

Apesar do que possa parecer arquivos texto natildeo tecircm intrinsecamente vaacuterias linhas Arquivos texto satildeo soacute uma sequumlecircncia 1D de caracteres em alguma codificaccedilatildeo Separaccedilatildeo em linhas (equivalente a interpretar o arquivo como 2D em linhas e colunas) eacute

especificada por convenccedilotildees Natildeo haacute apenas uma convenccedilatildeo para o fim de linhas

A mais primitiva convenccedilatildeo eacute separaccedilatildeo nenhuma estipula-se que linhas tenham um nuacutemero fixo N de caracteres e cabe ao software que lecirc o arquivo entender que uma linha nova ocorre regularmente a cada N caracteres

Eacute a forma menos portaacutevel e mais inconveniente eacute necessaacuterio o conhecimento preacutevio (ou por inspeccedilatildeo do arquivo) de quantos caracteres haacute por linha

A maior parte dos editores de texto natildeo vai saber separar linhas desta forma (por falta deste conhecimento preacutevio) Exemplo (de um FITS real)

SIMPLE = T Fits standard BITPIX = 16 Bits per pixel NAXIS = 0 Number of axes EXTEND = T File may contain extensions

O que com as linhas quebradas nos lugares certos seria

SIMPLE = T Fits standard BITPIX = 16 Bits per pixel NAXIS = 0 Number of axes EXTEND = T File may contain extensions

5789

Arquivos texto - newlines

A forma mais comum de especificar linhas eacute com um marcador do final de linha (newline)

Eacute um caractere especial natildeo normalmente presente no texto que serve para marcar fim de linhas

Mas natildeo haacute soacute um padratildeo de newline Os mais comuns

LF (Line Feed ASCII 10) ndash Unix Linux Mac OS X

CR - (Carriage Return ASCII 13) - Mac OS lt10

CR+LF (CR seguido de LF) - Windows DOS

Eacute o motivo de o Notepad (Windows) natildeo entender as quebras de linha de arquivos escritos com o formato nativo de Linux o arquivo soacute tem LF enquanto o editor espera CR+LF

Alguns sistemas (strings em vaacuterias linguagens por exemplo) usam o coacutedigo de escape n para indicar newline que eacute codificado de acordo com o padratildeo sendo usado

Em geral bibliotecas de leitura e gravaccedilatildeo de arquivos usam (default pelo menos) o newline nativo do sistema em que satildeo usadas

Programas de conversatildeo entre os sistemas satildeo comuns (ex dos2unix)

O Wordpad identifica se for usado soacute LF e quebra as linhas de acordo

5889

Arquivos - texto - CSV

Comma-separated values

O formato mais padronizado para tabelas (arrays 2D) em texto (frequentemente mas natildeo necessariamente ASCII)

Bem suportado por bibliotecas padratildeo de linguagens e outros softwares (Excel Calc Origin Google Docs etc)

Conteacutem Linhas de cabeccedilalho (opcionais mas recomendadas) linhas com qualquer texto geral

descrevendo o arquivo e em geral uma linha de tiacutetulo para as colunas da tabela Uma (apenas uma) tabela onde todas as linhas tecircm o mesmo nuacutemero de colunas

Colunas separadas por viacutergulas (opcionalmente pode ser outro separador) Linhas terminadas por newline (qualquer que seja) Strings delimitados por ldquo ldquo

Ex

NAMECALMPOSFILNAMEECHLPOSDISPPOSTARGNAMEPOSDIRCLASSMJD-OBSITIMECOADDSdec18s00010NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001dec18s00020NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001dec18s00120NIRSPEC-5-AO635800364500itan140NIRSPEC-5-AOp2 TITAN5408763000001dec18s00140NIRSPEC-5-AO626300364500itan140NIRSPEC-5-AOp1 TITAN5408763000001dec18s00151NIRSPEC-5-AO626300364500itan140NIRSPEC-5-AOp1ARC5408764000001dec18s00160NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001

Natildeo eacute necessaacuterio que as colunas tenham largura constante

Cabeccedilalho

5989

Arquivos - texto - CSVHaacute amplo suporte a leitura e gravaccedilatildeo de CSV sem precisar recorrer a procedimentos de baixo niacutevel

Podem ser diretamente importados em Excel Calc Origin Google Docs ou lido facilmente com bibliotecas padratildeo comuns Ex (IDL)

IDLgt c=read_csv(filesearch_scamcsvheader=h)IDLgt printhNAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS

IDLgt helpc Structure ltc8bca508gt 11 tags length=5256 data length=5248 refs=1 FIELD01 STRING Array[41] FIELD02 LONG Array[41] FIELD03 STRING Array[41] FIELD04 DOUBLE Array[41] FIELD05 DOUBLE Array[41] FIELD06 STRING Array[41] FIELD07 STRING Array[41] FIELD08 STRING Array[41] FIELD09 STRING Array[41] FIELD10 DOUBLE Array[41] FIELD11 LONG Array[41]

IDLgt printcfield01[03]dec18s0001 dec18s0002 dec18s0003 dec18s0004

IDLgt printcfield03[03]NIRSPEC-5-AO NIRSPEC-5-AO NIRSPEC-5-AO NIRSPEC-5-AO

6089

Arquivos - texto - CSVEx (IDL) Criaccedilatildeo de um CSV com uma tabela de valores

Criaccedilatildeo de 3 arrays 1D (12 elementos) um para cada coluna

IDLgt x=dindgen(3)IDLgt y=dindgen(4)IDLgt xx=reform(rebin(x34)12)IDLgt yy=reform(rebin(reform(y14)34)12)IDLgt f=xx+yy10IDLgt helpxxyyfXX DOUBLE = Array[12]YY DOUBLE = Array[12]F DOUBLE = Array[12]

Escrita do arquivo

IDLgt write_csvexamplecsvxxyyfheader=[XYX+10Y]

ResultadoXYX+10Y000000000000000000000000100000000000000010000000200000000000000020000000000000001000000010000000100000001000000011000000()

6189

Arquivos - texto - ldquoColunas regularesrdquoFixed column width

Natildeo eacute exatamente um padratildeo Eacute uma praacutetica comum

Armazena uma tabela (array 2D) de forma regular simples de ser interpretada e lida

Costumam ter linha(s) de cabeccedilalho descrevendo o conteuacutedo do arquivo em geral com uma linha para os nomes das colunas

As demais linhas conteacutem os dados sempre ocupando a mesma largura por coluna e escritos no mesmo formato em cada coluna

Costumam ser simples de ler inclusive interativamente (exs Excel Calc Origin read_ascii)

Ex (IDL) Uma simples tabela soacute de nuacutemeros

wavl CH4=33 wavl CH4=25 wavl CH4=10 wavl CH4=08 wavl CH4=05 wavl CH4=026 wavl CH4=02 477330000 0090130 477330000 0091110 477330000 0089250 477330000 0087000 477330000 0087140 477330000 0090080 477330000 0088110 480040000 0090930 480040000 0091930 480040000 0090160 480040000 0087930 480040000 0088110 480040000 0090950 480040000 0089090 482750000 0091710 482750000 0092730 482750000 0091060 482750000 0088850 482750000 0089080 482750000 0091810 482750000 0090060 485450000 0092530 485450000 0093570 485450000 0092000 485450000 0089810 485450000 0090100 485450000 0092730 485450000 0091090

IDLgt a=read_ascii(specs_27s_ntxtdata_start=1header=header)IDLgt printheader wavl CH4=33 wavl CH4=25 wavl CH4=10 wavl CH4=08 wavl CH4=05 wavl CH4=026 wavl CH4=02 IDLgt helpa Structure ltd423c9a8gt 1 tags length=224 data length=224 refs=1 FIELD01 FLOAT Array[14 4]

6289

Arquivos - texto - ldquoColunas regularesrdquoJaacute um arquivo um pouco mais difiacutecil de ler

NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS dec18s0001 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0002 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0003 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 FLAT 5408757812500 460000 5 dec18s0004 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 DARK 5408757812500 460000 5

Por ter colunas de tipos diferentes (strings inteiros reais) natildeo eacute possiacutevel o ler em um simples array Mas eacute faacutecil o colocar em uma estrutura de arrays onde cada campo eacute uma coluna

Especificando interativamente como interpretar as linhasIDLgt templ=ascii_template(filesearch_scamtxt)

Nome do campo (default mostrado)

Tipo do campo (identificado automaticamente)

Posiccedilatildeo (caracter) do comeccedilo (identificada automaticamente)

Linha de exemplo para verificar as colunas

6389

Arquivos - texto - ldquoColunas regularesrdquoDepois de feito o template o arquivo pode ser lido com apenas

IDLgt a=read_ascii(filesearch_scamtxttemplate=templ)IDLgt helpa Structure ltd4ec4608gt 11 tags length=416 data length=416 refs=1 FIELD01 STRING Array[4] FIELD02 LONG Array[4] FIELD03 STRING Array[4] FIELD04 FLOAT Array[4] FIELD05 FLOAT Array[4] FIELD06 STRING Array[4] FIELD07 STRING Array[4] FIELD08 STRING Array[4] FIELD09 FLOAT Array[4] FIELD10 FLOAT Array[4] FIELD11 LONG Array[4]IDLgt printafield01dec18s0001 dec18s0002 dec18s0003 dec18s0004IDLgt printafield04 626300 626300 626300 626300

O template (uma estrutura contendo dados sobre como ler o arquivo) pode ser usado para outros arquivos no mesmo formato No lugar de ter sido criado interativamente poderia ter sido lido de algum arquivo Poderia ter especificado nomes para os campos que seriam mais amigaacuteveis que coias como FIELD11

6489

Arquivos - texto - XML

Extensible Markup Language

Admite grande flexibilidade e por isso pode ter alta complexidade

Valores satildeo colocados dentro de uma estrutura em hieraacuterquica (em uma aacutervore) com os noacutes identificados pelos seus nomes (chaves)

Largamente usado em muitas aacutereas para armazenar conjuntos arbitraacuterios de quaisquer estruturas de dados

A maioria das aplicaccedilotildees usa um formato que eacute um subconjunto do XML especificado por um Schema comumente em um arquivo XML DTD (Document Type Definition)

6589

Arquivos - texto ndash XML ndash exemplos de usos

Armazenamento de dados de aplicaccedilotildees web (comum para exportar importar dados MediaWiki DokuWiki WordPress ADS Lattes etc)

Documentos Office (docx pptx xlsx) OpenOffice (odt opd ods)

Como versotildees de outros formatos FITSML XDF

ldquoScientific Dataset XML NASAs Astronomical Data Center (ADC) sponsors a number of research projects that

use XML for scientific data representation The XML activities at the ADC are sponsored and supported by the NASA Office of Space Science Applied Information Systems Research Program (AISRP)rdquo - httpxmlcoverpagesorgnasa-adchtml

Astronomical Instrument Markup Language (AIML)

SVG ndash Scalable Vector Graphics

Muitas de outras aplicaccedilotildees listadas em httpxmlcoverpagesorgxmlhtmlapplications

6689

Arquivos - texto ndash XML - exemploltxml version=10 gtltDOCTYPE Xdmf SYSTEM Xdmfdtd []gtltXdmf xmlnsxi=httpwwww3org2001XInclude Version=20gt ltDomaingt lt-- Example of Basic Topologies --gt ltInformation Name=Descriptiongt Example of a Polyvertex Topology ltInformationgt ltGrid Name=Polyvertex GridType=Uniformgt ltTopology TopologyType=Polyvertex Dimensions=3 NodesPerElement=3gt ltDataItem Format=XML Dimensions=3 3 NumberType=Floatgt 0 1 2 4 5 6 8 9 10 ltDataItemgt ltTopologygt ltGeometry Type=XYZgt ltDataItem Format=XML Dimensions=4 4 3gt 00 00 00 10 00 00()Que mostra que a interpretaccedilatildeo (parsing) de XML eacute em geral complexa

6789

Arquivos - texto - XML

Haacute muitas bibliotecas de alto niacutevel para fazer o processamento (parsing) e entregar os dados em uma estrutura conveniente

A complexidade em processar XML estaacute em decidir o que fazer com os dados jaacute que os arquivos podem ser muito complexos

As APIs (Application Programming Interfaces) mais comuns para processar XML que satildeo implementadas em muitas linguagens

DOM (Document Object Model) ndash manteacutem todo o conteuacutedo do em uma estrutura de dados (em geral uma aacutervore) em uma variaacutevel (em geral um objeto) Esta pode ser consultada para obter os valores de interesse para os alterar e usada para escrever um arquivo

SAX (Simple API for XML) ndash Interpretador (parser) por objetos O usuaacuterio escreve uma classe herdando da classe SAX provendo os meacutetodos que vatildeo processar os campos agrave medida em que estes satildeo lidos

6889

Arquivos - binaacuterios - FITSFlexible Image Transport System

O formato mais comum para observaccedilotildees astronocircmicas Tambeacutem usado para armazenar quaisquer dados mesmo natildeo relacionados a observaccedilotildees (especialmente tabelas como eacute praacutetica do STSCI)

Conteacutem um (ou mais) cabeccedilalho(s) de texto com metadados (informaccedilotildees sobre os dados como caracteriacutesticas (necessaacuterias para os ler) origem condiccedilotildees em que foram obtidos processamento realizado etc)

SIMPLE = T image conforms to FITS standard BITPIX = 32 bits per data value NAXIS = 2 number of axes NAXIS1 = 1024 NAXIS2 = 1024 BSCALE = 100000 Scaling factor BZERO = 000000 Scaling zero-point TELESCOP= Keck II Telescope SLITNAME= 0041x226 Slit Name SLITPA = 351979 Slit position angle SLITX = 131500 X pixel of the center of the slit LST = 12010446 local apparent sidereal time (()

Depois do cabeccedilalho haacute uma (ou mais) seccedilatildeo(otildees) de dados binaacuterios Costuma(m) ser array(s) 1D (espectros) 2D (imagens) ou 3D (ldquocubos de dadosrdquo)

De inteiros ou reais inteiros satildeo comuns em contagens de instrumentos reais para valores derivados (fluxos intensidades etc)

6989

Arquivos - binaacuterios - FITSNormalmente FITS satildeo lidos escritos por bibliotecas prontas de (relativamente) alto niacutevel usuaacuterio natildeo tem que saber como os dados satildeo armazenados no arquivo nem como os ler escrever Ex (IDL com a biblioteca idlastro)

IDLgt fits_info2dspectrumfits2dspectrumfits has 3 extensionsPrimary header 288 recordsNo dataExtension 1 -- SCI Header 144 records IMAGE ( 1201 1201 )Extension 2 -- ERR Header 72 records IMAGE ( 1201 1201 )Extension 3 -- DQ Header 72 records IMAGE ( 1201 1201 )

IDLgt mydata=readfits(2dspectrumfitsexten_no=1myheader) READFITS Reading FITS extension of type IMAGE READFITS Now reading 1201 by 1201 array

IDLgt extastmyheadermyastIDLgt sz=size(mydatadimensions)IDLgt xy2ad[1sz[0]][1sz[1]]myastcorners_acorners_dIDLgt printcorners_aCorners of the data array from file 2dspectrumfits are at 14487480 33063480

IDLgt printcorners_d -00041264444 00041402222

Obteacutem os dados de coordenadas (WCS) do header

Coloca os dados no array (2D de floats) mydata e o header no array (1D de strings) myheader

Calcula as coordenadas das quinas da imagem atraveacutes do WCS

Provecirc informaccedilotildees sobre o arquivo

7089

Arquivos - binaacuterios - ISIS Cube

Formatos como FITS se adequam muito a ter uma interface de mais alto niacutevel por objetos

Tambeacutem para dados em tabelas FITS muito mais trabalhosos de ler em baixo niacutevel que se adequam muito mais a mapas ou estruturas

Exemplo (de um formato semelhante a FITS ISIS cube)

O objeto ao ser criado lecirc todo o arquivo

cube=pp_editablecube(CM_1553510065_1_ircub)

Meacutetodos fornecem os dados desejados para obter quando necessaacuterio os dados de interesse

Find out the names of the backplanesprintcubegetproperty(backnames)Get the start time of the cubeprintcubegetfromheader(START_TIME)2007-084T100057286Z

Valores no cabeccedilalho podem ser convenientemente fornecidos como um mapa

header=cubeheader_as_hash()printheader[START_TIME]2007-084T100057286Z

7189

Arquivos - binaacuterios ndash ISIS Cube

Os dados satildeo fornecidos como arraysMake a contour plot of the latitudesc=contour(cubegetsuffixbyname(LATITUDE))Get the band with wavelength nearest to 21 (in the units used in the cube)selband=cubegetbandbywavelength(21wavelengths=selwavs)

Interfaces por overload tornam o acesso ainda mais conveniente

selband=cube[21]

selwavs=cube[21]

Retorna um array com a banda de comprimento de onda mais proacuteximo de 21 (microm)

Retorna o comprimento de onda mais proacuteximo de 21 (microm) da banda retornada acima

7289

Arquivos - binaacuterios ndash ISIS Cube Alteraccedilotildees feitas ao conteuacutedo satildeo automaticamente refletidas em todos os

lugares (cabeccedilalho em particular) afetados mantendo o objeto vaacutelido que pode depois ser gravado em um novo arquivo

IDLgt printcubelinescubesamplescubebands 64 64 256

IDLgt helpcubecoreltExpressiongt FLOAT = Array[64 64 256]

IDLgt cubecore=dblarr(100100256)

A linha acima natildeo eacute uma atribuiccedilatildeo eacute uma invocaccedilatildeo de meacutetodo Eacute equivalente acubesetpropertycore=dblarr(100100256)

Eacute o trabalho da funccedilatildeo setproperty decidir se a propriedade passada (core) faz sentido e se fizer fazer todo o trabalho necessaacuterio a esta mudanccedila Para o usuaacuterio eacute tudo automaacutetico e os dados da classe satildeo vaacutelidos o tempo todo

IDLgt helpcubecoreltExpressiongt DOUBLE = Array[100 100 256]

IDLgt printcubelinescubesamplescubebands 100 100 256

IDLgt cubesaveCM_1553510065_1_ir_editedcub

7389

Arquivos - binaacuterios ndash NetCDF e HDF5

Network Common Data Form e Hierarchical Data Format

Os dois uacutenicos formatos bem estabelecidos para dados cientiacuteficos geneacutericos

Armazenam dados como vaacuterias variaacuteveis e seus metadados Para cada variaacutevel haacute (ou pode haver) os metadados

Nome Dimensotildees (do array) Unidades Comentaacuterios

Ambos permitem arrays multidimensionais

Apenas HDF5 permite estruturas (daiacute vem a hierarquia)

Autodocumentados qualquer software que saiba ler um destes formatos lecirc qualquer arquivo sem precisar de conhecimento preacutevio sobre como o arquivo foi gerado

Muito bem suportados em bibliotecas padratildeo e natildeo padratildeo em softwares interativos e visualizadores (inclusive plugins para navegadores)

httpwwwunidataucaredusoftwarenetcdf httpenwikipediaorgwikiHdf5

NetCDF eacute mais simples de usar por natildeo ter hierarquia dando menos trabalho para ler e escrever dados Se hierarquia natildeo eacute necessaacuteria eacute mais conveniente de usar que HDF5

7489

Arquivos - binaacuterios - NetCDF e HDF5Haacute tambeacutem o formato CDL uma versatildeo ASCII do NetCDF A biblioteca padratildeo do NetCDF inclui conversores entre estes formatos

$ ncdump -h refspec_g01_0ncnetcdf refspec_g01_0 dimensions nlay = 51 nwn = 400 nleg = 33 numu = 2 nlev = 52 nphi = 3 ngas = 2 nwnc = 1 scal = 1 v3 = 3 dnl = 1 nk = 1 tdisr = UNLIMITED (0 currently) na = 16

variables float alb(nwn) float z(nlay) float t(nlay) float p(nlay) float wl(nwn) float iof(nwn) float mtau(nwn) float htau(nwn) float hctaus(nwn) float gtau(nwn) float outcos(scal) float phi(nleg) float phic(scal) float umu(numu) float flux(v3 nwn nlev) float mix(nlay ngas) float c(nlay) float psat(nlay) float ga(nwnc) float wlc(nwnc) float inc(scal) int dm(scal) int ord(scal) float fbeam(scal) float wn(nwn) float tautot(nwn nlay) float htaus(nwn nlay) float htaux(nwn nlay) float taug(nwn nlay) float phase(nwn nlay nleg) float ssa(nwn nlay) float uu(nwn nphi nlev numu) float u0u(nwn nlev numu) float tray(nwn nlay) float gtauo(tdisr nwn nlay)

Haacute 14 variaacuteveis usadas como dimensotildees para as 35 variaacuteveis que satildeo arrays

Ex alb(nwn) indica que alb eacute um array 1D de nwn elementos

nwn estaacute armazenado como uma das dimensotildees e eacute 400 portanto alb tem 400 elementos

Parte do conteuacutedo de um arquivo NetCDF em formato CDL (gerado pelo programa ncdump)

7589

Arquivos - binaacuterios - NetCDF e HDF5Conteuacutedo daquele arquivo visualizado com o ncview (acompanha a biblioteca NetCDF padratildeo)

7689

Arquivos - binaacuterios - NetCDF e HDF5O conteuacutedo de todo o arquivo pode ser lido facilmente com as bibliotecas disponiacuteveis e armazenado em contecirciners convenientes Usando um objeto que gera um resultado um pouco mais conveniente

IDLgt h=pp_readncdf(refspec_g01_0nchash)IDLgt printhvar_dims ltObjHeapVar229(HASH)gtvars ltObjHeapVar152(HASH)gtdims ltObjHeapVar118(HASH)gt

IDLgt printh[vars]T 173203 175459 175848 176001 175975 Z 431869 418858 406067 393403 380464 FLUX 300660 145536 0705180 0341669 0165532 PHASE 100000 0779034 0660858 0542052 0449983 TAUTOT0694377 0693420 0693474 0693540 0693636()

IDLgt help(h[vars])[TAUTOT]ltExpressiongt FLOAT = Array[51 400]

IDLgt print(h[var_dims])[TAUTOT]NLAY NWN

IDLgt print(h[dims])[(h[var_dims])[TAUTOT]]NLAY 51NWN 400

7789

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5)

Visualizaccedilatildeo da variaacutevel selecionada

Metadados e alguns valores da variaacutevel selecionada

Variaacutevel a ser criada com o conteuacutedo desta variaacutevel do arquivo

Hierarquia das variaacuteveis do arquivo

7889

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5) Imported variable az

IDLgt helpaz Structure ltd5723f38gt 13 tags length=448 data length=444 refs=1 _NAME STRING az _ICONTYPE STRING binary _TYPE STRING DATASET _FILE STRING INTENSI_test_409OUTh5 _PATH STRING _DATA DOUBLE Array[38] _NDIMENSIONS LONG 1 _DIMENSIONS ULONG64 Array[1] _NELEMENTS ULONG64 38 _DATATYPE STRING H5T_FLOAT _STORAGESIZE ULONG 8 _PRECISION LONG 64 _SIGN STRING

IDLgt printaz_data 00000000 10000000 20000000 30000000 40000000 50000000 60000000 80000000 ()

7989

Arquivos - binaacuterios - imagens

JPEG JPEG200 TIFF GeoTIFF etc

Os formatos comuns de imagens satildeo bem suportados em muacuteltiplas plataformas para uso dentro de programas e interativamente

Alguns formatos tecircm opccedilatildeo de compressatildeo com perda eou sem perda

Armazenam imagens como arrays 2D ou 3D (3D frequumlentemente limitado a 3 ou 4 em uma das dimensotildees uma imagem em 3 ou 4 bandas) de inteiros ou (em alguns formatos) reais

Alguns formatos permitem armazenar metadados para caracterizar as imagens armazenadas

JPEG2000 e GeoTIFF (um subconjunto de TIFF) comuns em astronomia e aacutereas proacuteximas

8089

Arquivos - binaacuterios ndash imagens ndash exemplo (IDL)IDLgt printquery_tiff(issmap_2009tiffinfogeotiff=geo) 1

IDLgt helpinfo Structure ltd4eca4b8gt 18 tags length=144 data length=132 refs=1 CHANNELS LONG 4 DIMENSIONS LONG Array[2] IMAGE_INDEX LONG 0 NUM_IMAGES LONG 1 PIXEL_TYPE INT 1 TYPE STRING TIFF BITS_PER_SAMPLE LONG 8 POSITION FLOAT Array[2] RESOLUTION FLOAT Array[2] UNITS LONG 2 TILE_SIZE LONG Array[2] DESCRIPTION STRING ISS (2009) DATE_TIME STRING 20100218 012436()

IDLgt helpgeo Structure ltd4efa1b8gt 10 tags length=264 data length=262 refs=1 MODELPIXELSCALETAG DOUBLE Array[3] MODELTIEPOINTTAG DOUBLE Array[6 4] GEOGRAPHICTYPEGEOKEY INT 4035 GEOGSEMIMAJORAXISGEOKEY DOUBLE 25750000 GEOGSEMIMINORAXISGEOKEY DOUBLE 25750000()

IDLgt myimage=read_tiff(issmap_2009tiff) Lecirc a imagem para o array myimage

Obteacutem informaccedilotildees sobre o arquivo

8189

Arquivos - binaacuterios ndash formatos nativosLinguagens como IDL R Python Java tecircm seu formato nativo binaacuterio acessado em alto niacutevel Basta mandar salvar ler variaacuteveis no do arquivo a biblioteca padratildeo automagicamente faz todo o trabalho de decidir como gravar ler os dados

Conveniente de usar na proacutepria linguagem Mas raramente existem bibliotecas para ler gravar o formato nativo de uma linguagem a partir de outra Ex (IDL)

IDLgt savefile=2dspectrumsavmydatamyheadercorners_dcorners_averbosecompress SAVE Portable (XDR) compressed SAVERESTORE file SAVE Saved variable MYDATA SAVE Saved variable MYHEADER()

Pode ser lido com apenas (haacute formas mais elaboradas)

IDLgt restore2dspectrumsavverbose RESTORE Portable (XDR) compressed SAVERESTORE file RESTORE Save file written by ltunknowngtltunknowngt Thu Jan 27 191422 2011 RESTORE IDL version 801 (linux x86_64) RESTORE Restored variable MYDATA RESTORE Restored variable MYHEADER()

IDLgt helpmydatamyheadercorners_dcorners_aMYDATA FLOAT = Array[1201 1201]MYHEADER STRING = Array[144]()

8289

Arquivos - processamento em baixo niacutevel

Nem sempre um formato padratildeo eacute a melhor escolha para o problema

Nem sempre haacute escolha (pode-se ter que trabalhar com arquivos que jaacute foram escritos em algum formato proprietaacuterio)

Agraves vezes o formato eacute padratildeo mas natildeo haacute bom suporte a ele disponiacutevel

Em todos estes casos eacute necessaacuterio escrever rotinas em baixo niacutevel que vatildeo ler processar diretamente o conteuacutedo do arquivo

Preferencialmente criando interfaces de alto niacutevel para o programa que vai as usar

8389

Arquivos - processamento em baixo niacutevel - texto

Tomando o exemplo anterior onde as colunas eram de diferentes tipos

NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS dec18s0001 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0002 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0003 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 FLAT 5408757812500 460000 5 dec18s0004 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 DARK 5408757812500 460000 5

A forma mais simples de o ler diretamente eacute definir uma estrutura para receber cada linha e um array destas estruturas para receber todo o arquivo Ex (IDL)

IDLgt record=namecalmpos0filnameechlpos0d0disppos0d0targnameposdirclassmjd_obsitime0d0coadds0IDLgt nlines=file_lines(filesearch_scamtxt)IDLgt mydata=replicate(recordnlines-1)IDLgt header=

Depois de definidas as variaacuteveis que vatildeo receber os dados o arquivo pode ser lido

IDLgt openrunitfilesearch_scamtxtget_lunIDLgt readfunitheaderIDLgt readfunitmydataformat=(A14I8A15F104F104A18A19A15F158F105I15)IDLgt free_lununit

A gravaccedilatildeo de um arquivo texto poderia ser feita de forma semelhante apenas trocando openr por openw (abrir o arquivo para gravaccedilatildeo natildeo leitura) e readf por printf

O arquivo eacute aberto em uma unidade (unit) usada para especificar de onde eacute feita a leitura

Ao final o arquivo eacute fechado

8489

Arquivos - processamento em baixo niacutevel - texto

O que resulta em

IDLgt printheader NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS

IDLgt helpmydataMYDATA STRUCT = -gt ltAnonymousgt Array[4]

IDLgt helpmydata[0] Structure ltd5e38f68gt 11 tags length=136 data length=124 refs=3 NAME STRING dec18s0001 CALMPOS INT 0 FILNAME STRING NIRSPEC-5-AO ECHLPOS DOUBLE 62630000 DISPPOS DOUBLE 36450000 TARGNAME STRING HD85258 POSDIR STRING NIRSPEC-5-AOp1 CLASS STRING STAR MJD_OBS STRING 54087574 ITIME DOUBLE 10000000 COADDS INT 1

Este caso eacute mais complicado que os mais comuns por haver colunas de strings

Se todas fossem de nuacutemeros natildeo teria sido necessaacuterio especificar o formato explicitamente As colunas teriam sido adivinhadas pela biblioteca que lecirc o arquivo Poderia ter sido lido escrito soacute com um array de nuacutemeros sem estruturas

8589

Arquivos - processamento em baixo niacutevel - binaacuterio

Formatos binaacuterios podem ser definidos de qualquer forma O arquivo eacute apenas um conjunto de bytes Cabe ao software saber como os interpretar

Uma escolha comum para que sejam autodocumentados eacute incluir um cabeccedilalho de texto informando as caracteriacutesticas dos dados necessaacuterias para os ler

Ex (IDL) criar um arquivo que armazene um array de doubles com um cabeccedilalho informando as dimensotildees para que o programa que o lecirc saiba como ler os dados

Inventa dados e abre o arquivo

IDLgt data_to_write=dindgen(34)IDLgt openwunitbinary_exampledatget_lun

Escreve as dimensotildees como texto

IDLgt printfunitdimensions of the double array stored belowIDLgt printfunitsize(data_to_writedimensions)

Escreve os dados binaacuterios

IDLgt writeuunitdata_to_write

Fecha o arquivo

IDLgt free_lununit

Escreve em binaacuterio (write unformatted)

8689

Arquivos - processamento em baixo niacutevel - binaacuterio

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

dimensions of the double array stored below 3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

8789

Arquivos - processamento em baixo niacutevel - binaacuterioA leitura deste arquivo eacute igualmente simples

IDLgt header=IDLgt dims=[00]IDLgt openrunitbinary_exampledatget_lun

Lecirc as dimensotildees (armazenadas como texto)

IDLgt readfunitheaderIDLgt readfunitdims

Lecirc a parte binaacuteria depois de saber as dimensotildees

IDLgt data_read=dblarr(dims)IDLgt readuunitdata_read

Fecha o arquivo

IDLgt free_lununit

Verifica que os dados foram gravados e lidos corretamente

IDLgt printarray_equal(data_to_writedata_read) 1

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Lecirc dados binaacuterios (read unformatted)

8889

Sumaacuterio

5 ndash Slides em httpwwwppenteadonetpeapea04_strings_iopdf Strings Expressotildees regulares Arquivos

httpwwwppenteadonetpea

8989

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89

Arquivos

Quase todo programa precisa armazenar dados em arquivos

Podem ser pequenos arquivos de paracircmetros ou enormes arquivos de dados produzidos ou a processar

Apesar do sugerido pela praacutetica comum arquivos texto natildeo satildeo sempre a melhor escolha para armazenar dados - e haacute muitas formas diferentes de os usar

Qual eacute a melhor escolha

Assim como para linguagens ou contecirciners natildeo existe ldquoo melhor formatordquo Cada um tem suas vantagens e desvantagens

Dados diferentes (mesmo se usados pelos mesmos programas) em geral se adequam melhor a formatos diferentes

5089

Arquivos - texto X binaacuterios

Em qualquer formato arquivos satildeo armazenados como diacutegitos binaacuterios

Mas haacute duas formas principais como eles podem ser codificados

Arquivos baseados em texto (text files)

Dados satildeo transformados em caracteres usando alguma formataccedilatildeo (mesmo se impliacutecita) e escritos com alguma codificaccedilatildeo de texto (comumente mas natildeo necessariamente ASCII)

Um arquivo texto eacute um ou mais strings As mesmas conversotildees tecircm que ser feitas depara outros tipos

Arquivos ldquobinaacuteriosrdquo (binary files)

Embora todo arquivo seja binaacuterio este nome costuma ser usado soacute para aqueles em que os dados natildeo estatildeo na forma de texto

Com frequumlecircncia (nem sempre) os dados satildeo gravados de forma idecircntica a como satildeo armazenados na memoacuteria

Muitos formatos usam uma mistura de partes em texto e partes binaacuterias

Um cabeccedilalho (header) de texto que daacute informaccedilotildees (metadados) sobre os dados armazenados na parte binaacuteria que vem depois

O cabeccedilalho conteacutem em especial informaccedilotildees sobre como ler os dados binaacuterios

5189

Arquivos - texto X binaacuterios

Vantagens de arquivos texto

Legiacuteveis por pessoas (human readable)

Podem ser auto-suficientes todo o necessaacuterio para os ler e entender o que conteacutem pode ser obtido olhando o arquivo

Satildeo os menos especiacuteficos a linguagens software normalmente satildeo escritos em ASCII ou Unicode e sempre haacute algum suporte a ler escrever texto em linguagens software

Haacute alguns formatos padratildeo para texto (exs CSV XML) que satildeo suportados em muitas plataformas diferentes

5289

Arquivos - texto X binaacuterios

Vantagens de arquivos binaacuterios

Em geral natildeo haacute conversotildees entre o os dados como armazenados na memoacuteria O que torna o armazenamento mais eficiente e sem alteraccedilotildees nos valores

A maior parte dos formatos padronizados eacute binaacuteria Exs FITS cube CDF NetCDF HDF HDF5 JPEG JPEG2000 TIFF GeoTIFF MPEG etc

Eacute mais comum que haja bibliotecas prontas (ateacute de alto niacutevel) para consulta leitura e gravaccedilatildeo

Os formatos melhor desenhados satildeo autodocumentados (em texto ou binaacuterio) para os ler natildeo eacute necessaacuterio conhecimento preacutevio sobre como os dados foram armazenados

Toda linguagem plataforma costuma ter seu formato binaacuterio mais nativo que costuma ser o mais faacutecil para leitura gravaccedilatildeo Em particular nas de alto niacutevel que tecircm formatos autodocumentados (especialmente

em IDL R Python Java)

Muitos formatos tecircm opccedilatildeo de compressatildeo dos dados

5389

Arquivos - proprietaacuterios X padratildeo

Independente da escolha texto binaacuterio programas devem escolher entre usar um formato proacuteprio ou um formato padronizado

A principal vantagem de formatos proacuteprios eacute que satildeo definidos da forma mais conveniente para a aplicaccedilatildeo que os usa simplificando leitura e gravaccedilatildeo e potencialmente otimizando recursos (acesso ao disco tamanho do arquivo etc)

A principal desvantagem de formatos proacuteprios eacute ser necessaacuterio escrever todo o coacutedigo para os ler gravar

Pode dar mais trabalho que usar um formato geneacuterico que natildeo seja exatamente o que melhor se encaixa na aplicaccedilatildeo

O coacutedigo para processar o formato em geral vai ser menos completo e conveniente de usar que o de um formato bem estabelecido usado por muitos outros em muitos ambientes

Cada novo software que for usar estes arquivos vai precisar compartilhar do mesmo coacutedigo ou precisar de coacutedigo novo (em particular se em outra linguagem) para ler gravar naquele formato

Eacute necessaacuterio documentar o formato e decidir sobre como ele seraacute definido

Se outros jaacute colocaram muito trabalho desenvolvendo bons formatos padratildeo bem suportados em muitos ambientes por que ter o trabalho de reinventar (e reprogramar redocumentar e retestar) a roda

5489

Arquivos - padrotildees comuns em astronomia (exs adiante)

Texto

CSV Comma-separated values - bem suportado por muitos softwares

ldquoColunas fixasrdquo Natildeo eacute um padratildeo bem definido mas eacute praacutetica comum para tabelas (2D)

XML Extensible Markup Language - O padratildeo texto mais flexiacutevel de grande uso em programaccedilatildeo geral para armazenar qualquer coisa com frequumlecircncia de forma hieraacuterquica Bem suportado por linguagens modernas (e modernizadas) e bibliotecas das principais

linguagens gerais Alta complexidade o torna trabalhoso de usar

5589

Arquivos - padrotildees comuns em astronomia (exs adiante)Binaacuterios

FITS Flexible Image Transport System - o mais comum para observaccedilotildees astronocircmicas Conteacutem os dados (em geral arrays 1D 2D ou 3D) e documentaccedilatildeo (nos cabeccedilalhos) sobre a origem e caracteriacutesticas dos dados Tambeacutem usado para armazenar tabelas de dados quaisquer mesmo que natildeo sejam observaccedilotildees (especialmente pelo STSCI) Variam muito em qualidade de documentaccedilatildeo

NetCDF Network Common Data Form - evoluccedilatildeo do CDF autodocumentado eacute comum e bem suportado para vaacuterios arrays de dados

HDF5 Hierarchical Data Format ndash autodocumentado comum e bem suportado permitindo aleacutem de simples arrays estruturas (eacute um formato hieraacuterquico)

Formatos de imagens JPEG JPEG2000 TIFF GeoTIFF etc - voltados para arrays 2D3D de inteiros ou (em alguns casos) reais com ou sem compressatildeo JPEG2000 tem caracteriacutesticas mais avanccediladas como imagens multiresoluccedilatildeo

Formatos vetoriais PS EPS DXF SHP SVG - variados niacuteveis de suporte a armazenamento de vetores e formas em 2D ou 3D

ISIS Cube semelhante em caracteriacutesticas ao FITS mais usado em sensoriamento remoto geociecircncias e ciecircncias planetaacuterias em geral para observaccedilotildees 1D 2D ou 3D

Formatos nativos de linguagens todo o trabalho de leitura e gravaccedilatildeo eacute feito automagicamente pela biblioteca padratildeo em IDL R Python Java

5689

Arquivos texto - newlines

Apesar do que possa parecer arquivos texto natildeo tecircm intrinsecamente vaacuterias linhas Arquivos texto satildeo soacute uma sequumlecircncia 1D de caracteres em alguma codificaccedilatildeo Separaccedilatildeo em linhas (equivalente a interpretar o arquivo como 2D em linhas e colunas) eacute

especificada por convenccedilotildees Natildeo haacute apenas uma convenccedilatildeo para o fim de linhas

A mais primitiva convenccedilatildeo eacute separaccedilatildeo nenhuma estipula-se que linhas tenham um nuacutemero fixo N de caracteres e cabe ao software que lecirc o arquivo entender que uma linha nova ocorre regularmente a cada N caracteres

Eacute a forma menos portaacutevel e mais inconveniente eacute necessaacuterio o conhecimento preacutevio (ou por inspeccedilatildeo do arquivo) de quantos caracteres haacute por linha

A maior parte dos editores de texto natildeo vai saber separar linhas desta forma (por falta deste conhecimento preacutevio) Exemplo (de um FITS real)

SIMPLE = T Fits standard BITPIX = 16 Bits per pixel NAXIS = 0 Number of axes EXTEND = T File may contain extensions

O que com as linhas quebradas nos lugares certos seria

SIMPLE = T Fits standard BITPIX = 16 Bits per pixel NAXIS = 0 Number of axes EXTEND = T File may contain extensions

5789

Arquivos texto - newlines

A forma mais comum de especificar linhas eacute com um marcador do final de linha (newline)

Eacute um caractere especial natildeo normalmente presente no texto que serve para marcar fim de linhas

Mas natildeo haacute soacute um padratildeo de newline Os mais comuns

LF (Line Feed ASCII 10) ndash Unix Linux Mac OS X

CR - (Carriage Return ASCII 13) - Mac OS lt10

CR+LF (CR seguido de LF) - Windows DOS

Eacute o motivo de o Notepad (Windows) natildeo entender as quebras de linha de arquivos escritos com o formato nativo de Linux o arquivo soacute tem LF enquanto o editor espera CR+LF

Alguns sistemas (strings em vaacuterias linguagens por exemplo) usam o coacutedigo de escape n para indicar newline que eacute codificado de acordo com o padratildeo sendo usado

Em geral bibliotecas de leitura e gravaccedilatildeo de arquivos usam (default pelo menos) o newline nativo do sistema em que satildeo usadas

Programas de conversatildeo entre os sistemas satildeo comuns (ex dos2unix)

O Wordpad identifica se for usado soacute LF e quebra as linhas de acordo

5889

Arquivos - texto - CSV

Comma-separated values

O formato mais padronizado para tabelas (arrays 2D) em texto (frequentemente mas natildeo necessariamente ASCII)

Bem suportado por bibliotecas padratildeo de linguagens e outros softwares (Excel Calc Origin Google Docs etc)

Conteacutem Linhas de cabeccedilalho (opcionais mas recomendadas) linhas com qualquer texto geral

descrevendo o arquivo e em geral uma linha de tiacutetulo para as colunas da tabela Uma (apenas uma) tabela onde todas as linhas tecircm o mesmo nuacutemero de colunas

Colunas separadas por viacutergulas (opcionalmente pode ser outro separador) Linhas terminadas por newline (qualquer que seja) Strings delimitados por ldquo ldquo

Ex

NAMECALMPOSFILNAMEECHLPOSDISPPOSTARGNAMEPOSDIRCLASSMJD-OBSITIMECOADDSdec18s00010NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001dec18s00020NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001dec18s00120NIRSPEC-5-AO635800364500itan140NIRSPEC-5-AOp2 TITAN5408763000001dec18s00140NIRSPEC-5-AO626300364500itan140NIRSPEC-5-AOp1 TITAN5408763000001dec18s00151NIRSPEC-5-AO626300364500itan140NIRSPEC-5-AOp1ARC5408764000001dec18s00160NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001

Natildeo eacute necessaacuterio que as colunas tenham largura constante

Cabeccedilalho

5989

Arquivos - texto - CSVHaacute amplo suporte a leitura e gravaccedilatildeo de CSV sem precisar recorrer a procedimentos de baixo niacutevel

Podem ser diretamente importados em Excel Calc Origin Google Docs ou lido facilmente com bibliotecas padratildeo comuns Ex (IDL)

IDLgt c=read_csv(filesearch_scamcsvheader=h)IDLgt printhNAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS

IDLgt helpc Structure ltc8bca508gt 11 tags length=5256 data length=5248 refs=1 FIELD01 STRING Array[41] FIELD02 LONG Array[41] FIELD03 STRING Array[41] FIELD04 DOUBLE Array[41] FIELD05 DOUBLE Array[41] FIELD06 STRING Array[41] FIELD07 STRING Array[41] FIELD08 STRING Array[41] FIELD09 STRING Array[41] FIELD10 DOUBLE Array[41] FIELD11 LONG Array[41]

IDLgt printcfield01[03]dec18s0001 dec18s0002 dec18s0003 dec18s0004

IDLgt printcfield03[03]NIRSPEC-5-AO NIRSPEC-5-AO NIRSPEC-5-AO NIRSPEC-5-AO

6089

Arquivos - texto - CSVEx (IDL) Criaccedilatildeo de um CSV com uma tabela de valores

Criaccedilatildeo de 3 arrays 1D (12 elementos) um para cada coluna

IDLgt x=dindgen(3)IDLgt y=dindgen(4)IDLgt xx=reform(rebin(x34)12)IDLgt yy=reform(rebin(reform(y14)34)12)IDLgt f=xx+yy10IDLgt helpxxyyfXX DOUBLE = Array[12]YY DOUBLE = Array[12]F DOUBLE = Array[12]

Escrita do arquivo

IDLgt write_csvexamplecsvxxyyfheader=[XYX+10Y]

ResultadoXYX+10Y000000000000000000000000100000000000000010000000200000000000000020000000000000001000000010000000100000001000000011000000()

6189

Arquivos - texto - ldquoColunas regularesrdquoFixed column width

Natildeo eacute exatamente um padratildeo Eacute uma praacutetica comum

Armazena uma tabela (array 2D) de forma regular simples de ser interpretada e lida

Costumam ter linha(s) de cabeccedilalho descrevendo o conteuacutedo do arquivo em geral com uma linha para os nomes das colunas

As demais linhas conteacutem os dados sempre ocupando a mesma largura por coluna e escritos no mesmo formato em cada coluna

Costumam ser simples de ler inclusive interativamente (exs Excel Calc Origin read_ascii)

Ex (IDL) Uma simples tabela soacute de nuacutemeros

wavl CH4=33 wavl CH4=25 wavl CH4=10 wavl CH4=08 wavl CH4=05 wavl CH4=026 wavl CH4=02 477330000 0090130 477330000 0091110 477330000 0089250 477330000 0087000 477330000 0087140 477330000 0090080 477330000 0088110 480040000 0090930 480040000 0091930 480040000 0090160 480040000 0087930 480040000 0088110 480040000 0090950 480040000 0089090 482750000 0091710 482750000 0092730 482750000 0091060 482750000 0088850 482750000 0089080 482750000 0091810 482750000 0090060 485450000 0092530 485450000 0093570 485450000 0092000 485450000 0089810 485450000 0090100 485450000 0092730 485450000 0091090

IDLgt a=read_ascii(specs_27s_ntxtdata_start=1header=header)IDLgt printheader wavl CH4=33 wavl CH4=25 wavl CH4=10 wavl CH4=08 wavl CH4=05 wavl CH4=026 wavl CH4=02 IDLgt helpa Structure ltd423c9a8gt 1 tags length=224 data length=224 refs=1 FIELD01 FLOAT Array[14 4]

6289

Arquivos - texto - ldquoColunas regularesrdquoJaacute um arquivo um pouco mais difiacutecil de ler

NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS dec18s0001 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0002 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0003 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 FLAT 5408757812500 460000 5 dec18s0004 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 DARK 5408757812500 460000 5

Por ter colunas de tipos diferentes (strings inteiros reais) natildeo eacute possiacutevel o ler em um simples array Mas eacute faacutecil o colocar em uma estrutura de arrays onde cada campo eacute uma coluna

Especificando interativamente como interpretar as linhasIDLgt templ=ascii_template(filesearch_scamtxt)

Nome do campo (default mostrado)

Tipo do campo (identificado automaticamente)

Posiccedilatildeo (caracter) do comeccedilo (identificada automaticamente)

Linha de exemplo para verificar as colunas

6389

Arquivos - texto - ldquoColunas regularesrdquoDepois de feito o template o arquivo pode ser lido com apenas

IDLgt a=read_ascii(filesearch_scamtxttemplate=templ)IDLgt helpa Structure ltd4ec4608gt 11 tags length=416 data length=416 refs=1 FIELD01 STRING Array[4] FIELD02 LONG Array[4] FIELD03 STRING Array[4] FIELD04 FLOAT Array[4] FIELD05 FLOAT Array[4] FIELD06 STRING Array[4] FIELD07 STRING Array[4] FIELD08 STRING Array[4] FIELD09 FLOAT Array[4] FIELD10 FLOAT Array[4] FIELD11 LONG Array[4]IDLgt printafield01dec18s0001 dec18s0002 dec18s0003 dec18s0004IDLgt printafield04 626300 626300 626300 626300

O template (uma estrutura contendo dados sobre como ler o arquivo) pode ser usado para outros arquivos no mesmo formato No lugar de ter sido criado interativamente poderia ter sido lido de algum arquivo Poderia ter especificado nomes para os campos que seriam mais amigaacuteveis que coias como FIELD11

6489

Arquivos - texto - XML

Extensible Markup Language

Admite grande flexibilidade e por isso pode ter alta complexidade

Valores satildeo colocados dentro de uma estrutura em hieraacuterquica (em uma aacutervore) com os noacutes identificados pelos seus nomes (chaves)

Largamente usado em muitas aacutereas para armazenar conjuntos arbitraacuterios de quaisquer estruturas de dados

A maioria das aplicaccedilotildees usa um formato que eacute um subconjunto do XML especificado por um Schema comumente em um arquivo XML DTD (Document Type Definition)

6589

Arquivos - texto ndash XML ndash exemplos de usos

Armazenamento de dados de aplicaccedilotildees web (comum para exportar importar dados MediaWiki DokuWiki WordPress ADS Lattes etc)

Documentos Office (docx pptx xlsx) OpenOffice (odt opd ods)

Como versotildees de outros formatos FITSML XDF

ldquoScientific Dataset XML NASAs Astronomical Data Center (ADC) sponsors a number of research projects that

use XML for scientific data representation The XML activities at the ADC are sponsored and supported by the NASA Office of Space Science Applied Information Systems Research Program (AISRP)rdquo - httpxmlcoverpagesorgnasa-adchtml

Astronomical Instrument Markup Language (AIML)

SVG ndash Scalable Vector Graphics

Muitas de outras aplicaccedilotildees listadas em httpxmlcoverpagesorgxmlhtmlapplications

6689

Arquivos - texto ndash XML - exemploltxml version=10 gtltDOCTYPE Xdmf SYSTEM Xdmfdtd []gtltXdmf xmlnsxi=httpwwww3org2001XInclude Version=20gt ltDomaingt lt-- Example of Basic Topologies --gt ltInformation Name=Descriptiongt Example of a Polyvertex Topology ltInformationgt ltGrid Name=Polyvertex GridType=Uniformgt ltTopology TopologyType=Polyvertex Dimensions=3 NodesPerElement=3gt ltDataItem Format=XML Dimensions=3 3 NumberType=Floatgt 0 1 2 4 5 6 8 9 10 ltDataItemgt ltTopologygt ltGeometry Type=XYZgt ltDataItem Format=XML Dimensions=4 4 3gt 00 00 00 10 00 00()Que mostra que a interpretaccedilatildeo (parsing) de XML eacute em geral complexa

6789

Arquivos - texto - XML

Haacute muitas bibliotecas de alto niacutevel para fazer o processamento (parsing) e entregar os dados em uma estrutura conveniente

A complexidade em processar XML estaacute em decidir o que fazer com os dados jaacute que os arquivos podem ser muito complexos

As APIs (Application Programming Interfaces) mais comuns para processar XML que satildeo implementadas em muitas linguagens

DOM (Document Object Model) ndash manteacutem todo o conteuacutedo do em uma estrutura de dados (em geral uma aacutervore) em uma variaacutevel (em geral um objeto) Esta pode ser consultada para obter os valores de interesse para os alterar e usada para escrever um arquivo

SAX (Simple API for XML) ndash Interpretador (parser) por objetos O usuaacuterio escreve uma classe herdando da classe SAX provendo os meacutetodos que vatildeo processar os campos agrave medida em que estes satildeo lidos

6889

Arquivos - binaacuterios - FITSFlexible Image Transport System

O formato mais comum para observaccedilotildees astronocircmicas Tambeacutem usado para armazenar quaisquer dados mesmo natildeo relacionados a observaccedilotildees (especialmente tabelas como eacute praacutetica do STSCI)

Conteacutem um (ou mais) cabeccedilalho(s) de texto com metadados (informaccedilotildees sobre os dados como caracteriacutesticas (necessaacuterias para os ler) origem condiccedilotildees em que foram obtidos processamento realizado etc)

SIMPLE = T image conforms to FITS standard BITPIX = 32 bits per data value NAXIS = 2 number of axes NAXIS1 = 1024 NAXIS2 = 1024 BSCALE = 100000 Scaling factor BZERO = 000000 Scaling zero-point TELESCOP= Keck II Telescope SLITNAME= 0041x226 Slit Name SLITPA = 351979 Slit position angle SLITX = 131500 X pixel of the center of the slit LST = 12010446 local apparent sidereal time (()

Depois do cabeccedilalho haacute uma (ou mais) seccedilatildeo(otildees) de dados binaacuterios Costuma(m) ser array(s) 1D (espectros) 2D (imagens) ou 3D (ldquocubos de dadosrdquo)

De inteiros ou reais inteiros satildeo comuns em contagens de instrumentos reais para valores derivados (fluxos intensidades etc)

6989

Arquivos - binaacuterios - FITSNormalmente FITS satildeo lidos escritos por bibliotecas prontas de (relativamente) alto niacutevel usuaacuterio natildeo tem que saber como os dados satildeo armazenados no arquivo nem como os ler escrever Ex (IDL com a biblioteca idlastro)

IDLgt fits_info2dspectrumfits2dspectrumfits has 3 extensionsPrimary header 288 recordsNo dataExtension 1 -- SCI Header 144 records IMAGE ( 1201 1201 )Extension 2 -- ERR Header 72 records IMAGE ( 1201 1201 )Extension 3 -- DQ Header 72 records IMAGE ( 1201 1201 )

IDLgt mydata=readfits(2dspectrumfitsexten_no=1myheader) READFITS Reading FITS extension of type IMAGE READFITS Now reading 1201 by 1201 array

IDLgt extastmyheadermyastIDLgt sz=size(mydatadimensions)IDLgt xy2ad[1sz[0]][1sz[1]]myastcorners_acorners_dIDLgt printcorners_aCorners of the data array from file 2dspectrumfits are at 14487480 33063480

IDLgt printcorners_d -00041264444 00041402222

Obteacutem os dados de coordenadas (WCS) do header

Coloca os dados no array (2D de floats) mydata e o header no array (1D de strings) myheader

Calcula as coordenadas das quinas da imagem atraveacutes do WCS

Provecirc informaccedilotildees sobre o arquivo

7089

Arquivos - binaacuterios - ISIS Cube

Formatos como FITS se adequam muito a ter uma interface de mais alto niacutevel por objetos

Tambeacutem para dados em tabelas FITS muito mais trabalhosos de ler em baixo niacutevel que se adequam muito mais a mapas ou estruturas

Exemplo (de um formato semelhante a FITS ISIS cube)

O objeto ao ser criado lecirc todo o arquivo

cube=pp_editablecube(CM_1553510065_1_ircub)

Meacutetodos fornecem os dados desejados para obter quando necessaacuterio os dados de interesse

Find out the names of the backplanesprintcubegetproperty(backnames)Get the start time of the cubeprintcubegetfromheader(START_TIME)2007-084T100057286Z

Valores no cabeccedilalho podem ser convenientemente fornecidos como um mapa

header=cubeheader_as_hash()printheader[START_TIME]2007-084T100057286Z

7189

Arquivos - binaacuterios ndash ISIS Cube

Os dados satildeo fornecidos como arraysMake a contour plot of the latitudesc=contour(cubegetsuffixbyname(LATITUDE))Get the band with wavelength nearest to 21 (in the units used in the cube)selband=cubegetbandbywavelength(21wavelengths=selwavs)

Interfaces por overload tornam o acesso ainda mais conveniente

selband=cube[21]

selwavs=cube[21]

Retorna um array com a banda de comprimento de onda mais proacuteximo de 21 (microm)

Retorna o comprimento de onda mais proacuteximo de 21 (microm) da banda retornada acima

7289

Arquivos - binaacuterios ndash ISIS Cube Alteraccedilotildees feitas ao conteuacutedo satildeo automaticamente refletidas em todos os

lugares (cabeccedilalho em particular) afetados mantendo o objeto vaacutelido que pode depois ser gravado em um novo arquivo

IDLgt printcubelinescubesamplescubebands 64 64 256

IDLgt helpcubecoreltExpressiongt FLOAT = Array[64 64 256]

IDLgt cubecore=dblarr(100100256)

A linha acima natildeo eacute uma atribuiccedilatildeo eacute uma invocaccedilatildeo de meacutetodo Eacute equivalente acubesetpropertycore=dblarr(100100256)

Eacute o trabalho da funccedilatildeo setproperty decidir se a propriedade passada (core) faz sentido e se fizer fazer todo o trabalho necessaacuterio a esta mudanccedila Para o usuaacuterio eacute tudo automaacutetico e os dados da classe satildeo vaacutelidos o tempo todo

IDLgt helpcubecoreltExpressiongt DOUBLE = Array[100 100 256]

IDLgt printcubelinescubesamplescubebands 100 100 256

IDLgt cubesaveCM_1553510065_1_ir_editedcub

7389

Arquivos - binaacuterios ndash NetCDF e HDF5

Network Common Data Form e Hierarchical Data Format

Os dois uacutenicos formatos bem estabelecidos para dados cientiacuteficos geneacutericos

Armazenam dados como vaacuterias variaacuteveis e seus metadados Para cada variaacutevel haacute (ou pode haver) os metadados

Nome Dimensotildees (do array) Unidades Comentaacuterios

Ambos permitem arrays multidimensionais

Apenas HDF5 permite estruturas (daiacute vem a hierarquia)

Autodocumentados qualquer software que saiba ler um destes formatos lecirc qualquer arquivo sem precisar de conhecimento preacutevio sobre como o arquivo foi gerado

Muito bem suportados em bibliotecas padratildeo e natildeo padratildeo em softwares interativos e visualizadores (inclusive plugins para navegadores)

httpwwwunidataucaredusoftwarenetcdf httpenwikipediaorgwikiHdf5

NetCDF eacute mais simples de usar por natildeo ter hierarquia dando menos trabalho para ler e escrever dados Se hierarquia natildeo eacute necessaacuteria eacute mais conveniente de usar que HDF5

7489

Arquivos - binaacuterios - NetCDF e HDF5Haacute tambeacutem o formato CDL uma versatildeo ASCII do NetCDF A biblioteca padratildeo do NetCDF inclui conversores entre estes formatos

$ ncdump -h refspec_g01_0ncnetcdf refspec_g01_0 dimensions nlay = 51 nwn = 400 nleg = 33 numu = 2 nlev = 52 nphi = 3 ngas = 2 nwnc = 1 scal = 1 v3 = 3 dnl = 1 nk = 1 tdisr = UNLIMITED (0 currently) na = 16

variables float alb(nwn) float z(nlay) float t(nlay) float p(nlay) float wl(nwn) float iof(nwn) float mtau(nwn) float htau(nwn) float hctaus(nwn) float gtau(nwn) float outcos(scal) float phi(nleg) float phic(scal) float umu(numu) float flux(v3 nwn nlev) float mix(nlay ngas) float c(nlay) float psat(nlay) float ga(nwnc) float wlc(nwnc) float inc(scal) int dm(scal) int ord(scal) float fbeam(scal) float wn(nwn) float tautot(nwn nlay) float htaus(nwn nlay) float htaux(nwn nlay) float taug(nwn nlay) float phase(nwn nlay nleg) float ssa(nwn nlay) float uu(nwn nphi nlev numu) float u0u(nwn nlev numu) float tray(nwn nlay) float gtauo(tdisr nwn nlay)

Haacute 14 variaacuteveis usadas como dimensotildees para as 35 variaacuteveis que satildeo arrays

Ex alb(nwn) indica que alb eacute um array 1D de nwn elementos

nwn estaacute armazenado como uma das dimensotildees e eacute 400 portanto alb tem 400 elementos

Parte do conteuacutedo de um arquivo NetCDF em formato CDL (gerado pelo programa ncdump)

7589

Arquivos - binaacuterios - NetCDF e HDF5Conteuacutedo daquele arquivo visualizado com o ncview (acompanha a biblioteca NetCDF padratildeo)

7689

Arquivos - binaacuterios - NetCDF e HDF5O conteuacutedo de todo o arquivo pode ser lido facilmente com as bibliotecas disponiacuteveis e armazenado em contecirciners convenientes Usando um objeto que gera um resultado um pouco mais conveniente

IDLgt h=pp_readncdf(refspec_g01_0nchash)IDLgt printhvar_dims ltObjHeapVar229(HASH)gtvars ltObjHeapVar152(HASH)gtdims ltObjHeapVar118(HASH)gt

IDLgt printh[vars]T 173203 175459 175848 176001 175975 Z 431869 418858 406067 393403 380464 FLUX 300660 145536 0705180 0341669 0165532 PHASE 100000 0779034 0660858 0542052 0449983 TAUTOT0694377 0693420 0693474 0693540 0693636()

IDLgt help(h[vars])[TAUTOT]ltExpressiongt FLOAT = Array[51 400]

IDLgt print(h[var_dims])[TAUTOT]NLAY NWN

IDLgt print(h[dims])[(h[var_dims])[TAUTOT]]NLAY 51NWN 400

7789

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5)

Visualizaccedilatildeo da variaacutevel selecionada

Metadados e alguns valores da variaacutevel selecionada

Variaacutevel a ser criada com o conteuacutedo desta variaacutevel do arquivo

Hierarquia das variaacuteveis do arquivo

7889

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5) Imported variable az

IDLgt helpaz Structure ltd5723f38gt 13 tags length=448 data length=444 refs=1 _NAME STRING az _ICONTYPE STRING binary _TYPE STRING DATASET _FILE STRING INTENSI_test_409OUTh5 _PATH STRING _DATA DOUBLE Array[38] _NDIMENSIONS LONG 1 _DIMENSIONS ULONG64 Array[1] _NELEMENTS ULONG64 38 _DATATYPE STRING H5T_FLOAT _STORAGESIZE ULONG 8 _PRECISION LONG 64 _SIGN STRING

IDLgt printaz_data 00000000 10000000 20000000 30000000 40000000 50000000 60000000 80000000 ()

7989

Arquivos - binaacuterios - imagens

JPEG JPEG200 TIFF GeoTIFF etc

Os formatos comuns de imagens satildeo bem suportados em muacuteltiplas plataformas para uso dentro de programas e interativamente

Alguns formatos tecircm opccedilatildeo de compressatildeo com perda eou sem perda

Armazenam imagens como arrays 2D ou 3D (3D frequumlentemente limitado a 3 ou 4 em uma das dimensotildees uma imagem em 3 ou 4 bandas) de inteiros ou (em alguns formatos) reais

Alguns formatos permitem armazenar metadados para caracterizar as imagens armazenadas

JPEG2000 e GeoTIFF (um subconjunto de TIFF) comuns em astronomia e aacutereas proacuteximas

8089

Arquivos - binaacuterios ndash imagens ndash exemplo (IDL)IDLgt printquery_tiff(issmap_2009tiffinfogeotiff=geo) 1

IDLgt helpinfo Structure ltd4eca4b8gt 18 tags length=144 data length=132 refs=1 CHANNELS LONG 4 DIMENSIONS LONG Array[2] IMAGE_INDEX LONG 0 NUM_IMAGES LONG 1 PIXEL_TYPE INT 1 TYPE STRING TIFF BITS_PER_SAMPLE LONG 8 POSITION FLOAT Array[2] RESOLUTION FLOAT Array[2] UNITS LONG 2 TILE_SIZE LONG Array[2] DESCRIPTION STRING ISS (2009) DATE_TIME STRING 20100218 012436()

IDLgt helpgeo Structure ltd4efa1b8gt 10 tags length=264 data length=262 refs=1 MODELPIXELSCALETAG DOUBLE Array[3] MODELTIEPOINTTAG DOUBLE Array[6 4] GEOGRAPHICTYPEGEOKEY INT 4035 GEOGSEMIMAJORAXISGEOKEY DOUBLE 25750000 GEOGSEMIMINORAXISGEOKEY DOUBLE 25750000()

IDLgt myimage=read_tiff(issmap_2009tiff) Lecirc a imagem para o array myimage

Obteacutem informaccedilotildees sobre o arquivo

8189

Arquivos - binaacuterios ndash formatos nativosLinguagens como IDL R Python Java tecircm seu formato nativo binaacuterio acessado em alto niacutevel Basta mandar salvar ler variaacuteveis no do arquivo a biblioteca padratildeo automagicamente faz todo o trabalho de decidir como gravar ler os dados

Conveniente de usar na proacutepria linguagem Mas raramente existem bibliotecas para ler gravar o formato nativo de uma linguagem a partir de outra Ex (IDL)

IDLgt savefile=2dspectrumsavmydatamyheadercorners_dcorners_averbosecompress SAVE Portable (XDR) compressed SAVERESTORE file SAVE Saved variable MYDATA SAVE Saved variable MYHEADER()

Pode ser lido com apenas (haacute formas mais elaboradas)

IDLgt restore2dspectrumsavverbose RESTORE Portable (XDR) compressed SAVERESTORE file RESTORE Save file written by ltunknowngtltunknowngt Thu Jan 27 191422 2011 RESTORE IDL version 801 (linux x86_64) RESTORE Restored variable MYDATA RESTORE Restored variable MYHEADER()

IDLgt helpmydatamyheadercorners_dcorners_aMYDATA FLOAT = Array[1201 1201]MYHEADER STRING = Array[144]()

8289

Arquivos - processamento em baixo niacutevel

Nem sempre um formato padratildeo eacute a melhor escolha para o problema

Nem sempre haacute escolha (pode-se ter que trabalhar com arquivos que jaacute foram escritos em algum formato proprietaacuterio)

Agraves vezes o formato eacute padratildeo mas natildeo haacute bom suporte a ele disponiacutevel

Em todos estes casos eacute necessaacuterio escrever rotinas em baixo niacutevel que vatildeo ler processar diretamente o conteuacutedo do arquivo

Preferencialmente criando interfaces de alto niacutevel para o programa que vai as usar

8389

Arquivos - processamento em baixo niacutevel - texto

Tomando o exemplo anterior onde as colunas eram de diferentes tipos

NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS dec18s0001 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0002 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0003 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 FLAT 5408757812500 460000 5 dec18s0004 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 DARK 5408757812500 460000 5

A forma mais simples de o ler diretamente eacute definir uma estrutura para receber cada linha e um array destas estruturas para receber todo o arquivo Ex (IDL)

IDLgt record=namecalmpos0filnameechlpos0d0disppos0d0targnameposdirclassmjd_obsitime0d0coadds0IDLgt nlines=file_lines(filesearch_scamtxt)IDLgt mydata=replicate(recordnlines-1)IDLgt header=

Depois de definidas as variaacuteveis que vatildeo receber os dados o arquivo pode ser lido

IDLgt openrunitfilesearch_scamtxtget_lunIDLgt readfunitheaderIDLgt readfunitmydataformat=(A14I8A15F104F104A18A19A15F158F105I15)IDLgt free_lununit

A gravaccedilatildeo de um arquivo texto poderia ser feita de forma semelhante apenas trocando openr por openw (abrir o arquivo para gravaccedilatildeo natildeo leitura) e readf por printf

O arquivo eacute aberto em uma unidade (unit) usada para especificar de onde eacute feita a leitura

Ao final o arquivo eacute fechado

8489

Arquivos - processamento em baixo niacutevel - texto

O que resulta em

IDLgt printheader NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS

IDLgt helpmydataMYDATA STRUCT = -gt ltAnonymousgt Array[4]

IDLgt helpmydata[0] Structure ltd5e38f68gt 11 tags length=136 data length=124 refs=3 NAME STRING dec18s0001 CALMPOS INT 0 FILNAME STRING NIRSPEC-5-AO ECHLPOS DOUBLE 62630000 DISPPOS DOUBLE 36450000 TARGNAME STRING HD85258 POSDIR STRING NIRSPEC-5-AOp1 CLASS STRING STAR MJD_OBS STRING 54087574 ITIME DOUBLE 10000000 COADDS INT 1

Este caso eacute mais complicado que os mais comuns por haver colunas de strings

Se todas fossem de nuacutemeros natildeo teria sido necessaacuterio especificar o formato explicitamente As colunas teriam sido adivinhadas pela biblioteca que lecirc o arquivo Poderia ter sido lido escrito soacute com um array de nuacutemeros sem estruturas

8589

Arquivos - processamento em baixo niacutevel - binaacuterio

Formatos binaacuterios podem ser definidos de qualquer forma O arquivo eacute apenas um conjunto de bytes Cabe ao software saber como os interpretar

Uma escolha comum para que sejam autodocumentados eacute incluir um cabeccedilalho de texto informando as caracteriacutesticas dos dados necessaacuterias para os ler

Ex (IDL) criar um arquivo que armazene um array de doubles com um cabeccedilalho informando as dimensotildees para que o programa que o lecirc saiba como ler os dados

Inventa dados e abre o arquivo

IDLgt data_to_write=dindgen(34)IDLgt openwunitbinary_exampledatget_lun

Escreve as dimensotildees como texto

IDLgt printfunitdimensions of the double array stored belowIDLgt printfunitsize(data_to_writedimensions)

Escreve os dados binaacuterios

IDLgt writeuunitdata_to_write

Fecha o arquivo

IDLgt free_lununit

Escreve em binaacuterio (write unformatted)

8689

Arquivos - processamento em baixo niacutevel - binaacuterio

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

dimensions of the double array stored below 3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

8789

Arquivos - processamento em baixo niacutevel - binaacuterioA leitura deste arquivo eacute igualmente simples

IDLgt header=IDLgt dims=[00]IDLgt openrunitbinary_exampledatget_lun

Lecirc as dimensotildees (armazenadas como texto)

IDLgt readfunitheaderIDLgt readfunitdims

Lecirc a parte binaacuteria depois de saber as dimensotildees

IDLgt data_read=dblarr(dims)IDLgt readuunitdata_read

Fecha o arquivo

IDLgt free_lununit

Verifica que os dados foram gravados e lidos corretamente

IDLgt printarray_equal(data_to_writedata_read) 1

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Lecirc dados binaacuterios (read unformatted)

8889

Sumaacuterio

5 ndash Slides em httpwwwppenteadonetpeapea04_strings_iopdf Strings Expressotildees regulares Arquivos

httpwwwppenteadonetpea

8989

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89

Arquivos - texto X binaacuterios

Em qualquer formato arquivos satildeo armazenados como diacutegitos binaacuterios

Mas haacute duas formas principais como eles podem ser codificados

Arquivos baseados em texto (text files)

Dados satildeo transformados em caracteres usando alguma formataccedilatildeo (mesmo se impliacutecita) e escritos com alguma codificaccedilatildeo de texto (comumente mas natildeo necessariamente ASCII)

Um arquivo texto eacute um ou mais strings As mesmas conversotildees tecircm que ser feitas depara outros tipos

Arquivos ldquobinaacuteriosrdquo (binary files)

Embora todo arquivo seja binaacuterio este nome costuma ser usado soacute para aqueles em que os dados natildeo estatildeo na forma de texto

Com frequumlecircncia (nem sempre) os dados satildeo gravados de forma idecircntica a como satildeo armazenados na memoacuteria

Muitos formatos usam uma mistura de partes em texto e partes binaacuterias

Um cabeccedilalho (header) de texto que daacute informaccedilotildees (metadados) sobre os dados armazenados na parte binaacuteria que vem depois

O cabeccedilalho conteacutem em especial informaccedilotildees sobre como ler os dados binaacuterios

5189

Arquivos - texto X binaacuterios

Vantagens de arquivos texto

Legiacuteveis por pessoas (human readable)

Podem ser auto-suficientes todo o necessaacuterio para os ler e entender o que conteacutem pode ser obtido olhando o arquivo

Satildeo os menos especiacuteficos a linguagens software normalmente satildeo escritos em ASCII ou Unicode e sempre haacute algum suporte a ler escrever texto em linguagens software

Haacute alguns formatos padratildeo para texto (exs CSV XML) que satildeo suportados em muitas plataformas diferentes

5289

Arquivos - texto X binaacuterios

Vantagens de arquivos binaacuterios

Em geral natildeo haacute conversotildees entre o os dados como armazenados na memoacuteria O que torna o armazenamento mais eficiente e sem alteraccedilotildees nos valores

A maior parte dos formatos padronizados eacute binaacuteria Exs FITS cube CDF NetCDF HDF HDF5 JPEG JPEG2000 TIFF GeoTIFF MPEG etc

Eacute mais comum que haja bibliotecas prontas (ateacute de alto niacutevel) para consulta leitura e gravaccedilatildeo

Os formatos melhor desenhados satildeo autodocumentados (em texto ou binaacuterio) para os ler natildeo eacute necessaacuterio conhecimento preacutevio sobre como os dados foram armazenados

Toda linguagem plataforma costuma ter seu formato binaacuterio mais nativo que costuma ser o mais faacutecil para leitura gravaccedilatildeo Em particular nas de alto niacutevel que tecircm formatos autodocumentados (especialmente

em IDL R Python Java)

Muitos formatos tecircm opccedilatildeo de compressatildeo dos dados

5389

Arquivos - proprietaacuterios X padratildeo

Independente da escolha texto binaacuterio programas devem escolher entre usar um formato proacuteprio ou um formato padronizado

A principal vantagem de formatos proacuteprios eacute que satildeo definidos da forma mais conveniente para a aplicaccedilatildeo que os usa simplificando leitura e gravaccedilatildeo e potencialmente otimizando recursos (acesso ao disco tamanho do arquivo etc)

A principal desvantagem de formatos proacuteprios eacute ser necessaacuterio escrever todo o coacutedigo para os ler gravar

Pode dar mais trabalho que usar um formato geneacuterico que natildeo seja exatamente o que melhor se encaixa na aplicaccedilatildeo

O coacutedigo para processar o formato em geral vai ser menos completo e conveniente de usar que o de um formato bem estabelecido usado por muitos outros em muitos ambientes

Cada novo software que for usar estes arquivos vai precisar compartilhar do mesmo coacutedigo ou precisar de coacutedigo novo (em particular se em outra linguagem) para ler gravar naquele formato

Eacute necessaacuterio documentar o formato e decidir sobre como ele seraacute definido

Se outros jaacute colocaram muito trabalho desenvolvendo bons formatos padratildeo bem suportados em muitos ambientes por que ter o trabalho de reinventar (e reprogramar redocumentar e retestar) a roda

5489

Arquivos - padrotildees comuns em astronomia (exs adiante)

Texto

CSV Comma-separated values - bem suportado por muitos softwares

ldquoColunas fixasrdquo Natildeo eacute um padratildeo bem definido mas eacute praacutetica comum para tabelas (2D)

XML Extensible Markup Language - O padratildeo texto mais flexiacutevel de grande uso em programaccedilatildeo geral para armazenar qualquer coisa com frequumlecircncia de forma hieraacuterquica Bem suportado por linguagens modernas (e modernizadas) e bibliotecas das principais

linguagens gerais Alta complexidade o torna trabalhoso de usar

5589

Arquivos - padrotildees comuns em astronomia (exs adiante)Binaacuterios

FITS Flexible Image Transport System - o mais comum para observaccedilotildees astronocircmicas Conteacutem os dados (em geral arrays 1D 2D ou 3D) e documentaccedilatildeo (nos cabeccedilalhos) sobre a origem e caracteriacutesticas dos dados Tambeacutem usado para armazenar tabelas de dados quaisquer mesmo que natildeo sejam observaccedilotildees (especialmente pelo STSCI) Variam muito em qualidade de documentaccedilatildeo

NetCDF Network Common Data Form - evoluccedilatildeo do CDF autodocumentado eacute comum e bem suportado para vaacuterios arrays de dados

HDF5 Hierarchical Data Format ndash autodocumentado comum e bem suportado permitindo aleacutem de simples arrays estruturas (eacute um formato hieraacuterquico)

Formatos de imagens JPEG JPEG2000 TIFF GeoTIFF etc - voltados para arrays 2D3D de inteiros ou (em alguns casos) reais com ou sem compressatildeo JPEG2000 tem caracteriacutesticas mais avanccediladas como imagens multiresoluccedilatildeo

Formatos vetoriais PS EPS DXF SHP SVG - variados niacuteveis de suporte a armazenamento de vetores e formas em 2D ou 3D

ISIS Cube semelhante em caracteriacutesticas ao FITS mais usado em sensoriamento remoto geociecircncias e ciecircncias planetaacuterias em geral para observaccedilotildees 1D 2D ou 3D

Formatos nativos de linguagens todo o trabalho de leitura e gravaccedilatildeo eacute feito automagicamente pela biblioteca padratildeo em IDL R Python Java

5689

Arquivos texto - newlines

Apesar do que possa parecer arquivos texto natildeo tecircm intrinsecamente vaacuterias linhas Arquivos texto satildeo soacute uma sequumlecircncia 1D de caracteres em alguma codificaccedilatildeo Separaccedilatildeo em linhas (equivalente a interpretar o arquivo como 2D em linhas e colunas) eacute

especificada por convenccedilotildees Natildeo haacute apenas uma convenccedilatildeo para o fim de linhas

A mais primitiva convenccedilatildeo eacute separaccedilatildeo nenhuma estipula-se que linhas tenham um nuacutemero fixo N de caracteres e cabe ao software que lecirc o arquivo entender que uma linha nova ocorre regularmente a cada N caracteres

Eacute a forma menos portaacutevel e mais inconveniente eacute necessaacuterio o conhecimento preacutevio (ou por inspeccedilatildeo do arquivo) de quantos caracteres haacute por linha

A maior parte dos editores de texto natildeo vai saber separar linhas desta forma (por falta deste conhecimento preacutevio) Exemplo (de um FITS real)

SIMPLE = T Fits standard BITPIX = 16 Bits per pixel NAXIS = 0 Number of axes EXTEND = T File may contain extensions

O que com as linhas quebradas nos lugares certos seria

SIMPLE = T Fits standard BITPIX = 16 Bits per pixel NAXIS = 0 Number of axes EXTEND = T File may contain extensions

5789

Arquivos texto - newlines

A forma mais comum de especificar linhas eacute com um marcador do final de linha (newline)

Eacute um caractere especial natildeo normalmente presente no texto que serve para marcar fim de linhas

Mas natildeo haacute soacute um padratildeo de newline Os mais comuns

LF (Line Feed ASCII 10) ndash Unix Linux Mac OS X

CR - (Carriage Return ASCII 13) - Mac OS lt10

CR+LF (CR seguido de LF) - Windows DOS

Eacute o motivo de o Notepad (Windows) natildeo entender as quebras de linha de arquivos escritos com o formato nativo de Linux o arquivo soacute tem LF enquanto o editor espera CR+LF

Alguns sistemas (strings em vaacuterias linguagens por exemplo) usam o coacutedigo de escape n para indicar newline que eacute codificado de acordo com o padratildeo sendo usado

Em geral bibliotecas de leitura e gravaccedilatildeo de arquivos usam (default pelo menos) o newline nativo do sistema em que satildeo usadas

Programas de conversatildeo entre os sistemas satildeo comuns (ex dos2unix)

O Wordpad identifica se for usado soacute LF e quebra as linhas de acordo

5889

Arquivos - texto - CSV

Comma-separated values

O formato mais padronizado para tabelas (arrays 2D) em texto (frequentemente mas natildeo necessariamente ASCII)

Bem suportado por bibliotecas padratildeo de linguagens e outros softwares (Excel Calc Origin Google Docs etc)

Conteacutem Linhas de cabeccedilalho (opcionais mas recomendadas) linhas com qualquer texto geral

descrevendo o arquivo e em geral uma linha de tiacutetulo para as colunas da tabela Uma (apenas uma) tabela onde todas as linhas tecircm o mesmo nuacutemero de colunas

Colunas separadas por viacutergulas (opcionalmente pode ser outro separador) Linhas terminadas por newline (qualquer que seja) Strings delimitados por ldquo ldquo

Ex

NAMECALMPOSFILNAMEECHLPOSDISPPOSTARGNAMEPOSDIRCLASSMJD-OBSITIMECOADDSdec18s00010NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001dec18s00020NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001dec18s00120NIRSPEC-5-AO635800364500itan140NIRSPEC-5-AOp2 TITAN5408763000001dec18s00140NIRSPEC-5-AO626300364500itan140NIRSPEC-5-AOp1 TITAN5408763000001dec18s00151NIRSPEC-5-AO626300364500itan140NIRSPEC-5-AOp1ARC5408764000001dec18s00160NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001

Natildeo eacute necessaacuterio que as colunas tenham largura constante

Cabeccedilalho

5989

Arquivos - texto - CSVHaacute amplo suporte a leitura e gravaccedilatildeo de CSV sem precisar recorrer a procedimentos de baixo niacutevel

Podem ser diretamente importados em Excel Calc Origin Google Docs ou lido facilmente com bibliotecas padratildeo comuns Ex (IDL)

IDLgt c=read_csv(filesearch_scamcsvheader=h)IDLgt printhNAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS

IDLgt helpc Structure ltc8bca508gt 11 tags length=5256 data length=5248 refs=1 FIELD01 STRING Array[41] FIELD02 LONG Array[41] FIELD03 STRING Array[41] FIELD04 DOUBLE Array[41] FIELD05 DOUBLE Array[41] FIELD06 STRING Array[41] FIELD07 STRING Array[41] FIELD08 STRING Array[41] FIELD09 STRING Array[41] FIELD10 DOUBLE Array[41] FIELD11 LONG Array[41]

IDLgt printcfield01[03]dec18s0001 dec18s0002 dec18s0003 dec18s0004

IDLgt printcfield03[03]NIRSPEC-5-AO NIRSPEC-5-AO NIRSPEC-5-AO NIRSPEC-5-AO

6089

Arquivos - texto - CSVEx (IDL) Criaccedilatildeo de um CSV com uma tabela de valores

Criaccedilatildeo de 3 arrays 1D (12 elementos) um para cada coluna

IDLgt x=dindgen(3)IDLgt y=dindgen(4)IDLgt xx=reform(rebin(x34)12)IDLgt yy=reform(rebin(reform(y14)34)12)IDLgt f=xx+yy10IDLgt helpxxyyfXX DOUBLE = Array[12]YY DOUBLE = Array[12]F DOUBLE = Array[12]

Escrita do arquivo

IDLgt write_csvexamplecsvxxyyfheader=[XYX+10Y]

ResultadoXYX+10Y000000000000000000000000100000000000000010000000200000000000000020000000000000001000000010000000100000001000000011000000()

6189

Arquivos - texto - ldquoColunas regularesrdquoFixed column width

Natildeo eacute exatamente um padratildeo Eacute uma praacutetica comum

Armazena uma tabela (array 2D) de forma regular simples de ser interpretada e lida

Costumam ter linha(s) de cabeccedilalho descrevendo o conteuacutedo do arquivo em geral com uma linha para os nomes das colunas

As demais linhas conteacutem os dados sempre ocupando a mesma largura por coluna e escritos no mesmo formato em cada coluna

Costumam ser simples de ler inclusive interativamente (exs Excel Calc Origin read_ascii)

Ex (IDL) Uma simples tabela soacute de nuacutemeros

wavl CH4=33 wavl CH4=25 wavl CH4=10 wavl CH4=08 wavl CH4=05 wavl CH4=026 wavl CH4=02 477330000 0090130 477330000 0091110 477330000 0089250 477330000 0087000 477330000 0087140 477330000 0090080 477330000 0088110 480040000 0090930 480040000 0091930 480040000 0090160 480040000 0087930 480040000 0088110 480040000 0090950 480040000 0089090 482750000 0091710 482750000 0092730 482750000 0091060 482750000 0088850 482750000 0089080 482750000 0091810 482750000 0090060 485450000 0092530 485450000 0093570 485450000 0092000 485450000 0089810 485450000 0090100 485450000 0092730 485450000 0091090

IDLgt a=read_ascii(specs_27s_ntxtdata_start=1header=header)IDLgt printheader wavl CH4=33 wavl CH4=25 wavl CH4=10 wavl CH4=08 wavl CH4=05 wavl CH4=026 wavl CH4=02 IDLgt helpa Structure ltd423c9a8gt 1 tags length=224 data length=224 refs=1 FIELD01 FLOAT Array[14 4]

6289

Arquivos - texto - ldquoColunas regularesrdquoJaacute um arquivo um pouco mais difiacutecil de ler

NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS dec18s0001 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0002 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0003 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 FLAT 5408757812500 460000 5 dec18s0004 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 DARK 5408757812500 460000 5

Por ter colunas de tipos diferentes (strings inteiros reais) natildeo eacute possiacutevel o ler em um simples array Mas eacute faacutecil o colocar em uma estrutura de arrays onde cada campo eacute uma coluna

Especificando interativamente como interpretar as linhasIDLgt templ=ascii_template(filesearch_scamtxt)

Nome do campo (default mostrado)

Tipo do campo (identificado automaticamente)

Posiccedilatildeo (caracter) do comeccedilo (identificada automaticamente)

Linha de exemplo para verificar as colunas

6389

Arquivos - texto - ldquoColunas regularesrdquoDepois de feito o template o arquivo pode ser lido com apenas

IDLgt a=read_ascii(filesearch_scamtxttemplate=templ)IDLgt helpa Structure ltd4ec4608gt 11 tags length=416 data length=416 refs=1 FIELD01 STRING Array[4] FIELD02 LONG Array[4] FIELD03 STRING Array[4] FIELD04 FLOAT Array[4] FIELD05 FLOAT Array[4] FIELD06 STRING Array[4] FIELD07 STRING Array[4] FIELD08 STRING Array[4] FIELD09 FLOAT Array[4] FIELD10 FLOAT Array[4] FIELD11 LONG Array[4]IDLgt printafield01dec18s0001 dec18s0002 dec18s0003 dec18s0004IDLgt printafield04 626300 626300 626300 626300

O template (uma estrutura contendo dados sobre como ler o arquivo) pode ser usado para outros arquivos no mesmo formato No lugar de ter sido criado interativamente poderia ter sido lido de algum arquivo Poderia ter especificado nomes para os campos que seriam mais amigaacuteveis que coias como FIELD11

6489

Arquivos - texto - XML

Extensible Markup Language

Admite grande flexibilidade e por isso pode ter alta complexidade

Valores satildeo colocados dentro de uma estrutura em hieraacuterquica (em uma aacutervore) com os noacutes identificados pelos seus nomes (chaves)

Largamente usado em muitas aacutereas para armazenar conjuntos arbitraacuterios de quaisquer estruturas de dados

A maioria das aplicaccedilotildees usa um formato que eacute um subconjunto do XML especificado por um Schema comumente em um arquivo XML DTD (Document Type Definition)

6589

Arquivos - texto ndash XML ndash exemplos de usos

Armazenamento de dados de aplicaccedilotildees web (comum para exportar importar dados MediaWiki DokuWiki WordPress ADS Lattes etc)

Documentos Office (docx pptx xlsx) OpenOffice (odt opd ods)

Como versotildees de outros formatos FITSML XDF

ldquoScientific Dataset XML NASAs Astronomical Data Center (ADC) sponsors a number of research projects that

use XML for scientific data representation The XML activities at the ADC are sponsored and supported by the NASA Office of Space Science Applied Information Systems Research Program (AISRP)rdquo - httpxmlcoverpagesorgnasa-adchtml

Astronomical Instrument Markup Language (AIML)

SVG ndash Scalable Vector Graphics

Muitas de outras aplicaccedilotildees listadas em httpxmlcoverpagesorgxmlhtmlapplications

6689

Arquivos - texto ndash XML - exemploltxml version=10 gtltDOCTYPE Xdmf SYSTEM Xdmfdtd []gtltXdmf xmlnsxi=httpwwww3org2001XInclude Version=20gt ltDomaingt lt-- Example of Basic Topologies --gt ltInformation Name=Descriptiongt Example of a Polyvertex Topology ltInformationgt ltGrid Name=Polyvertex GridType=Uniformgt ltTopology TopologyType=Polyvertex Dimensions=3 NodesPerElement=3gt ltDataItem Format=XML Dimensions=3 3 NumberType=Floatgt 0 1 2 4 5 6 8 9 10 ltDataItemgt ltTopologygt ltGeometry Type=XYZgt ltDataItem Format=XML Dimensions=4 4 3gt 00 00 00 10 00 00()Que mostra que a interpretaccedilatildeo (parsing) de XML eacute em geral complexa

6789

Arquivos - texto - XML

Haacute muitas bibliotecas de alto niacutevel para fazer o processamento (parsing) e entregar os dados em uma estrutura conveniente

A complexidade em processar XML estaacute em decidir o que fazer com os dados jaacute que os arquivos podem ser muito complexos

As APIs (Application Programming Interfaces) mais comuns para processar XML que satildeo implementadas em muitas linguagens

DOM (Document Object Model) ndash manteacutem todo o conteuacutedo do em uma estrutura de dados (em geral uma aacutervore) em uma variaacutevel (em geral um objeto) Esta pode ser consultada para obter os valores de interesse para os alterar e usada para escrever um arquivo

SAX (Simple API for XML) ndash Interpretador (parser) por objetos O usuaacuterio escreve uma classe herdando da classe SAX provendo os meacutetodos que vatildeo processar os campos agrave medida em que estes satildeo lidos

6889

Arquivos - binaacuterios - FITSFlexible Image Transport System

O formato mais comum para observaccedilotildees astronocircmicas Tambeacutem usado para armazenar quaisquer dados mesmo natildeo relacionados a observaccedilotildees (especialmente tabelas como eacute praacutetica do STSCI)

Conteacutem um (ou mais) cabeccedilalho(s) de texto com metadados (informaccedilotildees sobre os dados como caracteriacutesticas (necessaacuterias para os ler) origem condiccedilotildees em que foram obtidos processamento realizado etc)

SIMPLE = T image conforms to FITS standard BITPIX = 32 bits per data value NAXIS = 2 number of axes NAXIS1 = 1024 NAXIS2 = 1024 BSCALE = 100000 Scaling factor BZERO = 000000 Scaling zero-point TELESCOP= Keck II Telescope SLITNAME= 0041x226 Slit Name SLITPA = 351979 Slit position angle SLITX = 131500 X pixel of the center of the slit LST = 12010446 local apparent sidereal time (()

Depois do cabeccedilalho haacute uma (ou mais) seccedilatildeo(otildees) de dados binaacuterios Costuma(m) ser array(s) 1D (espectros) 2D (imagens) ou 3D (ldquocubos de dadosrdquo)

De inteiros ou reais inteiros satildeo comuns em contagens de instrumentos reais para valores derivados (fluxos intensidades etc)

6989

Arquivos - binaacuterios - FITSNormalmente FITS satildeo lidos escritos por bibliotecas prontas de (relativamente) alto niacutevel usuaacuterio natildeo tem que saber como os dados satildeo armazenados no arquivo nem como os ler escrever Ex (IDL com a biblioteca idlastro)

IDLgt fits_info2dspectrumfits2dspectrumfits has 3 extensionsPrimary header 288 recordsNo dataExtension 1 -- SCI Header 144 records IMAGE ( 1201 1201 )Extension 2 -- ERR Header 72 records IMAGE ( 1201 1201 )Extension 3 -- DQ Header 72 records IMAGE ( 1201 1201 )

IDLgt mydata=readfits(2dspectrumfitsexten_no=1myheader) READFITS Reading FITS extension of type IMAGE READFITS Now reading 1201 by 1201 array

IDLgt extastmyheadermyastIDLgt sz=size(mydatadimensions)IDLgt xy2ad[1sz[0]][1sz[1]]myastcorners_acorners_dIDLgt printcorners_aCorners of the data array from file 2dspectrumfits are at 14487480 33063480

IDLgt printcorners_d -00041264444 00041402222

Obteacutem os dados de coordenadas (WCS) do header

Coloca os dados no array (2D de floats) mydata e o header no array (1D de strings) myheader

Calcula as coordenadas das quinas da imagem atraveacutes do WCS

Provecirc informaccedilotildees sobre o arquivo

7089

Arquivos - binaacuterios - ISIS Cube

Formatos como FITS se adequam muito a ter uma interface de mais alto niacutevel por objetos

Tambeacutem para dados em tabelas FITS muito mais trabalhosos de ler em baixo niacutevel que se adequam muito mais a mapas ou estruturas

Exemplo (de um formato semelhante a FITS ISIS cube)

O objeto ao ser criado lecirc todo o arquivo

cube=pp_editablecube(CM_1553510065_1_ircub)

Meacutetodos fornecem os dados desejados para obter quando necessaacuterio os dados de interesse

Find out the names of the backplanesprintcubegetproperty(backnames)Get the start time of the cubeprintcubegetfromheader(START_TIME)2007-084T100057286Z

Valores no cabeccedilalho podem ser convenientemente fornecidos como um mapa

header=cubeheader_as_hash()printheader[START_TIME]2007-084T100057286Z

7189

Arquivos - binaacuterios ndash ISIS Cube

Os dados satildeo fornecidos como arraysMake a contour plot of the latitudesc=contour(cubegetsuffixbyname(LATITUDE))Get the band with wavelength nearest to 21 (in the units used in the cube)selband=cubegetbandbywavelength(21wavelengths=selwavs)

Interfaces por overload tornam o acesso ainda mais conveniente

selband=cube[21]

selwavs=cube[21]

Retorna um array com a banda de comprimento de onda mais proacuteximo de 21 (microm)

Retorna o comprimento de onda mais proacuteximo de 21 (microm) da banda retornada acima

7289

Arquivos - binaacuterios ndash ISIS Cube Alteraccedilotildees feitas ao conteuacutedo satildeo automaticamente refletidas em todos os

lugares (cabeccedilalho em particular) afetados mantendo o objeto vaacutelido que pode depois ser gravado em um novo arquivo

IDLgt printcubelinescubesamplescubebands 64 64 256

IDLgt helpcubecoreltExpressiongt FLOAT = Array[64 64 256]

IDLgt cubecore=dblarr(100100256)

A linha acima natildeo eacute uma atribuiccedilatildeo eacute uma invocaccedilatildeo de meacutetodo Eacute equivalente acubesetpropertycore=dblarr(100100256)

Eacute o trabalho da funccedilatildeo setproperty decidir se a propriedade passada (core) faz sentido e se fizer fazer todo o trabalho necessaacuterio a esta mudanccedila Para o usuaacuterio eacute tudo automaacutetico e os dados da classe satildeo vaacutelidos o tempo todo

IDLgt helpcubecoreltExpressiongt DOUBLE = Array[100 100 256]

IDLgt printcubelinescubesamplescubebands 100 100 256

IDLgt cubesaveCM_1553510065_1_ir_editedcub

7389

Arquivos - binaacuterios ndash NetCDF e HDF5

Network Common Data Form e Hierarchical Data Format

Os dois uacutenicos formatos bem estabelecidos para dados cientiacuteficos geneacutericos

Armazenam dados como vaacuterias variaacuteveis e seus metadados Para cada variaacutevel haacute (ou pode haver) os metadados

Nome Dimensotildees (do array) Unidades Comentaacuterios

Ambos permitem arrays multidimensionais

Apenas HDF5 permite estruturas (daiacute vem a hierarquia)

Autodocumentados qualquer software que saiba ler um destes formatos lecirc qualquer arquivo sem precisar de conhecimento preacutevio sobre como o arquivo foi gerado

Muito bem suportados em bibliotecas padratildeo e natildeo padratildeo em softwares interativos e visualizadores (inclusive plugins para navegadores)

httpwwwunidataucaredusoftwarenetcdf httpenwikipediaorgwikiHdf5

NetCDF eacute mais simples de usar por natildeo ter hierarquia dando menos trabalho para ler e escrever dados Se hierarquia natildeo eacute necessaacuteria eacute mais conveniente de usar que HDF5

7489

Arquivos - binaacuterios - NetCDF e HDF5Haacute tambeacutem o formato CDL uma versatildeo ASCII do NetCDF A biblioteca padratildeo do NetCDF inclui conversores entre estes formatos

$ ncdump -h refspec_g01_0ncnetcdf refspec_g01_0 dimensions nlay = 51 nwn = 400 nleg = 33 numu = 2 nlev = 52 nphi = 3 ngas = 2 nwnc = 1 scal = 1 v3 = 3 dnl = 1 nk = 1 tdisr = UNLIMITED (0 currently) na = 16

variables float alb(nwn) float z(nlay) float t(nlay) float p(nlay) float wl(nwn) float iof(nwn) float mtau(nwn) float htau(nwn) float hctaus(nwn) float gtau(nwn) float outcos(scal) float phi(nleg) float phic(scal) float umu(numu) float flux(v3 nwn nlev) float mix(nlay ngas) float c(nlay) float psat(nlay) float ga(nwnc) float wlc(nwnc) float inc(scal) int dm(scal) int ord(scal) float fbeam(scal) float wn(nwn) float tautot(nwn nlay) float htaus(nwn nlay) float htaux(nwn nlay) float taug(nwn nlay) float phase(nwn nlay nleg) float ssa(nwn nlay) float uu(nwn nphi nlev numu) float u0u(nwn nlev numu) float tray(nwn nlay) float gtauo(tdisr nwn nlay)

Haacute 14 variaacuteveis usadas como dimensotildees para as 35 variaacuteveis que satildeo arrays

Ex alb(nwn) indica que alb eacute um array 1D de nwn elementos

nwn estaacute armazenado como uma das dimensotildees e eacute 400 portanto alb tem 400 elementos

Parte do conteuacutedo de um arquivo NetCDF em formato CDL (gerado pelo programa ncdump)

7589

Arquivos - binaacuterios - NetCDF e HDF5Conteuacutedo daquele arquivo visualizado com o ncview (acompanha a biblioteca NetCDF padratildeo)

7689

Arquivos - binaacuterios - NetCDF e HDF5O conteuacutedo de todo o arquivo pode ser lido facilmente com as bibliotecas disponiacuteveis e armazenado em contecirciners convenientes Usando um objeto que gera um resultado um pouco mais conveniente

IDLgt h=pp_readncdf(refspec_g01_0nchash)IDLgt printhvar_dims ltObjHeapVar229(HASH)gtvars ltObjHeapVar152(HASH)gtdims ltObjHeapVar118(HASH)gt

IDLgt printh[vars]T 173203 175459 175848 176001 175975 Z 431869 418858 406067 393403 380464 FLUX 300660 145536 0705180 0341669 0165532 PHASE 100000 0779034 0660858 0542052 0449983 TAUTOT0694377 0693420 0693474 0693540 0693636()

IDLgt help(h[vars])[TAUTOT]ltExpressiongt FLOAT = Array[51 400]

IDLgt print(h[var_dims])[TAUTOT]NLAY NWN

IDLgt print(h[dims])[(h[var_dims])[TAUTOT]]NLAY 51NWN 400

7789

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5)

Visualizaccedilatildeo da variaacutevel selecionada

Metadados e alguns valores da variaacutevel selecionada

Variaacutevel a ser criada com o conteuacutedo desta variaacutevel do arquivo

Hierarquia das variaacuteveis do arquivo

7889

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5) Imported variable az

IDLgt helpaz Structure ltd5723f38gt 13 tags length=448 data length=444 refs=1 _NAME STRING az _ICONTYPE STRING binary _TYPE STRING DATASET _FILE STRING INTENSI_test_409OUTh5 _PATH STRING _DATA DOUBLE Array[38] _NDIMENSIONS LONG 1 _DIMENSIONS ULONG64 Array[1] _NELEMENTS ULONG64 38 _DATATYPE STRING H5T_FLOAT _STORAGESIZE ULONG 8 _PRECISION LONG 64 _SIGN STRING

IDLgt printaz_data 00000000 10000000 20000000 30000000 40000000 50000000 60000000 80000000 ()

7989

Arquivos - binaacuterios - imagens

JPEG JPEG200 TIFF GeoTIFF etc

Os formatos comuns de imagens satildeo bem suportados em muacuteltiplas plataformas para uso dentro de programas e interativamente

Alguns formatos tecircm opccedilatildeo de compressatildeo com perda eou sem perda

Armazenam imagens como arrays 2D ou 3D (3D frequumlentemente limitado a 3 ou 4 em uma das dimensotildees uma imagem em 3 ou 4 bandas) de inteiros ou (em alguns formatos) reais

Alguns formatos permitem armazenar metadados para caracterizar as imagens armazenadas

JPEG2000 e GeoTIFF (um subconjunto de TIFF) comuns em astronomia e aacutereas proacuteximas

8089

Arquivos - binaacuterios ndash imagens ndash exemplo (IDL)IDLgt printquery_tiff(issmap_2009tiffinfogeotiff=geo) 1

IDLgt helpinfo Structure ltd4eca4b8gt 18 tags length=144 data length=132 refs=1 CHANNELS LONG 4 DIMENSIONS LONG Array[2] IMAGE_INDEX LONG 0 NUM_IMAGES LONG 1 PIXEL_TYPE INT 1 TYPE STRING TIFF BITS_PER_SAMPLE LONG 8 POSITION FLOAT Array[2] RESOLUTION FLOAT Array[2] UNITS LONG 2 TILE_SIZE LONG Array[2] DESCRIPTION STRING ISS (2009) DATE_TIME STRING 20100218 012436()

IDLgt helpgeo Structure ltd4efa1b8gt 10 tags length=264 data length=262 refs=1 MODELPIXELSCALETAG DOUBLE Array[3] MODELTIEPOINTTAG DOUBLE Array[6 4] GEOGRAPHICTYPEGEOKEY INT 4035 GEOGSEMIMAJORAXISGEOKEY DOUBLE 25750000 GEOGSEMIMINORAXISGEOKEY DOUBLE 25750000()

IDLgt myimage=read_tiff(issmap_2009tiff) Lecirc a imagem para o array myimage

Obteacutem informaccedilotildees sobre o arquivo

8189

Arquivos - binaacuterios ndash formatos nativosLinguagens como IDL R Python Java tecircm seu formato nativo binaacuterio acessado em alto niacutevel Basta mandar salvar ler variaacuteveis no do arquivo a biblioteca padratildeo automagicamente faz todo o trabalho de decidir como gravar ler os dados

Conveniente de usar na proacutepria linguagem Mas raramente existem bibliotecas para ler gravar o formato nativo de uma linguagem a partir de outra Ex (IDL)

IDLgt savefile=2dspectrumsavmydatamyheadercorners_dcorners_averbosecompress SAVE Portable (XDR) compressed SAVERESTORE file SAVE Saved variable MYDATA SAVE Saved variable MYHEADER()

Pode ser lido com apenas (haacute formas mais elaboradas)

IDLgt restore2dspectrumsavverbose RESTORE Portable (XDR) compressed SAVERESTORE file RESTORE Save file written by ltunknowngtltunknowngt Thu Jan 27 191422 2011 RESTORE IDL version 801 (linux x86_64) RESTORE Restored variable MYDATA RESTORE Restored variable MYHEADER()

IDLgt helpmydatamyheadercorners_dcorners_aMYDATA FLOAT = Array[1201 1201]MYHEADER STRING = Array[144]()

8289

Arquivos - processamento em baixo niacutevel

Nem sempre um formato padratildeo eacute a melhor escolha para o problema

Nem sempre haacute escolha (pode-se ter que trabalhar com arquivos que jaacute foram escritos em algum formato proprietaacuterio)

Agraves vezes o formato eacute padratildeo mas natildeo haacute bom suporte a ele disponiacutevel

Em todos estes casos eacute necessaacuterio escrever rotinas em baixo niacutevel que vatildeo ler processar diretamente o conteuacutedo do arquivo

Preferencialmente criando interfaces de alto niacutevel para o programa que vai as usar

8389

Arquivos - processamento em baixo niacutevel - texto

Tomando o exemplo anterior onde as colunas eram de diferentes tipos

NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS dec18s0001 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0002 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0003 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 FLAT 5408757812500 460000 5 dec18s0004 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 DARK 5408757812500 460000 5

A forma mais simples de o ler diretamente eacute definir uma estrutura para receber cada linha e um array destas estruturas para receber todo o arquivo Ex (IDL)

IDLgt record=namecalmpos0filnameechlpos0d0disppos0d0targnameposdirclassmjd_obsitime0d0coadds0IDLgt nlines=file_lines(filesearch_scamtxt)IDLgt mydata=replicate(recordnlines-1)IDLgt header=

Depois de definidas as variaacuteveis que vatildeo receber os dados o arquivo pode ser lido

IDLgt openrunitfilesearch_scamtxtget_lunIDLgt readfunitheaderIDLgt readfunitmydataformat=(A14I8A15F104F104A18A19A15F158F105I15)IDLgt free_lununit

A gravaccedilatildeo de um arquivo texto poderia ser feita de forma semelhante apenas trocando openr por openw (abrir o arquivo para gravaccedilatildeo natildeo leitura) e readf por printf

O arquivo eacute aberto em uma unidade (unit) usada para especificar de onde eacute feita a leitura

Ao final o arquivo eacute fechado

8489

Arquivos - processamento em baixo niacutevel - texto

O que resulta em

IDLgt printheader NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS

IDLgt helpmydataMYDATA STRUCT = -gt ltAnonymousgt Array[4]

IDLgt helpmydata[0] Structure ltd5e38f68gt 11 tags length=136 data length=124 refs=3 NAME STRING dec18s0001 CALMPOS INT 0 FILNAME STRING NIRSPEC-5-AO ECHLPOS DOUBLE 62630000 DISPPOS DOUBLE 36450000 TARGNAME STRING HD85258 POSDIR STRING NIRSPEC-5-AOp1 CLASS STRING STAR MJD_OBS STRING 54087574 ITIME DOUBLE 10000000 COADDS INT 1

Este caso eacute mais complicado que os mais comuns por haver colunas de strings

Se todas fossem de nuacutemeros natildeo teria sido necessaacuterio especificar o formato explicitamente As colunas teriam sido adivinhadas pela biblioteca que lecirc o arquivo Poderia ter sido lido escrito soacute com um array de nuacutemeros sem estruturas

8589

Arquivos - processamento em baixo niacutevel - binaacuterio

Formatos binaacuterios podem ser definidos de qualquer forma O arquivo eacute apenas um conjunto de bytes Cabe ao software saber como os interpretar

Uma escolha comum para que sejam autodocumentados eacute incluir um cabeccedilalho de texto informando as caracteriacutesticas dos dados necessaacuterias para os ler

Ex (IDL) criar um arquivo que armazene um array de doubles com um cabeccedilalho informando as dimensotildees para que o programa que o lecirc saiba como ler os dados

Inventa dados e abre o arquivo

IDLgt data_to_write=dindgen(34)IDLgt openwunitbinary_exampledatget_lun

Escreve as dimensotildees como texto

IDLgt printfunitdimensions of the double array stored belowIDLgt printfunitsize(data_to_writedimensions)

Escreve os dados binaacuterios

IDLgt writeuunitdata_to_write

Fecha o arquivo

IDLgt free_lununit

Escreve em binaacuterio (write unformatted)

8689

Arquivos - processamento em baixo niacutevel - binaacuterio

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

dimensions of the double array stored below 3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

8789

Arquivos - processamento em baixo niacutevel - binaacuterioA leitura deste arquivo eacute igualmente simples

IDLgt header=IDLgt dims=[00]IDLgt openrunitbinary_exampledatget_lun

Lecirc as dimensotildees (armazenadas como texto)

IDLgt readfunitheaderIDLgt readfunitdims

Lecirc a parte binaacuteria depois de saber as dimensotildees

IDLgt data_read=dblarr(dims)IDLgt readuunitdata_read

Fecha o arquivo

IDLgt free_lununit

Verifica que os dados foram gravados e lidos corretamente

IDLgt printarray_equal(data_to_writedata_read) 1

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Lecirc dados binaacuterios (read unformatted)

8889

Sumaacuterio

5 ndash Slides em httpwwwppenteadonetpeapea04_strings_iopdf Strings Expressotildees regulares Arquivos

httpwwwppenteadonetpea

8989

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89

Arquivos - texto X binaacuterios

Vantagens de arquivos texto

Legiacuteveis por pessoas (human readable)

Podem ser auto-suficientes todo o necessaacuterio para os ler e entender o que conteacutem pode ser obtido olhando o arquivo

Satildeo os menos especiacuteficos a linguagens software normalmente satildeo escritos em ASCII ou Unicode e sempre haacute algum suporte a ler escrever texto em linguagens software

Haacute alguns formatos padratildeo para texto (exs CSV XML) que satildeo suportados em muitas plataformas diferentes

5289

Arquivos - texto X binaacuterios

Vantagens de arquivos binaacuterios

Em geral natildeo haacute conversotildees entre o os dados como armazenados na memoacuteria O que torna o armazenamento mais eficiente e sem alteraccedilotildees nos valores

A maior parte dos formatos padronizados eacute binaacuteria Exs FITS cube CDF NetCDF HDF HDF5 JPEG JPEG2000 TIFF GeoTIFF MPEG etc

Eacute mais comum que haja bibliotecas prontas (ateacute de alto niacutevel) para consulta leitura e gravaccedilatildeo

Os formatos melhor desenhados satildeo autodocumentados (em texto ou binaacuterio) para os ler natildeo eacute necessaacuterio conhecimento preacutevio sobre como os dados foram armazenados

Toda linguagem plataforma costuma ter seu formato binaacuterio mais nativo que costuma ser o mais faacutecil para leitura gravaccedilatildeo Em particular nas de alto niacutevel que tecircm formatos autodocumentados (especialmente

em IDL R Python Java)

Muitos formatos tecircm opccedilatildeo de compressatildeo dos dados

5389

Arquivos - proprietaacuterios X padratildeo

Independente da escolha texto binaacuterio programas devem escolher entre usar um formato proacuteprio ou um formato padronizado

A principal vantagem de formatos proacuteprios eacute que satildeo definidos da forma mais conveniente para a aplicaccedilatildeo que os usa simplificando leitura e gravaccedilatildeo e potencialmente otimizando recursos (acesso ao disco tamanho do arquivo etc)

A principal desvantagem de formatos proacuteprios eacute ser necessaacuterio escrever todo o coacutedigo para os ler gravar

Pode dar mais trabalho que usar um formato geneacuterico que natildeo seja exatamente o que melhor se encaixa na aplicaccedilatildeo

O coacutedigo para processar o formato em geral vai ser menos completo e conveniente de usar que o de um formato bem estabelecido usado por muitos outros em muitos ambientes

Cada novo software que for usar estes arquivos vai precisar compartilhar do mesmo coacutedigo ou precisar de coacutedigo novo (em particular se em outra linguagem) para ler gravar naquele formato

Eacute necessaacuterio documentar o formato e decidir sobre como ele seraacute definido

Se outros jaacute colocaram muito trabalho desenvolvendo bons formatos padratildeo bem suportados em muitos ambientes por que ter o trabalho de reinventar (e reprogramar redocumentar e retestar) a roda

5489

Arquivos - padrotildees comuns em astronomia (exs adiante)

Texto

CSV Comma-separated values - bem suportado por muitos softwares

ldquoColunas fixasrdquo Natildeo eacute um padratildeo bem definido mas eacute praacutetica comum para tabelas (2D)

XML Extensible Markup Language - O padratildeo texto mais flexiacutevel de grande uso em programaccedilatildeo geral para armazenar qualquer coisa com frequumlecircncia de forma hieraacuterquica Bem suportado por linguagens modernas (e modernizadas) e bibliotecas das principais

linguagens gerais Alta complexidade o torna trabalhoso de usar

5589

Arquivos - padrotildees comuns em astronomia (exs adiante)Binaacuterios

FITS Flexible Image Transport System - o mais comum para observaccedilotildees astronocircmicas Conteacutem os dados (em geral arrays 1D 2D ou 3D) e documentaccedilatildeo (nos cabeccedilalhos) sobre a origem e caracteriacutesticas dos dados Tambeacutem usado para armazenar tabelas de dados quaisquer mesmo que natildeo sejam observaccedilotildees (especialmente pelo STSCI) Variam muito em qualidade de documentaccedilatildeo

NetCDF Network Common Data Form - evoluccedilatildeo do CDF autodocumentado eacute comum e bem suportado para vaacuterios arrays de dados

HDF5 Hierarchical Data Format ndash autodocumentado comum e bem suportado permitindo aleacutem de simples arrays estruturas (eacute um formato hieraacuterquico)

Formatos de imagens JPEG JPEG2000 TIFF GeoTIFF etc - voltados para arrays 2D3D de inteiros ou (em alguns casos) reais com ou sem compressatildeo JPEG2000 tem caracteriacutesticas mais avanccediladas como imagens multiresoluccedilatildeo

Formatos vetoriais PS EPS DXF SHP SVG - variados niacuteveis de suporte a armazenamento de vetores e formas em 2D ou 3D

ISIS Cube semelhante em caracteriacutesticas ao FITS mais usado em sensoriamento remoto geociecircncias e ciecircncias planetaacuterias em geral para observaccedilotildees 1D 2D ou 3D

Formatos nativos de linguagens todo o trabalho de leitura e gravaccedilatildeo eacute feito automagicamente pela biblioteca padratildeo em IDL R Python Java

5689

Arquivos texto - newlines

Apesar do que possa parecer arquivos texto natildeo tecircm intrinsecamente vaacuterias linhas Arquivos texto satildeo soacute uma sequumlecircncia 1D de caracteres em alguma codificaccedilatildeo Separaccedilatildeo em linhas (equivalente a interpretar o arquivo como 2D em linhas e colunas) eacute

especificada por convenccedilotildees Natildeo haacute apenas uma convenccedilatildeo para o fim de linhas

A mais primitiva convenccedilatildeo eacute separaccedilatildeo nenhuma estipula-se que linhas tenham um nuacutemero fixo N de caracteres e cabe ao software que lecirc o arquivo entender que uma linha nova ocorre regularmente a cada N caracteres

Eacute a forma menos portaacutevel e mais inconveniente eacute necessaacuterio o conhecimento preacutevio (ou por inspeccedilatildeo do arquivo) de quantos caracteres haacute por linha

A maior parte dos editores de texto natildeo vai saber separar linhas desta forma (por falta deste conhecimento preacutevio) Exemplo (de um FITS real)

SIMPLE = T Fits standard BITPIX = 16 Bits per pixel NAXIS = 0 Number of axes EXTEND = T File may contain extensions

O que com as linhas quebradas nos lugares certos seria

SIMPLE = T Fits standard BITPIX = 16 Bits per pixel NAXIS = 0 Number of axes EXTEND = T File may contain extensions

5789

Arquivos texto - newlines

A forma mais comum de especificar linhas eacute com um marcador do final de linha (newline)

Eacute um caractere especial natildeo normalmente presente no texto que serve para marcar fim de linhas

Mas natildeo haacute soacute um padratildeo de newline Os mais comuns

LF (Line Feed ASCII 10) ndash Unix Linux Mac OS X

CR - (Carriage Return ASCII 13) - Mac OS lt10

CR+LF (CR seguido de LF) - Windows DOS

Eacute o motivo de o Notepad (Windows) natildeo entender as quebras de linha de arquivos escritos com o formato nativo de Linux o arquivo soacute tem LF enquanto o editor espera CR+LF

Alguns sistemas (strings em vaacuterias linguagens por exemplo) usam o coacutedigo de escape n para indicar newline que eacute codificado de acordo com o padratildeo sendo usado

Em geral bibliotecas de leitura e gravaccedilatildeo de arquivos usam (default pelo menos) o newline nativo do sistema em que satildeo usadas

Programas de conversatildeo entre os sistemas satildeo comuns (ex dos2unix)

O Wordpad identifica se for usado soacute LF e quebra as linhas de acordo

5889

Arquivos - texto - CSV

Comma-separated values

O formato mais padronizado para tabelas (arrays 2D) em texto (frequentemente mas natildeo necessariamente ASCII)

Bem suportado por bibliotecas padratildeo de linguagens e outros softwares (Excel Calc Origin Google Docs etc)

Conteacutem Linhas de cabeccedilalho (opcionais mas recomendadas) linhas com qualquer texto geral

descrevendo o arquivo e em geral uma linha de tiacutetulo para as colunas da tabela Uma (apenas uma) tabela onde todas as linhas tecircm o mesmo nuacutemero de colunas

Colunas separadas por viacutergulas (opcionalmente pode ser outro separador) Linhas terminadas por newline (qualquer que seja) Strings delimitados por ldquo ldquo

Ex

NAMECALMPOSFILNAMEECHLPOSDISPPOSTARGNAMEPOSDIRCLASSMJD-OBSITIMECOADDSdec18s00010NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001dec18s00020NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001dec18s00120NIRSPEC-5-AO635800364500itan140NIRSPEC-5-AOp2 TITAN5408763000001dec18s00140NIRSPEC-5-AO626300364500itan140NIRSPEC-5-AOp1 TITAN5408763000001dec18s00151NIRSPEC-5-AO626300364500itan140NIRSPEC-5-AOp1ARC5408764000001dec18s00160NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001

Natildeo eacute necessaacuterio que as colunas tenham largura constante

Cabeccedilalho

5989

Arquivos - texto - CSVHaacute amplo suporte a leitura e gravaccedilatildeo de CSV sem precisar recorrer a procedimentos de baixo niacutevel

Podem ser diretamente importados em Excel Calc Origin Google Docs ou lido facilmente com bibliotecas padratildeo comuns Ex (IDL)

IDLgt c=read_csv(filesearch_scamcsvheader=h)IDLgt printhNAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS

IDLgt helpc Structure ltc8bca508gt 11 tags length=5256 data length=5248 refs=1 FIELD01 STRING Array[41] FIELD02 LONG Array[41] FIELD03 STRING Array[41] FIELD04 DOUBLE Array[41] FIELD05 DOUBLE Array[41] FIELD06 STRING Array[41] FIELD07 STRING Array[41] FIELD08 STRING Array[41] FIELD09 STRING Array[41] FIELD10 DOUBLE Array[41] FIELD11 LONG Array[41]

IDLgt printcfield01[03]dec18s0001 dec18s0002 dec18s0003 dec18s0004

IDLgt printcfield03[03]NIRSPEC-5-AO NIRSPEC-5-AO NIRSPEC-5-AO NIRSPEC-5-AO

6089

Arquivos - texto - CSVEx (IDL) Criaccedilatildeo de um CSV com uma tabela de valores

Criaccedilatildeo de 3 arrays 1D (12 elementos) um para cada coluna

IDLgt x=dindgen(3)IDLgt y=dindgen(4)IDLgt xx=reform(rebin(x34)12)IDLgt yy=reform(rebin(reform(y14)34)12)IDLgt f=xx+yy10IDLgt helpxxyyfXX DOUBLE = Array[12]YY DOUBLE = Array[12]F DOUBLE = Array[12]

Escrita do arquivo

IDLgt write_csvexamplecsvxxyyfheader=[XYX+10Y]

ResultadoXYX+10Y000000000000000000000000100000000000000010000000200000000000000020000000000000001000000010000000100000001000000011000000()

6189

Arquivos - texto - ldquoColunas regularesrdquoFixed column width

Natildeo eacute exatamente um padratildeo Eacute uma praacutetica comum

Armazena uma tabela (array 2D) de forma regular simples de ser interpretada e lida

Costumam ter linha(s) de cabeccedilalho descrevendo o conteuacutedo do arquivo em geral com uma linha para os nomes das colunas

As demais linhas conteacutem os dados sempre ocupando a mesma largura por coluna e escritos no mesmo formato em cada coluna

Costumam ser simples de ler inclusive interativamente (exs Excel Calc Origin read_ascii)

Ex (IDL) Uma simples tabela soacute de nuacutemeros

wavl CH4=33 wavl CH4=25 wavl CH4=10 wavl CH4=08 wavl CH4=05 wavl CH4=026 wavl CH4=02 477330000 0090130 477330000 0091110 477330000 0089250 477330000 0087000 477330000 0087140 477330000 0090080 477330000 0088110 480040000 0090930 480040000 0091930 480040000 0090160 480040000 0087930 480040000 0088110 480040000 0090950 480040000 0089090 482750000 0091710 482750000 0092730 482750000 0091060 482750000 0088850 482750000 0089080 482750000 0091810 482750000 0090060 485450000 0092530 485450000 0093570 485450000 0092000 485450000 0089810 485450000 0090100 485450000 0092730 485450000 0091090

IDLgt a=read_ascii(specs_27s_ntxtdata_start=1header=header)IDLgt printheader wavl CH4=33 wavl CH4=25 wavl CH4=10 wavl CH4=08 wavl CH4=05 wavl CH4=026 wavl CH4=02 IDLgt helpa Structure ltd423c9a8gt 1 tags length=224 data length=224 refs=1 FIELD01 FLOAT Array[14 4]

6289

Arquivos - texto - ldquoColunas regularesrdquoJaacute um arquivo um pouco mais difiacutecil de ler

NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS dec18s0001 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0002 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0003 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 FLAT 5408757812500 460000 5 dec18s0004 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 DARK 5408757812500 460000 5

Por ter colunas de tipos diferentes (strings inteiros reais) natildeo eacute possiacutevel o ler em um simples array Mas eacute faacutecil o colocar em uma estrutura de arrays onde cada campo eacute uma coluna

Especificando interativamente como interpretar as linhasIDLgt templ=ascii_template(filesearch_scamtxt)

Nome do campo (default mostrado)

Tipo do campo (identificado automaticamente)

Posiccedilatildeo (caracter) do comeccedilo (identificada automaticamente)

Linha de exemplo para verificar as colunas

6389

Arquivos - texto - ldquoColunas regularesrdquoDepois de feito o template o arquivo pode ser lido com apenas

IDLgt a=read_ascii(filesearch_scamtxttemplate=templ)IDLgt helpa Structure ltd4ec4608gt 11 tags length=416 data length=416 refs=1 FIELD01 STRING Array[4] FIELD02 LONG Array[4] FIELD03 STRING Array[4] FIELD04 FLOAT Array[4] FIELD05 FLOAT Array[4] FIELD06 STRING Array[4] FIELD07 STRING Array[4] FIELD08 STRING Array[4] FIELD09 FLOAT Array[4] FIELD10 FLOAT Array[4] FIELD11 LONG Array[4]IDLgt printafield01dec18s0001 dec18s0002 dec18s0003 dec18s0004IDLgt printafield04 626300 626300 626300 626300

O template (uma estrutura contendo dados sobre como ler o arquivo) pode ser usado para outros arquivos no mesmo formato No lugar de ter sido criado interativamente poderia ter sido lido de algum arquivo Poderia ter especificado nomes para os campos que seriam mais amigaacuteveis que coias como FIELD11

6489

Arquivos - texto - XML

Extensible Markup Language

Admite grande flexibilidade e por isso pode ter alta complexidade

Valores satildeo colocados dentro de uma estrutura em hieraacuterquica (em uma aacutervore) com os noacutes identificados pelos seus nomes (chaves)

Largamente usado em muitas aacutereas para armazenar conjuntos arbitraacuterios de quaisquer estruturas de dados

A maioria das aplicaccedilotildees usa um formato que eacute um subconjunto do XML especificado por um Schema comumente em um arquivo XML DTD (Document Type Definition)

6589

Arquivos - texto ndash XML ndash exemplos de usos

Armazenamento de dados de aplicaccedilotildees web (comum para exportar importar dados MediaWiki DokuWiki WordPress ADS Lattes etc)

Documentos Office (docx pptx xlsx) OpenOffice (odt opd ods)

Como versotildees de outros formatos FITSML XDF

ldquoScientific Dataset XML NASAs Astronomical Data Center (ADC) sponsors a number of research projects that

use XML for scientific data representation The XML activities at the ADC are sponsored and supported by the NASA Office of Space Science Applied Information Systems Research Program (AISRP)rdquo - httpxmlcoverpagesorgnasa-adchtml

Astronomical Instrument Markup Language (AIML)

SVG ndash Scalable Vector Graphics

Muitas de outras aplicaccedilotildees listadas em httpxmlcoverpagesorgxmlhtmlapplications

6689

Arquivos - texto ndash XML - exemploltxml version=10 gtltDOCTYPE Xdmf SYSTEM Xdmfdtd []gtltXdmf xmlnsxi=httpwwww3org2001XInclude Version=20gt ltDomaingt lt-- Example of Basic Topologies --gt ltInformation Name=Descriptiongt Example of a Polyvertex Topology ltInformationgt ltGrid Name=Polyvertex GridType=Uniformgt ltTopology TopologyType=Polyvertex Dimensions=3 NodesPerElement=3gt ltDataItem Format=XML Dimensions=3 3 NumberType=Floatgt 0 1 2 4 5 6 8 9 10 ltDataItemgt ltTopologygt ltGeometry Type=XYZgt ltDataItem Format=XML Dimensions=4 4 3gt 00 00 00 10 00 00()Que mostra que a interpretaccedilatildeo (parsing) de XML eacute em geral complexa

6789

Arquivos - texto - XML

Haacute muitas bibliotecas de alto niacutevel para fazer o processamento (parsing) e entregar os dados em uma estrutura conveniente

A complexidade em processar XML estaacute em decidir o que fazer com os dados jaacute que os arquivos podem ser muito complexos

As APIs (Application Programming Interfaces) mais comuns para processar XML que satildeo implementadas em muitas linguagens

DOM (Document Object Model) ndash manteacutem todo o conteuacutedo do em uma estrutura de dados (em geral uma aacutervore) em uma variaacutevel (em geral um objeto) Esta pode ser consultada para obter os valores de interesse para os alterar e usada para escrever um arquivo

SAX (Simple API for XML) ndash Interpretador (parser) por objetos O usuaacuterio escreve uma classe herdando da classe SAX provendo os meacutetodos que vatildeo processar os campos agrave medida em que estes satildeo lidos

6889

Arquivos - binaacuterios - FITSFlexible Image Transport System

O formato mais comum para observaccedilotildees astronocircmicas Tambeacutem usado para armazenar quaisquer dados mesmo natildeo relacionados a observaccedilotildees (especialmente tabelas como eacute praacutetica do STSCI)

Conteacutem um (ou mais) cabeccedilalho(s) de texto com metadados (informaccedilotildees sobre os dados como caracteriacutesticas (necessaacuterias para os ler) origem condiccedilotildees em que foram obtidos processamento realizado etc)

SIMPLE = T image conforms to FITS standard BITPIX = 32 bits per data value NAXIS = 2 number of axes NAXIS1 = 1024 NAXIS2 = 1024 BSCALE = 100000 Scaling factor BZERO = 000000 Scaling zero-point TELESCOP= Keck II Telescope SLITNAME= 0041x226 Slit Name SLITPA = 351979 Slit position angle SLITX = 131500 X pixel of the center of the slit LST = 12010446 local apparent sidereal time (()

Depois do cabeccedilalho haacute uma (ou mais) seccedilatildeo(otildees) de dados binaacuterios Costuma(m) ser array(s) 1D (espectros) 2D (imagens) ou 3D (ldquocubos de dadosrdquo)

De inteiros ou reais inteiros satildeo comuns em contagens de instrumentos reais para valores derivados (fluxos intensidades etc)

6989

Arquivos - binaacuterios - FITSNormalmente FITS satildeo lidos escritos por bibliotecas prontas de (relativamente) alto niacutevel usuaacuterio natildeo tem que saber como os dados satildeo armazenados no arquivo nem como os ler escrever Ex (IDL com a biblioteca idlastro)

IDLgt fits_info2dspectrumfits2dspectrumfits has 3 extensionsPrimary header 288 recordsNo dataExtension 1 -- SCI Header 144 records IMAGE ( 1201 1201 )Extension 2 -- ERR Header 72 records IMAGE ( 1201 1201 )Extension 3 -- DQ Header 72 records IMAGE ( 1201 1201 )

IDLgt mydata=readfits(2dspectrumfitsexten_no=1myheader) READFITS Reading FITS extension of type IMAGE READFITS Now reading 1201 by 1201 array

IDLgt extastmyheadermyastIDLgt sz=size(mydatadimensions)IDLgt xy2ad[1sz[0]][1sz[1]]myastcorners_acorners_dIDLgt printcorners_aCorners of the data array from file 2dspectrumfits are at 14487480 33063480

IDLgt printcorners_d -00041264444 00041402222

Obteacutem os dados de coordenadas (WCS) do header

Coloca os dados no array (2D de floats) mydata e o header no array (1D de strings) myheader

Calcula as coordenadas das quinas da imagem atraveacutes do WCS

Provecirc informaccedilotildees sobre o arquivo

7089

Arquivos - binaacuterios - ISIS Cube

Formatos como FITS se adequam muito a ter uma interface de mais alto niacutevel por objetos

Tambeacutem para dados em tabelas FITS muito mais trabalhosos de ler em baixo niacutevel que se adequam muito mais a mapas ou estruturas

Exemplo (de um formato semelhante a FITS ISIS cube)

O objeto ao ser criado lecirc todo o arquivo

cube=pp_editablecube(CM_1553510065_1_ircub)

Meacutetodos fornecem os dados desejados para obter quando necessaacuterio os dados de interesse

Find out the names of the backplanesprintcubegetproperty(backnames)Get the start time of the cubeprintcubegetfromheader(START_TIME)2007-084T100057286Z

Valores no cabeccedilalho podem ser convenientemente fornecidos como um mapa

header=cubeheader_as_hash()printheader[START_TIME]2007-084T100057286Z

7189

Arquivos - binaacuterios ndash ISIS Cube

Os dados satildeo fornecidos como arraysMake a contour plot of the latitudesc=contour(cubegetsuffixbyname(LATITUDE))Get the band with wavelength nearest to 21 (in the units used in the cube)selband=cubegetbandbywavelength(21wavelengths=selwavs)

Interfaces por overload tornam o acesso ainda mais conveniente

selband=cube[21]

selwavs=cube[21]

Retorna um array com a banda de comprimento de onda mais proacuteximo de 21 (microm)

Retorna o comprimento de onda mais proacuteximo de 21 (microm) da banda retornada acima

7289

Arquivos - binaacuterios ndash ISIS Cube Alteraccedilotildees feitas ao conteuacutedo satildeo automaticamente refletidas em todos os

lugares (cabeccedilalho em particular) afetados mantendo o objeto vaacutelido que pode depois ser gravado em um novo arquivo

IDLgt printcubelinescubesamplescubebands 64 64 256

IDLgt helpcubecoreltExpressiongt FLOAT = Array[64 64 256]

IDLgt cubecore=dblarr(100100256)

A linha acima natildeo eacute uma atribuiccedilatildeo eacute uma invocaccedilatildeo de meacutetodo Eacute equivalente acubesetpropertycore=dblarr(100100256)

Eacute o trabalho da funccedilatildeo setproperty decidir se a propriedade passada (core) faz sentido e se fizer fazer todo o trabalho necessaacuterio a esta mudanccedila Para o usuaacuterio eacute tudo automaacutetico e os dados da classe satildeo vaacutelidos o tempo todo

IDLgt helpcubecoreltExpressiongt DOUBLE = Array[100 100 256]

IDLgt printcubelinescubesamplescubebands 100 100 256

IDLgt cubesaveCM_1553510065_1_ir_editedcub

7389

Arquivos - binaacuterios ndash NetCDF e HDF5

Network Common Data Form e Hierarchical Data Format

Os dois uacutenicos formatos bem estabelecidos para dados cientiacuteficos geneacutericos

Armazenam dados como vaacuterias variaacuteveis e seus metadados Para cada variaacutevel haacute (ou pode haver) os metadados

Nome Dimensotildees (do array) Unidades Comentaacuterios

Ambos permitem arrays multidimensionais

Apenas HDF5 permite estruturas (daiacute vem a hierarquia)

Autodocumentados qualquer software que saiba ler um destes formatos lecirc qualquer arquivo sem precisar de conhecimento preacutevio sobre como o arquivo foi gerado

Muito bem suportados em bibliotecas padratildeo e natildeo padratildeo em softwares interativos e visualizadores (inclusive plugins para navegadores)

httpwwwunidataucaredusoftwarenetcdf httpenwikipediaorgwikiHdf5

NetCDF eacute mais simples de usar por natildeo ter hierarquia dando menos trabalho para ler e escrever dados Se hierarquia natildeo eacute necessaacuteria eacute mais conveniente de usar que HDF5

7489

Arquivos - binaacuterios - NetCDF e HDF5Haacute tambeacutem o formato CDL uma versatildeo ASCII do NetCDF A biblioteca padratildeo do NetCDF inclui conversores entre estes formatos

$ ncdump -h refspec_g01_0ncnetcdf refspec_g01_0 dimensions nlay = 51 nwn = 400 nleg = 33 numu = 2 nlev = 52 nphi = 3 ngas = 2 nwnc = 1 scal = 1 v3 = 3 dnl = 1 nk = 1 tdisr = UNLIMITED (0 currently) na = 16

variables float alb(nwn) float z(nlay) float t(nlay) float p(nlay) float wl(nwn) float iof(nwn) float mtau(nwn) float htau(nwn) float hctaus(nwn) float gtau(nwn) float outcos(scal) float phi(nleg) float phic(scal) float umu(numu) float flux(v3 nwn nlev) float mix(nlay ngas) float c(nlay) float psat(nlay) float ga(nwnc) float wlc(nwnc) float inc(scal) int dm(scal) int ord(scal) float fbeam(scal) float wn(nwn) float tautot(nwn nlay) float htaus(nwn nlay) float htaux(nwn nlay) float taug(nwn nlay) float phase(nwn nlay nleg) float ssa(nwn nlay) float uu(nwn nphi nlev numu) float u0u(nwn nlev numu) float tray(nwn nlay) float gtauo(tdisr nwn nlay)

Haacute 14 variaacuteveis usadas como dimensotildees para as 35 variaacuteveis que satildeo arrays

Ex alb(nwn) indica que alb eacute um array 1D de nwn elementos

nwn estaacute armazenado como uma das dimensotildees e eacute 400 portanto alb tem 400 elementos

Parte do conteuacutedo de um arquivo NetCDF em formato CDL (gerado pelo programa ncdump)

7589

Arquivos - binaacuterios - NetCDF e HDF5Conteuacutedo daquele arquivo visualizado com o ncview (acompanha a biblioteca NetCDF padratildeo)

7689

Arquivos - binaacuterios - NetCDF e HDF5O conteuacutedo de todo o arquivo pode ser lido facilmente com as bibliotecas disponiacuteveis e armazenado em contecirciners convenientes Usando um objeto que gera um resultado um pouco mais conveniente

IDLgt h=pp_readncdf(refspec_g01_0nchash)IDLgt printhvar_dims ltObjHeapVar229(HASH)gtvars ltObjHeapVar152(HASH)gtdims ltObjHeapVar118(HASH)gt

IDLgt printh[vars]T 173203 175459 175848 176001 175975 Z 431869 418858 406067 393403 380464 FLUX 300660 145536 0705180 0341669 0165532 PHASE 100000 0779034 0660858 0542052 0449983 TAUTOT0694377 0693420 0693474 0693540 0693636()

IDLgt help(h[vars])[TAUTOT]ltExpressiongt FLOAT = Array[51 400]

IDLgt print(h[var_dims])[TAUTOT]NLAY NWN

IDLgt print(h[dims])[(h[var_dims])[TAUTOT]]NLAY 51NWN 400

7789

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5)

Visualizaccedilatildeo da variaacutevel selecionada

Metadados e alguns valores da variaacutevel selecionada

Variaacutevel a ser criada com o conteuacutedo desta variaacutevel do arquivo

Hierarquia das variaacuteveis do arquivo

7889

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5) Imported variable az

IDLgt helpaz Structure ltd5723f38gt 13 tags length=448 data length=444 refs=1 _NAME STRING az _ICONTYPE STRING binary _TYPE STRING DATASET _FILE STRING INTENSI_test_409OUTh5 _PATH STRING _DATA DOUBLE Array[38] _NDIMENSIONS LONG 1 _DIMENSIONS ULONG64 Array[1] _NELEMENTS ULONG64 38 _DATATYPE STRING H5T_FLOAT _STORAGESIZE ULONG 8 _PRECISION LONG 64 _SIGN STRING

IDLgt printaz_data 00000000 10000000 20000000 30000000 40000000 50000000 60000000 80000000 ()

7989

Arquivos - binaacuterios - imagens

JPEG JPEG200 TIFF GeoTIFF etc

Os formatos comuns de imagens satildeo bem suportados em muacuteltiplas plataformas para uso dentro de programas e interativamente

Alguns formatos tecircm opccedilatildeo de compressatildeo com perda eou sem perda

Armazenam imagens como arrays 2D ou 3D (3D frequumlentemente limitado a 3 ou 4 em uma das dimensotildees uma imagem em 3 ou 4 bandas) de inteiros ou (em alguns formatos) reais

Alguns formatos permitem armazenar metadados para caracterizar as imagens armazenadas

JPEG2000 e GeoTIFF (um subconjunto de TIFF) comuns em astronomia e aacutereas proacuteximas

8089

Arquivos - binaacuterios ndash imagens ndash exemplo (IDL)IDLgt printquery_tiff(issmap_2009tiffinfogeotiff=geo) 1

IDLgt helpinfo Structure ltd4eca4b8gt 18 tags length=144 data length=132 refs=1 CHANNELS LONG 4 DIMENSIONS LONG Array[2] IMAGE_INDEX LONG 0 NUM_IMAGES LONG 1 PIXEL_TYPE INT 1 TYPE STRING TIFF BITS_PER_SAMPLE LONG 8 POSITION FLOAT Array[2] RESOLUTION FLOAT Array[2] UNITS LONG 2 TILE_SIZE LONG Array[2] DESCRIPTION STRING ISS (2009) DATE_TIME STRING 20100218 012436()

IDLgt helpgeo Structure ltd4efa1b8gt 10 tags length=264 data length=262 refs=1 MODELPIXELSCALETAG DOUBLE Array[3] MODELTIEPOINTTAG DOUBLE Array[6 4] GEOGRAPHICTYPEGEOKEY INT 4035 GEOGSEMIMAJORAXISGEOKEY DOUBLE 25750000 GEOGSEMIMINORAXISGEOKEY DOUBLE 25750000()

IDLgt myimage=read_tiff(issmap_2009tiff) Lecirc a imagem para o array myimage

Obteacutem informaccedilotildees sobre o arquivo

8189

Arquivos - binaacuterios ndash formatos nativosLinguagens como IDL R Python Java tecircm seu formato nativo binaacuterio acessado em alto niacutevel Basta mandar salvar ler variaacuteveis no do arquivo a biblioteca padratildeo automagicamente faz todo o trabalho de decidir como gravar ler os dados

Conveniente de usar na proacutepria linguagem Mas raramente existem bibliotecas para ler gravar o formato nativo de uma linguagem a partir de outra Ex (IDL)

IDLgt savefile=2dspectrumsavmydatamyheadercorners_dcorners_averbosecompress SAVE Portable (XDR) compressed SAVERESTORE file SAVE Saved variable MYDATA SAVE Saved variable MYHEADER()

Pode ser lido com apenas (haacute formas mais elaboradas)

IDLgt restore2dspectrumsavverbose RESTORE Portable (XDR) compressed SAVERESTORE file RESTORE Save file written by ltunknowngtltunknowngt Thu Jan 27 191422 2011 RESTORE IDL version 801 (linux x86_64) RESTORE Restored variable MYDATA RESTORE Restored variable MYHEADER()

IDLgt helpmydatamyheadercorners_dcorners_aMYDATA FLOAT = Array[1201 1201]MYHEADER STRING = Array[144]()

8289

Arquivos - processamento em baixo niacutevel

Nem sempre um formato padratildeo eacute a melhor escolha para o problema

Nem sempre haacute escolha (pode-se ter que trabalhar com arquivos que jaacute foram escritos em algum formato proprietaacuterio)

Agraves vezes o formato eacute padratildeo mas natildeo haacute bom suporte a ele disponiacutevel

Em todos estes casos eacute necessaacuterio escrever rotinas em baixo niacutevel que vatildeo ler processar diretamente o conteuacutedo do arquivo

Preferencialmente criando interfaces de alto niacutevel para o programa que vai as usar

8389

Arquivos - processamento em baixo niacutevel - texto

Tomando o exemplo anterior onde as colunas eram de diferentes tipos

NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS dec18s0001 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0002 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0003 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 FLAT 5408757812500 460000 5 dec18s0004 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 DARK 5408757812500 460000 5

A forma mais simples de o ler diretamente eacute definir uma estrutura para receber cada linha e um array destas estruturas para receber todo o arquivo Ex (IDL)

IDLgt record=namecalmpos0filnameechlpos0d0disppos0d0targnameposdirclassmjd_obsitime0d0coadds0IDLgt nlines=file_lines(filesearch_scamtxt)IDLgt mydata=replicate(recordnlines-1)IDLgt header=

Depois de definidas as variaacuteveis que vatildeo receber os dados o arquivo pode ser lido

IDLgt openrunitfilesearch_scamtxtget_lunIDLgt readfunitheaderIDLgt readfunitmydataformat=(A14I8A15F104F104A18A19A15F158F105I15)IDLgt free_lununit

A gravaccedilatildeo de um arquivo texto poderia ser feita de forma semelhante apenas trocando openr por openw (abrir o arquivo para gravaccedilatildeo natildeo leitura) e readf por printf

O arquivo eacute aberto em uma unidade (unit) usada para especificar de onde eacute feita a leitura

Ao final o arquivo eacute fechado

8489

Arquivos - processamento em baixo niacutevel - texto

O que resulta em

IDLgt printheader NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS

IDLgt helpmydataMYDATA STRUCT = -gt ltAnonymousgt Array[4]

IDLgt helpmydata[0] Structure ltd5e38f68gt 11 tags length=136 data length=124 refs=3 NAME STRING dec18s0001 CALMPOS INT 0 FILNAME STRING NIRSPEC-5-AO ECHLPOS DOUBLE 62630000 DISPPOS DOUBLE 36450000 TARGNAME STRING HD85258 POSDIR STRING NIRSPEC-5-AOp1 CLASS STRING STAR MJD_OBS STRING 54087574 ITIME DOUBLE 10000000 COADDS INT 1

Este caso eacute mais complicado que os mais comuns por haver colunas de strings

Se todas fossem de nuacutemeros natildeo teria sido necessaacuterio especificar o formato explicitamente As colunas teriam sido adivinhadas pela biblioteca que lecirc o arquivo Poderia ter sido lido escrito soacute com um array de nuacutemeros sem estruturas

8589

Arquivos - processamento em baixo niacutevel - binaacuterio

Formatos binaacuterios podem ser definidos de qualquer forma O arquivo eacute apenas um conjunto de bytes Cabe ao software saber como os interpretar

Uma escolha comum para que sejam autodocumentados eacute incluir um cabeccedilalho de texto informando as caracteriacutesticas dos dados necessaacuterias para os ler

Ex (IDL) criar um arquivo que armazene um array de doubles com um cabeccedilalho informando as dimensotildees para que o programa que o lecirc saiba como ler os dados

Inventa dados e abre o arquivo

IDLgt data_to_write=dindgen(34)IDLgt openwunitbinary_exampledatget_lun

Escreve as dimensotildees como texto

IDLgt printfunitdimensions of the double array stored belowIDLgt printfunitsize(data_to_writedimensions)

Escreve os dados binaacuterios

IDLgt writeuunitdata_to_write

Fecha o arquivo

IDLgt free_lununit

Escreve em binaacuterio (write unformatted)

8689

Arquivos - processamento em baixo niacutevel - binaacuterio

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

dimensions of the double array stored below 3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

8789

Arquivos - processamento em baixo niacutevel - binaacuterioA leitura deste arquivo eacute igualmente simples

IDLgt header=IDLgt dims=[00]IDLgt openrunitbinary_exampledatget_lun

Lecirc as dimensotildees (armazenadas como texto)

IDLgt readfunitheaderIDLgt readfunitdims

Lecirc a parte binaacuteria depois de saber as dimensotildees

IDLgt data_read=dblarr(dims)IDLgt readuunitdata_read

Fecha o arquivo

IDLgt free_lununit

Verifica que os dados foram gravados e lidos corretamente

IDLgt printarray_equal(data_to_writedata_read) 1

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Lecirc dados binaacuterios (read unformatted)

8889

Sumaacuterio

5 ndash Slides em httpwwwppenteadonetpeapea04_strings_iopdf Strings Expressotildees regulares Arquivos

httpwwwppenteadonetpea

8989

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89

Arquivos - texto X binaacuterios

Vantagens de arquivos binaacuterios

Em geral natildeo haacute conversotildees entre o os dados como armazenados na memoacuteria O que torna o armazenamento mais eficiente e sem alteraccedilotildees nos valores

A maior parte dos formatos padronizados eacute binaacuteria Exs FITS cube CDF NetCDF HDF HDF5 JPEG JPEG2000 TIFF GeoTIFF MPEG etc

Eacute mais comum que haja bibliotecas prontas (ateacute de alto niacutevel) para consulta leitura e gravaccedilatildeo

Os formatos melhor desenhados satildeo autodocumentados (em texto ou binaacuterio) para os ler natildeo eacute necessaacuterio conhecimento preacutevio sobre como os dados foram armazenados

Toda linguagem plataforma costuma ter seu formato binaacuterio mais nativo que costuma ser o mais faacutecil para leitura gravaccedilatildeo Em particular nas de alto niacutevel que tecircm formatos autodocumentados (especialmente

em IDL R Python Java)

Muitos formatos tecircm opccedilatildeo de compressatildeo dos dados

5389

Arquivos - proprietaacuterios X padratildeo

Independente da escolha texto binaacuterio programas devem escolher entre usar um formato proacuteprio ou um formato padronizado

A principal vantagem de formatos proacuteprios eacute que satildeo definidos da forma mais conveniente para a aplicaccedilatildeo que os usa simplificando leitura e gravaccedilatildeo e potencialmente otimizando recursos (acesso ao disco tamanho do arquivo etc)

A principal desvantagem de formatos proacuteprios eacute ser necessaacuterio escrever todo o coacutedigo para os ler gravar

Pode dar mais trabalho que usar um formato geneacuterico que natildeo seja exatamente o que melhor se encaixa na aplicaccedilatildeo

O coacutedigo para processar o formato em geral vai ser menos completo e conveniente de usar que o de um formato bem estabelecido usado por muitos outros em muitos ambientes

Cada novo software que for usar estes arquivos vai precisar compartilhar do mesmo coacutedigo ou precisar de coacutedigo novo (em particular se em outra linguagem) para ler gravar naquele formato

Eacute necessaacuterio documentar o formato e decidir sobre como ele seraacute definido

Se outros jaacute colocaram muito trabalho desenvolvendo bons formatos padratildeo bem suportados em muitos ambientes por que ter o trabalho de reinventar (e reprogramar redocumentar e retestar) a roda

5489

Arquivos - padrotildees comuns em astronomia (exs adiante)

Texto

CSV Comma-separated values - bem suportado por muitos softwares

ldquoColunas fixasrdquo Natildeo eacute um padratildeo bem definido mas eacute praacutetica comum para tabelas (2D)

XML Extensible Markup Language - O padratildeo texto mais flexiacutevel de grande uso em programaccedilatildeo geral para armazenar qualquer coisa com frequumlecircncia de forma hieraacuterquica Bem suportado por linguagens modernas (e modernizadas) e bibliotecas das principais

linguagens gerais Alta complexidade o torna trabalhoso de usar

5589

Arquivos - padrotildees comuns em astronomia (exs adiante)Binaacuterios

FITS Flexible Image Transport System - o mais comum para observaccedilotildees astronocircmicas Conteacutem os dados (em geral arrays 1D 2D ou 3D) e documentaccedilatildeo (nos cabeccedilalhos) sobre a origem e caracteriacutesticas dos dados Tambeacutem usado para armazenar tabelas de dados quaisquer mesmo que natildeo sejam observaccedilotildees (especialmente pelo STSCI) Variam muito em qualidade de documentaccedilatildeo

NetCDF Network Common Data Form - evoluccedilatildeo do CDF autodocumentado eacute comum e bem suportado para vaacuterios arrays de dados

HDF5 Hierarchical Data Format ndash autodocumentado comum e bem suportado permitindo aleacutem de simples arrays estruturas (eacute um formato hieraacuterquico)

Formatos de imagens JPEG JPEG2000 TIFF GeoTIFF etc - voltados para arrays 2D3D de inteiros ou (em alguns casos) reais com ou sem compressatildeo JPEG2000 tem caracteriacutesticas mais avanccediladas como imagens multiresoluccedilatildeo

Formatos vetoriais PS EPS DXF SHP SVG - variados niacuteveis de suporte a armazenamento de vetores e formas em 2D ou 3D

ISIS Cube semelhante em caracteriacutesticas ao FITS mais usado em sensoriamento remoto geociecircncias e ciecircncias planetaacuterias em geral para observaccedilotildees 1D 2D ou 3D

Formatos nativos de linguagens todo o trabalho de leitura e gravaccedilatildeo eacute feito automagicamente pela biblioteca padratildeo em IDL R Python Java

5689

Arquivos texto - newlines

Apesar do que possa parecer arquivos texto natildeo tecircm intrinsecamente vaacuterias linhas Arquivos texto satildeo soacute uma sequumlecircncia 1D de caracteres em alguma codificaccedilatildeo Separaccedilatildeo em linhas (equivalente a interpretar o arquivo como 2D em linhas e colunas) eacute

especificada por convenccedilotildees Natildeo haacute apenas uma convenccedilatildeo para o fim de linhas

A mais primitiva convenccedilatildeo eacute separaccedilatildeo nenhuma estipula-se que linhas tenham um nuacutemero fixo N de caracteres e cabe ao software que lecirc o arquivo entender que uma linha nova ocorre regularmente a cada N caracteres

Eacute a forma menos portaacutevel e mais inconveniente eacute necessaacuterio o conhecimento preacutevio (ou por inspeccedilatildeo do arquivo) de quantos caracteres haacute por linha

A maior parte dos editores de texto natildeo vai saber separar linhas desta forma (por falta deste conhecimento preacutevio) Exemplo (de um FITS real)

SIMPLE = T Fits standard BITPIX = 16 Bits per pixel NAXIS = 0 Number of axes EXTEND = T File may contain extensions

O que com as linhas quebradas nos lugares certos seria

SIMPLE = T Fits standard BITPIX = 16 Bits per pixel NAXIS = 0 Number of axes EXTEND = T File may contain extensions

5789

Arquivos texto - newlines

A forma mais comum de especificar linhas eacute com um marcador do final de linha (newline)

Eacute um caractere especial natildeo normalmente presente no texto que serve para marcar fim de linhas

Mas natildeo haacute soacute um padratildeo de newline Os mais comuns

LF (Line Feed ASCII 10) ndash Unix Linux Mac OS X

CR - (Carriage Return ASCII 13) - Mac OS lt10

CR+LF (CR seguido de LF) - Windows DOS

Eacute o motivo de o Notepad (Windows) natildeo entender as quebras de linha de arquivos escritos com o formato nativo de Linux o arquivo soacute tem LF enquanto o editor espera CR+LF

Alguns sistemas (strings em vaacuterias linguagens por exemplo) usam o coacutedigo de escape n para indicar newline que eacute codificado de acordo com o padratildeo sendo usado

Em geral bibliotecas de leitura e gravaccedilatildeo de arquivos usam (default pelo menos) o newline nativo do sistema em que satildeo usadas

Programas de conversatildeo entre os sistemas satildeo comuns (ex dos2unix)

O Wordpad identifica se for usado soacute LF e quebra as linhas de acordo

5889

Arquivos - texto - CSV

Comma-separated values

O formato mais padronizado para tabelas (arrays 2D) em texto (frequentemente mas natildeo necessariamente ASCII)

Bem suportado por bibliotecas padratildeo de linguagens e outros softwares (Excel Calc Origin Google Docs etc)

Conteacutem Linhas de cabeccedilalho (opcionais mas recomendadas) linhas com qualquer texto geral

descrevendo o arquivo e em geral uma linha de tiacutetulo para as colunas da tabela Uma (apenas uma) tabela onde todas as linhas tecircm o mesmo nuacutemero de colunas

Colunas separadas por viacutergulas (opcionalmente pode ser outro separador) Linhas terminadas por newline (qualquer que seja) Strings delimitados por ldquo ldquo

Ex

NAMECALMPOSFILNAMEECHLPOSDISPPOSTARGNAMEPOSDIRCLASSMJD-OBSITIMECOADDSdec18s00010NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001dec18s00020NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001dec18s00120NIRSPEC-5-AO635800364500itan140NIRSPEC-5-AOp2 TITAN5408763000001dec18s00140NIRSPEC-5-AO626300364500itan140NIRSPEC-5-AOp1 TITAN5408763000001dec18s00151NIRSPEC-5-AO626300364500itan140NIRSPEC-5-AOp1ARC5408764000001dec18s00160NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001

Natildeo eacute necessaacuterio que as colunas tenham largura constante

Cabeccedilalho

5989

Arquivos - texto - CSVHaacute amplo suporte a leitura e gravaccedilatildeo de CSV sem precisar recorrer a procedimentos de baixo niacutevel

Podem ser diretamente importados em Excel Calc Origin Google Docs ou lido facilmente com bibliotecas padratildeo comuns Ex (IDL)

IDLgt c=read_csv(filesearch_scamcsvheader=h)IDLgt printhNAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS

IDLgt helpc Structure ltc8bca508gt 11 tags length=5256 data length=5248 refs=1 FIELD01 STRING Array[41] FIELD02 LONG Array[41] FIELD03 STRING Array[41] FIELD04 DOUBLE Array[41] FIELD05 DOUBLE Array[41] FIELD06 STRING Array[41] FIELD07 STRING Array[41] FIELD08 STRING Array[41] FIELD09 STRING Array[41] FIELD10 DOUBLE Array[41] FIELD11 LONG Array[41]

IDLgt printcfield01[03]dec18s0001 dec18s0002 dec18s0003 dec18s0004

IDLgt printcfield03[03]NIRSPEC-5-AO NIRSPEC-5-AO NIRSPEC-5-AO NIRSPEC-5-AO

6089

Arquivos - texto - CSVEx (IDL) Criaccedilatildeo de um CSV com uma tabela de valores

Criaccedilatildeo de 3 arrays 1D (12 elementos) um para cada coluna

IDLgt x=dindgen(3)IDLgt y=dindgen(4)IDLgt xx=reform(rebin(x34)12)IDLgt yy=reform(rebin(reform(y14)34)12)IDLgt f=xx+yy10IDLgt helpxxyyfXX DOUBLE = Array[12]YY DOUBLE = Array[12]F DOUBLE = Array[12]

Escrita do arquivo

IDLgt write_csvexamplecsvxxyyfheader=[XYX+10Y]

ResultadoXYX+10Y000000000000000000000000100000000000000010000000200000000000000020000000000000001000000010000000100000001000000011000000()

6189

Arquivos - texto - ldquoColunas regularesrdquoFixed column width

Natildeo eacute exatamente um padratildeo Eacute uma praacutetica comum

Armazena uma tabela (array 2D) de forma regular simples de ser interpretada e lida

Costumam ter linha(s) de cabeccedilalho descrevendo o conteuacutedo do arquivo em geral com uma linha para os nomes das colunas

As demais linhas conteacutem os dados sempre ocupando a mesma largura por coluna e escritos no mesmo formato em cada coluna

Costumam ser simples de ler inclusive interativamente (exs Excel Calc Origin read_ascii)

Ex (IDL) Uma simples tabela soacute de nuacutemeros

wavl CH4=33 wavl CH4=25 wavl CH4=10 wavl CH4=08 wavl CH4=05 wavl CH4=026 wavl CH4=02 477330000 0090130 477330000 0091110 477330000 0089250 477330000 0087000 477330000 0087140 477330000 0090080 477330000 0088110 480040000 0090930 480040000 0091930 480040000 0090160 480040000 0087930 480040000 0088110 480040000 0090950 480040000 0089090 482750000 0091710 482750000 0092730 482750000 0091060 482750000 0088850 482750000 0089080 482750000 0091810 482750000 0090060 485450000 0092530 485450000 0093570 485450000 0092000 485450000 0089810 485450000 0090100 485450000 0092730 485450000 0091090

IDLgt a=read_ascii(specs_27s_ntxtdata_start=1header=header)IDLgt printheader wavl CH4=33 wavl CH4=25 wavl CH4=10 wavl CH4=08 wavl CH4=05 wavl CH4=026 wavl CH4=02 IDLgt helpa Structure ltd423c9a8gt 1 tags length=224 data length=224 refs=1 FIELD01 FLOAT Array[14 4]

6289

Arquivos - texto - ldquoColunas regularesrdquoJaacute um arquivo um pouco mais difiacutecil de ler

NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS dec18s0001 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0002 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0003 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 FLAT 5408757812500 460000 5 dec18s0004 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 DARK 5408757812500 460000 5

Por ter colunas de tipos diferentes (strings inteiros reais) natildeo eacute possiacutevel o ler em um simples array Mas eacute faacutecil o colocar em uma estrutura de arrays onde cada campo eacute uma coluna

Especificando interativamente como interpretar as linhasIDLgt templ=ascii_template(filesearch_scamtxt)

Nome do campo (default mostrado)

Tipo do campo (identificado automaticamente)

Posiccedilatildeo (caracter) do comeccedilo (identificada automaticamente)

Linha de exemplo para verificar as colunas

6389

Arquivos - texto - ldquoColunas regularesrdquoDepois de feito o template o arquivo pode ser lido com apenas

IDLgt a=read_ascii(filesearch_scamtxttemplate=templ)IDLgt helpa Structure ltd4ec4608gt 11 tags length=416 data length=416 refs=1 FIELD01 STRING Array[4] FIELD02 LONG Array[4] FIELD03 STRING Array[4] FIELD04 FLOAT Array[4] FIELD05 FLOAT Array[4] FIELD06 STRING Array[4] FIELD07 STRING Array[4] FIELD08 STRING Array[4] FIELD09 FLOAT Array[4] FIELD10 FLOAT Array[4] FIELD11 LONG Array[4]IDLgt printafield01dec18s0001 dec18s0002 dec18s0003 dec18s0004IDLgt printafield04 626300 626300 626300 626300

O template (uma estrutura contendo dados sobre como ler o arquivo) pode ser usado para outros arquivos no mesmo formato No lugar de ter sido criado interativamente poderia ter sido lido de algum arquivo Poderia ter especificado nomes para os campos que seriam mais amigaacuteveis que coias como FIELD11

6489

Arquivos - texto - XML

Extensible Markup Language

Admite grande flexibilidade e por isso pode ter alta complexidade

Valores satildeo colocados dentro de uma estrutura em hieraacuterquica (em uma aacutervore) com os noacutes identificados pelos seus nomes (chaves)

Largamente usado em muitas aacutereas para armazenar conjuntos arbitraacuterios de quaisquer estruturas de dados

A maioria das aplicaccedilotildees usa um formato que eacute um subconjunto do XML especificado por um Schema comumente em um arquivo XML DTD (Document Type Definition)

6589

Arquivos - texto ndash XML ndash exemplos de usos

Armazenamento de dados de aplicaccedilotildees web (comum para exportar importar dados MediaWiki DokuWiki WordPress ADS Lattes etc)

Documentos Office (docx pptx xlsx) OpenOffice (odt opd ods)

Como versotildees de outros formatos FITSML XDF

ldquoScientific Dataset XML NASAs Astronomical Data Center (ADC) sponsors a number of research projects that

use XML for scientific data representation The XML activities at the ADC are sponsored and supported by the NASA Office of Space Science Applied Information Systems Research Program (AISRP)rdquo - httpxmlcoverpagesorgnasa-adchtml

Astronomical Instrument Markup Language (AIML)

SVG ndash Scalable Vector Graphics

Muitas de outras aplicaccedilotildees listadas em httpxmlcoverpagesorgxmlhtmlapplications

6689

Arquivos - texto ndash XML - exemploltxml version=10 gtltDOCTYPE Xdmf SYSTEM Xdmfdtd []gtltXdmf xmlnsxi=httpwwww3org2001XInclude Version=20gt ltDomaingt lt-- Example of Basic Topologies --gt ltInformation Name=Descriptiongt Example of a Polyvertex Topology ltInformationgt ltGrid Name=Polyvertex GridType=Uniformgt ltTopology TopologyType=Polyvertex Dimensions=3 NodesPerElement=3gt ltDataItem Format=XML Dimensions=3 3 NumberType=Floatgt 0 1 2 4 5 6 8 9 10 ltDataItemgt ltTopologygt ltGeometry Type=XYZgt ltDataItem Format=XML Dimensions=4 4 3gt 00 00 00 10 00 00()Que mostra que a interpretaccedilatildeo (parsing) de XML eacute em geral complexa

6789

Arquivos - texto - XML

Haacute muitas bibliotecas de alto niacutevel para fazer o processamento (parsing) e entregar os dados em uma estrutura conveniente

A complexidade em processar XML estaacute em decidir o que fazer com os dados jaacute que os arquivos podem ser muito complexos

As APIs (Application Programming Interfaces) mais comuns para processar XML que satildeo implementadas em muitas linguagens

DOM (Document Object Model) ndash manteacutem todo o conteuacutedo do em uma estrutura de dados (em geral uma aacutervore) em uma variaacutevel (em geral um objeto) Esta pode ser consultada para obter os valores de interesse para os alterar e usada para escrever um arquivo

SAX (Simple API for XML) ndash Interpretador (parser) por objetos O usuaacuterio escreve uma classe herdando da classe SAX provendo os meacutetodos que vatildeo processar os campos agrave medida em que estes satildeo lidos

6889

Arquivos - binaacuterios - FITSFlexible Image Transport System

O formato mais comum para observaccedilotildees astronocircmicas Tambeacutem usado para armazenar quaisquer dados mesmo natildeo relacionados a observaccedilotildees (especialmente tabelas como eacute praacutetica do STSCI)

Conteacutem um (ou mais) cabeccedilalho(s) de texto com metadados (informaccedilotildees sobre os dados como caracteriacutesticas (necessaacuterias para os ler) origem condiccedilotildees em que foram obtidos processamento realizado etc)

SIMPLE = T image conforms to FITS standard BITPIX = 32 bits per data value NAXIS = 2 number of axes NAXIS1 = 1024 NAXIS2 = 1024 BSCALE = 100000 Scaling factor BZERO = 000000 Scaling zero-point TELESCOP= Keck II Telescope SLITNAME= 0041x226 Slit Name SLITPA = 351979 Slit position angle SLITX = 131500 X pixel of the center of the slit LST = 12010446 local apparent sidereal time (()

Depois do cabeccedilalho haacute uma (ou mais) seccedilatildeo(otildees) de dados binaacuterios Costuma(m) ser array(s) 1D (espectros) 2D (imagens) ou 3D (ldquocubos de dadosrdquo)

De inteiros ou reais inteiros satildeo comuns em contagens de instrumentos reais para valores derivados (fluxos intensidades etc)

6989

Arquivos - binaacuterios - FITSNormalmente FITS satildeo lidos escritos por bibliotecas prontas de (relativamente) alto niacutevel usuaacuterio natildeo tem que saber como os dados satildeo armazenados no arquivo nem como os ler escrever Ex (IDL com a biblioteca idlastro)

IDLgt fits_info2dspectrumfits2dspectrumfits has 3 extensionsPrimary header 288 recordsNo dataExtension 1 -- SCI Header 144 records IMAGE ( 1201 1201 )Extension 2 -- ERR Header 72 records IMAGE ( 1201 1201 )Extension 3 -- DQ Header 72 records IMAGE ( 1201 1201 )

IDLgt mydata=readfits(2dspectrumfitsexten_no=1myheader) READFITS Reading FITS extension of type IMAGE READFITS Now reading 1201 by 1201 array

IDLgt extastmyheadermyastIDLgt sz=size(mydatadimensions)IDLgt xy2ad[1sz[0]][1sz[1]]myastcorners_acorners_dIDLgt printcorners_aCorners of the data array from file 2dspectrumfits are at 14487480 33063480

IDLgt printcorners_d -00041264444 00041402222

Obteacutem os dados de coordenadas (WCS) do header

Coloca os dados no array (2D de floats) mydata e o header no array (1D de strings) myheader

Calcula as coordenadas das quinas da imagem atraveacutes do WCS

Provecirc informaccedilotildees sobre o arquivo

7089

Arquivos - binaacuterios - ISIS Cube

Formatos como FITS se adequam muito a ter uma interface de mais alto niacutevel por objetos

Tambeacutem para dados em tabelas FITS muito mais trabalhosos de ler em baixo niacutevel que se adequam muito mais a mapas ou estruturas

Exemplo (de um formato semelhante a FITS ISIS cube)

O objeto ao ser criado lecirc todo o arquivo

cube=pp_editablecube(CM_1553510065_1_ircub)

Meacutetodos fornecem os dados desejados para obter quando necessaacuterio os dados de interesse

Find out the names of the backplanesprintcubegetproperty(backnames)Get the start time of the cubeprintcubegetfromheader(START_TIME)2007-084T100057286Z

Valores no cabeccedilalho podem ser convenientemente fornecidos como um mapa

header=cubeheader_as_hash()printheader[START_TIME]2007-084T100057286Z

7189

Arquivos - binaacuterios ndash ISIS Cube

Os dados satildeo fornecidos como arraysMake a contour plot of the latitudesc=contour(cubegetsuffixbyname(LATITUDE))Get the band with wavelength nearest to 21 (in the units used in the cube)selband=cubegetbandbywavelength(21wavelengths=selwavs)

Interfaces por overload tornam o acesso ainda mais conveniente

selband=cube[21]

selwavs=cube[21]

Retorna um array com a banda de comprimento de onda mais proacuteximo de 21 (microm)

Retorna o comprimento de onda mais proacuteximo de 21 (microm) da banda retornada acima

7289

Arquivos - binaacuterios ndash ISIS Cube Alteraccedilotildees feitas ao conteuacutedo satildeo automaticamente refletidas em todos os

lugares (cabeccedilalho em particular) afetados mantendo o objeto vaacutelido que pode depois ser gravado em um novo arquivo

IDLgt printcubelinescubesamplescubebands 64 64 256

IDLgt helpcubecoreltExpressiongt FLOAT = Array[64 64 256]

IDLgt cubecore=dblarr(100100256)

A linha acima natildeo eacute uma atribuiccedilatildeo eacute uma invocaccedilatildeo de meacutetodo Eacute equivalente acubesetpropertycore=dblarr(100100256)

Eacute o trabalho da funccedilatildeo setproperty decidir se a propriedade passada (core) faz sentido e se fizer fazer todo o trabalho necessaacuterio a esta mudanccedila Para o usuaacuterio eacute tudo automaacutetico e os dados da classe satildeo vaacutelidos o tempo todo

IDLgt helpcubecoreltExpressiongt DOUBLE = Array[100 100 256]

IDLgt printcubelinescubesamplescubebands 100 100 256

IDLgt cubesaveCM_1553510065_1_ir_editedcub

7389

Arquivos - binaacuterios ndash NetCDF e HDF5

Network Common Data Form e Hierarchical Data Format

Os dois uacutenicos formatos bem estabelecidos para dados cientiacuteficos geneacutericos

Armazenam dados como vaacuterias variaacuteveis e seus metadados Para cada variaacutevel haacute (ou pode haver) os metadados

Nome Dimensotildees (do array) Unidades Comentaacuterios

Ambos permitem arrays multidimensionais

Apenas HDF5 permite estruturas (daiacute vem a hierarquia)

Autodocumentados qualquer software que saiba ler um destes formatos lecirc qualquer arquivo sem precisar de conhecimento preacutevio sobre como o arquivo foi gerado

Muito bem suportados em bibliotecas padratildeo e natildeo padratildeo em softwares interativos e visualizadores (inclusive plugins para navegadores)

httpwwwunidataucaredusoftwarenetcdf httpenwikipediaorgwikiHdf5

NetCDF eacute mais simples de usar por natildeo ter hierarquia dando menos trabalho para ler e escrever dados Se hierarquia natildeo eacute necessaacuteria eacute mais conveniente de usar que HDF5

7489

Arquivos - binaacuterios - NetCDF e HDF5Haacute tambeacutem o formato CDL uma versatildeo ASCII do NetCDF A biblioteca padratildeo do NetCDF inclui conversores entre estes formatos

$ ncdump -h refspec_g01_0ncnetcdf refspec_g01_0 dimensions nlay = 51 nwn = 400 nleg = 33 numu = 2 nlev = 52 nphi = 3 ngas = 2 nwnc = 1 scal = 1 v3 = 3 dnl = 1 nk = 1 tdisr = UNLIMITED (0 currently) na = 16

variables float alb(nwn) float z(nlay) float t(nlay) float p(nlay) float wl(nwn) float iof(nwn) float mtau(nwn) float htau(nwn) float hctaus(nwn) float gtau(nwn) float outcos(scal) float phi(nleg) float phic(scal) float umu(numu) float flux(v3 nwn nlev) float mix(nlay ngas) float c(nlay) float psat(nlay) float ga(nwnc) float wlc(nwnc) float inc(scal) int dm(scal) int ord(scal) float fbeam(scal) float wn(nwn) float tautot(nwn nlay) float htaus(nwn nlay) float htaux(nwn nlay) float taug(nwn nlay) float phase(nwn nlay nleg) float ssa(nwn nlay) float uu(nwn nphi nlev numu) float u0u(nwn nlev numu) float tray(nwn nlay) float gtauo(tdisr nwn nlay)

Haacute 14 variaacuteveis usadas como dimensotildees para as 35 variaacuteveis que satildeo arrays

Ex alb(nwn) indica que alb eacute um array 1D de nwn elementos

nwn estaacute armazenado como uma das dimensotildees e eacute 400 portanto alb tem 400 elementos

Parte do conteuacutedo de um arquivo NetCDF em formato CDL (gerado pelo programa ncdump)

7589

Arquivos - binaacuterios - NetCDF e HDF5Conteuacutedo daquele arquivo visualizado com o ncview (acompanha a biblioteca NetCDF padratildeo)

7689

Arquivos - binaacuterios - NetCDF e HDF5O conteuacutedo de todo o arquivo pode ser lido facilmente com as bibliotecas disponiacuteveis e armazenado em contecirciners convenientes Usando um objeto que gera um resultado um pouco mais conveniente

IDLgt h=pp_readncdf(refspec_g01_0nchash)IDLgt printhvar_dims ltObjHeapVar229(HASH)gtvars ltObjHeapVar152(HASH)gtdims ltObjHeapVar118(HASH)gt

IDLgt printh[vars]T 173203 175459 175848 176001 175975 Z 431869 418858 406067 393403 380464 FLUX 300660 145536 0705180 0341669 0165532 PHASE 100000 0779034 0660858 0542052 0449983 TAUTOT0694377 0693420 0693474 0693540 0693636()

IDLgt help(h[vars])[TAUTOT]ltExpressiongt FLOAT = Array[51 400]

IDLgt print(h[var_dims])[TAUTOT]NLAY NWN

IDLgt print(h[dims])[(h[var_dims])[TAUTOT]]NLAY 51NWN 400

7789

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5)

Visualizaccedilatildeo da variaacutevel selecionada

Metadados e alguns valores da variaacutevel selecionada

Variaacutevel a ser criada com o conteuacutedo desta variaacutevel do arquivo

Hierarquia das variaacuteveis do arquivo

7889

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5) Imported variable az

IDLgt helpaz Structure ltd5723f38gt 13 tags length=448 data length=444 refs=1 _NAME STRING az _ICONTYPE STRING binary _TYPE STRING DATASET _FILE STRING INTENSI_test_409OUTh5 _PATH STRING _DATA DOUBLE Array[38] _NDIMENSIONS LONG 1 _DIMENSIONS ULONG64 Array[1] _NELEMENTS ULONG64 38 _DATATYPE STRING H5T_FLOAT _STORAGESIZE ULONG 8 _PRECISION LONG 64 _SIGN STRING

IDLgt printaz_data 00000000 10000000 20000000 30000000 40000000 50000000 60000000 80000000 ()

7989

Arquivos - binaacuterios - imagens

JPEG JPEG200 TIFF GeoTIFF etc

Os formatos comuns de imagens satildeo bem suportados em muacuteltiplas plataformas para uso dentro de programas e interativamente

Alguns formatos tecircm opccedilatildeo de compressatildeo com perda eou sem perda

Armazenam imagens como arrays 2D ou 3D (3D frequumlentemente limitado a 3 ou 4 em uma das dimensotildees uma imagem em 3 ou 4 bandas) de inteiros ou (em alguns formatos) reais

Alguns formatos permitem armazenar metadados para caracterizar as imagens armazenadas

JPEG2000 e GeoTIFF (um subconjunto de TIFF) comuns em astronomia e aacutereas proacuteximas

8089

Arquivos - binaacuterios ndash imagens ndash exemplo (IDL)IDLgt printquery_tiff(issmap_2009tiffinfogeotiff=geo) 1

IDLgt helpinfo Structure ltd4eca4b8gt 18 tags length=144 data length=132 refs=1 CHANNELS LONG 4 DIMENSIONS LONG Array[2] IMAGE_INDEX LONG 0 NUM_IMAGES LONG 1 PIXEL_TYPE INT 1 TYPE STRING TIFF BITS_PER_SAMPLE LONG 8 POSITION FLOAT Array[2] RESOLUTION FLOAT Array[2] UNITS LONG 2 TILE_SIZE LONG Array[2] DESCRIPTION STRING ISS (2009) DATE_TIME STRING 20100218 012436()

IDLgt helpgeo Structure ltd4efa1b8gt 10 tags length=264 data length=262 refs=1 MODELPIXELSCALETAG DOUBLE Array[3] MODELTIEPOINTTAG DOUBLE Array[6 4] GEOGRAPHICTYPEGEOKEY INT 4035 GEOGSEMIMAJORAXISGEOKEY DOUBLE 25750000 GEOGSEMIMINORAXISGEOKEY DOUBLE 25750000()

IDLgt myimage=read_tiff(issmap_2009tiff) Lecirc a imagem para o array myimage

Obteacutem informaccedilotildees sobre o arquivo

8189

Arquivos - binaacuterios ndash formatos nativosLinguagens como IDL R Python Java tecircm seu formato nativo binaacuterio acessado em alto niacutevel Basta mandar salvar ler variaacuteveis no do arquivo a biblioteca padratildeo automagicamente faz todo o trabalho de decidir como gravar ler os dados

Conveniente de usar na proacutepria linguagem Mas raramente existem bibliotecas para ler gravar o formato nativo de uma linguagem a partir de outra Ex (IDL)

IDLgt savefile=2dspectrumsavmydatamyheadercorners_dcorners_averbosecompress SAVE Portable (XDR) compressed SAVERESTORE file SAVE Saved variable MYDATA SAVE Saved variable MYHEADER()

Pode ser lido com apenas (haacute formas mais elaboradas)

IDLgt restore2dspectrumsavverbose RESTORE Portable (XDR) compressed SAVERESTORE file RESTORE Save file written by ltunknowngtltunknowngt Thu Jan 27 191422 2011 RESTORE IDL version 801 (linux x86_64) RESTORE Restored variable MYDATA RESTORE Restored variable MYHEADER()

IDLgt helpmydatamyheadercorners_dcorners_aMYDATA FLOAT = Array[1201 1201]MYHEADER STRING = Array[144]()

8289

Arquivos - processamento em baixo niacutevel

Nem sempre um formato padratildeo eacute a melhor escolha para o problema

Nem sempre haacute escolha (pode-se ter que trabalhar com arquivos que jaacute foram escritos em algum formato proprietaacuterio)

Agraves vezes o formato eacute padratildeo mas natildeo haacute bom suporte a ele disponiacutevel

Em todos estes casos eacute necessaacuterio escrever rotinas em baixo niacutevel que vatildeo ler processar diretamente o conteuacutedo do arquivo

Preferencialmente criando interfaces de alto niacutevel para o programa que vai as usar

8389

Arquivos - processamento em baixo niacutevel - texto

Tomando o exemplo anterior onde as colunas eram de diferentes tipos

NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS dec18s0001 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0002 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0003 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 FLAT 5408757812500 460000 5 dec18s0004 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 DARK 5408757812500 460000 5

A forma mais simples de o ler diretamente eacute definir uma estrutura para receber cada linha e um array destas estruturas para receber todo o arquivo Ex (IDL)

IDLgt record=namecalmpos0filnameechlpos0d0disppos0d0targnameposdirclassmjd_obsitime0d0coadds0IDLgt nlines=file_lines(filesearch_scamtxt)IDLgt mydata=replicate(recordnlines-1)IDLgt header=

Depois de definidas as variaacuteveis que vatildeo receber os dados o arquivo pode ser lido

IDLgt openrunitfilesearch_scamtxtget_lunIDLgt readfunitheaderIDLgt readfunitmydataformat=(A14I8A15F104F104A18A19A15F158F105I15)IDLgt free_lununit

A gravaccedilatildeo de um arquivo texto poderia ser feita de forma semelhante apenas trocando openr por openw (abrir o arquivo para gravaccedilatildeo natildeo leitura) e readf por printf

O arquivo eacute aberto em uma unidade (unit) usada para especificar de onde eacute feita a leitura

Ao final o arquivo eacute fechado

8489

Arquivos - processamento em baixo niacutevel - texto

O que resulta em

IDLgt printheader NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS

IDLgt helpmydataMYDATA STRUCT = -gt ltAnonymousgt Array[4]

IDLgt helpmydata[0] Structure ltd5e38f68gt 11 tags length=136 data length=124 refs=3 NAME STRING dec18s0001 CALMPOS INT 0 FILNAME STRING NIRSPEC-5-AO ECHLPOS DOUBLE 62630000 DISPPOS DOUBLE 36450000 TARGNAME STRING HD85258 POSDIR STRING NIRSPEC-5-AOp1 CLASS STRING STAR MJD_OBS STRING 54087574 ITIME DOUBLE 10000000 COADDS INT 1

Este caso eacute mais complicado que os mais comuns por haver colunas de strings

Se todas fossem de nuacutemeros natildeo teria sido necessaacuterio especificar o formato explicitamente As colunas teriam sido adivinhadas pela biblioteca que lecirc o arquivo Poderia ter sido lido escrito soacute com um array de nuacutemeros sem estruturas

8589

Arquivos - processamento em baixo niacutevel - binaacuterio

Formatos binaacuterios podem ser definidos de qualquer forma O arquivo eacute apenas um conjunto de bytes Cabe ao software saber como os interpretar

Uma escolha comum para que sejam autodocumentados eacute incluir um cabeccedilalho de texto informando as caracteriacutesticas dos dados necessaacuterias para os ler

Ex (IDL) criar um arquivo que armazene um array de doubles com um cabeccedilalho informando as dimensotildees para que o programa que o lecirc saiba como ler os dados

Inventa dados e abre o arquivo

IDLgt data_to_write=dindgen(34)IDLgt openwunitbinary_exampledatget_lun

Escreve as dimensotildees como texto

IDLgt printfunitdimensions of the double array stored belowIDLgt printfunitsize(data_to_writedimensions)

Escreve os dados binaacuterios

IDLgt writeuunitdata_to_write

Fecha o arquivo

IDLgt free_lununit

Escreve em binaacuterio (write unformatted)

8689

Arquivos - processamento em baixo niacutevel - binaacuterio

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

dimensions of the double array stored below 3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

8789

Arquivos - processamento em baixo niacutevel - binaacuterioA leitura deste arquivo eacute igualmente simples

IDLgt header=IDLgt dims=[00]IDLgt openrunitbinary_exampledatget_lun

Lecirc as dimensotildees (armazenadas como texto)

IDLgt readfunitheaderIDLgt readfunitdims

Lecirc a parte binaacuteria depois de saber as dimensotildees

IDLgt data_read=dblarr(dims)IDLgt readuunitdata_read

Fecha o arquivo

IDLgt free_lununit

Verifica que os dados foram gravados e lidos corretamente

IDLgt printarray_equal(data_to_writedata_read) 1

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Lecirc dados binaacuterios (read unformatted)

8889

Sumaacuterio

5 ndash Slides em httpwwwppenteadonetpeapea04_strings_iopdf Strings Expressotildees regulares Arquivos

httpwwwppenteadonetpea

8989

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89

Arquivos - proprietaacuterios X padratildeo

Independente da escolha texto binaacuterio programas devem escolher entre usar um formato proacuteprio ou um formato padronizado

A principal vantagem de formatos proacuteprios eacute que satildeo definidos da forma mais conveniente para a aplicaccedilatildeo que os usa simplificando leitura e gravaccedilatildeo e potencialmente otimizando recursos (acesso ao disco tamanho do arquivo etc)

A principal desvantagem de formatos proacuteprios eacute ser necessaacuterio escrever todo o coacutedigo para os ler gravar

Pode dar mais trabalho que usar um formato geneacuterico que natildeo seja exatamente o que melhor se encaixa na aplicaccedilatildeo

O coacutedigo para processar o formato em geral vai ser menos completo e conveniente de usar que o de um formato bem estabelecido usado por muitos outros em muitos ambientes

Cada novo software que for usar estes arquivos vai precisar compartilhar do mesmo coacutedigo ou precisar de coacutedigo novo (em particular se em outra linguagem) para ler gravar naquele formato

Eacute necessaacuterio documentar o formato e decidir sobre como ele seraacute definido

Se outros jaacute colocaram muito trabalho desenvolvendo bons formatos padratildeo bem suportados em muitos ambientes por que ter o trabalho de reinventar (e reprogramar redocumentar e retestar) a roda

5489

Arquivos - padrotildees comuns em astronomia (exs adiante)

Texto

CSV Comma-separated values - bem suportado por muitos softwares

ldquoColunas fixasrdquo Natildeo eacute um padratildeo bem definido mas eacute praacutetica comum para tabelas (2D)

XML Extensible Markup Language - O padratildeo texto mais flexiacutevel de grande uso em programaccedilatildeo geral para armazenar qualquer coisa com frequumlecircncia de forma hieraacuterquica Bem suportado por linguagens modernas (e modernizadas) e bibliotecas das principais

linguagens gerais Alta complexidade o torna trabalhoso de usar

5589

Arquivos - padrotildees comuns em astronomia (exs adiante)Binaacuterios

FITS Flexible Image Transport System - o mais comum para observaccedilotildees astronocircmicas Conteacutem os dados (em geral arrays 1D 2D ou 3D) e documentaccedilatildeo (nos cabeccedilalhos) sobre a origem e caracteriacutesticas dos dados Tambeacutem usado para armazenar tabelas de dados quaisquer mesmo que natildeo sejam observaccedilotildees (especialmente pelo STSCI) Variam muito em qualidade de documentaccedilatildeo

NetCDF Network Common Data Form - evoluccedilatildeo do CDF autodocumentado eacute comum e bem suportado para vaacuterios arrays de dados

HDF5 Hierarchical Data Format ndash autodocumentado comum e bem suportado permitindo aleacutem de simples arrays estruturas (eacute um formato hieraacuterquico)

Formatos de imagens JPEG JPEG2000 TIFF GeoTIFF etc - voltados para arrays 2D3D de inteiros ou (em alguns casos) reais com ou sem compressatildeo JPEG2000 tem caracteriacutesticas mais avanccediladas como imagens multiresoluccedilatildeo

Formatos vetoriais PS EPS DXF SHP SVG - variados niacuteveis de suporte a armazenamento de vetores e formas em 2D ou 3D

ISIS Cube semelhante em caracteriacutesticas ao FITS mais usado em sensoriamento remoto geociecircncias e ciecircncias planetaacuterias em geral para observaccedilotildees 1D 2D ou 3D

Formatos nativos de linguagens todo o trabalho de leitura e gravaccedilatildeo eacute feito automagicamente pela biblioteca padratildeo em IDL R Python Java

5689

Arquivos texto - newlines

Apesar do que possa parecer arquivos texto natildeo tecircm intrinsecamente vaacuterias linhas Arquivos texto satildeo soacute uma sequumlecircncia 1D de caracteres em alguma codificaccedilatildeo Separaccedilatildeo em linhas (equivalente a interpretar o arquivo como 2D em linhas e colunas) eacute

especificada por convenccedilotildees Natildeo haacute apenas uma convenccedilatildeo para o fim de linhas

A mais primitiva convenccedilatildeo eacute separaccedilatildeo nenhuma estipula-se que linhas tenham um nuacutemero fixo N de caracteres e cabe ao software que lecirc o arquivo entender que uma linha nova ocorre regularmente a cada N caracteres

Eacute a forma menos portaacutevel e mais inconveniente eacute necessaacuterio o conhecimento preacutevio (ou por inspeccedilatildeo do arquivo) de quantos caracteres haacute por linha

A maior parte dos editores de texto natildeo vai saber separar linhas desta forma (por falta deste conhecimento preacutevio) Exemplo (de um FITS real)

SIMPLE = T Fits standard BITPIX = 16 Bits per pixel NAXIS = 0 Number of axes EXTEND = T File may contain extensions

O que com as linhas quebradas nos lugares certos seria

SIMPLE = T Fits standard BITPIX = 16 Bits per pixel NAXIS = 0 Number of axes EXTEND = T File may contain extensions

5789

Arquivos texto - newlines

A forma mais comum de especificar linhas eacute com um marcador do final de linha (newline)

Eacute um caractere especial natildeo normalmente presente no texto que serve para marcar fim de linhas

Mas natildeo haacute soacute um padratildeo de newline Os mais comuns

LF (Line Feed ASCII 10) ndash Unix Linux Mac OS X

CR - (Carriage Return ASCII 13) - Mac OS lt10

CR+LF (CR seguido de LF) - Windows DOS

Eacute o motivo de o Notepad (Windows) natildeo entender as quebras de linha de arquivos escritos com o formato nativo de Linux o arquivo soacute tem LF enquanto o editor espera CR+LF

Alguns sistemas (strings em vaacuterias linguagens por exemplo) usam o coacutedigo de escape n para indicar newline que eacute codificado de acordo com o padratildeo sendo usado

Em geral bibliotecas de leitura e gravaccedilatildeo de arquivos usam (default pelo menos) o newline nativo do sistema em que satildeo usadas

Programas de conversatildeo entre os sistemas satildeo comuns (ex dos2unix)

O Wordpad identifica se for usado soacute LF e quebra as linhas de acordo

5889

Arquivos - texto - CSV

Comma-separated values

O formato mais padronizado para tabelas (arrays 2D) em texto (frequentemente mas natildeo necessariamente ASCII)

Bem suportado por bibliotecas padratildeo de linguagens e outros softwares (Excel Calc Origin Google Docs etc)

Conteacutem Linhas de cabeccedilalho (opcionais mas recomendadas) linhas com qualquer texto geral

descrevendo o arquivo e em geral uma linha de tiacutetulo para as colunas da tabela Uma (apenas uma) tabela onde todas as linhas tecircm o mesmo nuacutemero de colunas

Colunas separadas por viacutergulas (opcionalmente pode ser outro separador) Linhas terminadas por newline (qualquer que seja) Strings delimitados por ldquo ldquo

Ex

NAMECALMPOSFILNAMEECHLPOSDISPPOSTARGNAMEPOSDIRCLASSMJD-OBSITIMECOADDSdec18s00010NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001dec18s00020NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001dec18s00120NIRSPEC-5-AO635800364500itan140NIRSPEC-5-AOp2 TITAN5408763000001dec18s00140NIRSPEC-5-AO626300364500itan140NIRSPEC-5-AOp1 TITAN5408763000001dec18s00151NIRSPEC-5-AO626300364500itan140NIRSPEC-5-AOp1ARC5408764000001dec18s00160NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001

Natildeo eacute necessaacuterio que as colunas tenham largura constante

Cabeccedilalho

5989

Arquivos - texto - CSVHaacute amplo suporte a leitura e gravaccedilatildeo de CSV sem precisar recorrer a procedimentos de baixo niacutevel

Podem ser diretamente importados em Excel Calc Origin Google Docs ou lido facilmente com bibliotecas padratildeo comuns Ex (IDL)

IDLgt c=read_csv(filesearch_scamcsvheader=h)IDLgt printhNAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS

IDLgt helpc Structure ltc8bca508gt 11 tags length=5256 data length=5248 refs=1 FIELD01 STRING Array[41] FIELD02 LONG Array[41] FIELD03 STRING Array[41] FIELD04 DOUBLE Array[41] FIELD05 DOUBLE Array[41] FIELD06 STRING Array[41] FIELD07 STRING Array[41] FIELD08 STRING Array[41] FIELD09 STRING Array[41] FIELD10 DOUBLE Array[41] FIELD11 LONG Array[41]

IDLgt printcfield01[03]dec18s0001 dec18s0002 dec18s0003 dec18s0004

IDLgt printcfield03[03]NIRSPEC-5-AO NIRSPEC-5-AO NIRSPEC-5-AO NIRSPEC-5-AO

6089

Arquivos - texto - CSVEx (IDL) Criaccedilatildeo de um CSV com uma tabela de valores

Criaccedilatildeo de 3 arrays 1D (12 elementos) um para cada coluna

IDLgt x=dindgen(3)IDLgt y=dindgen(4)IDLgt xx=reform(rebin(x34)12)IDLgt yy=reform(rebin(reform(y14)34)12)IDLgt f=xx+yy10IDLgt helpxxyyfXX DOUBLE = Array[12]YY DOUBLE = Array[12]F DOUBLE = Array[12]

Escrita do arquivo

IDLgt write_csvexamplecsvxxyyfheader=[XYX+10Y]

ResultadoXYX+10Y000000000000000000000000100000000000000010000000200000000000000020000000000000001000000010000000100000001000000011000000()

6189

Arquivos - texto - ldquoColunas regularesrdquoFixed column width

Natildeo eacute exatamente um padratildeo Eacute uma praacutetica comum

Armazena uma tabela (array 2D) de forma regular simples de ser interpretada e lida

Costumam ter linha(s) de cabeccedilalho descrevendo o conteuacutedo do arquivo em geral com uma linha para os nomes das colunas

As demais linhas conteacutem os dados sempre ocupando a mesma largura por coluna e escritos no mesmo formato em cada coluna

Costumam ser simples de ler inclusive interativamente (exs Excel Calc Origin read_ascii)

Ex (IDL) Uma simples tabela soacute de nuacutemeros

wavl CH4=33 wavl CH4=25 wavl CH4=10 wavl CH4=08 wavl CH4=05 wavl CH4=026 wavl CH4=02 477330000 0090130 477330000 0091110 477330000 0089250 477330000 0087000 477330000 0087140 477330000 0090080 477330000 0088110 480040000 0090930 480040000 0091930 480040000 0090160 480040000 0087930 480040000 0088110 480040000 0090950 480040000 0089090 482750000 0091710 482750000 0092730 482750000 0091060 482750000 0088850 482750000 0089080 482750000 0091810 482750000 0090060 485450000 0092530 485450000 0093570 485450000 0092000 485450000 0089810 485450000 0090100 485450000 0092730 485450000 0091090

IDLgt a=read_ascii(specs_27s_ntxtdata_start=1header=header)IDLgt printheader wavl CH4=33 wavl CH4=25 wavl CH4=10 wavl CH4=08 wavl CH4=05 wavl CH4=026 wavl CH4=02 IDLgt helpa Structure ltd423c9a8gt 1 tags length=224 data length=224 refs=1 FIELD01 FLOAT Array[14 4]

6289

Arquivos - texto - ldquoColunas regularesrdquoJaacute um arquivo um pouco mais difiacutecil de ler

NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS dec18s0001 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0002 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0003 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 FLAT 5408757812500 460000 5 dec18s0004 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 DARK 5408757812500 460000 5

Por ter colunas de tipos diferentes (strings inteiros reais) natildeo eacute possiacutevel o ler em um simples array Mas eacute faacutecil o colocar em uma estrutura de arrays onde cada campo eacute uma coluna

Especificando interativamente como interpretar as linhasIDLgt templ=ascii_template(filesearch_scamtxt)

Nome do campo (default mostrado)

Tipo do campo (identificado automaticamente)

Posiccedilatildeo (caracter) do comeccedilo (identificada automaticamente)

Linha de exemplo para verificar as colunas

6389

Arquivos - texto - ldquoColunas regularesrdquoDepois de feito o template o arquivo pode ser lido com apenas

IDLgt a=read_ascii(filesearch_scamtxttemplate=templ)IDLgt helpa Structure ltd4ec4608gt 11 tags length=416 data length=416 refs=1 FIELD01 STRING Array[4] FIELD02 LONG Array[4] FIELD03 STRING Array[4] FIELD04 FLOAT Array[4] FIELD05 FLOAT Array[4] FIELD06 STRING Array[4] FIELD07 STRING Array[4] FIELD08 STRING Array[4] FIELD09 FLOAT Array[4] FIELD10 FLOAT Array[4] FIELD11 LONG Array[4]IDLgt printafield01dec18s0001 dec18s0002 dec18s0003 dec18s0004IDLgt printafield04 626300 626300 626300 626300

O template (uma estrutura contendo dados sobre como ler o arquivo) pode ser usado para outros arquivos no mesmo formato No lugar de ter sido criado interativamente poderia ter sido lido de algum arquivo Poderia ter especificado nomes para os campos que seriam mais amigaacuteveis que coias como FIELD11

6489

Arquivos - texto - XML

Extensible Markup Language

Admite grande flexibilidade e por isso pode ter alta complexidade

Valores satildeo colocados dentro de uma estrutura em hieraacuterquica (em uma aacutervore) com os noacutes identificados pelos seus nomes (chaves)

Largamente usado em muitas aacutereas para armazenar conjuntos arbitraacuterios de quaisquer estruturas de dados

A maioria das aplicaccedilotildees usa um formato que eacute um subconjunto do XML especificado por um Schema comumente em um arquivo XML DTD (Document Type Definition)

6589

Arquivos - texto ndash XML ndash exemplos de usos

Armazenamento de dados de aplicaccedilotildees web (comum para exportar importar dados MediaWiki DokuWiki WordPress ADS Lattes etc)

Documentos Office (docx pptx xlsx) OpenOffice (odt opd ods)

Como versotildees de outros formatos FITSML XDF

ldquoScientific Dataset XML NASAs Astronomical Data Center (ADC) sponsors a number of research projects that

use XML for scientific data representation The XML activities at the ADC are sponsored and supported by the NASA Office of Space Science Applied Information Systems Research Program (AISRP)rdquo - httpxmlcoverpagesorgnasa-adchtml

Astronomical Instrument Markup Language (AIML)

SVG ndash Scalable Vector Graphics

Muitas de outras aplicaccedilotildees listadas em httpxmlcoverpagesorgxmlhtmlapplications

6689

Arquivos - texto ndash XML - exemploltxml version=10 gtltDOCTYPE Xdmf SYSTEM Xdmfdtd []gtltXdmf xmlnsxi=httpwwww3org2001XInclude Version=20gt ltDomaingt lt-- Example of Basic Topologies --gt ltInformation Name=Descriptiongt Example of a Polyvertex Topology ltInformationgt ltGrid Name=Polyvertex GridType=Uniformgt ltTopology TopologyType=Polyvertex Dimensions=3 NodesPerElement=3gt ltDataItem Format=XML Dimensions=3 3 NumberType=Floatgt 0 1 2 4 5 6 8 9 10 ltDataItemgt ltTopologygt ltGeometry Type=XYZgt ltDataItem Format=XML Dimensions=4 4 3gt 00 00 00 10 00 00()Que mostra que a interpretaccedilatildeo (parsing) de XML eacute em geral complexa

6789

Arquivos - texto - XML

Haacute muitas bibliotecas de alto niacutevel para fazer o processamento (parsing) e entregar os dados em uma estrutura conveniente

A complexidade em processar XML estaacute em decidir o que fazer com os dados jaacute que os arquivos podem ser muito complexos

As APIs (Application Programming Interfaces) mais comuns para processar XML que satildeo implementadas em muitas linguagens

DOM (Document Object Model) ndash manteacutem todo o conteuacutedo do em uma estrutura de dados (em geral uma aacutervore) em uma variaacutevel (em geral um objeto) Esta pode ser consultada para obter os valores de interesse para os alterar e usada para escrever um arquivo

SAX (Simple API for XML) ndash Interpretador (parser) por objetos O usuaacuterio escreve uma classe herdando da classe SAX provendo os meacutetodos que vatildeo processar os campos agrave medida em que estes satildeo lidos

6889

Arquivos - binaacuterios - FITSFlexible Image Transport System

O formato mais comum para observaccedilotildees astronocircmicas Tambeacutem usado para armazenar quaisquer dados mesmo natildeo relacionados a observaccedilotildees (especialmente tabelas como eacute praacutetica do STSCI)

Conteacutem um (ou mais) cabeccedilalho(s) de texto com metadados (informaccedilotildees sobre os dados como caracteriacutesticas (necessaacuterias para os ler) origem condiccedilotildees em que foram obtidos processamento realizado etc)

SIMPLE = T image conforms to FITS standard BITPIX = 32 bits per data value NAXIS = 2 number of axes NAXIS1 = 1024 NAXIS2 = 1024 BSCALE = 100000 Scaling factor BZERO = 000000 Scaling zero-point TELESCOP= Keck II Telescope SLITNAME= 0041x226 Slit Name SLITPA = 351979 Slit position angle SLITX = 131500 X pixel of the center of the slit LST = 12010446 local apparent sidereal time (()

Depois do cabeccedilalho haacute uma (ou mais) seccedilatildeo(otildees) de dados binaacuterios Costuma(m) ser array(s) 1D (espectros) 2D (imagens) ou 3D (ldquocubos de dadosrdquo)

De inteiros ou reais inteiros satildeo comuns em contagens de instrumentos reais para valores derivados (fluxos intensidades etc)

6989

Arquivos - binaacuterios - FITSNormalmente FITS satildeo lidos escritos por bibliotecas prontas de (relativamente) alto niacutevel usuaacuterio natildeo tem que saber como os dados satildeo armazenados no arquivo nem como os ler escrever Ex (IDL com a biblioteca idlastro)

IDLgt fits_info2dspectrumfits2dspectrumfits has 3 extensionsPrimary header 288 recordsNo dataExtension 1 -- SCI Header 144 records IMAGE ( 1201 1201 )Extension 2 -- ERR Header 72 records IMAGE ( 1201 1201 )Extension 3 -- DQ Header 72 records IMAGE ( 1201 1201 )

IDLgt mydata=readfits(2dspectrumfitsexten_no=1myheader) READFITS Reading FITS extension of type IMAGE READFITS Now reading 1201 by 1201 array

IDLgt extastmyheadermyastIDLgt sz=size(mydatadimensions)IDLgt xy2ad[1sz[0]][1sz[1]]myastcorners_acorners_dIDLgt printcorners_aCorners of the data array from file 2dspectrumfits are at 14487480 33063480

IDLgt printcorners_d -00041264444 00041402222

Obteacutem os dados de coordenadas (WCS) do header

Coloca os dados no array (2D de floats) mydata e o header no array (1D de strings) myheader

Calcula as coordenadas das quinas da imagem atraveacutes do WCS

Provecirc informaccedilotildees sobre o arquivo

7089

Arquivos - binaacuterios - ISIS Cube

Formatos como FITS se adequam muito a ter uma interface de mais alto niacutevel por objetos

Tambeacutem para dados em tabelas FITS muito mais trabalhosos de ler em baixo niacutevel que se adequam muito mais a mapas ou estruturas

Exemplo (de um formato semelhante a FITS ISIS cube)

O objeto ao ser criado lecirc todo o arquivo

cube=pp_editablecube(CM_1553510065_1_ircub)

Meacutetodos fornecem os dados desejados para obter quando necessaacuterio os dados de interesse

Find out the names of the backplanesprintcubegetproperty(backnames)Get the start time of the cubeprintcubegetfromheader(START_TIME)2007-084T100057286Z

Valores no cabeccedilalho podem ser convenientemente fornecidos como um mapa

header=cubeheader_as_hash()printheader[START_TIME]2007-084T100057286Z

7189

Arquivos - binaacuterios ndash ISIS Cube

Os dados satildeo fornecidos como arraysMake a contour plot of the latitudesc=contour(cubegetsuffixbyname(LATITUDE))Get the band with wavelength nearest to 21 (in the units used in the cube)selband=cubegetbandbywavelength(21wavelengths=selwavs)

Interfaces por overload tornam o acesso ainda mais conveniente

selband=cube[21]

selwavs=cube[21]

Retorna um array com a banda de comprimento de onda mais proacuteximo de 21 (microm)

Retorna o comprimento de onda mais proacuteximo de 21 (microm) da banda retornada acima

7289

Arquivos - binaacuterios ndash ISIS Cube Alteraccedilotildees feitas ao conteuacutedo satildeo automaticamente refletidas em todos os

lugares (cabeccedilalho em particular) afetados mantendo o objeto vaacutelido que pode depois ser gravado em um novo arquivo

IDLgt printcubelinescubesamplescubebands 64 64 256

IDLgt helpcubecoreltExpressiongt FLOAT = Array[64 64 256]

IDLgt cubecore=dblarr(100100256)

A linha acima natildeo eacute uma atribuiccedilatildeo eacute uma invocaccedilatildeo de meacutetodo Eacute equivalente acubesetpropertycore=dblarr(100100256)

Eacute o trabalho da funccedilatildeo setproperty decidir se a propriedade passada (core) faz sentido e se fizer fazer todo o trabalho necessaacuterio a esta mudanccedila Para o usuaacuterio eacute tudo automaacutetico e os dados da classe satildeo vaacutelidos o tempo todo

IDLgt helpcubecoreltExpressiongt DOUBLE = Array[100 100 256]

IDLgt printcubelinescubesamplescubebands 100 100 256

IDLgt cubesaveCM_1553510065_1_ir_editedcub

7389

Arquivos - binaacuterios ndash NetCDF e HDF5

Network Common Data Form e Hierarchical Data Format

Os dois uacutenicos formatos bem estabelecidos para dados cientiacuteficos geneacutericos

Armazenam dados como vaacuterias variaacuteveis e seus metadados Para cada variaacutevel haacute (ou pode haver) os metadados

Nome Dimensotildees (do array) Unidades Comentaacuterios

Ambos permitem arrays multidimensionais

Apenas HDF5 permite estruturas (daiacute vem a hierarquia)

Autodocumentados qualquer software que saiba ler um destes formatos lecirc qualquer arquivo sem precisar de conhecimento preacutevio sobre como o arquivo foi gerado

Muito bem suportados em bibliotecas padratildeo e natildeo padratildeo em softwares interativos e visualizadores (inclusive plugins para navegadores)

httpwwwunidataucaredusoftwarenetcdf httpenwikipediaorgwikiHdf5

NetCDF eacute mais simples de usar por natildeo ter hierarquia dando menos trabalho para ler e escrever dados Se hierarquia natildeo eacute necessaacuteria eacute mais conveniente de usar que HDF5

7489

Arquivos - binaacuterios - NetCDF e HDF5Haacute tambeacutem o formato CDL uma versatildeo ASCII do NetCDF A biblioteca padratildeo do NetCDF inclui conversores entre estes formatos

$ ncdump -h refspec_g01_0ncnetcdf refspec_g01_0 dimensions nlay = 51 nwn = 400 nleg = 33 numu = 2 nlev = 52 nphi = 3 ngas = 2 nwnc = 1 scal = 1 v3 = 3 dnl = 1 nk = 1 tdisr = UNLIMITED (0 currently) na = 16

variables float alb(nwn) float z(nlay) float t(nlay) float p(nlay) float wl(nwn) float iof(nwn) float mtau(nwn) float htau(nwn) float hctaus(nwn) float gtau(nwn) float outcos(scal) float phi(nleg) float phic(scal) float umu(numu) float flux(v3 nwn nlev) float mix(nlay ngas) float c(nlay) float psat(nlay) float ga(nwnc) float wlc(nwnc) float inc(scal) int dm(scal) int ord(scal) float fbeam(scal) float wn(nwn) float tautot(nwn nlay) float htaus(nwn nlay) float htaux(nwn nlay) float taug(nwn nlay) float phase(nwn nlay nleg) float ssa(nwn nlay) float uu(nwn nphi nlev numu) float u0u(nwn nlev numu) float tray(nwn nlay) float gtauo(tdisr nwn nlay)

Haacute 14 variaacuteveis usadas como dimensotildees para as 35 variaacuteveis que satildeo arrays

Ex alb(nwn) indica que alb eacute um array 1D de nwn elementos

nwn estaacute armazenado como uma das dimensotildees e eacute 400 portanto alb tem 400 elementos

Parte do conteuacutedo de um arquivo NetCDF em formato CDL (gerado pelo programa ncdump)

7589

Arquivos - binaacuterios - NetCDF e HDF5Conteuacutedo daquele arquivo visualizado com o ncview (acompanha a biblioteca NetCDF padratildeo)

7689

Arquivos - binaacuterios - NetCDF e HDF5O conteuacutedo de todo o arquivo pode ser lido facilmente com as bibliotecas disponiacuteveis e armazenado em contecirciners convenientes Usando um objeto que gera um resultado um pouco mais conveniente

IDLgt h=pp_readncdf(refspec_g01_0nchash)IDLgt printhvar_dims ltObjHeapVar229(HASH)gtvars ltObjHeapVar152(HASH)gtdims ltObjHeapVar118(HASH)gt

IDLgt printh[vars]T 173203 175459 175848 176001 175975 Z 431869 418858 406067 393403 380464 FLUX 300660 145536 0705180 0341669 0165532 PHASE 100000 0779034 0660858 0542052 0449983 TAUTOT0694377 0693420 0693474 0693540 0693636()

IDLgt help(h[vars])[TAUTOT]ltExpressiongt FLOAT = Array[51 400]

IDLgt print(h[var_dims])[TAUTOT]NLAY NWN

IDLgt print(h[dims])[(h[var_dims])[TAUTOT]]NLAY 51NWN 400

7789

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5)

Visualizaccedilatildeo da variaacutevel selecionada

Metadados e alguns valores da variaacutevel selecionada

Variaacutevel a ser criada com o conteuacutedo desta variaacutevel do arquivo

Hierarquia das variaacuteveis do arquivo

7889

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5) Imported variable az

IDLgt helpaz Structure ltd5723f38gt 13 tags length=448 data length=444 refs=1 _NAME STRING az _ICONTYPE STRING binary _TYPE STRING DATASET _FILE STRING INTENSI_test_409OUTh5 _PATH STRING _DATA DOUBLE Array[38] _NDIMENSIONS LONG 1 _DIMENSIONS ULONG64 Array[1] _NELEMENTS ULONG64 38 _DATATYPE STRING H5T_FLOAT _STORAGESIZE ULONG 8 _PRECISION LONG 64 _SIGN STRING

IDLgt printaz_data 00000000 10000000 20000000 30000000 40000000 50000000 60000000 80000000 ()

7989

Arquivos - binaacuterios - imagens

JPEG JPEG200 TIFF GeoTIFF etc

Os formatos comuns de imagens satildeo bem suportados em muacuteltiplas plataformas para uso dentro de programas e interativamente

Alguns formatos tecircm opccedilatildeo de compressatildeo com perda eou sem perda

Armazenam imagens como arrays 2D ou 3D (3D frequumlentemente limitado a 3 ou 4 em uma das dimensotildees uma imagem em 3 ou 4 bandas) de inteiros ou (em alguns formatos) reais

Alguns formatos permitem armazenar metadados para caracterizar as imagens armazenadas

JPEG2000 e GeoTIFF (um subconjunto de TIFF) comuns em astronomia e aacutereas proacuteximas

8089

Arquivos - binaacuterios ndash imagens ndash exemplo (IDL)IDLgt printquery_tiff(issmap_2009tiffinfogeotiff=geo) 1

IDLgt helpinfo Structure ltd4eca4b8gt 18 tags length=144 data length=132 refs=1 CHANNELS LONG 4 DIMENSIONS LONG Array[2] IMAGE_INDEX LONG 0 NUM_IMAGES LONG 1 PIXEL_TYPE INT 1 TYPE STRING TIFF BITS_PER_SAMPLE LONG 8 POSITION FLOAT Array[2] RESOLUTION FLOAT Array[2] UNITS LONG 2 TILE_SIZE LONG Array[2] DESCRIPTION STRING ISS (2009) DATE_TIME STRING 20100218 012436()

IDLgt helpgeo Structure ltd4efa1b8gt 10 tags length=264 data length=262 refs=1 MODELPIXELSCALETAG DOUBLE Array[3] MODELTIEPOINTTAG DOUBLE Array[6 4] GEOGRAPHICTYPEGEOKEY INT 4035 GEOGSEMIMAJORAXISGEOKEY DOUBLE 25750000 GEOGSEMIMINORAXISGEOKEY DOUBLE 25750000()

IDLgt myimage=read_tiff(issmap_2009tiff) Lecirc a imagem para o array myimage

Obteacutem informaccedilotildees sobre o arquivo

8189

Arquivos - binaacuterios ndash formatos nativosLinguagens como IDL R Python Java tecircm seu formato nativo binaacuterio acessado em alto niacutevel Basta mandar salvar ler variaacuteveis no do arquivo a biblioteca padratildeo automagicamente faz todo o trabalho de decidir como gravar ler os dados

Conveniente de usar na proacutepria linguagem Mas raramente existem bibliotecas para ler gravar o formato nativo de uma linguagem a partir de outra Ex (IDL)

IDLgt savefile=2dspectrumsavmydatamyheadercorners_dcorners_averbosecompress SAVE Portable (XDR) compressed SAVERESTORE file SAVE Saved variable MYDATA SAVE Saved variable MYHEADER()

Pode ser lido com apenas (haacute formas mais elaboradas)

IDLgt restore2dspectrumsavverbose RESTORE Portable (XDR) compressed SAVERESTORE file RESTORE Save file written by ltunknowngtltunknowngt Thu Jan 27 191422 2011 RESTORE IDL version 801 (linux x86_64) RESTORE Restored variable MYDATA RESTORE Restored variable MYHEADER()

IDLgt helpmydatamyheadercorners_dcorners_aMYDATA FLOAT = Array[1201 1201]MYHEADER STRING = Array[144]()

8289

Arquivos - processamento em baixo niacutevel

Nem sempre um formato padratildeo eacute a melhor escolha para o problema

Nem sempre haacute escolha (pode-se ter que trabalhar com arquivos que jaacute foram escritos em algum formato proprietaacuterio)

Agraves vezes o formato eacute padratildeo mas natildeo haacute bom suporte a ele disponiacutevel

Em todos estes casos eacute necessaacuterio escrever rotinas em baixo niacutevel que vatildeo ler processar diretamente o conteuacutedo do arquivo

Preferencialmente criando interfaces de alto niacutevel para o programa que vai as usar

8389

Arquivos - processamento em baixo niacutevel - texto

Tomando o exemplo anterior onde as colunas eram de diferentes tipos

NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS dec18s0001 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0002 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0003 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 FLAT 5408757812500 460000 5 dec18s0004 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 DARK 5408757812500 460000 5

A forma mais simples de o ler diretamente eacute definir uma estrutura para receber cada linha e um array destas estruturas para receber todo o arquivo Ex (IDL)

IDLgt record=namecalmpos0filnameechlpos0d0disppos0d0targnameposdirclassmjd_obsitime0d0coadds0IDLgt nlines=file_lines(filesearch_scamtxt)IDLgt mydata=replicate(recordnlines-1)IDLgt header=

Depois de definidas as variaacuteveis que vatildeo receber os dados o arquivo pode ser lido

IDLgt openrunitfilesearch_scamtxtget_lunIDLgt readfunitheaderIDLgt readfunitmydataformat=(A14I8A15F104F104A18A19A15F158F105I15)IDLgt free_lununit

A gravaccedilatildeo de um arquivo texto poderia ser feita de forma semelhante apenas trocando openr por openw (abrir o arquivo para gravaccedilatildeo natildeo leitura) e readf por printf

O arquivo eacute aberto em uma unidade (unit) usada para especificar de onde eacute feita a leitura

Ao final o arquivo eacute fechado

8489

Arquivos - processamento em baixo niacutevel - texto

O que resulta em

IDLgt printheader NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS

IDLgt helpmydataMYDATA STRUCT = -gt ltAnonymousgt Array[4]

IDLgt helpmydata[0] Structure ltd5e38f68gt 11 tags length=136 data length=124 refs=3 NAME STRING dec18s0001 CALMPOS INT 0 FILNAME STRING NIRSPEC-5-AO ECHLPOS DOUBLE 62630000 DISPPOS DOUBLE 36450000 TARGNAME STRING HD85258 POSDIR STRING NIRSPEC-5-AOp1 CLASS STRING STAR MJD_OBS STRING 54087574 ITIME DOUBLE 10000000 COADDS INT 1

Este caso eacute mais complicado que os mais comuns por haver colunas de strings

Se todas fossem de nuacutemeros natildeo teria sido necessaacuterio especificar o formato explicitamente As colunas teriam sido adivinhadas pela biblioteca que lecirc o arquivo Poderia ter sido lido escrito soacute com um array de nuacutemeros sem estruturas

8589

Arquivos - processamento em baixo niacutevel - binaacuterio

Formatos binaacuterios podem ser definidos de qualquer forma O arquivo eacute apenas um conjunto de bytes Cabe ao software saber como os interpretar

Uma escolha comum para que sejam autodocumentados eacute incluir um cabeccedilalho de texto informando as caracteriacutesticas dos dados necessaacuterias para os ler

Ex (IDL) criar um arquivo que armazene um array de doubles com um cabeccedilalho informando as dimensotildees para que o programa que o lecirc saiba como ler os dados

Inventa dados e abre o arquivo

IDLgt data_to_write=dindgen(34)IDLgt openwunitbinary_exampledatget_lun

Escreve as dimensotildees como texto

IDLgt printfunitdimensions of the double array stored belowIDLgt printfunitsize(data_to_writedimensions)

Escreve os dados binaacuterios

IDLgt writeuunitdata_to_write

Fecha o arquivo

IDLgt free_lununit

Escreve em binaacuterio (write unformatted)

8689

Arquivos - processamento em baixo niacutevel - binaacuterio

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

dimensions of the double array stored below 3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

8789

Arquivos - processamento em baixo niacutevel - binaacuterioA leitura deste arquivo eacute igualmente simples

IDLgt header=IDLgt dims=[00]IDLgt openrunitbinary_exampledatget_lun

Lecirc as dimensotildees (armazenadas como texto)

IDLgt readfunitheaderIDLgt readfunitdims

Lecirc a parte binaacuteria depois de saber as dimensotildees

IDLgt data_read=dblarr(dims)IDLgt readuunitdata_read

Fecha o arquivo

IDLgt free_lununit

Verifica que os dados foram gravados e lidos corretamente

IDLgt printarray_equal(data_to_writedata_read) 1

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Lecirc dados binaacuterios (read unformatted)

8889

Sumaacuterio

5 ndash Slides em httpwwwppenteadonetpeapea04_strings_iopdf Strings Expressotildees regulares Arquivos

httpwwwppenteadonetpea

8989

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89

Arquivos - padrotildees comuns em astronomia (exs adiante)

Texto

CSV Comma-separated values - bem suportado por muitos softwares

ldquoColunas fixasrdquo Natildeo eacute um padratildeo bem definido mas eacute praacutetica comum para tabelas (2D)

XML Extensible Markup Language - O padratildeo texto mais flexiacutevel de grande uso em programaccedilatildeo geral para armazenar qualquer coisa com frequumlecircncia de forma hieraacuterquica Bem suportado por linguagens modernas (e modernizadas) e bibliotecas das principais

linguagens gerais Alta complexidade o torna trabalhoso de usar

5589

Arquivos - padrotildees comuns em astronomia (exs adiante)Binaacuterios

FITS Flexible Image Transport System - o mais comum para observaccedilotildees astronocircmicas Conteacutem os dados (em geral arrays 1D 2D ou 3D) e documentaccedilatildeo (nos cabeccedilalhos) sobre a origem e caracteriacutesticas dos dados Tambeacutem usado para armazenar tabelas de dados quaisquer mesmo que natildeo sejam observaccedilotildees (especialmente pelo STSCI) Variam muito em qualidade de documentaccedilatildeo

NetCDF Network Common Data Form - evoluccedilatildeo do CDF autodocumentado eacute comum e bem suportado para vaacuterios arrays de dados

HDF5 Hierarchical Data Format ndash autodocumentado comum e bem suportado permitindo aleacutem de simples arrays estruturas (eacute um formato hieraacuterquico)

Formatos de imagens JPEG JPEG2000 TIFF GeoTIFF etc - voltados para arrays 2D3D de inteiros ou (em alguns casos) reais com ou sem compressatildeo JPEG2000 tem caracteriacutesticas mais avanccediladas como imagens multiresoluccedilatildeo

Formatos vetoriais PS EPS DXF SHP SVG - variados niacuteveis de suporte a armazenamento de vetores e formas em 2D ou 3D

ISIS Cube semelhante em caracteriacutesticas ao FITS mais usado em sensoriamento remoto geociecircncias e ciecircncias planetaacuterias em geral para observaccedilotildees 1D 2D ou 3D

Formatos nativos de linguagens todo o trabalho de leitura e gravaccedilatildeo eacute feito automagicamente pela biblioteca padratildeo em IDL R Python Java

5689

Arquivos texto - newlines

Apesar do que possa parecer arquivos texto natildeo tecircm intrinsecamente vaacuterias linhas Arquivos texto satildeo soacute uma sequumlecircncia 1D de caracteres em alguma codificaccedilatildeo Separaccedilatildeo em linhas (equivalente a interpretar o arquivo como 2D em linhas e colunas) eacute

especificada por convenccedilotildees Natildeo haacute apenas uma convenccedilatildeo para o fim de linhas

A mais primitiva convenccedilatildeo eacute separaccedilatildeo nenhuma estipula-se que linhas tenham um nuacutemero fixo N de caracteres e cabe ao software que lecirc o arquivo entender que uma linha nova ocorre regularmente a cada N caracteres

Eacute a forma menos portaacutevel e mais inconveniente eacute necessaacuterio o conhecimento preacutevio (ou por inspeccedilatildeo do arquivo) de quantos caracteres haacute por linha

A maior parte dos editores de texto natildeo vai saber separar linhas desta forma (por falta deste conhecimento preacutevio) Exemplo (de um FITS real)

SIMPLE = T Fits standard BITPIX = 16 Bits per pixel NAXIS = 0 Number of axes EXTEND = T File may contain extensions

O que com as linhas quebradas nos lugares certos seria

SIMPLE = T Fits standard BITPIX = 16 Bits per pixel NAXIS = 0 Number of axes EXTEND = T File may contain extensions

5789

Arquivos texto - newlines

A forma mais comum de especificar linhas eacute com um marcador do final de linha (newline)

Eacute um caractere especial natildeo normalmente presente no texto que serve para marcar fim de linhas

Mas natildeo haacute soacute um padratildeo de newline Os mais comuns

LF (Line Feed ASCII 10) ndash Unix Linux Mac OS X

CR - (Carriage Return ASCII 13) - Mac OS lt10

CR+LF (CR seguido de LF) - Windows DOS

Eacute o motivo de o Notepad (Windows) natildeo entender as quebras de linha de arquivos escritos com o formato nativo de Linux o arquivo soacute tem LF enquanto o editor espera CR+LF

Alguns sistemas (strings em vaacuterias linguagens por exemplo) usam o coacutedigo de escape n para indicar newline que eacute codificado de acordo com o padratildeo sendo usado

Em geral bibliotecas de leitura e gravaccedilatildeo de arquivos usam (default pelo menos) o newline nativo do sistema em que satildeo usadas

Programas de conversatildeo entre os sistemas satildeo comuns (ex dos2unix)

O Wordpad identifica se for usado soacute LF e quebra as linhas de acordo

5889

Arquivos - texto - CSV

Comma-separated values

O formato mais padronizado para tabelas (arrays 2D) em texto (frequentemente mas natildeo necessariamente ASCII)

Bem suportado por bibliotecas padratildeo de linguagens e outros softwares (Excel Calc Origin Google Docs etc)

Conteacutem Linhas de cabeccedilalho (opcionais mas recomendadas) linhas com qualquer texto geral

descrevendo o arquivo e em geral uma linha de tiacutetulo para as colunas da tabela Uma (apenas uma) tabela onde todas as linhas tecircm o mesmo nuacutemero de colunas

Colunas separadas por viacutergulas (opcionalmente pode ser outro separador) Linhas terminadas por newline (qualquer que seja) Strings delimitados por ldquo ldquo

Ex

NAMECALMPOSFILNAMEECHLPOSDISPPOSTARGNAMEPOSDIRCLASSMJD-OBSITIMECOADDSdec18s00010NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001dec18s00020NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001dec18s00120NIRSPEC-5-AO635800364500itan140NIRSPEC-5-AOp2 TITAN5408763000001dec18s00140NIRSPEC-5-AO626300364500itan140NIRSPEC-5-AOp1 TITAN5408763000001dec18s00151NIRSPEC-5-AO626300364500itan140NIRSPEC-5-AOp1ARC5408764000001dec18s00160NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001

Natildeo eacute necessaacuterio que as colunas tenham largura constante

Cabeccedilalho

5989

Arquivos - texto - CSVHaacute amplo suporte a leitura e gravaccedilatildeo de CSV sem precisar recorrer a procedimentos de baixo niacutevel

Podem ser diretamente importados em Excel Calc Origin Google Docs ou lido facilmente com bibliotecas padratildeo comuns Ex (IDL)

IDLgt c=read_csv(filesearch_scamcsvheader=h)IDLgt printhNAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS

IDLgt helpc Structure ltc8bca508gt 11 tags length=5256 data length=5248 refs=1 FIELD01 STRING Array[41] FIELD02 LONG Array[41] FIELD03 STRING Array[41] FIELD04 DOUBLE Array[41] FIELD05 DOUBLE Array[41] FIELD06 STRING Array[41] FIELD07 STRING Array[41] FIELD08 STRING Array[41] FIELD09 STRING Array[41] FIELD10 DOUBLE Array[41] FIELD11 LONG Array[41]

IDLgt printcfield01[03]dec18s0001 dec18s0002 dec18s0003 dec18s0004

IDLgt printcfield03[03]NIRSPEC-5-AO NIRSPEC-5-AO NIRSPEC-5-AO NIRSPEC-5-AO

6089

Arquivos - texto - CSVEx (IDL) Criaccedilatildeo de um CSV com uma tabela de valores

Criaccedilatildeo de 3 arrays 1D (12 elementos) um para cada coluna

IDLgt x=dindgen(3)IDLgt y=dindgen(4)IDLgt xx=reform(rebin(x34)12)IDLgt yy=reform(rebin(reform(y14)34)12)IDLgt f=xx+yy10IDLgt helpxxyyfXX DOUBLE = Array[12]YY DOUBLE = Array[12]F DOUBLE = Array[12]

Escrita do arquivo

IDLgt write_csvexamplecsvxxyyfheader=[XYX+10Y]

ResultadoXYX+10Y000000000000000000000000100000000000000010000000200000000000000020000000000000001000000010000000100000001000000011000000()

6189

Arquivos - texto - ldquoColunas regularesrdquoFixed column width

Natildeo eacute exatamente um padratildeo Eacute uma praacutetica comum

Armazena uma tabela (array 2D) de forma regular simples de ser interpretada e lida

Costumam ter linha(s) de cabeccedilalho descrevendo o conteuacutedo do arquivo em geral com uma linha para os nomes das colunas

As demais linhas conteacutem os dados sempre ocupando a mesma largura por coluna e escritos no mesmo formato em cada coluna

Costumam ser simples de ler inclusive interativamente (exs Excel Calc Origin read_ascii)

Ex (IDL) Uma simples tabela soacute de nuacutemeros

wavl CH4=33 wavl CH4=25 wavl CH4=10 wavl CH4=08 wavl CH4=05 wavl CH4=026 wavl CH4=02 477330000 0090130 477330000 0091110 477330000 0089250 477330000 0087000 477330000 0087140 477330000 0090080 477330000 0088110 480040000 0090930 480040000 0091930 480040000 0090160 480040000 0087930 480040000 0088110 480040000 0090950 480040000 0089090 482750000 0091710 482750000 0092730 482750000 0091060 482750000 0088850 482750000 0089080 482750000 0091810 482750000 0090060 485450000 0092530 485450000 0093570 485450000 0092000 485450000 0089810 485450000 0090100 485450000 0092730 485450000 0091090

IDLgt a=read_ascii(specs_27s_ntxtdata_start=1header=header)IDLgt printheader wavl CH4=33 wavl CH4=25 wavl CH4=10 wavl CH4=08 wavl CH4=05 wavl CH4=026 wavl CH4=02 IDLgt helpa Structure ltd423c9a8gt 1 tags length=224 data length=224 refs=1 FIELD01 FLOAT Array[14 4]

6289

Arquivos - texto - ldquoColunas regularesrdquoJaacute um arquivo um pouco mais difiacutecil de ler

NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS dec18s0001 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0002 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0003 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 FLAT 5408757812500 460000 5 dec18s0004 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 DARK 5408757812500 460000 5

Por ter colunas de tipos diferentes (strings inteiros reais) natildeo eacute possiacutevel o ler em um simples array Mas eacute faacutecil o colocar em uma estrutura de arrays onde cada campo eacute uma coluna

Especificando interativamente como interpretar as linhasIDLgt templ=ascii_template(filesearch_scamtxt)

Nome do campo (default mostrado)

Tipo do campo (identificado automaticamente)

Posiccedilatildeo (caracter) do comeccedilo (identificada automaticamente)

Linha de exemplo para verificar as colunas

6389

Arquivos - texto - ldquoColunas regularesrdquoDepois de feito o template o arquivo pode ser lido com apenas

IDLgt a=read_ascii(filesearch_scamtxttemplate=templ)IDLgt helpa Structure ltd4ec4608gt 11 tags length=416 data length=416 refs=1 FIELD01 STRING Array[4] FIELD02 LONG Array[4] FIELD03 STRING Array[4] FIELD04 FLOAT Array[4] FIELD05 FLOAT Array[4] FIELD06 STRING Array[4] FIELD07 STRING Array[4] FIELD08 STRING Array[4] FIELD09 FLOAT Array[4] FIELD10 FLOAT Array[4] FIELD11 LONG Array[4]IDLgt printafield01dec18s0001 dec18s0002 dec18s0003 dec18s0004IDLgt printafield04 626300 626300 626300 626300

O template (uma estrutura contendo dados sobre como ler o arquivo) pode ser usado para outros arquivos no mesmo formato No lugar de ter sido criado interativamente poderia ter sido lido de algum arquivo Poderia ter especificado nomes para os campos que seriam mais amigaacuteveis que coias como FIELD11

6489

Arquivos - texto - XML

Extensible Markup Language

Admite grande flexibilidade e por isso pode ter alta complexidade

Valores satildeo colocados dentro de uma estrutura em hieraacuterquica (em uma aacutervore) com os noacutes identificados pelos seus nomes (chaves)

Largamente usado em muitas aacutereas para armazenar conjuntos arbitraacuterios de quaisquer estruturas de dados

A maioria das aplicaccedilotildees usa um formato que eacute um subconjunto do XML especificado por um Schema comumente em um arquivo XML DTD (Document Type Definition)

6589

Arquivos - texto ndash XML ndash exemplos de usos

Armazenamento de dados de aplicaccedilotildees web (comum para exportar importar dados MediaWiki DokuWiki WordPress ADS Lattes etc)

Documentos Office (docx pptx xlsx) OpenOffice (odt opd ods)

Como versotildees de outros formatos FITSML XDF

ldquoScientific Dataset XML NASAs Astronomical Data Center (ADC) sponsors a number of research projects that

use XML for scientific data representation The XML activities at the ADC are sponsored and supported by the NASA Office of Space Science Applied Information Systems Research Program (AISRP)rdquo - httpxmlcoverpagesorgnasa-adchtml

Astronomical Instrument Markup Language (AIML)

SVG ndash Scalable Vector Graphics

Muitas de outras aplicaccedilotildees listadas em httpxmlcoverpagesorgxmlhtmlapplications

6689

Arquivos - texto ndash XML - exemploltxml version=10 gtltDOCTYPE Xdmf SYSTEM Xdmfdtd []gtltXdmf xmlnsxi=httpwwww3org2001XInclude Version=20gt ltDomaingt lt-- Example of Basic Topologies --gt ltInformation Name=Descriptiongt Example of a Polyvertex Topology ltInformationgt ltGrid Name=Polyvertex GridType=Uniformgt ltTopology TopologyType=Polyvertex Dimensions=3 NodesPerElement=3gt ltDataItem Format=XML Dimensions=3 3 NumberType=Floatgt 0 1 2 4 5 6 8 9 10 ltDataItemgt ltTopologygt ltGeometry Type=XYZgt ltDataItem Format=XML Dimensions=4 4 3gt 00 00 00 10 00 00()Que mostra que a interpretaccedilatildeo (parsing) de XML eacute em geral complexa

6789

Arquivos - texto - XML

Haacute muitas bibliotecas de alto niacutevel para fazer o processamento (parsing) e entregar os dados em uma estrutura conveniente

A complexidade em processar XML estaacute em decidir o que fazer com os dados jaacute que os arquivos podem ser muito complexos

As APIs (Application Programming Interfaces) mais comuns para processar XML que satildeo implementadas em muitas linguagens

DOM (Document Object Model) ndash manteacutem todo o conteuacutedo do em uma estrutura de dados (em geral uma aacutervore) em uma variaacutevel (em geral um objeto) Esta pode ser consultada para obter os valores de interesse para os alterar e usada para escrever um arquivo

SAX (Simple API for XML) ndash Interpretador (parser) por objetos O usuaacuterio escreve uma classe herdando da classe SAX provendo os meacutetodos que vatildeo processar os campos agrave medida em que estes satildeo lidos

6889

Arquivos - binaacuterios - FITSFlexible Image Transport System

O formato mais comum para observaccedilotildees astronocircmicas Tambeacutem usado para armazenar quaisquer dados mesmo natildeo relacionados a observaccedilotildees (especialmente tabelas como eacute praacutetica do STSCI)

Conteacutem um (ou mais) cabeccedilalho(s) de texto com metadados (informaccedilotildees sobre os dados como caracteriacutesticas (necessaacuterias para os ler) origem condiccedilotildees em que foram obtidos processamento realizado etc)

SIMPLE = T image conforms to FITS standard BITPIX = 32 bits per data value NAXIS = 2 number of axes NAXIS1 = 1024 NAXIS2 = 1024 BSCALE = 100000 Scaling factor BZERO = 000000 Scaling zero-point TELESCOP= Keck II Telescope SLITNAME= 0041x226 Slit Name SLITPA = 351979 Slit position angle SLITX = 131500 X pixel of the center of the slit LST = 12010446 local apparent sidereal time (()

Depois do cabeccedilalho haacute uma (ou mais) seccedilatildeo(otildees) de dados binaacuterios Costuma(m) ser array(s) 1D (espectros) 2D (imagens) ou 3D (ldquocubos de dadosrdquo)

De inteiros ou reais inteiros satildeo comuns em contagens de instrumentos reais para valores derivados (fluxos intensidades etc)

6989

Arquivos - binaacuterios - FITSNormalmente FITS satildeo lidos escritos por bibliotecas prontas de (relativamente) alto niacutevel usuaacuterio natildeo tem que saber como os dados satildeo armazenados no arquivo nem como os ler escrever Ex (IDL com a biblioteca idlastro)

IDLgt fits_info2dspectrumfits2dspectrumfits has 3 extensionsPrimary header 288 recordsNo dataExtension 1 -- SCI Header 144 records IMAGE ( 1201 1201 )Extension 2 -- ERR Header 72 records IMAGE ( 1201 1201 )Extension 3 -- DQ Header 72 records IMAGE ( 1201 1201 )

IDLgt mydata=readfits(2dspectrumfitsexten_no=1myheader) READFITS Reading FITS extension of type IMAGE READFITS Now reading 1201 by 1201 array

IDLgt extastmyheadermyastIDLgt sz=size(mydatadimensions)IDLgt xy2ad[1sz[0]][1sz[1]]myastcorners_acorners_dIDLgt printcorners_aCorners of the data array from file 2dspectrumfits are at 14487480 33063480

IDLgt printcorners_d -00041264444 00041402222

Obteacutem os dados de coordenadas (WCS) do header

Coloca os dados no array (2D de floats) mydata e o header no array (1D de strings) myheader

Calcula as coordenadas das quinas da imagem atraveacutes do WCS

Provecirc informaccedilotildees sobre o arquivo

7089

Arquivos - binaacuterios - ISIS Cube

Formatos como FITS se adequam muito a ter uma interface de mais alto niacutevel por objetos

Tambeacutem para dados em tabelas FITS muito mais trabalhosos de ler em baixo niacutevel que se adequam muito mais a mapas ou estruturas

Exemplo (de um formato semelhante a FITS ISIS cube)

O objeto ao ser criado lecirc todo o arquivo

cube=pp_editablecube(CM_1553510065_1_ircub)

Meacutetodos fornecem os dados desejados para obter quando necessaacuterio os dados de interesse

Find out the names of the backplanesprintcubegetproperty(backnames)Get the start time of the cubeprintcubegetfromheader(START_TIME)2007-084T100057286Z

Valores no cabeccedilalho podem ser convenientemente fornecidos como um mapa

header=cubeheader_as_hash()printheader[START_TIME]2007-084T100057286Z

7189

Arquivos - binaacuterios ndash ISIS Cube

Os dados satildeo fornecidos como arraysMake a contour plot of the latitudesc=contour(cubegetsuffixbyname(LATITUDE))Get the band with wavelength nearest to 21 (in the units used in the cube)selband=cubegetbandbywavelength(21wavelengths=selwavs)

Interfaces por overload tornam o acesso ainda mais conveniente

selband=cube[21]

selwavs=cube[21]

Retorna um array com a banda de comprimento de onda mais proacuteximo de 21 (microm)

Retorna o comprimento de onda mais proacuteximo de 21 (microm) da banda retornada acima

7289

Arquivos - binaacuterios ndash ISIS Cube Alteraccedilotildees feitas ao conteuacutedo satildeo automaticamente refletidas em todos os

lugares (cabeccedilalho em particular) afetados mantendo o objeto vaacutelido que pode depois ser gravado em um novo arquivo

IDLgt printcubelinescubesamplescubebands 64 64 256

IDLgt helpcubecoreltExpressiongt FLOAT = Array[64 64 256]

IDLgt cubecore=dblarr(100100256)

A linha acima natildeo eacute uma atribuiccedilatildeo eacute uma invocaccedilatildeo de meacutetodo Eacute equivalente acubesetpropertycore=dblarr(100100256)

Eacute o trabalho da funccedilatildeo setproperty decidir se a propriedade passada (core) faz sentido e se fizer fazer todo o trabalho necessaacuterio a esta mudanccedila Para o usuaacuterio eacute tudo automaacutetico e os dados da classe satildeo vaacutelidos o tempo todo

IDLgt helpcubecoreltExpressiongt DOUBLE = Array[100 100 256]

IDLgt printcubelinescubesamplescubebands 100 100 256

IDLgt cubesaveCM_1553510065_1_ir_editedcub

7389

Arquivos - binaacuterios ndash NetCDF e HDF5

Network Common Data Form e Hierarchical Data Format

Os dois uacutenicos formatos bem estabelecidos para dados cientiacuteficos geneacutericos

Armazenam dados como vaacuterias variaacuteveis e seus metadados Para cada variaacutevel haacute (ou pode haver) os metadados

Nome Dimensotildees (do array) Unidades Comentaacuterios

Ambos permitem arrays multidimensionais

Apenas HDF5 permite estruturas (daiacute vem a hierarquia)

Autodocumentados qualquer software que saiba ler um destes formatos lecirc qualquer arquivo sem precisar de conhecimento preacutevio sobre como o arquivo foi gerado

Muito bem suportados em bibliotecas padratildeo e natildeo padratildeo em softwares interativos e visualizadores (inclusive plugins para navegadores)

httpwwwunidataucaredusoftwarenetcdf httpenwikipediaorgwikiHdf5

NetCDF eacute mais simples de usar por natildeo ter hierarquia dando menos trabalho para ler e escrever dados Se hierarquia natildeo eacute necessaacuteria eacute mais conveniente de usar que HDF5

7489

Arquivos - binaacuterios - NetCDF e HDF5Haacute tambeacutem o formato CDL uma versatildeo ASCII do NetCDF A biblioteca padratildeo do NetCDF inclui conversores entre estes formatos

$ ncdump -h refspec_g01_0ncnetcdf refspec_g01_0 dimensions nlay = 51 nwn = 400 nleg = 33 numu = 2 nlev = 52 nphi = 3 ngas = 2 nwnc = 1 scal = 1 v3 = 3 dnl = 1 nk = 1 tdisr = UNLIMITED (0 currently) na = 16

variables float alb(nwn) float z(nlay) float t(nlay) float p(nlay) float wl(nwn) float iof(nwn) float mtau(nwn) float htau(nwn) float hctaus(nwn) float gtau(nwn) float outcos(scal) float phi(nleg) float phic(scal) float umu(numu) float flux(v3 nwn nlev) float mix(nlay ngas) float c(nlay) float psat(nlay) float ga(nwnc) float wlc(nwnc) float inc(scal) int dm(scal) int ord(scal) float fbeam(scal) float wn(nwn) float tautot(nwn nlay) float htaus(nwn nlay) float htaux(nwn nlay) float taug(nwn nlay) float phase(nwn nlay nleg) float ssa(nwn nlay) float uu(nwn nphi nlev numu) float u0u(nwn nlev numu) float tray(nwn nlay) float gtauo(tdisr nwn nlay)

Haacute 14 variaacuteveis usadas como dimensotildees para as 35 variaacuteveis que satildeo arrays

Ex alb(nwn) indica que alb eacute um array 1D de nwn elementos

nwn estaacute armazenado como uma das dimensotildees e eacute 400 portanto alb tem 400 elementos

Parte do conteuacutedo de um arquivo NetCDF em formato CDL (gerado pelo programa ncdump)

7589

Arquivos - binaacuterios - NetCDF e HDF5Conteuacutedo daquele arquivo visualizado com o ncview (acompanha a biblioteca NetCDF padratildeo)

7689

Arquivos - binaacuterios - NetCDF e HDF5O conteuacutedo de todo o arquivo pode ser lido facilmente com as bibliotecas disponiacuteveis e armazenado em contecirciners convenientes Usando um objeto que gera um resultado um pouco mais conveniente

IDLgt h=pp_readncdf(refspec_g01_0nchash)IDLgt printhvar_dims ltObjHeapVar229(HASH)gtvars ltObjHeapVar152(HASH)gtdims ltObjHeapVar118(HASH)gt

IDLgt printh[vars]T 173203 175459 175848 176001 175975 Z 431869 418858 406067 393403 380464 FLUX 300660 145536 0705180 0341669 0165532 PHASE 100000 0779034 0660858 0542052 0449983 TAUTOT0694377 0693420 0693474 0693540 0693636()

IDLgt help(h[vars])[TAUTOT]ltExpressiongt FLOAT = Array[51 400]

IDLgt print(h[var_dims])[TAUTOT]NLAY NWN

IDLgt print(h[dims])[(h[var_dims])[TAUTOT]]NLAY 51NWN 400

7789

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5)

Visualizaccedilatildeo da variaacutevel selecionada

Metadados e alguns valores da variaacutevel selecionada

Variaacutevel a ser criada com o conteuacutedo desta variaacutevel do arquivo

Hierarquia das variaacuteveis do arquivo

7889

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5) Imported variable az

IDLgt helpaz Structure ltd5723f38gt 13 tags length=448 data length=444 refs=1 _NAME STRING az _ICONTYPE STRING binary _TYPE STRING DATASET _FILE STRING INTENSI_test_409OUTh5 _PATH STRING _DATA DOUBLE Array[38] _NDIMENSIONS LONG 1 _DIMENSIONS ULONG64 Array[1] _NELEMENTS ULONG64 38 _DATATYPE STRING H5T_FLOAT _STORAGESIZE ULONG 8 _PRECISION LONG 64 _SIGN STRING

IDLgt printaz_data 00000000 10000000 20000000 30000000 40000000 50000000 60000000 80000000 ()

7989

Arquivos - binaacuterios - imagens

JPEG JPEG200 TIFF GeoTIFF etc

Os formatos comuns de imagens satildeo bem suportados em muacuteltiplas plataformas para uso dentro de programas e interativamente

Alguns formatos tecircm opccedilatildeo de compressatildeo com perda eou sem perda

Armazenam imagens como arrays 2D ou 3D (3D frequumlentemente limitado a 3 ou 4 em uma das dimensotildees uma imagem em 3 ou 4 bandas) de inteiros ou (em alguns formatos) reais

Alguns formatos permitem armazenar metadados para caracterizar as imagens armazenadas

JPEG2000 e GeoTIFF (um subconjunto de TIFF) comuns em astronomia e aacutereas proacuteximas

8089

Arquivos - binaacuterios ndash imagens ndash exemplo (IDL)IDLgt printquery_tiff(issmap_2009tiffinfogeotiff=geo) 1

IDLgt helpinfo Structure ltd4eca4b8gt 18 tags length=144 data length=132 refs=1 CHANNELS LONG 4 DIMENSIONS LONG Array[2] IMAGE_INDEX LONG 0 NUM_IMAGES LONG 1 PIXEL_TYPE INT 1 TYPE STRING TIFF BITS_PER_SAMPLE LONG 8 POSITION FLOAT Array[2] RESOLUTION FLOAT Array[2] UNITS LONG 2 TILE_SIZE LONG Array[2] DESCRIPTION STRING ISS (2009) DATE_TIME STRING 20100218 012436()

IDLgt helpgeo Structure ltd4efa1b8gt 10 tags length=264 data length=262 refs=1 MODELPIXELSCALETAG DOUBLE Array[3] MODELTIEPOINTTAG DOUBLE Array[6 4] GEOGRAPHICTYPEGEOKEY INT 4035 GEOGSEMIMAJORAXISGEOKEY DOUBLE 25750000 GEOGSEMIMINORAXISGEOKEY DOUBLE 25750000()

IDLgt myimage=read_tiff(issmap_2009tiff) Lecirc a imagem para o array myimage

Obteacutem informaccedilotildees sobre o arquivo

8189

Arquivos - binaacuterios ndash formatos nativosLinguagens como IDL R Python Java tecircm seu formato nativo binaacuterio acessado em alto niacutevel Basta mandar salvar ler variaacuteveis no do arquivo a biblioteca padratildeo automagicamente faz todo o trabalho de decidir como gravar ler os dados

Conveniente de usar na proacutepria linguagem Mas raramente existem bibliotecas para ler gravar o formato nativo de uma linguagem a partir de outra Ex (IDL)

IDLgt savefile=2dspectrumsavmydatamyheadercorners_dcorners_averbosecompress SAVE Portable (XDR) compressed SAVERESTORE file SAVE Saved variable MYDATA SAVE Saved variable MYHEADER()

Pode ser lido com apenas (haacute formas mais elaboradas)

IDLgt restore2dspectrumsavverbose RESTORE Portable (XDR) compressed SAVERESTORE file RESTORE Save file written by ltunknowngtltunknowngt Thu Jan 27 191422 2011 RESTORE IDL version 801 (linux x86_64) RESTORE Restored variable MYDATA RESTORE Restored variable MYHEADER()

IDLgt helpmydatamyheadercorners_dcorners_aMYDATA FLOAT = Array[1201 1201]MYHEADER STRING = Array[144]()

8289

Arquivos - processamento em baixo niacutevel

Nem sempre um formato padratildeo eacute a melhor escolha para o problema

Nem sempre haacute escolha (pode-se ter que trabalhar com arquivos que jaacute foram escritos em algum formato proprietaacuterio)

Agraves vezes o formato eacute padratildeo mas natildeo haacute bom suporte a ele disponiacutevel

Em todos estes casos eacute necessaacuterio escrever rotinas em baixo niacutevel que vatildeo ler processar diretamente o conteuacutedo do arquivo

Preferencialmente criando interfaces de alto niacutevel para o programa que vai as usar

8389

Arquivos - processamento em baixo niacutevel - texto

Tomando o exemplo anterior onde as colunas eram de diferentes tipos

NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS dec18s0001 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0002 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0003 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 FLAT 5408757812500 460000 5 dec18s0004 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 DARK 5408757812500 460000 5

A forma mais simples de o ler diretamente eacute definir uma estrutura para receber cada linha e um array destas estruturas para receber todo o arquivo Ex (IDL)

IDLgt record=namecalmpos0filnameechlpos0d0disppos0d0targnameposdirclassmjd_obsitime0d0coadds0IDLgt nlines=file_lines(filesearch_scamtxt)IDLgt mydata=replicate(recordnlines-1)IDLgt header=

Depois de definidas as variaacuteveis que vatildeo receber os dados o arquivo pode ser lido

IDLgt openrunitfilesearch_scamtxtget_lunIDLgt readfunitheaderIDLgt readfunitmydataformat=(A14I8A15F104F104A18A19A15F158F105I15)IDLgt free_lununit

A gravaccedilatildeo de um arquivo texto poderia ser feita de forma semelhante apenas trocando openr por openw (abrir o arquivo para gravaccedilatildeo natildeo leitura) e readf por printf

O arquivo eacute aberto em uma unidade (unit) usada para especificar de onde eacute feita a leitura

Ao final o arquivo eacute fechado

8489

Arquivos - processamento em baixo niacutevel - texto

O que resulta em

IDLgt printheader NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS

IDLgt helpmydataMYDATA STRUCT = -gt ltAnonymousgt Array[4]

IDLgt helpmydata[0] Structure ltd5e38f68gt 11 tags length=136 data length=124 refs=3 NAME STRING dec18s0001 CALMPOS INT 0 FILNAME STRING NIRSPEC-5-AO ECHLPOS DOUBLE 62630000 DISPPOS DOUBLE 36450000 TARGNAME STRING HD85258 POSDIR STRING NIRSPEC-5-AOp1 CLASS STRING STAR MJD_OBS STRING 54087574 ITIME DOUBLE 10000000 COADDS INT 1

Este caso eacute mais complicado que os mais comuns por haver colunas de strings

Se todas fossem de nuacutemeros natildeo teria sido necessaacuterio especificar o formato explicitamente As colunas teriam sido adivinhadas pela biblioteca que lecirc o arquivo Poderia ter sido lido escrito soacute com um array de nuacutemeros sem estruturas

8589

Arquivos - processamento em baixo niacutevel - binaacuterio

Formatos binaacuterios podem ser definidos de qualquer forma O arquivo eacute apenas um conjunto de bytes Cabe ao software saber como os interpretar

Uma escolha comum para que sejam autodocumentados eacute incluir um cabeccedilalho de texto informando as caracteriacutesticas dos dados necessaacuterias para os ler

Ex (IDL) criar um arquivo que armazene um array de doubles com um cabeccedilalho informando as dimensotildees para que o programa que o lecirc saiba como ler os dados

Inventa dados e abre o arquivo

IDLgt data_to_write=dindgen(34)IDLgt openwunitbinary_exampledatget_lun

Escreve as dimensotildees como texto

IDLgt printfunitdimensions of the double array stored belowIDLgt printfunitsize(data_to_writedimensions)

Escreve os dados binaacuterios

IDLgt writeuunitdata_to_write

Fecha o arquivo

IDLgt free_lununit

Escreve em binaacuterio (write unformatted)

8689

Arquivos - processamento em baixo niacutevel - binaacuterio

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

dimensions of the double array stored below 3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

8789

Arquivos - processamento em baixo niacutevel - binaacuterioA leitura deste arquivo eacute igualmente simples

IDLgt header=IDLgt dims=[00]IDLgt openrunitbinary_exampledatget_lun

Lecirc as dimensotildees (armazenadas como texto)

IDLgt readfunitheaderIDLgt readfunitdims

Lecirc a parte binaacuteria depois de saber as dimensotildees

IDLgt data_read=dblarr(dims)IDLgt readuunitdata_read

Fecha o arquivo

IDLgt free_lununit

Verifica que os dados foram gravados e lidos corretamente

IDLgt printarray_equal(data_to_writedata_read) 1

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Lecirc dados binaacuterios (read unformatted)

8889

Sumaacuterio

5 ndash Slides em httpwwwppenteadonetpeapea04_strings_iopdf Strings Expressotildees regulares Arquivos

httpwwwppenteadonetpea

8989

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89

Arquivos - padrotildees comuns em astronomia (exs adiante)Binaacuterios

FITS Flexible Image Transport System - o mais comum para observaccedilotildees astronocircmicas Conteacutem os dados (em geral arrays 1D 2D ou 3D) e documentaccedilatildeo (nos cabeccedilalhos) sobre a origem e caracteriacutesticas dos dados Tambeacutem usado para armazenar tabelas de dados quaisquer mesmo que natildeo sejam observaccedilotildees (especialmente pelo STSCI) Variam muito em qualidade de documentaccedilatildeo

NetCDF Network Common Data Form - evoluccedilatildeo do CDF autodocumentado eacute comum e bem suportado para vaacuterios arrays de dados

HDF5 Hierarchical Data Format ndash autodocumentado comum e bem suportado permitindo aleacutem de simples arrays estruturas (eacute um formato hieraacuterquico)

Formatos de imagens JPEG JPEG2000 TIFF GeoTIFF etc - voltados para arrays 2D3D de inteiros ou (em alguns casos) reais com ou sem compressatildeo JPEG2000 tem caracteriacutesticas mais avanccediladas como imagens multiresoluccedilatildeo

Formatos vetoriais PS EPS DXF SHP SVG - variados niacuteveis de suporte a armazenamento de vetores e formas em 2D ou 3D

ISIS Cube semelhante em caracteriacutesticas ao FITS mais usado em sensoriamento remoto geociecircncias e ciecircncias planetaacuterias em geral para observaccedilotildees 1D 2D ou 3D

Formatos nativos de linguagens todo o trabalho de leitura e gravaccedilatildeo eacute feito automagicamente pela biblioteca padratildeo em IDL R Python Java

5689

Arquivos texto - newlines

Apesar do que possa parecer arquivos texto natildeo tecircm intrinsecamente vaacuterias linhas Arquivos texto satildeo soacute uma sequumlecircncia 1D de caracteres em alguma codificaccedilatildeo Separaccedilatildeo em linhas (equivalente a interpretar o arquivo como 2D em linhas e colunas) eacute

especificada por convenccedilotildees Natildeo haacute apenas uma convenccedilatildeo para o fim de linhas

A mais primitiva convenccedilatildeo eacute separaccedilatildeo nenhuma estipula-se que linhas tenham um nuacutemero fixo N de caracteres e cabe ao software que lecirc o arquivo entender que uma linha nova ocorre regularmente a cada N caracteres

Eacute a forma menos portaacutevel e mais inconveniente eacute necessaacuterio o conhecimento preacutevio (ou por inspeccedilatildeo do arquivo) de quantos caracteres haacute por linha

A maior parte dos editores de texto natildeo vai saber separar linhas desta forma (por falta deste conhecimento preacutevio) Exemplo (de um FITS real)

SIMPLE = T Fits standard BITPIX = 16 Bits per pixel NAXIS = 0 Number of axes EXTEND = T File may contain extensions

O que com as linhas quebradas nos lugares certos seria

SIMPLE = T Fits standard BITPIX = 16 Bits per pixel NAXIS = 0 Number of axes EXTEND = T File may contain extensions

5789

Arquivos texto - newlines

A forma mais comum de especificar linhas eacute com um marcador do final de linha (newline)

Eacute um caractere especial natildeo normalmente presente no texto que serve para marcar fim de linhas

Mas natildeo haacute soacute um padratildeo de newline Os mais comuns

LF (Line Feed ASCII 10) ndash Unix Linux Mac OS X

CR - (Carriage Return ASCII 13) - Mac OS lt10

CR+LF (CR seguido de LF) - Windows DOS

Eacute o motivo de o Notepad (Windows) natildeo entender as quebras de linha de arquivos escritos com o formato nativo de Linux o arquivo soacute tem LF enquanto o editor espera CR+LF

Alguns sistemas (strings em vaacuterias linguagens por exemplo) usam o coacutedigo de escape n para indicar newline que eacute codificado de acordo com o padratildeo sendo usado

Em geral bibliotecas de leitura e gravaccedilatildeo de arquivos usam (default pelo menos) o newline nativo do sistema em que satildeo usadas

Programas de conversatildeo entre os sistemas satildeo comuns (ex dos2unix)

O Wordpad identifica se for usado soacute LF e quebra as linhas de acordo

5889

Arquivos - texto - CSV

Comma-separated values

O formato mais padronizado para tabelas (arrays 2D) em texto (frequentemente mas natildeo necessariamente ASCII)

Bem suportado por bibliotecas padratildeo de linguagens e outros softwares (Excel Calc Origin Google Docs etc)

Conteacutem Linhas de cabeccedilalho (opcionais mas recomendadas) linhas com qualquer texto geral

descrevendo o arquivo e em geral uma linha de tiacutetulo para as colunas da tabela Uma (apenas uma) tabela onde todas as linhas tecircm o mesmo nuacutemero de colunas

Colunas separadas por viacutergulas (opcionalmente pode ser outro separador) Linhas terminadas por newline (qualquer que seja) Strings delimitados por ldquo ldquo

Ex

NAMECALMPOSFILNAMEECHLPOSDISPPOSTARGNAMEPOSDIRCLASSMJD-OBSITIMECOADDSdec18s00010NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001dec18s00020NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001dec18s00120NIRSPEC-5-AO635800364500itan140NIRSPEC-5-AOp2 TITAN5408763000001dec18s00140NIRSPEC-5-AO626300364500itan140NIRSPEC-5-AOp1 TITAN5408763000001dec18s00151NIRSPEC-5-AO626300364500itan140NIRSPEC-5-AOp1ARC5408764000001dec18s00160NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001

Natildeo eacute necessaacuterio que as colunas tenham largura constante

Cabeccedilalho

5989

Arquivos - texto - CSVHaacute amplo suporte a leitura e gravaccedilatildeo de CSV sem precisar recorrer a procedimentos de baixo niacutevel

Podem ser diretamente importados em Excel Calc Origin Google Docs ou lido facilmente com bibliotecas padratildeo comuns Ex (IDL)

IDLgt c=read_csv(filesearch_scamcsvheader=h)IDLgt printhNAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS

IDLgt helpc Structure ltc8bca508gt 11 tags length=5256 data length=5248 refs=1 FIELD01 STRING Array[41] FIELD02 LONG Array[41] FIELD03 STRING Array[41] FIELD04 DOUBLE Array[41] FIELD05 DOUBLE Array[41] FIELD06 STRING Array[41] FIELD07 STRING Array[41] FIELD08 STRING Array[41] FIELD09 STRING Array[41] FIELD10 DOUBLE Array[41] FIELD11 LONG Array[41]

IDLgt printcfield01[03]dec18s0001 dec18s0002 dec18s0003 dec18s0004

IDLgt printcfield03[03]NIRSPEC-5-AO NIRSPEC-5-AO NIRSPEC-5-AO NIRSPEC-5-AO

6089

Arquivos - texto - CSVEx (IDL) Criaccedilatildeo de um CSV com uma tabela de valores

Criaccedilatildeo de 3 arrays 1D (12 elementos) um para cada coluna

IDLgt x=dindgen(3)IDLgt y=dindgen(4)IDLgt xx=reform(rebin(x34)12)IDLgt yy=reform(rebin(reform(y14)34)12)IDLgt f=xx+yy10IDLgt helpxxyyfXX DOUBLE = Array[12]YY DOUBLE = Array[12]F DOUBLE = Array[12]

Escrita do arquivo

IDLgt write_csvexamplecsvxxyyfheader=[XYX+10Y]

ResultadoXYX+10Y000000000000000000000000100000000000000010000000200000000000000020000000000000001000000010000000100000001000000011000000()

6189

Arquivos - texto - ldquoColunas regularesrdquoFixed column width

Natildeo eacute exatamente um padratildeo Eacute uma praacutetica comum

Armazena uma tabela (array 2D) de forma regular simples de ser interpretada e lida

Costumam ter linha(s) de cabeccedilalho descrevendo o conteuacutedo do arquivo em geral com uma linha para os nomes das colunas

As demais linhas conteacutem os dados sempre ocupando a mesma largura por coluna e escritos no mesmo formato em cada coluna

Costumam ser simples de ler inclusive interativamente (exs Excel Calc Origin read_ascii)

Ex (IDL) Uma simples tabela soacute de nuacutemeros

wavl CH4=33 wavl CH4=25 wavl CH4=10 wavl CH4=08 wavl CH4=05 wavl CH4=026 wavl CH4=02 477330000 0090130 477330000 0091110 477330000 0089250 477330000 0087000 477330000 0087140 477330000 0090080 477330000 0088110 480040000 0090930 480040000 0091930 480040000 0090160 480040000 0087930 480040000 0088110 480040000 0090950 480040000 0089090 482750000 0091710 482750000 0092730 482750000 0091060 482750000 0088850 482750000 0089080 482750000 0091810 482750000 0090060 485450000 0092530 485450000 0093570 485450000 0092000 485450000 0089810 485450000 0090100 485450000 0092730 485450000 0091090

IDLgt a=read_ascii(specs_27s_ntxtdata_start=1header=header)IDLgt printheader wavl CH4=33 wavl CH4=25 wavl CH4=10 wavl CH4=08 wavl CH4=05 wavl CH4=026 wavl CH4=02 IDLgt helpa Structure ltd423c9a8gt 1 tags length=224 data length=224 refs=1 FIELD01 FLOAT Array[14 4]

6289

Arquivos - texto - ldquoColunas regularesrdquoJaacute um arquivo um pouco mais difiacutecil de ler

NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS dec18s0001 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0002 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0003 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 FLAT 5408757812500 460000 5 dec18s0004 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 DARK 5408757812500 460000 5

Por ter colunas de tipos diferentes (strings inteiros reais) natildeo eacute possiacutevel o ler em um simples array Mas eacute faacutecil o colocar em uma estrutura de arrays onde cada campo eacute uma coluna

Especificando interativamente como interpretar as linhasIDLgt templ=ascii_template(filesearch_scamtxt)

Nome do campo (default mostrado)

Tipo do campo (identificado automaticamente)

Posiccedilatildeo (caracter) do comeccedilo (identificada automaticamente)

Linha de exemplo para verificar as colunas

6389

Arquivos - texto - ldquoColunas regularesrdquoDepois de feito o template o arquivo pode ser lido com apenas

IDLgt a=read_ascii(filesearch_scamtxttemplate=templ)IDLgt helpa Structure ltd4ec4608gt 11 tags length=416 data length=416 refs=1 FIELD01 STRING Array[4] FIELD02 LONG Array[4] FIELD03 STRING Array[4] FIELD04 FLOAT Array[4] FIELD05 FLOAT Array[4] FIELD06 STRING Array[4] FIELD07 STRING Array[4] FIELD08 STRING Array[4] FIELD09 FLOAT Array[4] FIELD10 FLOAT Array[4] FIELD11 LONG Array[4]IDLgt printafield01dec18s0001 dec18s0002 dec18s0003 dec18s0004IDLgt printafield04 626300 626300 626300 626300

O template (uma estrutura contendo dados sobre como ler o arquivo) pode ser usado para outros arquivos no mesmo formato No lugar de ter sido criado interativamente poderia ter sido lido de algum arquivo Poderia ter especificado nomes para os campos que seriam mais amigaacuteveis que coias como FIELD11

6489

Arquivos - texto - XML

Extensible Markup Language

Admite grande flexibilidade e por isso pode ter alta complexidade

Valores satildeo colocados dentro de uma estrutura em hieraacuterquica (em uma aacutervore) com os noacutes identificados pelos seus nomes (chaves)

Largamente usado em muitas aacutereas para armazenar conjuntos arbitraacuterios de quaisquer estruturas de dados

A maioria das aplicaccedilotildees usa um formato que eacute um subconjunto do XML especificado por um Schema comumente em um arquivo XML DTD (Document Type Definition)

6589

Arquivos - texto ndash XML ndash exemplos de usos

Armazenamento de dados de aplicaccedilotildees web (comum para exportar importar dados MediaWiki DokuWiki WordPress ADS Lattes etc)

Documentos Office (docx pptx xlsx) OpenOffice (odt opd ods)

Como versotildees de outros formatos FITSML XDF

ldquoScientific Dataset XML NASAs Astronomical Data Center (ADC) sponsors a number of research projects that

use XML for scientific data representation The XML activities at the ADC are sponsored and supported by the NASA Office of Space Science Applied Information Systems Research Program (AISRP)rdquo - httpxmlcoverpagesorgnasa-adchtml

Astronomical Instrument Markup Language (AIML)

SVG ndash Scalable Vector Graphics

Muitas de outras aplicaccedilotildees listadas em httpxmlcoverpagesorgxmlhtmlapplications

6689

Arquivos - texto ndash XML - exemploltxml version=10 gtltDOCTYPE Xdmf SYSTEM Xdmfdtd []gtltXdmf xmlnsxi=httpwwww3org2001XInclude Version=20gt ltDomaingt lt-- Example of Basic Topologies --gt ltInformation Name=Descriptiongt Example of a Polyvertex Topology ltInformationgt ltGrid Name=Polyvertex GridType=Uniformgt ltTopology TopologyType=Polyvertex Dimensions=3 NodesPerElement=3gt ltDataItem Format=XML Dimensions=3 3 NumberType=Floatgt 0 1 2 4 5 6 8 9 10 ltDataItemgt ltTopologygt ltGeometry Type=XYZgt ltDataItem Format=XML Dimensions=4 4 3gt 00 00 00 10 00 00()Que mostra que a interpretaccedilatildeo (parsing) de XML eacute em geral complexa

6789

Arquivos - texto - XML

Haacute muitas bibliotecas de alto niacutevel para fazer o processamento (parsing) e entregar os dados em uma estrutura conveniente

A complexidade em processar XML estaacute em decidir o que fazer com os dados jaacute que os arquivos podem ser muito complexos

As APIs (Application Programming Interfaces) mais comuns para processar XML que satildeo implementadas em muitas linguagens

DOM (Document Object Model) ndash manteacutem todo o conteuacutedo do em uma estrutura de dados (em geral uma aacutervore) em uma variaacutevel (em geral um objeto) Esta pode ser consultada para obter os valores de interesse para os alterar e usada para escrever um arquivo

SAX (Simple API for XML) ndash Interpretador (parser) por objetos O usuaacuterio escreve uma classe herdando da classe SAX provendo os meacutetodos que vatildeo processar os campos agrave medida em que estes satildeo lidos

6889

Arquivos - binaacuterios - FITSFlexible Image Transport System

O formato mais comum para observaccedilotildees astronocircmicas Tambeacutem usado para armazenar quaisquer dados mesmo natildeo relacionados a observaccedilotildees (especialmente tabelas como eacute praacutetica do STSCI)

Conteacutem um (ou mais) cabeccedilalho(s) de texto com metadados (informaccedilotildees sobre os dados como caracteriacutesticas (necessaacuterias para os ler) origem condiccedilotildees em que foram obtidos processamento realizado etc)

SIMPLE = T image conforms to FITS standard BITPIX = 32 bits per data value NAXIS = 2 number of axes NAXIS1 = 1024 NAXIS2 = 1024 BSCALE = 100000 Scaling factor BZERO = 000000 Scaling zero-point TELESCOP= Keck II Telescope SLITNAME= 0041x226 Slit Name SLITPA = 351979 Slit position angle SLITX = 131500 X pixel of the center of the slit LST = 12010446 local apparent sidereal time (()

Depois do cabeccedilalho haacute uma (ou mais) seccedilatildeo(otildees) de dados binaacuterios Costuma(m) ser array(s) 1D (espectros) 2D (imagens) ou 3D (ldquocubos de dadosrdquo)

De inteiros ou reais inteiros satildeo comuns em contagens de instrumentos reais para valores derivados (fluxos intensidades etc)

6989

Arquivos - binaacuterios - FITSNormalmente FITS satildeo lidos escritos por bibliotecas prontas de (relativamente) alto niacutevel usuaacuterio natildeo tem que saber como os dados satildeo armazenados no arquivo nem como os ler escrever Ex (IDL com a biblioteca idlastro)

IDLgt fits_info2dspectrumfits2dspectrumfits has 3 extensionsPrimary header 288 recordsNo dataExtension 1 -- SCI Header 144 records IMAGE ( 1201 1201 )Extension 2 -- ERR Header 72 records IMAGE ( 1201 1201 )Extension 3 -- DQ Header 72 records IMAGE ( 1201 1201 )

IDLgt mydata=readfits(2dspectrumfitsexten_no=1myheader) READFITS Reading FITS extension of type IMAGE READFITS Now reading 1201 by 1201 array

IDLgt extastmyheadermyastIDLgt sz=size(mydatadimensions)IDLgt xy2ad[1sz[0]][1sz[1]]myastcorners_acorners_dIDLgt printcorners_aCorners of the data array from file 2dspectrumfits are at 14487480 33063480

IDLgt printcorners_d -00041264444 00041402222

Obteacutem os dados de coordenadas (WCS) do header

Coloca os dados no array (2D de floats) mydata e o header no array (1D de strings) myheader

Calcula as coordenadas das quinas da imagem atraveacutes do WCS

Provecirc informaccedilotildees sobre o arquivo

7089

Arquivos - binaacuterios - ISIS Cube

Formatos como FITS se adequam muito a ter uma interface de mais alto niacutevel por objetos

Tambeacutem para dados em tabelas FITS muito mais trabalhosos de ler em baixo niacutevel que se adequam muito mais a mapas ou estruturas

Exemplo (de um formato semelhante a FITS ISIS cube)

O objeto ao ser criado lecirc todo o arquivo

cube=pp_editablecube(CM_1553510065_1_ircub)

Meacutetodos fornecem os dados desejados para obter quando necessaacuterio os dados de interesse

Find out the names of the backplanesprintcubegetproperty(backnames)Get the start time of the cubeprintcubegetfromheader(START_TIME)2007-084T100057286Z

Valores no cabeccedilalho podem ser convenientemente fornecidos como um mapa

header=cubeheader_as_hash()printheader[START_TIME]2007-084T100057286Z

7189

Arquivos - binaacuterios ndash ISIS Cube

Os dados satildeo fornecidos como arraysMake a contour plot of the latitudesc=contour(cubegetsuffixbyname(LATITUDE))Get the band with wavelength nearest to 21 (in the units used in the cube)selband=cubegetbandbywavelength(21wavelengths=selwavs)

Interfaces por overload tornam o acesso ainda mais conveniente

selband=cube[21]

selwavs=cube[21]

Retorna um array com a banda de comprimento de onda mais proacuteximo de 21 (microm)

Retorna o comprimento de onda mais proacuteximo de 21 (microm) da banda retornada acima

7289

Arquivos - binaacuterios ndash ISIS Cube Alteraccedilotildees feitas ao conteuacutedo satildeo automaticamente refletidas em todos os

lugares (cabeccedilalho em particular) afetados mantendo o objeto vaacutelido que pode depois ser gravado em um novo arquivo

IDLgt printcubelinescubesamplescubebands 64 64 256

IDLgt helpcubecoreltExpressiongt FLOAT = Array[64 64 256]

IDLgt cubecore=dblarr(100100256)

A linha acima natildeo eacute uma atribuiccedilatildeo eacute uma invocaccedilatildeo de meacutetodo Eacute equivalente acubesetpropertycore=dblarr(100100256)

Eacute o trabalho da funccedilatildeo setproperty decidir se a propriedade passada (core) faz sentido e se fizer fazer todo o trabalho necessaacuterio a esta mudanccedila Para o usuaacuterio eacute tudo automaacutetico e os dados da classe satildeo vaacutelidos o tempo todo

IDLgt helpcubecoreltExpressiongt DOUBLE = Array[100 100 256]

IDLgt printcubelinescubesamplescubebands 100 100 256

IDLgt cubesaveCM_1553510065_1_ir_editedcub

7389

Arquivos - binaacuterios ndash NetCDF e HDF5

Network Common Data Form e Hierarchical Data Format

Os dois uacutenicos formatos bem estabelecidos para dados cientiacuteficos geneacutericos

Armazenam dados como vaacuterias variaacuteveis e seus metadados Para cada variaacutevel haacute (ou pode haver) os metadados

Nome Dimensotildees (do array) Unidades Comentaacuterios

Ambos permitem arrays multidimensionais

Apenas HDF5 permite estruturas (daiacute vem a hierarquia)

Autodocumentados qualquer software que saiba ler um destes formatos lecirc qualquer arquivo sem precisar de conhecimento preacutevio sobre como o arquivo foi gerado

Muito bem suportados em bibliotecas padratildeo e natildeo padratildeo em softwares interativos e visualizadores (inclusive plugins para navegadores)

httpwwwunidataucaredusoftwarenetcdf httpenwikipediaorgwikiHdf5

NetCDF eacute mais simples de usar por natildeo ter hierarquia dando menos trabalho para ler e escrever dados Se hierarquia natildeo eacute necessaacuteria eacute mais conveniente de usar que HDF5

7489

Arquivos - binaacuterios - NetCDF e HDF5Haacute tambeacutem o formato CDL uma versatildeo ASCII do NetCDF A biblioteca padratildeo do NetCDF inclui conversores entre estes formatos

$ ncdump -h refspec_g01_0ncnetcdf refspec_g01_0 dimensions nlay = 51 nwn = 400 nleg = 33 numu = 2 nlev = 52 nphi = 3 ngas = 2 nwnc = 1 scal = 1 v3 = 3 dnl = 1 nk = 1 tdisr = UNLIMITED (0 currently) na = 16

variables float alb(nwn) float z(nlay) float t(nlay) float p(nlay) float wl(nwn) float iof(nwn) float mtau(nwn) float htau(nwn) float hctaus(nwn) float gtau(nwn) float outcos(scal) float phi(nleg) float phic(scal) float umu(numu) float flux(v3 nwn nlev) float mix(nlay ngas) float c(nlay) float psat(nlay) float ga(nwnc) float wlc(nwnc) float inc(scal) int dm(scal) int ord(scal) float fbeam(scal) float wn(nwn) float tautot(nwn nlay) float htaus(nwn nlay) float htaux(nwn nlay) float taug(nwn nlay) float phase(nwn nlay nleg) float ssa(nwn nlay) float uu(nwn nphi nlev numu) float u0u(nwn nlev numu) float tray(nwn nlay) float gtauo(tdisr nwn nlay)

Haacute 14 variaacuteveis usadas como dimensotildees para as 35 variaacuteveis que satildeo arrays

Ex alb(nwn) indica que alb eacute um array 1D de nwn elementos

nwn estaacute armazenado como uma das dimensotildees e eacute 400 portanto alb tem 400 elementos

Parte do conteuacutedo de um arquivo NetCDF em formato CDL (gerado pelo programa ncdump)

7589

Arquivos - binaacuterios - NetCDF e HDF5Conteuacutedo daquele arquivo visualizado com o ncview (acompanha a biblioteca NetCDF padratildeo)

7689

Arquivos - binaacuterios - NetCDF e HDF5O conteuacutedo de todo o arquivo pode ser lido facilmente com as bibliotecas disponiacuteveis e armazenado em contecirciners convenientes Usando um objeto que gera um resultado um pouco mais conveniente

IDLgt h=pp_readncdf(refspec_g01_0nchash)IDLgt printhvar_dims ltObjHeapVar229(HASH)gtvars ltObjHeapVar152(HASH)gtdims ltObjHeapVar118(HASH)gt

IDLgt printh[vars]T 173203 175459 175848 176001 175975 Z 431869 418858 406067 393403 380464 FLUX 300660 145536 0705180 0341669 0165532 PHASE 100000 0779034 0660858 0542052 0449983 TAUTOT0694377 0693420 0693474 0693540 0693636()

IDLgt help(h[vars])[TAUTOT]ltExpressiongt FLOAT = Array[51 400]

IDLgt print(h[var_dims])[TAUTOT]NLAY NWN

IDLgt print(h[dims])[(h[var_dims])[TAUTOT]]NLAY 51NWN 400

7789

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5)

Visualizaccedilatildeo da variaacutevel selecionada

Metadados e alguns valores da variaacutevel selecionada

Variaacutevel a ser criada com o conteuacutedo desta variaacutevel do arquivo

Hierarquia das variaacuteveis do arquivo

7889

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5) Imported variable az

IDLgt helpaz Structure ltd5723f38gt 13 tags length=448 data length=444 refs=1 _NAME STRING az _ICONTYPE STRING binary _TYPE STRING DATASET _FILE STRING INTENSI_test_409OUTh5 _PATH STRING _DATA DOUBLE Array[38] _NDIMENSIONS LONG 1 _DIMENSIONS ULONG64 Array[1] _NELEMENTS ULONG64 38 _DATATYPE STRING H5T_FLOAT _STORAGESIZE ULONG 8 _PRECISION LONG 64 _SIGN STRING

IDLgt printaz_data 00000000 10000000 20000000 30000000 40000000 50000000 60000000 80000000 ()

7989

Arquivos - binaacuterios - imagens

JPEG JPEG200 TIFF GeoTIFF etc

Os formatos comuns de imagens satildeo bem suportados em muacuteltiplas plataformas para uso dentro de programas e interativamente

Alguns formatos tecircm opccedilatildeo de compressatildeo com perda eou sem perda

Armazenam imagens como arrays 2D ou 3D (3D frequumlentemente limitado a 3 ou 4 em uma das dimensotildees uma imagem em 3 ou 4 bandas) de inteiros ou (em alguns formatos) reais

Alguns formatos permitem armazenar metadados para caracterizar as imagens armazenadas

JPEG2000 e GeoTIFF (um subconjunto de TIFF) comuns em astronomia e aacutereas proacuteximas

8089

Arquivos - binaacuterios ndash imagens ndash exemplo (IDL)IDLgt printquery_tiff(issmap_2009tiffinfogeotiff=geo) 1

IDLgt helpinfo Structure ltd4eca4b8gt 18 tags length=144 data length=132 refs=1 CHANNELS LONG 4 DIMENSIONS LONG Array[2] IMAGE_INDEX LONG 0 NUM_IMAGES LONG 1 PIXEL_TYPE INT 1 TYPE STRING TIFF BITS_PER_SAMPLE LONG 8 POSITION FLOAT Array[2] RESOLUTION FLOAT Array[2] UNITS LONG 2 TILE_SIZE LONG Array[2] DESCRIPTION STRING ISS (2009) DATE_TIME STRING 20100218 012436()

IDLgt helpgeo Structure ltd4efa1b8gt 10 tags length=264 data length=262 refs=1 MODELPIXELSCALETAG DOUBLE Array[3] MODELTIEPOINTTAG DOUBLE Array[6 4] GEOGRAPHICTYPEGEOKEY INT 4035 GEOGSEMIMAJORAXISGEOKEY DOUBLE 25750000 GEOGSEMIMINORAXISGEOKEY DOUBLE 25750000()

IDLgt myimage=read_tiff(issmap_2009tiff) Lecirc a imagem para o array myimage

Obteacutem informaccedilotildees sobre o arquivo

8189

Arquivos - binaacuterios ndash formatos nativosLinguagens como IDL R Python Java tecircm seu formato nativo binaacuterio acessado em alto niacutevel Basta mandar salvar ler variaacuteveis no do arquivo a biblioteca padratildeo automagicamente faz todo o trabalho de decidir como gravar ler os dados

Conveniente de usar na proacutepria linguagem Mas raramente existem bibliotecas para ler gravar o formato nativo de uma linguagem a partir de outra Ex (IDL)

IDLgt savefile=2dspectrumsavmydatamyheadercorners_dcorners_averbosecompress SAVE Portable (XDR) compressed SAVERESTORE file SAVE Saved variable MYDATA SAVE Saved variable MYHEADER()

Pode ser lido com apenas (haacute formas mais elaboradas)

IDLgt restore2dspectrumsavverbose RESTORE Portable (XDR) compressed SAVERESTORE file RESTORE Save file written by ltunknowngtltunknowngt Thu Jan 27 191422 2011 RESTORE IDL version 801 (linux x86_64) RESTORE Restored variable MYDATA RESTORE Restored variable MYHEADER()

IDLgt helpmydatamyheadercorners_dcorners_aMYDATA FLOAT = Array[1201 1201]MYHEADER STRING = Array[144]()

8289

Arquivos - processamento em baixo niacutevel

Nem sempre um formato padratildeo eacute a melhor escolha para o problema

Nem sempre haacute escolha (pode-se ter que trabalhar com arquivos que jaacute foram escritos em algum formato proprietaacuterio)

Agraves vezes o formato eacute padratildeo mas natildeo haacute bom suporte a ele disponiacutevel

Em todos estes casos eacute necessaacuterio escrever rotinas em baixo niacutevel que vatildeo ler processar diretamente o conteuacutedo do arquivo

Preferencialmente criando interfaces de alto niacutevel para o programa que vai as usar

8389

Arquivos - processamento em baixo niacutevel - texto

Tomando o exemplo anterior onde as colunas eram de diferentes tipos

NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS dec18s0001 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0002 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0003 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 FLAT 5408757812500 460000 5 dec18s0004 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 DARK 5408757812500 460000 5

A forma mais simples de o ler diretamente eacute definir uma estrutura para receber cada linha e um array destas estruturas para receber todo o arquivo Ex (IDL)

IDLgt record=namecalmpos0filnameechlpos0d0disppos0d0targnameposdirclassmjd_obsitime0d0coadds0IDLgt nlines=file_lines(filesearch_scamtxt)IDLgt mydata=replicate(recordnlines-1)IDLgt header=

Depois de definidas as variaacuteveis que vatildeo receber os dados o arquivo pode ser lido

IDLgt openrunitfilesearch_scamtxtget_lunIDLgt readfunitheaderIDLgt readfunitmydataformat=(A14I8A15F104F104A18A19A15F158F105I15)IDLgt free_lununit

A gravaccedilatildeo de um arquivo texto poderia ser feita de forma semelhante apenas trocando openr por openw (abrir o arquivo para gravaccedilatildeo natildeo leitura) e readf por printf

O arquivo eacute aberto em uma unidade (unit) usada para especificar de onde eacute feita a leitura

Ao final o arquivo eacute fechado

8489

Arquivos - processamento em baixo niacutevel - texto

O que resulta em

IDLgt printheader NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS

IDLgt helpmydataMYDATA STRUCT = -gt ltAnonymousgt Array[4]

IDLgt helpmydata[0] Structure ltd5e38f68gt 11 tags length=136 data length=124 refs=3 NAME STRING dec18s0001 CALMPOS INT 0 FILNAME STRING NIRSPEC-5-AO ECHLPOS DOUBLE 62630000 DISPPOS DOUBLE 36450000 TARGNAME STRING HD85258 POSDIR STRING NIRSPEC-5-AOp1 CLASS STRING STAR MJD_OBS STRING 54087574 ITIME DOUBLE 10000000 COADDS INT 1

Este caso eacute mais complicado que os mais comuns por haver colunas de strings

Se todas fossem de nuacutemeros natildeo teria sido necessaacuterio especificar o formato explicitamente As colunas teriam sido adivinhadas pela biblioteca que lecirc o arquivo Poderia ter sido lido escrito soacute com um array de nuacutemeros sem estruturas

8589

Arquivos - processamento em baixo niacutevel - binaacuterio

Formatos binaacuterios podem ser definidos de qualquer forma O arquivo eacute apenas um conjunto de bytes Cabe ao software saber como os interpretar

Uma escolha comum para que sejam autodocumentados eacute incluir um cabeccedilalho de texto informando as caracteriacutesticas dos dados necessaacuterias para os ler

Ex (IDL) criar um arquivo que armazene um array de doubles com um cabeccedilalho informando as dimensotildees para que o programa que o lecirc saiba como ler os dados

Inventa dados e abre o arquivo

IDLgt data_to_write=dindgen(34)IDLgt openwunitbinary_exampledatget_lun

Escreve as dimensotildees como texto

IDLgt printfunitdimensions of the double array stored belowIDLgt printfunitsize(data_to_writedimensions)

Escreve os dados binaacuterios

IDLgt writeuunitdata_to_write

Fecha o arquivo

IDLgt free_lununit

Escreve em binaacuterio (write unformatted)

8689

Arquivos - processamento em baixo niacutevel - binaacuterio

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

dimensions of the double array stored below 3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

8789

Arquivos - processamento em baixo niacutevel - binaacuterioA leitura deste arquivo eacute igualmente simples

IDLgt header=IDLgt dims=[00]IDLgt openrunitbinary_exampledatget_lun

Lecirc as dimensotildees (armazenadas como texto)

IDLgt readfunitheaderIDLgt readfunitdims

Lecirc a parte binaacuteria depois de saber as dimensotildees

IDLgt data_read=dblarr(dims)IDLgt readuunitdata_read

Fecha o arquivo

IDLgt free_lununit

Verifica que os dados foram gravados e lidos corretamente

IDLgt printarray_equal(data_to_writedata_read) 1

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Lecirc dados binaacuterios (read unformatted)

8889

Sumaacuterio

5 ndash Slides em httpwwwppenteadonetpeapea04_strings_iopdf Strings Expressotildees regulares Arquivos

httpwwwppenteadonetpea

8989

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89

Arquivos texto - newlines

Apesar do que possa parecer arquivos texto natildeo tecircm intrinsecamente vaacuterias linhas Arquivos texto satildeo soacute uma sequumlecircncia 1D de caracteres em alguma codificaccedilatildeo Separaccedilatildeo em linhas (equivalente a interpretar o arquivo como 2D em linhas e colunas) eacute

especificada por convenccedilotildees Natildeo haacute apenas uma convenccedilatildeo para o fim de linhas

A mais primitiva convenccedilatildeo eacute separaccedilatildeo nenhuma estipula-se que linhas tenham um nuacutemero fixo N de caracteres e cabe ao software que lecirc o arquivo entender que uma linha nova ocorre regularmente a cada N caracteres

Eacute a forma menos portaacutevel e mais inconveniente eacute necessaacuterio o conhecimento preacutevio (ou por inspeccedilatildeo do arquivo) de quantos caracteres haacute por linha

A maior parte dos editores de texto natildeo vai saber separar linhas desta forma (por falta deste conhecimento preacutevio) Exemplo (de um FITS real)

SIMPLE = T Fits standard BITPIX = 16 Bits per pixel NAXIS = 0 Number of axes EXTEND = T File may contain extensions

O que com as linhas quebradas nos lugares certos seria

SIMPLE = T Fits standard BITPIX = 16 Bits per pixel NAXIS = 0 Number of axes EXTEND = T File may contain extensions

5789

Arquivos texto - newlines

A forma mais comum de especificar linhas eacute com um marcador do final de linha (newline)

Eacute um caractere especial natildeo normalmente presente no texto que serve para marcar fim de linhas

Mas natildeo haacute soacute um padratildeo de newline Os mais comuns

LF (Line Feed ASCII 10) ndash Unix Linux Mac OS X

CR - (Carriage Return ASCII 13) - Mac OS lt10

CR+LF (CR seguido de LF) - Windows DOS

Eacute o motivo de o Notepad (Windows) natildeo entender as quebras de linha de arquivos escritos com o formato nativo de Linux o arquivo soacute tem LF enquanto o editor espera CR+LF

Alguns sistemas (strings em vaacuterias linguagens por exemplo) usam o coacutedigo de escape n para indicar newline que eacute codificado de acordo com o padratildeo sendo usado

Em geral bibliotecas de leitura e gravaccedilatildeo de arquivos usam (default pelo menos) o newline nativo do sistema em que satildeo usadas

Programas de conversatildeo entre os sistemas satildeo comuns (ex dos2unix)

O Wordpad identifica se for usado soacute LF e quebra as linhas de acordo

5889

Arquivos - texto - CSV

Comma-separated values

O formato mais padronizado para tabelas (arrays 2D) em texto (frequentemente mas natildeo necessariamente ASCII)

Bem suportado por bibliotecas padratildeo de linguagens e outros softwares (Excel Calc Origin Google Docs etc)

Conteacutem Linhas de cabeccedilalho (opcionais mas recomendadas) linhas com qualquer texto geral

descrevendo o arquivo e em geral uma linha de tiacutetulo para as colunas da tabela Uma (apenas uma) tabela onde todas as linhas tecircm o mesmo nuacutemero de colunas

Colunas separadas por viacutergulas (opcionalmente pode ser outro separador) Linhas terminadas por newline (qualquer que seja) Strings delimitados por ldquo ldquo

Ex

NAMECALMPOSFILNAMEECHLPOSDISPPOSTARGNAMEPOSDIRCLASSMJD-OBSITIMECOADDSdec18s00010NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001dec18s00020NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001dec18s00120NIRSPEC-5-AO635800364500itan140NIRSPEC-5-AOp2 TITAN5408763000001dec18s00140NIRSPEC-5-AO626300364500itan140NIRSPEC-5-AOp1 TITAN5408763000001dec18s00151NIRSPEC-5-AO626300364500itan140NIRSPEC-5-AOp1ARC5408764000001dec18s00160NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001

Natildeo eacute necessaacuterio que as colunas tenham largura constante

Cabeccedilalho

5989

Arquivos - texto - CSVHaacute amplo suporte a leitura e gravaccedilatildeo de CSV sem precisar recorrer a procedimentos de baixo niacutevel

Podem ser diretamente importados em Excel Calc Origin Google Docs ou lido facilmente com bibliotecas padratildeo comuns Ex (IDL)

IDLgt c=read_csv(filesearch_scamcsvheader=h)IDLgt printhNAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS

IDLgt helpc Structure ltc8bca508gt 11 tags length=5256 data length=5248 refs=1 FIELD01 STRING Array[41] FIELD02 LONG Array[41] FIELD03 STRING Array[41] FIELD04 DOUBLE Array[41] FIELD05 DOUBLE Array[41] FIELD06 STRING Array[41] FIELD07 STRING Array[41] FIELD08 STRING Array[41] FIELD09 STRING Array[41] FIELD10 DOUBLE Array[41] FIELD11 LONG Array[41]

IDLgt printcfield01[03]dec18s0001 dec18s0002 dec18s0003 dec18s0004

IDLgt printcfield03[03]NIRSPEC-5-AO NIRSPEC-5-AO NIRSPEC-5-AO NIRSPEC-5-AO

6089

Arquivos - texto - CSVEx (IDL) Criaccedilatildeo de um CSV com uma tabela de valores

Criaccedilatildeo de 3 arrays 1D (12 elementos) um para cada coluna

IDLgt x=dindgen(3)IDLgt y=dindgen(4)IDLgt xx=reform(rebin(x34)12)IDLgt yy=reform(rebin(reform(y14)34)12)IDLgt f=xx+yy10IDLgt helpxxyyfXX DOUBLE = Array[12]YY DOUBLE = Array[12]F DOUBLE = Array[12]

Escrita do arquivo

IDLgt write_csvexamplecsvxxyyfheader=[XYX+10Y]

ResultadoXYX+10Y000000000000000000000000100000000000000010000000200000000000000020000000000000001000000010000000100000001000000011000000()

6189

Arquivos - texto - ldquoColunas regularesrdquoFixed column width

Natildeo eacute exatamente um padratildeo Eacute uma praacutetica comum

Armazena uma tabela (array 2D) de forma regular simples de ser interpretada e lida

Costumam ter linha(s) de cabeccedilalho descrevendo o conteuacutedo do arquivo em geral com uma linha para os nomes das colunas

As demais linhas conteacutem os dados sempre ocupando a mesma largura por coluna e escritos no mesmo formato em cada coluna

Costumam ser simples de ler inclusive interativamente (exs Excel Calc Origin read_ascii)

Ex (IDL) Uma simples tabela soacute de nuacutemeros

wavl CH4=33 wavl CH4=25 wavl CH4=10 wavl CH4=08 wavl CH4=05 wavl CH4=026 wavl CH4=02 477330000 0090130 477330000 0091110 477330000 0089250 477330000 0087000 477330000 0087140 477330000 0090080 477330000 0088110 480040000 0090930 480040000 0091930 480040000 0090160 480040000 0087930 480040000 0088110 480040000 0090950 480040000 0089090 482750000 0091710 482750000 0092730 482750000 0091060 482750000 0088850 482750000 0089080 482750000 0091810 482750000 0090060 485450000 0092530 485450000 0093570 485450000 0092000 485450000 0089810 485450000 0090100 485450000 0092730 485450000 0091090

IDLgt a=read_ascii(specs_27s_ntxtdata_start=1header=header)IDLgt printheader wavl CH4=33 wavl CH4=25 wavl CH4=10 wavl CH4=08 wavl CH4=05 wavl CH4=026 wavl CH4=02 IDLgt helpa Structure ltd423c9a8gt 1 tags length=224 data length=224 refs=1 FIELD01 FLOAT Array[14 4]

6289

Arquivos - texto - ldquoColunas regularesrdquoJaacute um arquivo um pouco mais difiacutecil de ler

NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS dec18s0001 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0002 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0003 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 FLAT 5408757812500 460000 5 dec18s0004 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 DARK 5408757812500 460000 5

Por ter colunas de tipos diferentes (strings inteiros reais) natildeo eacute possiacutevel o ler em um simples array Mas eacute faacutecil o colocar em uma estrutura de arrays onde cada campo eacute uma coluna

Especificando interativamente como interpretar as linhasIDLgt templ=ascii_template(filesearch_scamtxt)

Nome do campo (default mostrado)

Tipo do campo (identificado automaticamente)

Posiccedilatildeo (caracter) do comeccedilo (identificada automaticamente)

Linha de exemplo para verificar as colunas

6389

Arquivos - texto - ldquoColunas regularesrdquoDepois de feito o template o arquivo pode ser lido com apenas

IDLgt a=read_ascii(filesearch_scamtxttemplate=templ)IDLgt helpa Structure ltd4ec4608gt 11 tags length=416 data length=416 refs=1 FIELD01 STRING Array[4] FIELD02 LONG Array[4] FIELD03 STRING Array[4] FIELD04 FLOAT Array[4] FIELD05 FLOAT Array[4] FIELD06 STRING Array[4] FIELD07 STRING Array[4] FIELD08 STRING Array[4] FIELD09 FLOAT Array[4] FIELD10 FLOAT Array[4] FIELD11 LONG Array[4]IDLgt printafield01dec18s0001 dec18s0002 dec18s0003 dec18s0004IDLgt printafield04 626300 626300 626300 626300

O template (uma estrutura contendo dados sobre como ler o arquivo) pode ser usado para outros arquivos no mesmo formato No lugar de ter sido criado interativamente poderia ter sido lido de algum arquivo Poderia ter especificado nomes para os campos que seriam mais amigaacuteveis que coias como FIELD11

6489

Arquivos - texto - XML

Extensible Markup Language

Admite grande flexibilidade e por isso pode ter alta complexidade

Valores satildeo colocados dentro de uma estrutura em hieraacuterquica (em uma aacutervore) com os noacutes identificados pelos seus nomes (chaves)

Largamente usado em muitas aacutereas para armazenar conjuntos arbitraacuterios de quaisquer estruturas de dados

A maioria das aplicaccedilotildees usa um formato que eacute um subconjunto do XML especificado por um Schema comumente em um arquivo XML DTD (Document Type Definition)

6589

Arquivos - texto ndash XML ndash exemplos de usos

Armazenamento de dados de aplicaccedilotildees web (comum para exportar importar dados MediaWiki DokuWiki WordPress ADS Lattes etc)

Documentos Office (docx pptx xlsx) OpenOffice (odt opd ods)

Como versotildees de outros formatos FITSML XDF

ldquoScientific Dataset XML NASAs Astronomical Data Center (ADC) sponsors a number of research projects that

use XML for scientific data representation The XML activities at the ADC are sponsored and supported by the NASA Office of Space Science Applied Information Systems Research Program (AISRP)rdquo - httpxmlcoverpagesorgnasa-adchtml

Astronomical Instrument Markup Language (AIML)

SVG ndash Scalable Vector Graphics

Muitas de outras aplicaccedilotildees listadas em httpxmlcoverpagesorgxmlhtmlapplications

6689

Arquivos - texto ndash XML - exemploltxml version=10 gtltDOCTYPE Xdmf SYSTEM Xdmfdtd []gtltXdmf xmlnsxi=httpwwww3org2001XInclude Version=20gt ltDomaingt lt-- Example of Basic Topologies --gt ltInformation Name=Descriptiongt Example of a Polyvertex Topology ltInformationgt ltGrid Name=Polyvertex GridType=Uniformgt ltTopology TopologyType=Polyvertex Dimensions=3 NodesPerElement=3gt ltDataItem Format=XML Dimensions=3 3 NumberType=Floatgt 0 1 2 4 5 6 8 9 10 ltDataItemgt ltTopologygt ltGeometry Type=XYZgt ltDataItem Format=XML Dimensions=4 4 3gt 00 00 00 10 00 00()Que mostra que a interpretaccedilatildeo (parsing) de XML eacute em geral complexa

6789

Arquivos - texto - XML

Haacute muitas bibliotecas de alto niacutevel para fazer o processamento (parsing) e entregar os dados em uma estrutura conveniente

A complexidade em processar XML estaacute em decidir o que fazer com os dados jaacute que os arquivos podem ser muito complexos

As APIs (Application Programming Interfaces) mais comuns para processar XML que satildeo implementadas em muitas linguagens

DOM (Document Object Model) ndash manteacutem todo o conteuacutedo do em uma estrutura de dados (em geral uma aacutervore) em uma variaacutevel (em geral um objeto) Esta pode ser consultada para obter os valores de interesse para os alterar e usada para escrever um arquivo

SAX (Simple API for XML) ndash Interpretador (parser) por objetos O usuaacuterio escreve uma classe herdando da classe SAX provendo os meacutetodos que vatildeo processar os campos agrave medida em que estes satildeo lidos

6889

Arquivos - binaacuterios - FITSFlexible Image Transport System

O formato mais comum para observaccedilotildees astronocircmicas Tambeacutem usado para armazenar quaisquer dados mesmo natildeo relacionados a observaccedilotildees (especialmente tabelas como eacute praacutetica do STSCI)

Conteacutem um (ou mais) cabeccedilalho(s) de texto com metadados (informaccedilotildees sobre os dados como caracteriacutesticas (necessaacuterias para os ler) origem condiccedilotildees em que foram obtidos processamento realizado etc)

SIMPLE = T image conforms to FITS standard BITPIX = 32 bits per data value NAXIS = 2 number of axes NAXIS1 = 1024 NAXIS2 = 1024 BSCALE = 100000 Scaling factor BZERO = 000000 Scaling zero-point TELESCOP= Keck II Telescope SLITNAME= 0041x226 Slit Name SLITPA = 351979 Slit position angle SLITX = 131500 X pixel of the center of the slit LST = 12010446 local apparent sidereal time (()

Depois do cabeccedilalho haacute uma (ou mais) seccedilatildeo(otildees) de dados binaacuterios Costuma(m) ser array(s) 1D (espectros) 2D (imagens) ou 3D (ldquocubos de dadosrdquo)

De inteiros ou reais inteiros satildeo comuns em contagens de instrumentos reais para valores derivados (fluxos intensidades etc)

6989

Arquivos - binaacuterios - FITSNormalmente FITS satildeo lidos escritos por bibliotecas prontas de (relativamente) alto niacutevel usuaacuterio natildeo tem que saber como os dados satildeo armazenados no arquivo nem como os ler escrever Ex (IDL com a biblioteca idlastro)

IDLgt fits_info2dspectrumfits2dspectrumfits has 3 extensionsPrimary header 288 recordsNo dataExtension 1 -- SCI Header 144 records IMAGE ( 1201 1201 )Extension 2 -- ERR Header 72 records IMAGE ( 1201 1201 )Extension 3 -- DQ Header 72 records IMAGE ( 1201 1201 )

IDLgt mydata=readfits(2dspectrumfitsexten_no=1myheader) READFITS Reading FITS extension of type IMAGE READFITS Now reading 1201 by 1201 array

IDLgt extastmyheadermyastIDLgt sz=size(mydatadimensions)IDLgt xy2ad[1sz[0]][1sz[1]]myastcorners_acorners_dIDLgt printcorners_aCorners of the data array from file 2dspectrumfits are at 14487480 33063480

IDLgt printcorners_d -00041264444 00041402222

Obteacutem os dados de coordenadas (WCS) do header

Coloca os dados no array (2D de floats) mydata e o header no array (1D de strings) myheader

Calcula as coordenadas das quinas da imagem atraveacutes do WCS

Provecirc informaccedilotildees sobre o arquivo

7089

Arquivos - binaacuterios - ISIS Cube

Formatos como FITS se adequam muito a ter uma interface de mais alto niacutevel por objetos

Tambeacutem para dados em tabelas FITS muito mais trabalhosos de ler em baixo niacutevel que se adequam muito mais a mapas ou estruturas

Exemplo (de um formato semelhante a FITS ISIS cube)

O objeto ao ser criado lecirc todo o arquivo

cube=pp_editablecube(CM_1553510065_1_ircub)

Meacutetodos fornecem os dados desejados para obter quando necessaacuterio os dados de interesse

Find out the names of the backplanesprintcubegetproperty(backnames)Get the start time of the cubeprintcubegetfromheader(START_TIME)2007-084T100057286Z

Valores no cabeccedilalho podem ser convenientemente fornecidos como um mapa

header=cubeheader_as_hash()printheader[START_TIME]2007-084T100057286Z

7189

Arquivos - binaacuterios ndash ISIS Cube

Os dados satildeo fornecidos como arraysMake a contour plot of the latitudesc=contour(cubegetsuffixbyname(LATITUDE))Get the band with wavelength nearest to 21 (in the units used in the cube)selband=cubegetbandbywavelength(21wavelengths=selwavs)

Interfaces por overload tornam o acesso ainda mais conveniente

selband=cube[21]

selwavs=cube[21]

Retorna um array com a banda de comprimento de onda mais proacuteximo de 21 (microm)

Retorna o comprimento de onda mais proacuteximo de 21 (microm) da banda retornada acima

7289

Arquivos - binaacuterios ndash ISIS Cube Alteraccedilotildees feitas ao conteuacutedo satildeo automaticamente refletidas em todos os

lugares (cabeccedilalho em particular) afetados mantendo o objeto vaacutelido que pode depois ser gravado em um novo arquivo

IDLgt printcubelinescubesamplescubebands 64 64 256

IDLgt helpcubecoreltExpressiongt FLOAT = Array[64 64 256]

IDLgt cubecore=dblarr(100100256)

A linha acima natildeo eacute uma atribuiccedilatildeo eacute uma invocaccedilatildeo de meacutetodo Eacute equivalente acubesetpropertycore=dblarr(100100256)

Eacute o trabalho da funccedilatildeo setproperty decidir se a propriedade passada (core) faz sentido e se fizer fazer todo o trabalho necessaacuterio a esta mudanccedila Para o usuaacuterio eacute tudo automaacutetico e os dados da classe satildeo vaacutelidos o tempo todo

IDLgt helpcubecoreltExpressiongt DOUBLE = Array[100 100 256]

IDLgt printcubelinescubesamplescubebands 100 100 256

IDLgt cubesaveCM_1553510065_1_ir_editedcub

7389

Arquivos - binaacuterios ndash NetCDF e HDF5

Network Common Data Form e Hierarchical Data Format

Os dois uacutenicos formatos bem estabelecidos para dados cientiacuteficos geneacutericos

Armazenam dados como vaacuterias variaacuteveis e seus metadados Para cada variaacutevel haacute (ou pode haver) os metadados

Nome Dimensotildees (do array) Unidades Comentaacuterios

Ambos permitem arrays multidimensionais

Apenas HDF5 permite estruturas (daiacute vem a hierarquia)

Autodocumentados qualquer software que saiba ler um destes formatos lecirc qualquer arquivo sem precisar de conhecimento preacutevio sobre como o arquivo foi gerado

Muito bem suportados em bibliotecas padratildeo e natildeo padratildeo em softwares interativos e visualizadores (inclusive plugins para navegadores)

httpwwwunidataucaredusoftwarenetcdf httpenwikipediaorgwikiHdf5

NetCDF eacute mais simples de usar por natildeo ter hierarquia dando menos trabalho para ler e escrever dados Se hierarquia natildeo eacute necessaacuteria eacute mais conveniente de usar que HDF5

7489

Arquivos - binaacuterios - NetCDF e HDF5Haacute tambeacutem o formato CDL uma versatildeo ASCII do NetCDF A biblioteca padratildeo do NetCDF inclui conversores entre estes formatos

$ ncdump -h refspec_g01_0ncnetcdf refspec_g01_0 dimensions nlay = 51 nwn = 400 nleg = 33 numu = 2 nlev = 52 nphi = 3 ngas = 2 nwnc = 1 scal = 1 v3 = 3 dnl = 1 nk = 1 tdisr = UNLIMITED (0 currently) na = 16

variables float alb(nwn) float z(nlay) float t(nlay) float p(nlay) float wl(nwn) float iof(nwn) float mtau(nwn) float htau(nwn) float hctaus(nwn) float gtau(nwn) float outcos(scal) float phi(nleg) float phic(scal) float umu(numu) float flux(v3 nwn nlev) float mix(nlay ngas) float c(nlay) float psat(nlay) float ga(nwnc) float wlc(nwnc) float inc(scal) int dm(scal) int ord(scal) float fbeam(scal) float wn(nwn) float tautot(nwn nlay) float htaus(nwn nlay) float htaux(nwn nlay) float taug(nwn nlay) float phase(nwn nlay nleg) float ssa(nwn nlay) float uu(nwn nphi nlev numu) float u0u(nwn nlev numu) float tray(nwn nlay) float gtauo(tdisr nwn nlay)

Haacute 14 variaacuteveis usadas como dimensotildees para as 35 variaacuteveis que satildeo arrays

Ex alb(nwn) indica que alb eacute um array 1D de nwn elementos

nwn estaacute armazenado como uma das dimensotildees e eacute 400 portanto alb tem 400 elementos

Parte do conteuacutedo de um arquivo NetCDF em formato CDL (gerado pelo programa ncdump)

7589

Arquivos - binaacuterios - NetCDF e HDF5Conteuacutedo daquele arquivo visualizado com o ncview (acompanha a biblioteca NetCDF padratildeo)

7689

Arquivos - binaacuterios - NetCDF e HDF5O conteuacutedo de todo o arquivo pode ser lido facilmente com as bibliotecas disponiacuteveis e armazenado em contecirciners convenientes Usando um objeto que gera um resultado um pouco mais conveniente

IDLgt h=pp_readncdf(refspec_g01_0nchash)IDLgt printhvar_dims ltObjHeapVar229(HASH)gtvars ltObjHeapVar152(HASH)gtdims ltObjHeapVar118(HASH)gt

IDLgt printh[vars]T 173203 175459 175848 176001 175975 Z 431869 418858 406067 393403 380464 FLUX 300660 145536 0705180 0341669 0165532 PHASE 100000 0779034 0660858 0542052 0449983 TAUTOT0694377 0693420 0693474 0693540 0693636()

IDLgt help(h[vars])[TAUTOT]ltExpressiongt FLOAT = Array[51 400]

IDLgt print(h[var_dims])[TAUTOT]NLAY NWN

IDLgt print(h[dims])[(h[var_dims])[TAUTOT]]NLAY 51NWN 400

7789

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5)

Visualizaccedilatildeo da variaacutevel selecionada

Metadados e alguns valores da variaacutevel selecionada

Variaacutevel a ser criada com o conteuacutedo desta variaacutevel do arquivo

Hierarquia das variaacuteveis do arquivo

7889

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5) Imported variable az

IDLgt helpaz Structure ltd5723f38gt 13 tags length=448 data length=444 refs=1 _NAME STRING az _ICONTYPE STRING binary _TYPE STRING DATASET _FILE STRING INTENSI_test_409OUTh5 _PATH STRING _DATA DOUBLE Array[38] _NDIMENSIONS LONG 1 _DIMENSIONS ULONG64 Array[1] _NELEMENTS ULONG64 38 _DATATYPE STRING H5T_FLOAT _STORAGESIZE ULONG 8 _PRECISION LONG 64 _SIGN STRING

IDLgt printaz_data 00000000 10000000 20000000 30000000 40000000 50000000 60000000 80000000 ()

7989

Arquivos - binaacuterios - imagens

JPEG JPEG200 TIFF GeoTIFF etc

Os formatos comuns de imagens satildeo bem suportados em muacuteltiplas plataformas para uso dentro de programas e interativamente

Alguns formatos tecircm opccedilatildeo de compressatildeo com perda eou sem perda

Armazenam imagens como arrays 2D ou 3D (3D frequumlentemente limitado a 3 ou 4 em uma das dimensotildees uma imagem em 3 ou 4 bandas) de inteiros ou (em alguns formatos) reais

Alguns formatos permitem armazenar metadados para caracterizar as imagens armazenadas

JPEG2000 e GeoTIFF (um subconjunto de TIFF) comuns em astronomia e aacutereas proacuteximas

8089

Arquivos - binaacuterios ndash imagens ndash exemplo (IDL)IDLgt printquery_tiff(issmap_2009tiffinfogeotiff=geo) 1

IDLgt helpinfo Structure ltd4eca4b8gt 18 tags length=144 data length=132 refs=1 CHANNELS LONG 4 DIMENSIONS LONG Array[2] IMAGE_INDEX LONG 0 NUM_IMAGES LONG 1 PIXEL_TYPE INT 1 TYPE STRING TIFF BITS_PER_SAMPLE LONG 8 POSITION FLOAT Array[2] RESOLUTION FLOAT Array[2] UNITS LONG 2 TILE_SIZE LONG Array[2] DESCRIPTION STRING ISS (2009) DATE_TIME STRING 20100218 012436()

IDLgt helpgeo Structure ltd4efa1b8gt 10 tags length=264 data length=262 refs=1 MODELPIXELSCALETAG DOUBLE Array[3] MODELTIEPOINTTAG DOUBLE Array[6 4] GEOGRAPHICTYPEGEOKEY INT 4035 GEOGSEMIMAJORAXISGEOKEY DOUBLE 25750000 GEOGSEMIMINORAXISGEOKEY DOUBLE 25750000()

IDLgt myimage=read_tiff(issmap_2009tiff) Lecirc a imagem para o array myimage

Obteacutem informaccedilotildees sobre o arquivo

8189

Arquivos - binaacuterios ndash formatos nativosLinguagens como IDL R Python Java tecircm seu formato nativo binaacuterio acessado em alto niacutevel Basta mandar salvar ler variaacuteveis no do arquivo a biblioteca padratildeo automagicamente faz todo o trabalho de decidir como gravar ler os dados

Conveniente de usar na proacutepria linguagem Mas raramente existem bibliotecas para ler gravar o formato nativo de uma linguagem a partir de outra Ex (IDL)

IDLgt savefile=2dspectrumsavmydatamyheadercorners_dcorners_averbosecompress SAVE Portable (XDR) compressed SAVERESTORE file SAVE Saved variable MYDATA SAVE Saved variable MYHEADER()

Pode ser lido com apenas (haacute formas mais elaboradas)

IDLgt restore2dspectrumsavverbose RESTORE Portable (XDR) compressed SAVERESTORE file RESTORE Save file written by ltunknowngtltunknowngt Thu Jan 27 191422 2011 RESTORE IDL version 801 (linux x86_64) RESTORE Restored variable MYDATA RESTORE Restored variable MYHEADER()

IDLgt helpmydatamyheadercorners_dcorners_aMYDATA FLOAT = Array[1201 1201]MYHEADER STRING = Array[144]()

8289

Arquivos - processamento em baixo niacutevel

Nem sempre um formato padratildeo eacute a melhor escolha para o problema

Nem sempre haacute escolha (pode-se ter que trabalhar com arquivos que jaacute foram escritos em algum formato proprietaacuterio)

Agraves vezes o formato eacute padratildeo mas natildeo haacute bom suporte a ele disponiacutevel

Em todos estes casos eacute necessaacuterio escrever rotinas em baixo niacutevel que vatildeo ler processar diretamente o conteuacutedo do arquivo

Preferencialmente criando interfaces de alto niacutevel para o programa que vai as usar

8389

Arquivos - processamento em baixo niacutevel - texto

Tomando o exemplo anterior onde as colunas eram de diferentes tipos

NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS dec18s0001 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0002 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0003 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 FLAT 5408757812500 460000 5 dec18s0004 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 DARK 5408757812500 460000 5

A forma mais simples de o ler diretamente eacute definir uma estrutura para receber cada linha e um array destas estruturas para receber todo o arquivo Ex (IDL)

IDLgt record=namecalmpos0filnameechlpos0d0disppos0d0targnameposdirclassmjd_obsitime0d0coadds0IDLgt nlines=file_lines(filesearch_scamtxt)IDLgt mydata=replicate(recordnlines-1)IDLgt header=

Depois de definidas as variaacuteveis que vatildeo receber os dados o arquivo pode ser lido

IDLgt openrunitfilesearch_scamtxtget_lunIDLgt readfunitheaderIDLgt readfunitmydataformat=(A14I8A15F104F104A18A19A15F158F105I15)IDLgt free_lununit

A gravaccedilatildeo de um arquivo texto poderia ser feita de forma semelhante apenas trocando openr por openw (abrir o arquivo para gravaccedilatildeo natildeo leitura) e readf por printf

O arquivo eacute aberto em uma unidade (unit) usada para especificar de onde eacute feita a leitura

Ao final o arquivo eacute fechado

8489

Arquivos - processamento em baixo niacutevel - texto

O que resulta em

IDLgt printheader NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS

IDLgt helpmydataMYDATA STRUCT = -gt ltAnonymousgt Array[4]

IDLgt helpmydata[0] Structure ltd5e38f68gt 11 tags length=136 data length=124 refs=3 NAME STRING dec18s0001 CALMPOS INT 0 FILNAME STRING NIRSPEC-5-AO ECHLPOS DOUBLE 62630000 DISPPOS DOUBLE 36450000 TARGNAME STRING HD85258 POSDIR STRING NIRSPEC-5-AOp1 CLASS STRING STAR MJD_OBS STRING 54087574 ITIME DOUBLE 10000000 COADDS INT 1

Este caso eacute mais complicado que os mais comuns por haver colunas de strings

Se todas fossem de nuacutemeros natildeo teria sido necessaacuterio especificar o formato explicitamente As colunas teriam sido adivinhadas pela biblioteca que lecirc o arquivo Poderia ter sido lido escrito soacute com um array de nuacutemeros sem estruturas

8589

Arquivos - processamento em baixo niacutevel - binaacuterio

Formatos binaacuterios podem ser definidos de qualquer forma O arquivo eacute apenas um conjunto de bytes Cabe ao software saber como os interpretar

Uma escolha comum para que sejam autodocumentados eacute incluir um cabeccedilalho de texto informando as caracteriacutesticas dos dados necessaacuterias para os ler

Ex (IDL) criar um arquivo que armazene um array de doubles com um cabeccedilalho informando as dimensotildees para que o programa que o lecirc saiba como ler os dados

Inventa dados e abre o arquivo

IDLgt data_to_write=dindgen(34)IDLgt openwunitbinary_exampledatget_lun

Escreve as dimensotildees como texto

IDLgt printfunitdimensions of the double array stored belowIDLgt printfunitsize(data_to_writedimensions)

Escreve os dados binaacuterios

IDLgt writeuunitdata_to_write

Fecha o arquivo

IDLgt free_lununit

Escreve em binaacuterio (write unformatted)

8689

Arquivos - processamento em baixo niacutevel - binaacuterio

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

dimensions of the double array stored below 3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

8789

Arquivos - processamento em baixo niacutevel - binaacuterioA leitura deste arquivo eacute igualmente simples

IDLgt header=IDLgt dims=[00]IDLgt openrunitbinary_exampledatget_lun

Lecirc as dimensotildees (armazenadas como texto)

IDLgt readfunitheaderIDLgt readfunitdims

Lecirc a parte binaacuteria depois de saber as dimensotildees

IDLgt data_read=dblarr(dims)IDLgt readuunitdata_read

Fecha o arquivo

IDLgt free_lununit

Verifica que os dados foram gravados e lidos corretamente

IDLgt printarray_equal(data_to_writedata_read) 1

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Lecirc dados binaacuterios (read unformatted)

8889

Sumaacuterio

5 ndash Slides em httpwwwppenteadonetpeapea04_strings_iopdf Strings Expressotildees regulares Arquivos

httpwwwppenteadonetpea

8989

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89

Arquivos texto - newlines

A forma mais comum de especificar linhas eacute com um marcador do final de linha (newline)

Eacute um caractere especial natildeo normalmente presente no texto que serve para marcar fim de linhas

Mas natildeo haacute soacute um padratildeo de newline Os mais comuns

LF (Line Feed ASCII 10) ndash Unix Linux Mac OS X

CR - (Carriage Return ASCII 13) - Mac OS lt10

CR+LF (CR seguido de LF) - Windows DOS

Eacute o motivo de o Notepad (Windows) natildeo entender as quebras de linha de arquivos escritos com o formato nativo de Linux o arquivo soacute tem LF enquanto o editor espera CR+LF

Alguns sistemas (strings em vaacuterias linguagens por exemplo) usam o coacutedigo de escape n para indicar newline que eacute codificado de acordo com o padratildeo sendo usado

Em geral bibliotecas de leitura e gravaccedilatildeo de arquivos usam (default pelo menos) o newline nativo do sistema em que satildeo usadas

Programas de conversatildeo entre os sistemas satildeo comuns (ex dos2unix)

O Wordpad identifica se for usado soacute LF e quebra as linhas de acordo

5889

Arquivos - texto - CSV

Comma-separated values

O formato mais padronizado para tabelas (arrays 2D) em texto (frequentemente mas natildeo necessariamente ASCII)

Bem suportado por bibliotecas padratildeo de linguagens e outros softwares (Excel Calc Origin Google Docs etc)

Conteacutem Linhas de cabeccedilalho (opcionais mas recomendadas) linhas com qualquer texto geral

descrevendo o arquivo e em geral uma linha de tiacutetulo para as colunas da tabela Uma (apenas uma) tabela onde todas as linhas tecircm o mesmo nuacutemero de colunas

Colunas separadas por viacutergulas (opcionalmente pode ser outro separador) Linhas terminadas por newline (qualquer que seja) Strings delimitados por ldquo ldquo

Ex

NAMECALMPOSFILNAMEECHLPOSDISPPOSTARGNAMEPOSDIRCLASSMJD-OBSITIMECOADDSdec18s00010NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001dec18s00020NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001dec18s00120NIRSPEC-5-AO635800364500itan140NIRSPEC-5-AOp2 TITAN5408763000001dec18s00140NIRSPEC-5-AO626300364500itan140NIRSPEC-5-AOp1 TITAN5408763000001dec18s00151NIRSPEC-5-AO626300364500itan140NIRSPEC-5-AOp1ARC5408764000001dec18s00160NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001

Natildeo eacute necessaacuterio que as colunas tenham largura constante

Cabeccedilalho

5989

Arquivos - texto - CSVHaacute amplo suporte a leitura e gravaccedilatildeo de CSV sem precisar recorrer a procedimentos de baixo niacutevel

Podem ser diretamente importados em Excel Calc Origin Google Docs ou lido facilmente com bibliotecas padratildeo comuns Ex (IDL)

IDLgt c=read_csv(filesearch_scamcsvheader=h)IDLgt printhNAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS

IDLgt helpc Structure ltc8bca508gt 11 tags length=5256 data length=5248 refs=1 FIELD01 STRING Array[41] FIELD02 LONG Array[41] FIELD03 STRING Array[41] FIELD04 DOUBLE Array[41] FIELD05 DOUBLE Array[41] FIELD06 STRING Array[41] FIELD07 STRING Array[41] FIELD08 STRING Array[41] FIELD09 STRING Array[41] FIELD10 DOUBLE Array[41] FIELD11 LONG Array[41]

IDLgt printcfield01[03]dec18s0001 dec18s0002 dec18s0003 dec18s0004

IDLgt printcfield03[03]NIRSPEC-5-AO NIRSPEC-5-AO NIRSPEC-5-AO NIRSPEC-5-AO

6089

Arquivos - texto - CSVEx (IDL) Criaccedilatildeo de um CSV com uma tabela de valores

Criaccedilatildeo de 3 arrays 1D (12 elementos) um para cada coluna

IDLgt x=dindgen(3)IDLgt y=dindgen(4)IDLgt xx=reform(rebin(x34)12)IDLgt yy=reform(rebin(reform(y14)34)12)IDLgt f=xx+yy10IDLgt helpxxyyfXX DOUBLE = Array[12]YY DOUBLE = Array[12]F DOUBLE = Array[12]

Escrita do arquivo

IDLgt write_csvexamplecsvxxyyfheader=[XYX+10Y]

ResultadoXYX+10Y000000000000000000000000100000000000000010000000200000000000000020000000000000001000000010000000100000001000000011000000()

6189

Arquivos - texto - ldquoColunas regularesrdquoFixed column width

Natildeo eacute exatamente um padratildeo Eacute uma praacutetica comum

Armazena uma tabela (array 2D) de forma regular simples de ser interpretada e lida

Costumam ter linha(s) de cabeccedilalho descrevendo o conteuacutedo do arquivo em geral com uma linha para os nomes das colunas

As demais linhas conteacutem os dados sempre ocupando a mesma largura por coluna e escritos no mesmo formato em cada coluna

Costumam ser simples de ler inclusive interativamente (exs Excel Calc Origin read_ascii)

Ex (IDL) Uma simples tabela soacute de nuacutemeros

wavl CH4=33 wavl CH4=25 wavl CH4=10 wavl CH4=08 wavl CH4=05 wavl CH4=026 wavl CH4=02 477330000 0090130 477330000 0091110 477330000 0089250 477330000 0087000 477330000 0087140 477330000 0090080 477330000 0088110 480040000 0090930 480040000 0091930 480040000 0090160 480040000 0087930 480040000 0088110 480040000 0090950 480040000 0089090 482750000 0091710 482750000 0092730 482750000 0091060 482750000 0088850 482750000 0089080 482750000 0091810 482750000 0090060 485450000 0092530 485450000 0093570 485450000 0092000 485450000 0089810 485450000 0090100 485450000 0092730 485450000 0091090

IDLgt a=read_ascii(specs_27s_ntxtdata_start=1header=header)IDLgt printheader wavl CH4=33 wavl CH4=25 wavl CH4=10 wavl CH4=08 wavl CH4=05 wavl CH4=026 wavl CH4=02 IDLgt helpa Structure ltd423c9a8gt 1 tags length=224 data length=224 refs=1 FIELD01 FLOAT Array[14 4]

6289

Arquivos - texto - ldquoColunas regularesrdquoJaacute um arquivo um pouco mais difiacutecil de ler

NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS dec18s0001 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0002 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0003 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 FLAT 5408757812500 460000 5 dec18s0004 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 DARK 5408757812500 460000 5

Por ter colunas de tipos diferentes (strings inteiros reais) natildeo eacute possiacutevel o ler em um simples array Mas eacute faacutecil o colocar em uma estrutura de arrays onde cada campo eacute uma coluna

Especificando interativamente como interpretar as linhasIDLgt templ=ascii_template(filesearch_scamtxt)

Nome do campo (default mostrado)

Tipo do campo (identificado automaticamente)

Posiccedilatildeo (caracter) do comeccedilo (identificada automaticamente)

Linha de exemplo para verificar as colunas

6389

Arquivos - texto - ldquoColunas regularesrdquoDepois de feito o template o arquivo pode ser lido com apenas

IDLgt a=read_ascii(filesearch_scamtxttemplate=templ)IDLgt helpa Structure ltd4ec4608gt 11 tags length=416 data length=416 refs=1 FIELD01 STRING Array[4] FIELD02 LONG Array[4] FIELD03 STRING Array[4] FIELD04 FLOAT Array[4] FIELD05 FLOAT Array[4] FIELD06 STRING Array[4] FIELD07 STRING Array[4] FIELD08 STRING Array[4] FIELD09 FLOAT Array[4] FIELD10 FLOAT Array[4] FIELD11 LONG Array[4]IDLgt printafield01dec18s0001 dec18s0002 dec18s0003 dec18s0004IDLgt printafield04 626300 626300 626300 626300

O template (uma estrutura contendo dados sobre como ler o arquivo) pode ser usado para outros arquivos no mesmo formato No lugar de ter sido criado interativamente poderia ter sido lido de algum arquivo Poderia ter especificado nomes para os campos que seriam mais amigaacuteveis que coias como FIELD11

6489

Arquivos - texto - XML

Extensible Markup Language

Admite grande flexibilidade e por isso pode ter alta complexidade

Valores satildeo colocados dentro de uma estrutura em hieraacuterquica (em uma aacutervore) com os noacutes identificados pelos seus nomes (chaves)

Largamente usado em muitas aacutereas para armazenar conjuntos arbitraacuterios de quaisquer estruturas de dados

A maioria das aplicaccedilotildees usa um formato que eacute um subconjunto do XML especificado por um Schema comumente em um arquivo XML DTD (Document Type Definition)

6589

Arquivos - texto ndash XML ndash exemplos de usos

Armazenamento de dados de aplicaccedilotildees web (comum para exportar importar dados MediaWiki DokuWiki WordPress ADS Lattes etc)

Documentos Office (docx pptx xlsx) OpenOffice (odt opd ods)

Como versotildees de outros formatos FITSML XDF

ldquoScientific Dataset XML NASAs Astronomical Data Center (ADC) sponsors a number of research projects that

use XML for scientific data representation The XML activities at the ADC are sponsored and supported by the NASA Office of Space Science Applied Information Systems Research Program (AISRP)rdquo - httpxmlcoverpagesorgnasa-adchtml

Astronomical Instrument Markup Language (AIML)

SVG ndash Scalable Vector Graphics

Muitas de outras aplicaccedilotildees listadas em httpxmlcoverpagesorgxmlhtmlapplications

6689

Arquivos - texto ndash XML - exemploltxml version=10 gtltDOCTYPE Xdmf SYSTEM Xdmfdtd []gtltXdmf xmlnsxi=httpwwww3org2001XInclude Version=20gt ltDomaingt lt-- Example of Basic Topologies --gt ltInformation Name=Descriptiongt Example of a Polyvertex Topology ltInformationgt ltGrid Name=Polyvertex GridType=Uniformgt ltTopology TopologyType=Polyvertex Dimensions=3 NodesPerElement=3gt ltDataItem Format=XML Dimensions=3 3 NumberType=Floatgt 0 1 2 4 5 6 8 9 10 ltDataItemgt ltTopologygt ltGeometry Type=XYZgt ltDataItem Format=XML Dimensions=4 4 3gt 00 00 00 10 00 00()Que mostra que a interpretaccedilatildeo (parsing) de XML eacute em geral complexa

6789

Arquivos - texto - XML

Haacute muitas bibliotecas de alto niacutevel para fazer o processamento (parsing) e entregar os dados em uma estrutura conveniente

A complexidade em processar XML estaacute em decidir o que fazer com os dados jaacute que os arquivos podem ser muito complexos

As APIs (Application Programming Interfaces) mais comuns para processar XML que satildeo implementadas em muitas linguagens

DOM (Document Object Model) ndash manteacutem todo o conteuacutedo do em uma estrutura de dados (em geral uma aacutervore) em uma variaacutevel (em geral um objeto) Esta pode ser consultada para obter os valores de interesse para os alterar e usada para escrever um arquivo

SAX (Simple API for XML) ndash Interpretador (parser) por objetos O usuaacuterio escreve uma classe herdando da classe SAX provendo os meacutetodos que vatildeo processar os campos agrave medida em que estes satildeo lidos

6889

Arquivos - binaacuterios - FITSFlexible Image Transport System

O formato mais comum para observaccedilotildees astronocircmicas Tambeacutem usado para armazenar quaisquer dados mesmo natildeo relacionados a observaccedilotildees (especialmente tabelas como eacute praacutetica do STSCI)

Conteacutem um (ou mais) cabeccedilalho(s) de texto com metadados (informaccedilotildees sobre os dados como caracteriacutesticas (necessaacuterias para os ler) origem condiccedilotildees em que foram obtidos processamento realizado etc)

SIMPLE = T image conforms to FITS standard BITPIX = 32 bits per data value NAXIS = 2 number of axes NAXIS1 = 1024 NAXIS2 = 1024 BSCALE = 100000 Scaling factor BZERO = 000000 Scaling zero-point TELESCOP= Keck II Telescope SLITNAME= 0041x226 Slit Name SLITPA = 351979 Slit position angle SLITX = 131500 X pixel of the center of the slit LST = 12010446 local apparent sidereal time (()

Depois do cabeccedilalho haacute uma (ou mais) seccedilatildeo(otildees) de dados binaacuterios Costuma(m) ser array(s) 1D (espectros) 2D (imagens) ou 3D (ldquocubos de dadosrdquo)

De inteiros ou reais inteiros satildeo comuns em contagens de instrumentos reais para valores derivados (fluxos intensidades etc)

6989

Arquivos - binaacuterios - FITSNormalmente FITS satildeo lidos escritos por bibliotecas prontas de (relativamente) alto niacutevel usuaacuterio natildeo tem que saber como os dados satildeo armazenados no arquivo nem como os ler escrever Ex (IDL com a biblioteca idlastro)

IDLgt fits_info2dspectrumfits2dspectrumfits has 3 extensionsPrimary header 288 recordsNo dataExtension 1 -- SCI Header 144 records IMAGE ( 1201 1201 )Extension 2 -- ERR Header 72 records IMAGE ( 1201 1201 )Extension 3 -- DQ Header 72 records IMAGE ( 1201 1201 )

IDLgt mydata=readfits(2dspectrumfitsexten_no=1myheader) READFITS Reading FITS extension of type IMAGE READFITS Now reading 1201 by 1201 array

IDLgt extastmyheadermyastIDLgt sz=size(mydatadimensions)IDLgt xy2ad[1sz[0]][1sz[1]]myastcorners_acorners_dIDLgt printcorners_aCorners of the data array from file 2dspectrumfits are at 14487480 33063480

IDLgt printcorners_d -00041264444 00041402222

Obteacutem os dados de coordenadas (WCS) do header

Coloca os dados no array (2D de floats) mydata e o header no array (1D de strings) myheader

Calcula as coordenadas das quinas da imagem atraveacutes do WCS

Provecirc informaccedilotildees sobre o arquivo

7089

Arquivos - binaacuterios - ISIS Cube

Formatos como FITS se adequam muito a ter uma interface de mais alto niacutevel por objetos

Tambeacutem para dados em tabelas FITS muito mais trabalhosos de ler em baixo niacutevel que se adequam muito mais a mapas ou estruturas

Exemplo (de um formato semelhante a FITS ISIS cube)

O objeto ao ser criado lecirc todo o arquivo

cube=pp_editablecube(CM_1553510065_1_ircub)

Meacutetodos fornecem os dados desejados para obter quando necessaacuterio os dados de interesse

Find out the names of the backplanesprintcubegetproperty(backnames)Get the start time of the cubeprintcubegetfromheader(START_TIME)2007-084T100057286Z

Valores no cabeccedilalho podem ser convenientemente fornecidos como um mapa

header=cubeheader_as_hash()printheader[START_TIME]2007-084T100057286Z

7189

Arquivos - binaacuterios ndash ISIS Cube

Os dados satildeo fornecidos como arraysMake a contour plot of the latitudesc=contour(cubegetsuffixbyname(LATITUDE))Get the band with wavelength nearest to 21 (in the units used in the cube)selband=cubegetbandbywavelength(21wavelengths=selwavs)

Interfaces por overload tornam o acesso ainda mais conveniente

selband=cube[21]

selwavs=cube[21]

Retorna um array com a banda de comprimento de onda mais proacuteximo de 21 (microm)

Retorna o comprimento de onda mais proacuteximo de 21 (microm) da banda retornada acima

7289

Arquivos - binaacuterios ndash ISIS Cube Alteraccedilotildees feitas ao conteuacutedo satildeo automaticamente refletidas em todos os

lugares (cabeccedilalho em particular) afetados mantendo o objeto vaacutelido que pode depois ser gravado em um novo arquivo

IDLgt printcubelinescubesamplescubebands 64 64 256

IDLgt helpcubecoreltExpressiongt FLOAT = Array[64 64 256]

IDLgt cubecore=dblarr(100100256)

A linha acima natildeo eacute uma atribuiccedilatildeo eacute uma invocaccedilatildeo de meacutetodo Eacute equivalente acubesetpropertycore=dblarr(100100256)

Eacute o trabalho da funccedilatildeo setproperty decidir se a propriedade passada (core) faz sentido e se fizer fazer todo o trabalho necessaacuterio a esta mudanccedila Para o usuaacuterio eacute tudo automaacutetico e os dados da classe satildeo vaacutelidos o tempo todo

IDLgt helpcubecoreltExpressiongt DOUBLE = Array[100 100 256]

IDLgt printcubelinescubesamplescubebands 100 100 256

IDLgt cubesaveCM_1553510065_1_ir_editedcub

7389

Arquivos - binaacuterios ndash NetCDF e HDF5

Network Common Data Form e Hierarchical Data Format

Os dois uacutenicos formatos bem estabelecidos para dados cientiacuteficos geneacutericos

Armazenam dados como vaacuterias variaacuteveis e seus metadados Para cada variaacutevel haacute (ou pode haver) os metadados

Nome Dimensotildees (do array) Unidades Comentaacuterios

Ambos permitem arrays multidimensionais

Apenas HDF5 permite estruturas (daiacute vem a hierarquia)

Autodocumentados qualquer software que saiba ler um destes formatos lecirc qualquer arquivo sem precisar de conhecimento preacutevio sobre como o arquivo foi gerado

Muito bem suportados em bibliotecas padratildeo e natildeo padratildeo em softwares interativos e visualizadores (inclusive plugins para navegadores)

httpwwwunidataucaredusoftwarenetcdf httpenwikipediaorgwikiHdf5

NetCDF eacute mais simples de usar por natildeo ter hierarquia dando menos trabalho para ler e escrever dados Se hierarquia natildeo eacute necessaacuteria eacute mais conveniente de usar que HDF5

7489

Arquivos - binaacuterios - NetCDF e HDF5Haacute tambeacutem o formato CDL uma versatildeo ASCII do NetCDF A biblioteca padratildeo do NetCDF inclui conversores entre estes formatos

$ ncdump -h refspec_g01_0ncnetcdf refspec_g01_0 dimensions nlay = 51 nwn = 400 nleg = 33 numu = 2 nlev = 52 nphi = 3 ngas = 2 nwnc = 1 scal = 1 v3 = 3 dnl = 1 nk = 1 tdisr = UNLIMITED (0 currently) na = 16

variables float alb(nwn) float z(nlay) float t(nlay) float p(nlay) float wl(nwn) float iof(nwn) float mtau(nwn) float htau(nwn) float hctaus(nwn) float gtau(nwn) float outcos(scal) float phi(nleg) float phic(scal) float umu(numu) float flux(v3 nwn nlev) float mix(nlay ngas) float c(nlay) float psat(nlay) float ga(nwnc) float wlc(nwnc) float inc(scal) int dm(scal) int ord(scal) float fbeam(scal) float wn(nwn) float tautot(nwn nlay) float htaus(nwn nlay) float htaux(nwn nlay) float taug(nwn nlay) float phase(nwn nlay nleg) float ssa(nwn nlay) float uu(nwn nphi nlev numu) float u0u(nwn nlev numu) float tray(nwn nlay) float gtauo(tdisr nwn nlay)

Haacute 14 variaacuteveis usadas como dimensotildees para as 35 variaacuteveis que satildeo arrays

Ex alb(nwn) indica que alb eacute um array 1D de nwn elementos

nwn estaacute armazenado como uma das dimensotildees e eacute 400 portanto alb tem 400 elementos

Parte do conteuacutedo de um arquivo NetCDF em formato CDL (gerado pelo programa ncdump)

7589

Arquivos - binaacuterios - NetCDF e HDF5Conteuacutedo daquele arquivo visualizado com o ncview (acompanha a biblioteca NetCDF padratildeo)

7689

Arquivos - binaacuterios - NetCDF e HDF5O conteuacutedo de todo o arquivo pode ser lido facilmente com as bibliotecas disponiacuteveis e armazenado em contecirciners convenientes Usando um objeto que gera um resultado um pouco mais conveniente

IDLgt h=pp_readncdf(refspec_g01_0nchash)IDLgt printhvar_dims ltObjHeapVar229(HASH)gtvars ltObjHeapVar152(HASH)gtdims ltObjHeapVar118(HASH)gt

IDLgt printh[vars]T 173203 175459 175848 176001 175975 Z 431869 418858 406067 393403 380464 FLUX 300660 145536 0705180 0341669 0165532 PHASE 100000 0779034 0660858 0542052 0449983 TAUTOT0694377 0693420 0693474 0693540 0693636()

IDLgt help(h[vars])[TAUTOT]ltExpressiongt FLOAT = Array[51 400]

IDLgt print(h[var_dims])[TAUTOT]NLAY NWN

IDLgt print(h[dims])[(h[var_dims])[TAUTOT]]NLAY 51NWN 400

7789

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5)

Visualizaccedilatildeo da variaacutevel selecionada

Metadados e alguns valores da variaacutevel selecionada

Variaacutevel a ser criada com o conteuacutedo desta variaacutevel do arquivo

Hierarquia das variaacuteveis do arquivo

7889

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5) Imported variable az

IDLgt helpaz Structure ltd5723f38gt 13 tags length=448 data length=444 refs=1 _NAME STRING az _ICONTYPE STRING binary _TYPE STRING DATASET _FILE STRING INTENSI_test_409OUTh5 _PATH STRING _DATA DOUBLE Array[38] _NDIMENSIONS LONG 1 _DIMENSIONS ULONG64 Array[1] _NELEMENTS ULONG64 38 _DATATYPE STRING H5T_FLOAT _STORAGESIZE ULONG 8 _PRECISION LONG 64 _SIGN STRING

IDLgt printaz_data 00000000 10000000 20000000 30000000 40000000 50000000 60000000 80000000 ()

7989

Arquivos - binaacuterios - imagens

JPEG JPEG200 TIFF GeoTIFF etc

Os formatos comuns de imagens satildeo bem suportados em muacuteltiplas plataformas para uso dentro de programas e interativamente

Alguns formatos tecircm opccedilatildeo de compressatildeo com perda eou sem perda

Armazenam imagens como arrays 2D ou 3D (3D frequumlentemente limitado a 3 ou 4 em uma das dimensotildees uma imagem em 3 ou 4 bandas) de inteiros ou (em alguns formatos) reais

Alguns formatos permitem armazenar metadados para caracterizar as imagens armazenadas

JPEG2000 e GeoTIFF (um subconjunto de TIFF) comuns em astronomia e aacutereas proacuteximas

8089

Arquivos - binaacuterios ndash imagens ndash exemplo (IDL)IDLgt printquery_tiff(issmap_2009tiffinfogeotiff=geo) 1

IDLgt helpinfo Structure ltd4eca4b8gt 18 tags length=144 data length=132 refs=1 CHANNELS LONG 4 DIMENSIONS LONG Array[2] IMAGE_INDEX LONG 0 NUM_IMAGES LONG 1 PIXEL_TYPE INT 1 TYPE STRING TIFF BITS_PER_SAMPLE LONG 8 POSITION FLOAT Array[2] RESOLUTION FLOAT Array[2] UNITS LONG 2 TILE_SIZE LONG Array[2] DESCRIPTION STRING ISS (2009) DATE_TIME STRING 20100218 012436()

IDLgt helpgeo Structure ltd4efa1b8gt 10 tags length=264 data length=262 refs=1 MODELPIXELSCALETAG DOUBLE Array[3] MODELTIEPOINTTAG DOUBLE Array[6 4] GEOGRAPHICTYPEGEOKEY INT 4035 GEOGSEMIMAJORAXISGEOKEY DOUBLE 25750000 GEOGSEMIMINORAXISGEOKEY DOUBLE 25750000()

IDLgt myimage=read_tiff(issmap_2009tiff) Lecirc a imagem para o array myimage

Obteacutem informaccedilotildees sobre o arquivo

8189

Arquivos - binaacuterios ndash formatos nativosLinguagens como IDL R Python Java tecircm seu formato nativo binaacuterio acessado em alto niacutevel Basta mandar salvar ler variaacuteveis no do arquivo a biblioteca padratildeo automagicamente faz todo o trabalho de decidir como gravar ler os dados

Conveniente de usar na proacutepria linguagem Mas raramente existem bibliotecas para ler gravar o formato nativo de uma linguagem a partir de outra Ex (IDL)

IDLgt savefile=2dspectrumsavmydatamyheadercorners_dcorners_averbosecompress SAVE Portable (XDR) compressed SAVERESTORE file SAVE Saved variable MYDATA SAVE Saved variable MYHEADER()

Pode ser lido com apenas (haacute formas mais elaboradas)

IDLgt restore2dspectrumsavverbose RESTORE Portable (XDR) compressed SAVERESTORE file RESTORE Save file written by ltunknowngtltunknowngt Thu Jan 27 191422 2011 RESTORE IDL version 801 (linux x86_64) RESTORE Restored variable MYDATA RESTORE Restored variable MYHEADER()

IDLgt helpmydatamyheadercorners_dcorners_aMYDATA FLOAT = Array[1201 1201]MYHEADER STRING = Array[144]()

8289

Arquivos - processamento em baixo niacutevel

Nem sempre um formato padratildeo eacute a melhor escolha para o problema

Nem sempre haacute escolha (pode-se ter que trabalhar com arquivos que jaacute foram escritos em algum formato proprietaacuterio)

Agraves vezes o formato eacute padratildeo mas natildeo haacute bom suporte a ele disponiacutevel

Em todos estes casos eacute necessaacuterio escrever rotinas em baixo niacutevel que vatildeo ler processar diretamente o conteuacutedo do arquivo

Preferencialmente criando interfaces de alto niacutevel para o programa que vai as usar

8389

Arquivos - processamento em baixo niacutevel - texto

Tomando o exemplo anterior onde as colunas eram de diferentes tipos

NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS dec18s0001 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0002 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0003 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 FLAT 5408757812500 460000 5 dec18s0004 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 DARK 5408757812500 460000 5

A forma mais simples de o ler diretamente eacute definir uma estrutura para receber cada linha e um array destas estruturas para receber todo o arquivo Ex (IDL)

IDLgt record=namecalmpos0filnameechlpos0d0disppos0d0targnameposdirclassmjd_obsitime0d0coadds0IDLgt nlines=file_lines(filesearch_scamtxt)IDLgt mydata=replicate(recordnlines-1)IDLgt header=

Depois de definidas as variaacuteveis que vatildeo receber os dados o arquivo pode ser lido

IDLgt openrunitfilesearch_scamtxtget_lunIDLgt readfunitheaderIDLgt readfunitmydataformat=(A14I8A15F104F104A18A19A15F158F105I15)IDLgt free_lununit

A gravaccedilatildeo de um arquivo texto poderia ser feita de forma semelhante apenas trocando openr por openw (abrir o arquivo para gravaccedilatildeo natildeo leitura) e readf por printf

O arquivo eacute aberto em uma unidade (unit) usada para especificar de onde eacute feita a leitura

Ao final o arquivo eacute fechado

8489

Arquivos - processamento em baixo niacutevel - texto

O que resulta em

IDLgt printheader NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS

IDLgt helpmydataMYDATA STRUCT = -gt ltAnonymousgt Array[4]

IDLgt helpmydata[0] Structure ltd5e38f68gt 11 tags length=136 data length=124 refs=3 NAME STRING dec18s0001 CALMPOS INT 0 FILNAME STRING NIRSPEC-5-AO ECHLPOS DOUBLE 62630000 DISPPOS DOUBLE 36450000 TARGNAME STRING HD85258 POSDIR STRING NIRSPEC-5-AOp1 CLASS STRING STAR MJD_OBS STRING 54087574 ITIME DOUBLE 10000000 COADDS INT 1

Este caso eacute mais complicado que os mais comuns por haver colunas de strings

Se todas fossem de nuacutemeros natildeo teria sido necessaacuterio especificar o formato explicitamente As colunas teriam sido adivinhadas pela biblioteca que lecirc o arquivo Poderia ter sido lido escrito soacute com um array de nuacutemeros sem estruturas

8589

Arquivos - processamento em baixo niacutevel - binaacuterio

Formatos binaacuterios podem ser definidos de qualquer forma O arquivo eacute apenas um conjunto de bytes Cabe ao software saber como os interpretar

Uma escolha comum para que sejam autodocumentados eacute incluir um cabeccedilalho de texto informando as caracteriacutesticas dos dados necessaacuterias para os ler

Ex (IDL) criar um arquivo que armazene um array de doubles com um cabeccedilalho informando as dimensotildees para que o programa que o lecirc saiba como ler os dados

Inventa dados e abre o arquivo

IDLgt data_to_write=dindgen(34)IDLgt openwunitbinary_exampledatget_lun

Escreve as dimensotildees como texto

IDLgt printfunitdimensions of the double array stored belowIDLgt printfunitsize(data_to_writedimensions)

Escreve os dados binaacuterios

IDLgt writeuunitdata_to_write

Fecha o arquivo

IDLgt free_lununit

Escreve em binaacuterio (write unformatted)

8689

Arquivos - processamento em baixo niacutevel - binaacuterio

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

dimensions of the double array stored below 3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

8789

Arquivos - processamento em baixo niacutevel - binaacuterioA leitura deste arquivo eacute igualmente simples

IDLgt header=IDLgt dims=[00]IDLgt openrunitbinary_exampledatget_lun

Lecirc as dimensotildees (armazenadas como texto)

IDLgt readfunitheaderIDLgt readfunitdims

Lecirc a parte binaacuteria depois de saber as dimensotildees

IDLgt data_read=dblarr(dims)IDLgt readuunitdata_read

Fecha o arquivo

IDLgt free_lununit

Verifica que os dados foram gravados e lidos corretamente

IDLgt printarray_equal(data_to_writedata_read) 1

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Lecirc dados binaacuterios (read unformatted)

8889

Sumaacuterio

5 ndash Slides em httpwwwppenteadonetpeapea04_strings_iopdf Strings Expressotildees regulares Arquivos

httpwwwppenteadonetpea

8989

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89

Arquivos - texto - CSV

Comma-separated values

O formato mais padronizado para tabelas (arrays 2D) em texto (frequentemente mas natildeo necessariamente ASCII)

Bem suportado por bibliotecas padratildeo de linguagens e outros softwares (Excel Calc Origin Google Docs etc)

Conteacutem Linhas de cabeccedilalho (opcionais mas recomendadas) linhas com qualquer texto geral

descrevendo o arquivo e em geral uma linha de tiacutetulo para as colunas da tabela Uma (apenas uma) tabela onde todas as linhas tecircm o mesmo nuacutemero de colunas

Colunas separadas por viacutergulas (opcionalmente pode ser outro separador) Linhas terminadas por newline (qualquer que seja) Strings delimitados por ldquo ldquo

Ex

NAMECALMPOSFILNAMEECHLPOSDISPPOSTARGNAMEPOSDIRCLASSMJD-OBSITIMECOADDSdec18s00010NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001dec18s00020NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001dec18s00120NIRSPEC-5-AO635800364500itan140NIRSPEC-5-AOp2 TITAN5408763000001dec18s00140NIRSPEC-5-AO626300364500itan140NIRSPEC-5-AOp1 TITAN5408763000001dec18s00151NIRSPEC-5-AO626300364500itan140NIRSPEC-5-AOp1ARC5408764000001dec18s00160NIRSPEC-5-AO626300364500HD85258NIRSPEC-5-AOp1STAR5408761000001

Natildeo eacute necessaacuterio que as colunas tenham largura constante

Cabeccedilalho

5989

Arquivos - texto - CSVHaacute amplo suporte a leitura e gravaccedilatildeo de CSV sem precisar recorrer a procedimentos de baixo niacutevel

Podem ser diretamente importados em Excel Calc Origin Google Docs ou lido facilmente com bibliotecas padratildeo comuns Ex (IDL)

IDLgt c=read_csv(filesearch_scamcsvheader=h)IDLgt printhNAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS

IDLgt helpc Structure ltc8bca508gt 11 tags length=5256 data length=5248 refs=1 FIELD01 STRING Array[41] FIELD02 LONG Array[41] FIELD03 STRING Array[41] FIELD04 DOUBLE Array[41] FIELD05 DOUBLE Array[41] FIELD06 STRING Array[41] FIELD07 STRING Array[41] FIELD08 STRING Array[41] FIELD09 STRING Array[41] FIELD10 DOUBLE Array[41] FIELD11 LONG Array[41]

IDLgt printcfield01[03]dec18s0001 dec18s0002 dec18s0003 dec18s0004

IDLgt printcfield03[03]NIRSPEC-5-AO NIRSPEC-5-AO NIRSPEC-5-AO NIRSPEC-5-AO

6089

Arquivos - texto - CSVEx (IDL) Criaccedilatildeo de um CSV com uma tabela de valores

Criaccedilatildeo de 3 arrays 1D (12 elementos) um para cada coluna

IDLgt x=dindgen(3)IDLgt y=dindgen(4)IDLgt xx=reform(rebin(x34)12)IDLgt yy=reform(rebin(reform(y14)34)12)IDLgt f=xx+yy10IDLgt helpxxyyfXX DOUBLE = Array[12]YY DOUBLE = Array[12]F DOUBLE = Array[12]

Escrita do arquivo

IDLgt write_csvexamplecsvxxyyfheader=[XYX+10Y]

ResultadoXYX+10Y000000000000000000000000100000000000000010000000200000000000000020000000000000001000000010000000100000001000000011000000()

6189

Arquivos - texto - ldquoColunas regularesrdquoFixed column width

Natildeo eacute exatamente um padratildeo Eacute uma praacutetica comum

Armazena uma tabela (array 2D) de forma regular simples de ser interpretada e lida

Costumam ter linha(s) de cabeccedilalho descrevendo o conteuacutedo do arquivo em geral com uma linha para os nomes das colunas

As demais linhas conteacutem os dados sempre ocupando a mesma largura por coluna e escritos no mesmo formato em cada coluna

Costumam ser simples de ler inclusive interativamente (exs Excel Calc Origin read_ascii)

Ex (IDL) Uma simples tabela soacute de nuacutemeros

wavl CH4=33 wavl CH4=25 wavl CH4=10 wavl CH4=08 wavl CH4=05 wavl CH4=026 wavl CH4=02 477330000 0090130 477330000 0091110 477330000 0089250 477330000 0087000 477330000 0087140 477330000 0090080 477330000 0088110 480040000 0090930 480040000 0091930 480040000 0090160 480040000 0087930 480040000 0088110 480040000 0090950 480040000 0089090 482750000 0091710 482750000 0092730 482750000 0091060 482750000 0088850 482750000 0089080 482750000 0091810 482750000 0090060 485450000 0092530 485450000 0093570 485450000 0092000 485450000 0089810 485450000 0090100 485450000 0092730 485450000 0091090

IDLgt a=read_ascii(specs_27s_ntxtdata_start=1header=header)IDLgt printheader wavl CH4=33 wavl CH4=25 wavl CH4=10 wavl CH4=08 wavl CH4=05 wavl CH4=026 wavl CH4=02 IDLgt helpa Structure ltd423c9a8gt 1 tags length=224 data length=224 refs=1 FIELD01 FLOAT Array[14 4]

6289

Arquivos - texto - ldquoColunas regularesrdquoJaacute um arquivo um pouco mais difiacutecil de ler

NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS dec18s0001 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0002 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0003 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 FLAT 5408757812500 460000 5 dec18s0004 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 DARK 5408757812500 460000 5

Por ter colunas de tipos diferentes (strings inteiros reais) natildeo eacute possiacutevel o ler em um simples array Mas eacute faacutecil o colocar em uma estrutura de arrays onde cada campo eacute uma coluna

Especificando interativamente como interpretar as linhasIDLgt templ=ascii_template(filesearch_scamtxt)

Nome do campo (default mostrado)

Tipo do campo (identificado automaticamente)

Posiccedilatildeo (caracter) do comeccedilo (identificada automaticamente)

Linha de exemplo para verificar as colunas

6389

Arquivos - texto - ldquoColunas regularesrdquoDepois de feito o template o arquivo pode ser lido com apenas

IDLgt a=read_ascii(filesearch_scamtxttemplate=templ)IDLgt helpa Structure ltd4ec4608gt 11 tags length=416 data length=416 refs=1 FIELD01 STRING Array[4] FIELD02 LONG Array[4] FIELD03 STRING Array[4] FIELD04 FLOAT Array[4] FIELD05 FLOAT Array[4] FIELD06 STRING Array[4] FIELD07 STRING Array[4] FIELD08 STRING Array[4] FIELD09 FLOAT Array[4] FIELD10 FLOAT Array[4] FIELD11 LONG Array[4]IDLgt printafield01dec18s0001 dec18s0002 dec18s0003 dec18s0004IDLgt printafield04 626300 626300 626300 626300

O template (uma estrutura contendo dados sobre como ler o arquivo) pode ser usado para outros arquivos no mesmo formato No lugar de ter sido criado interativamente poderia ter sido lido de algum arquivo Poderia ter especificado nomes para os campos que seriam mais amigaacuteveis que coias como FIELD11

6489

Arquivos - texto - XML

Extensible Markup Language

Admite grande flexibilidade e por isso pode ter alta complexidade

Valores satildeo colocados dentro de uma estrutura em hieraacuterquica (em uma aacutervore) com os noacutes identificados pelos seus nomes (chaves)

Largamente usado em muitas aacutereas para armazenar conjuntos arbitraacuterios de quaisquer estruturas de dados

A maioria das aplicaccedilotildees usa um formato que eacute um subconjunto do XML especificado por um Schema comumente em um arquivo XML DTD (Document Type Definition)

6589

Arquivos - texto ndash XML ndash exemplos de usos

Armazenamento de dados de aplicaccedilotildees web (comum para exportar importar dados MediaWiki DokuWiki WordPress ADS Lattes etc)

Documentos Office (docx pptx xlsx) OpenOffice (odt opd ods)

Como versotildees de outros formatos FITSML XDF

ldquoScientific Dataset XML NASAs Astronomical Data Center (ADC) sponsors a number of research projects that

use XML for scientific data representation The XML activities at the ADC are sponsored and supported by the NASA Office of Space Science Applied Information Systems Research Program (AISRP)rdquo - httpxmlcoverpagesorgnasa-adchtml

Astronomical Instrument Markup Language (AIML)

SVG ndash Scalable Vector Graphics

Muitas de outras aplicaccedilotildees listadas em httpxmlcoverpagesorgxmlhtmlapplications

6689

Arquivos - texto ndash XML - exemploltxml version=10 gtltDOCTYPE Xdmf SYSTEM Xdmfdtd []gtltXdmf xmlnsxi=httpwwww3org2001XInclude Version=20gt ltDomaingt lt-- Example of Basic Topologies --gt ltInformation Name=Descriptiongt Example of a Polyvertex Topology ltInformationgt ltGrid Name=Polyvertex GridType=Uniformgt ltTopology TopologyType=Polyvertex Dimensions=3 NodesPerElement=3gt ltDataItem Format=XML Dimensions=3 3 NumberType=Floatgt 0 1 2 4 5 6 8 9 10 ltDataItemgt ltTopologygt ltGeometry Type=XYZgt ltDataItem Format=XML Dimensions=4 4 3gt 00 00 00 10 00 00()Que mostra que a interpretaccedilatildeo (parsing) de XML eacute em geral complexa

6789

Arquivos - texto - XML

Haacute muitas bibliotecas de alto niacutevel para fazer o processamento (parsing) e entregar os dados em uma estrutura conveniente

A complexidade em processar XML estaacute em decidir o que fazer com os dados jaacute que os arquivos podem ser muito complexos

As APIs (Application Programming Interfaces) mais comuns para processar XML que satildeo implementadas em muitas linguagens

DOM (Document Object Model) ndash manteacutem todo o conteuacutedo do em uma estrutura de dados (em geral uma aacutervore) em uma variaacutevel (em geral um objeto) Esta pode ser consultada para obter os valores de interesse para os alterar e usada para escrever um arquivo

SAX (Simple API for XML) ndash Interpretador (parser) por objetos O usuaacuterio escreve uma classe herdando da classe SAX provendo os meacutetodos que vatildeo processar os campos agrave medida em que estes satildeo lidos

6889

Arquivos - binaacuterios - FITSFlexible Image Transport System

O formato mais comum para observaccedilotildees astronocircmicas Tambeacutem usado para armazenar quaisquer dados mesmo natildeo relacionados a observaccedilotildees (especialmente tabelas como eacute praacutetica do STSCI)

Conteacutem um (ou mais) cabeccedilalho(s) de texto com metadados (informaccedilotildees sobre os dados como caracteriacutesticas (necessaacuterias para os ler) origem condiccedilotildees em que foram obtidos processamento realizado etc)

SIMPLE = T image conforms to FITS standard BITPIX = 32 bits per data value NAXIS = 2 number of axes NAXIS1 = 1024 NAXIS2 = 1024 BSCALE = 100000 Scaling factor BZERO = 000000 Scaling zero-point TELESCOP= Keck II Telescope SLITNAME= 0041x226 Slit Name SLITPA = 351979 Slit position angle SLITX = 131500 X pixel of the center of the slit LST = 12010446 local apparent sidereal time (()

Depois do cabeccedilalho haacute uma (ou mais) seccedilatildeo(otildees) de dados binaacuterios Costuma(m) ser array(s) 1D (espectros) 2D (imagens) ou 3D (ldquocubos de dadosrdquo)

De inteiros ou reais inteiros satildeo comuns em contagens de instrumentos reais para valores derivados (fluxos intensidades etc)

6989

Arquivos - binaacuterios - FITSNormalmente FITS satildeo lidos escritos por bibliotecas prontas de (relativamente) alto niacutevel usuaacuterio natildeo tem que saber como os dados satildeo armazenados no arquivo nem como os ler escrever Ex (IDL com a biblioteca idlastro)

IDLgt fits_info2dspectrumfits2dspectrumfits has 3 extensionsPrimary header 288 recordsNo dataExtension 1 -- SCI Header 144 records IMAGE ( 1201 1201 )Extension 2 -- ERR Header 72 records IMAGE ( 1201 1201 )Extension 3 -- DQ Header 72 records IMAGE ( 1201 1201 )

IDLgt mydata=readfits(2dspectrumfitsexten_no=1myheader) READFITS Reading FITS extension of type IMAGE READFITS Now reading 1201 by 1201 array

IDLgt extastmyheadermyastIDLgt sz=size(mydatadimensions)IDLgt xy2ad[1sz[0]][1sz[1]]myastcorners_acorners_dIDLgt printcorners_aCorners of the data array from file 2dspectrumfits are at 14487480 33063480

IDLgt printcorners_d -00041264444 00041402222

Obteacutem os dados de coordenadas (WCS) do header

Coloca os dados no array (2D de floats) mydata e o header no array (1D de strings) myheader

Calcula as coordenadas das quinas da imagem atraveacutes do WCS

Provecirc informaccedilotildees sobre o arquivo

7089

Arquivos - binaacuterios - ISIS Cube

Formatos como FITS se adequam muito a ter uma interface de mais alto niacutevel por objetos

Tambeacutem para dados em tabelas FITS muito mais trabalhosos de ler em baixo niacutevel que se adequam muito mais a mapas ou estruturas

Exemplo (de um formato semelhante a FITS ISIS cube)

O objeto ao ser criado lecirc todo o arquivo

cube=pp_editablecube(CM_1553510065_1_ircub)

Meacutetodos fornecem os dados desejados para obter quando necessaacuterio os dados de interesse

Find out the names of the backplanesprintcubegetproperty(backnames)Get the start time of the cubeprintcubegetfromheader(START_TIME)2007-084T100057286Z

Valores no cabeccedilalho podem ser convenientemente fornecidos como um mapa

header=cubeheader_as_hash()printheader[START_TIME]2007-084T100057286Z

7189

Arquivos - binaacuterios ndash ISIS Cube

Os dados satildeo fornecidos como arraysMake a contour plot of the latitudesc=contour(cubegetsuffixbyname(LATITUDE))Get the band with wavelength nearest to 21 (in the units used in the cube)selband=cubegetbandbywavelength(21wavelengths=selwavs)

Interfaces por overload tornam o acesso ainda mais conveniente

selband=cube[21]

selwavs=cube[21]

Retorna um array com a banda de comprimento de onda mais proacuteximo de 21 (microm)

Retorna o comprimento de onda mais proacuteximo de 21 (microm) da banda retornada acima

7289

Arquivos - binaacuterios ndash ISIS Cube Alteraccedilotildees feitas ao conteuacutedo satildeo automaticamente refletidas em todos os

lugares (cabeccedilalho em particular) afetados mantendo o objeto vaacutelido que pode depois ser gravado em um novo arquivo

IDLgt printcubelinescubesamplescubebands 64 64 256

IDLgt helpcubecoreltExpressiongt FLOAT = Array[64 64 256]

IDLgt cubecore=dblarr(100100256)

A linha acima natildeo eacute uma atribuiccedilatildeo eacute uma invocaccedilatildeo de meacutetodo Eacute equivalente acubesetpropertycore=dblarr(100100256)

Eacute o trabalho da funccedilatildeo setproperty decidir se a propriedade passada (core) faz sentido e se fizer fazer todo o trabalho necessaacuterio a esta mudanccedila Para o usuaacuterio eacute tudo automaacutetico e os dados da classe satildeo vaacutelidos o tempo todo

IDLgt helpcubecoreltExpressiongt DOUBLE = Array[100 100 256]

IDLgt printcubelinescubesamplescubebands 100 100 256

IDLgt cubesaveCM_1553510065_1_ir_editedcub

7389

Arquivos - binaacuterios ndash NetCDF e HDF5

Network Common Data Form e Hierarchical Data Format

Os dois uacutenicos formatos bem estabelecidos para dados cientiacuteficos geneacutericos

Armazenam dados como vaacuterias variaacuteveis e seus metadados Para cada variaacutevel haacute (ou pode haver) os metadados

Nome Dimensotildees (do array) Unidades Comentaacuterios

Ambos permitem arrays multidimensionais

Apenas HDF5 permite estruturas (daiacute vem a hierarquia)

Autodocumentados qualquer software que saiba ler um destes formatos lecirc qualquer arquivo sem precisar de conhecimento preacutevio sobre como o arquivo foi gerado

Muito bem suportados em bibliotecas padratildeo e natildeo padratildeo em softwares interativos e visualizadores (inclusive plugins para navegadores)

httpwwwunidataucaredusoftwarenetcdf httpenwikipediaorgwikiHdf5

NetCDF eacute mais simples de usar por natildeo ter hierarquia dando menos trabalho para ler e escrever dados Se hierarquia natildeo eacute necessaacuteria eacute mais conveniente de usar que HDF5

7489

Arquivos - binaacuterios - NetCDF e HDF5Haacute tambeacutem o formato CDL uma versatildeo ASCII do NetCDF A biblioteca padratildeo do NetCDF inclui conversores entre estes formatos

$ ncdump -h refspec_g01_0ncnetcdf refspec_g01_0 dimensions nlay = 51 nwn = 400 nleg = 33 numu = 2 nlev = 52 nphi = 3 ngas = 2 nwnc = 1 scal = 1 v3 = 3 dnl = 1 nk = 1 tdisr = UNLIMITED (0 currently) na = 16

variables float alb(nwn) float z(nlay) float t(nlay) float p(nlay) float wl(nwn) float iof(nwn) float mtau(nwn) float htau(nwn) float hctaus(nwn) float gtau(nwn) float outcos(scal) float phi(nleg) float phic(scal) float umu(numu) float flux(v3 nwn nlev) float mix(nlay ngas) float c(nlay) float psat(nlay) float ga(nwnc) float wlc(nwnc) float inc(scal) int dm(scal) int ord(scal) float fbeam(scal) float wn(nwn) float tautot(nwn nlay) float htaus(nwn nlay) float htaux(nwn nlay) float taug(nwn nlay) float phase(nwn nlay nleg) float ssa(nwn nlay) float uu(nwn nphi nlev numu) float u0u(nwn nlev numu) float tray(nwn nlay) float gtauo(tdisr nwn nlay)

Haacute 14 variaacuteveis usadas como dimensotildees para as 35 variaacuteveis que satildeo arrays

Ex alb(nwn) indica que alb eacute um array 1D de nwn elementos

nwn estaacute armazenado como uma das dimensotildees e eacute 400 portanto alb tem 400 elementos

Parte do conteuacutedo de um arquivo NetCDF em formato CDL (gerado pelo programa ncdump)

7589

Arquivos - binaacuterios - NetCDF e HDF5Conteuacutedo daquele arquivo visualizado com o ncview (acompanha a biblioteca NetCDF padratildeo)

7689

Arquivos - binaacuterios - NetCDF e HDF5O conteuacutedo de todo o arquivo pode ser lido facilmente com as bibliotecas disponiacuteveis e armazenado em contecirciners convenientes Usando um objeto que gera um resultado um pouco mais conveniente

IDLgt h=pp_readncdf(refspec_g01_0nchash)IDLgt printhvar_dims ltObjHeapVar229(HASH)gtvars ltObjHeapVar152(HASH)gtdims ltObjHeapVar118(HASH)gt

IDLgt printh[vars]T 173203 175459 175848 176001 175975 Z 431869 418858 406067 393403 380464 FLUX 300660 145536 0705180 0341669 0165532 PHASE 100000 0779034 0660858 0542052 0449983 TAUTOT0694377 0693420 0693474 0693540 0693636()

IDLgt help(h[vars])[TAUTOT]ltExpressiongt FLOAT = Array[51 400]

IDLgt print(h[var_dims])[TAUTOT]NLAY NWN

IDLgt print(h[dims])[(h[var_dims])[TAUTOT]]NLAY 51NWN 400

7789

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5)

Visualizaccedilatildeo da variaacutevel selecionada

Metadados e alguns valores da variaacutevel selecionada

Variaacutevel a ser criada com o conteuacutedo desta variaacutevel do arquivo

Hierarquia das variaacuteveis do arquivo

7889

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5) Imported variable az

IDLgt helpaz Structure ltd5723f38gt 13 tags length=448 data length=444 refs=1 _NAME STRING az _ICONTYPE STRING binary _TYPE STRING DATASET _FILE STRING INTENSI_test_409OUTh5 _PATH STRING _DATA DOUBLE Array[38] _NDIMENSIONS LONG 1 _DIMENSIONS ULONG64 Array[1] _NELEMENTS ULONG64 38 _DATATYPE STRING H5T_FLOAT _STORAGESIZE ULONG 8 _PRECISION LONG 64 _SIGN STRING

IDLgt printaz_data 00000000 10000000 20000000 30000000 40000000 50000000 60000000 80000000 ()

7989

Arquivos - binaacuterios - imagens

JPEG JPEG200 TIFF GeoTIFF etc

Os formatos comuns de imagens satildeo bem suportados em muacuteltiplas plataformas para uso dentro de programas e interativamente

Alguns formatos tecircm opccedilatildeo de compressatildeo com perda eou sem perda

Armazenam imagens como arrays 2D ou 3D (3D frequumlentemente limitado a 3 ou 4 em uma das dimensotildees uma imagem em 3 ou 4 bandas) de inteiros ou (em alguns formatos) reais

Alguns formatos permitem armazenar metadados para caracterizar as imagens armazenadas

JPEG2000 e GeoTIFF (um subconjunto de TIFF) comuns em astronomia e aacutereas proacuteximas

8089

Arquivos - binaacuterios ndash imagens ndash exemplo (IDL)IDLgt printquery_tiff(issmap_2009tiffinfogeotiff=geo) 1

IDLgt helpinfo Structure ltd4eca4b8gt 18 tags length=144 data length=132 refs=1 CHANNELS LONG 4 DIMENSIONS LONG Array[2] IMAGE_INDEX LONG 0 NUM_IMAGES LONG 1 PIXEL_TYPE INT 1 TYPE STRING TIFF BITS_PER_SAMPLE LONG 8 POSITION FLOAT Array[2] RESOLUTION FLOAT Array[2] UNITS LONG 2 TILE_SIZE LONG Array[2] DESCRIPTION STRING ISS (2009) DATE_TIME STRING 20100218 012436()

IDLgt helpgeo Structure ltd4efa1b8gt 10 tags length=264 data length=262 refs=1 MODELPIXELSCALETAG DOUBLE Array[3] MODELTIEPOINTTAG DOUBLE Array[6 4] GEOGRAPHICTYPEGEOKEY INT 4035 GEOGSEMIMAJORAXISGEOKEY DOUBLE 25750000 GEOGSEMIMINORAXISGEOKEY DOUBLE 25750000()

IDLgt myimage=read_tiff(issmap_2009tiff) Lecirc a imagem para o array myimage

Obteacutem informaccedilotildees sobre o arquivo

8189

Arquivos - binaacuterios ndash formatos nativosLinguagens como IDL R Python Java tecircm seu formato nativo binaacuterio acessado em alto niacutevel Basta mandar salvar ler variaacuteveis no do arquivo a biblioteca padratildeo automagicamente faz todo o trabalho de decidir como gravar ler os dados

Conveniente de usar na proacutepria linguagem Mas raramente existem bibliotecas para ler gravar o formato nativo de uma linguagem a partir de outra Ex (IDL)

IDLgt savefile=2dspectrumsavmydatamyheadercorners_dcorners_averbosecompress SAVE Portable (XDR) compressed SAVERESTORE file SAVE Saved variable MYDATA SAVE Saved variable MYHEADER()

Pode ser lido com apenas (haacute formas mais elaboradas)

IDLgt restore2dspectrumsavverbose RESTORE Portable (XDR) compressed SAVERESTORE file RESTORE Save file written by ltunknowngtltunknowngt Thu Jan 27 191422 2011 RESTORE IDL version 801 (linux x86_64) RESTORE Restored variable MYDATA RESTORE Restored variable MYHEADER()

IDLgt helpmydatamyheadercorners_dcorners_aMYDATA FLOAT = Array[1201 1201]MYHEADER STRING = Array[144]()

8289

Arquivos - processamento em baixo niacutevel

Nem sempre um formato padratildeo eacute a melhor escolha para o problema

Nem sempre haacute escolha (pode-se ter que trabalhar com arquivos que jaacute foram escritos em algum formato proprietaacuterio)

Agraves vezes o formato eacute padratildeo mas natildeo haacute bom suporte a ele disponiacutevel

Em todos estes casos eacute necessaacuterio escrever rotinas em baixo niacutevel que vatildeo ler processar diretamente o conteuacutedo do arquivo

Preferencialmente criando interfaces de alto niacutevel para o programa que vai as usar

8389

Arquivos - processamento em baixo niacutevel - texto

Tomando o exemplo anterior onde as colunas eram de diferentes tipos

NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS dec18s0001 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0002 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0003 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 FLAT 5408757812500 460000 5 dec18s0004 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 DARK 5408757812500 460000 5

A forma mais simples de o ler diretamente eacute definir uma estrutura para receber cada linha e um array destas estruturas para receber todo o arquivo Ex (IDL)

IDLgt record=namecalmpos0filnameechlpos0d0disppos0d0targnameposdirclassmjd_obsitime0d0coadds0IDLgt nlines=file_lines(filesearch_scamtxt)IDLgt mydata=replicate(recordnlines-1)IDLgt header=

Depois de definidas as variaacuteveis que vatildeo receber os dados o arquivo pode ser lido

IDLgt openrunitfilesearch_scamtxtget_lunIDLgt readfunitheaderIDLgt readfunitmydataformat=(A14I8A15F104F104A18A19A15F158F105I15)IDLgt free_lununit

A gravaccedilatildeo de um arquivo texto poderia ser feita de forma semelhante apenas trocando openr por openw (abrir o arquivo para gravaccedilatildeo natildeo leitura) e readf por printf

O arquivo eacute aberto em uma unidade (unit) usada para especificar de onde eacute feita a leitura

Ao final o arquivo eacute fechado

8489

Arquivos - processamento em baixo niacutevel - texto

O que resulta em

IDLgt printheader NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS

IDLgt helpmydataMYDATA STRUCT = -gt ltAnonymousgt Array[4]

IDLgt helpmydata[0] Structure ltd5e38f68gt 11 tags length=136 data length=124 refs=3 NAME STRING dec18s0001 CALMPOS INT 0 FILNAME STRING NIRSPEC-5-AO ECHLPOS DOUBLE 62630000 DISPPOS DOUBLE 36450000 TARGNAME STRING HD85258 POSDIR STRING NIRSPEC-5-AOp1 CLASS STRING STAR MJD_OBS STRING 54087574 ITIME DOUBLE 10000000 COADDS INT 1

Este caso eacute mais complicado que os mais comuns por haver colunas de strings

Se todas fossem de nuacutemeros natildeo teria sido necessaacuterio especificar o formato explicitamente As colunas teriam sido adivinhadas pela biblioteca que lecirc o arquivo Poderia ter sido lido escrito soacute com um array de nuacutemeros sem estruturas

8589

Arquivos - processamento em baixo niacutevel - binaacuterio

Formatos binaacuterios podem ser definidos de qualquer forma O arquivo eacute apenas um conjunto de bytes Cabe ao software saber como os interpretar

Uma escolha comum para que sejam autodocumentados eacute incluir um cabeccedilalho de texto informando as caracteriacutesticas dos dados necessaacuterias para os ler

Ex (IDL) criar um arquivo que armazene um array de doubles com um cabeccedilalho informando as dimensotildees para que o programa que o lecirc saiba como ler os dados

Inventa dados e abre o arquivo

IDLgt data_to_write=dindgen(34)IDLgt openwunitbinary_exampledatget_lun

Escreve as dimensotildees como texto

IDLgt printfunitdimensions of the double array stored belowIDLgt printfunitsize(data_to_writedimensions)

Escreve os dados binaacuterios

IDLgt writeuunitdata_to_write

Fecha o arquivo

IDLgt free_lununit

Escreve em binaacuterio (write unformatted)

8689

Arquivos - processamento em baixo niacutevel - binaacuterio

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

dimensions of the double array stored below 3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

8789

Arquivos - processamento em baixo niacutevel - binaacuterioA leitura deste arquivo eacute igualmente simples

IDLgt header=IDLgt dims=[00]IDLgt openrunitbinary_exampledatget_lun

Lecirc as dimensotildees (armazenadas como texto)

IDLgt readfunitheaderIDLgt readfunitdims

Lecirc a parte binaacuteria depois de saber as dimensotildees

IDLgt data_read=dblarr(dims)IDLgt readuunitdata_read

Fecha o arquivo

IDLgt free_lununit

Verifica que os dados foram gravados e lidos corretamente

IDLgt printarray_equal(data_to_writedata_read) 1

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Lecirc dados binaacuterios (read unformatted)

8889

Sumaacuterio

5 ndash Slides em httpwwwppenteadonetpeapea04_strings_iopdf Strings Expressotildees regulares Arquivos

httpwwwppenteadonetpea

8989

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89

Arquivos - texto - CSVHaacute amplo suporte a leitura e gravaccedilatildeo de CSV sem precisar recorrer a procedimentos de baixo niacutevel

Podem ser diretamente importados em Excel Calc Origin Google Docs ou lido facilmente com bibliotecas padratildeo comuns Ex (IDL)

IDLgt c=read_csv(filesearch_scamcsvheader=h)IDLgt printhNAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS

IDLgt helpc Structure ltc8bca508gt 11 tags length=5256 data length=5248 refs=1 FIELD01 STRING Array[41] FIELD02 LONG Array[41] FIELD03 STRING Array[41] FIELD04 DOUBLE Array[41] FIELD05 DOUBLE Array[41] FIELD06 STRING Array[41] FIELD07 STRING Array[41] FIELD08 STRING Array[41] FIELD09 STRING Array[41] FIELD10 DOUBLE Array[41] FIELD11 LONG Array[41]

IDLgt printcfield01[03]dec18s0001 dec18s0002 dec18s0003 dec18s0004

IDLgt printcfield03[03]NIRSPEC-5-AO NIRSPEC-5-AO NIRSPEC-5-AO NIRSPEC-5-AO

6089

Arquivos - texto - CSVEx (IDL) Criaccedilatildeo de um CSV com uma tabela de valores

Criaccedilatildeo de 3 arrays 1D (12 elementos) um para cada coluna

IDLgt x=dindgen(3)IDLgt y=dindgen(4)IDLgt xx=reform(rebin(x34)12)IDLgt yy=reform(rebin(reform(y14)34)12)IDLgt f=xx+yy10IDLgt helpxxyyfXX DOUBLE = Array[12]YY DOUBLE = Array[12]F DOUBLE = Array[12]

Escrita do arquivo

IDLgt write_csvexamplecsvxxyyfheader=[XYX+10Y]

ResultadoXYX+10Y000000000000000000000000100000000000000010000000200000000000000020000000000000001000000010000000100000001000000011000000()

6189

Arquivos - texto - ldquoColunas regularesrdquoFixed column width

Natildeo eacute exatamente um padratildeo Eacute uma praacutetica comum

Armazena uma tabela (array 2D) de forma regular simples de ser interpretada e lida

Costumam ter linha(s) de cabeccedilalho descrevendo o conteuacutedo do arquivo em geral com uma linha para os nomes das colunas

As demais linhas conteacutem os dados sempre ocupando a mesma largura por coluna e escritos no mesmo formato em cada coluna

Costumam ser simples de ler inclusive interativamente (exs Excel Calc Origin read_ascii)

Ex (IDL) Uma simples tabela soacute de nuacutemeros

wavl CH4=33 wavl CH4=25 wavl CH4=10 wavl CH4=08 wavl CH4=05 wavl CH4=026 wavl CH4=02 477330000 0090130 477330000 0091110 477330000 0089250 477330000 0087000 477330000 0087140 477330000 0090080 477330000 0088110 480040000 0090930 480040000 0091930 480040000 0090160 480040000 0087930 480040000 0088110 480040000 0090950 480040000 0089090 482750000 0091710 482750000 0092730 482750000 0091060 482750000 0088850 482750000 0089080 482750000 0091810 482750000 0090060 485450000 0092530 485450000 0093570 485450000 0092000 485450000 0089810 485450000 0090100 485450000 0092730 485450000 0091090

IDLgt a=read_ascii(specs_27s_ntxtdata_start=1header=header)IDLgt printheader wavl CH4=33 wavl CH4=25 wavl CH4=10 wavl CH4=08 wavl CH4=05 wavl CH4=026 wavl CH4=02 IDLgt helpa Structure ltd423c9a8gt 1 tags length=224 data length=224 refs=1 FIELD01 FLOAT Array[14 4]

6289

Arquivos - texto - ldquoColunas regularesrdquoJaacute um arquivo um pouco mais difiacutecil de ler

NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS dec18s0001 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0002 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0003 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 FLAT 5408757812500 460000 5 dec18s0004 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 DARK 5408757812500 460000 5

Por ter colunas de tipos diferentes (strings inteiros reais) natildeo eacute possiacutevel o ler em um simples array Mas eacute faacutecil o colocar em uma estrutura de arrays onde cada campo eacute uma coluna

Especificando interativamente como interpretar as linhasIDLgt templ=ascii_template(filesearch_scamtxt)

Nome do campo (default mostrado)

Tipo do campo (identificado automaticamente)

Posiccedilatildeo (caracter) do comeccedilo (identificada automaticamente)

Linha de exemplo para verificar as colunas

6389

Arquivos - texto - ldquoColunas regularesrdquoDepois de feito o template o arquivo pode ser lido com apenas

IDLgt a=read_ascii(filesearch_scamtxttemplate=templ)IDLgt helpa Structure ltd4ec4608gt 11 tags length=416 data length=416 refs=1 FIELD01 STRING Array[4] FIELD02 LONG Array[4] FIELD03 STRING Array[4] FIELD04 FLOAT Array[4] FIELD05 FLOAT Array[4] FIELD06 STRING Array[4] FIELD07 STRING Array[4] FIELD08 STRING Array[4] FIELD09 FLOAT Array[4] FIELD10 FLOAT Array[4] FIELD11 LONG Array[4]IDLgt printafield01dec18s0001 dec18s0002 dec18s0003 dec18s0004IDLgt printafield04 626300 626300 626300 626300

O template (uma estrutura contendo dados sobre como ler o arquivo) pode ser usado para outros arquivos no mesmo formato No lugar de ter sido criado interativamente poderia ter sido lido de algum arquivo Poderia ter especificado nomes para os campos que seriam mais amigaacuteveis que coias como FIELD11

6489

Arquivos - texto - XML

Extensible Markup Language

Admite grande flexibilidade e por isso pode ter alta complexidade

Valores satildeo colocados dentro de uma estrutura em hieraacuterquica (em uma aacutervore) com os noacutes identificados pelos seus nomes (chaves)

Largamente usado em muitas aacutereas para armazenar conjuntos arbitraacuterios de quaisquer estruturas de dados

A maioria das aplicaccedilotildees usa um formato que eacute um subconjunto do XML especificado por um Schema comumente em um arquivo XML DTD (Document Type Definition)

6589

Arquivos - texto ndash XML ndash exemplos de usos

Armazenamento de dados de aplicaccedilotildees web (comum para exportar importar dados MediaWiki DokuWiki WordPress ADS Lattes etc)

Documentos Office (docx pptx xlsx) OpenOffice (odt opd ods)

Como versotildees de outros formatos FITSML XDF

ldquoScientific Dataset XML NASAs Astronomical Data Center (ADC) sponsors a number of research projects that

use XML for scientific data representation The XML activities at the ADC are sponsored and supported by the NASA Office of Space Science Applied Information Systems Research Program (AISRP)rdquo - httpxmlcoverpagesorgnasa-adchtml

Astronomical Instrument Markup Language (AIML)

SVG ndash Scalable Vector Graphics

Muitas de outras aplicaccedilotildees listadas em httpxmlcoverpagesorgxmlhtmlapplications

6689

Arquivos - texto ndash XML - exemploltxml version=10 gtltDOCTYPE Xdmf SYSTEM Xdmfdtd []gtltXdmf xmlnsxi=httpwwww3org2001XInclude Version=20gt ltDomaingt lt-- Example of Basic Topologies --gt ltInformation Name=Descriptiongt Example of a Polyvertex Topology ltInformationgt ltGrid Name=Polyvertex GridType=Uniformgt ltTopology TopologyType=Polyvertex Dimensions=3 NodesPerElement=3gt ltDataItem Format=XML Dimensions=3 3 NumberType=Floatgt 0 1 2 4 5 6 8 9 10 ltDataItemgt ltTopologygt ltGeometry Type=XYZgt ltDataItem Format=XML Dimensions=4 4 3gt 00 00 00 10 00 00()Que mostra que a interpretaccedilatildeo (parsing) de XML eacute em geral complexa

6789

Arquivos - texto - XML

Haacute muitas bibliotecas de alto niacutevel para fazer o processamento (parsing) e entregar os dados em uma estrutura conveniente

A complexidade em processar XML estaacute em decidir o que fazer com os dados jaacute que os arquivos podem ser muito complexos

As APIs (Application Programming Interfaces) mais comuns para processar XML que satildeo implementadas em muitas linguagens

DOM (Document Object Model) ndash manteacutem todo o conteuacutedo do em uma estrutura de dados (em geral uma aacutervore) em uma variaacutevel (em geral um objeto) Esta pode ser consultada para obter os valores de interesse para os alterar e usada para escrever um arquivo

SAX (Simple API for XML) ndash Interpretador (parser) por objetos O usuaacuterio escreve uma classe herdando da classe SAX provendo os meacutetodos que vatildeo processar os campos agrave medida em que estes satildeo lidos

6889

Arquivos - binaacuterios - FITSFlexible Image Transport System

O formato mais comum para observaccedilotildees astronocircmicas Tambeacutem usado para armazenar quaisquer dados mesmo natildeo relacionados a observaccedilotildees (especialmente tabelas como eacute praacutetica do STSCI)

Conteacutem um (ou mais) cabeccedilalho(s) de texto com metadados (informaccedilotildees sobre os dados como caracteriacutesticas (necessaacuterias para os ler) origem condiccedilotildees em que foram obtidos processamento realizado etc)

SIMPLE = T image conforms to FITS standard BITPIX = 32 bits per data value NAXIS = 2 number of axes NAXIS1 = 1024 NAXIS2 = 1024 BSCALE = 100000 Scaling factor BZERO = 000000 Scaling zero-point TELESCOP= Keck II Telescope SLITNAME= 0041x226 Slit Name SLITPA = 351979 Slit position angle SLITX = 131500 X pixel of the center of the slit LST = 12010446 local apparent sidereal time (()

Depois do cabeccedilalho haacute uma (ou mais) seccedilatildeo(otildees) de dados binaacuterios Costuma(m) ser array(s) 1D (espectros) 2D (imagens) ou 3D (ldquocubos de dadosrdquo)

De inteiros ou reais inteiros satildeo comuns em contagens de instrumentos reais para valores derivados (fluxos intensidades etc)

6989

Arquivos - binaacuterios - FITSNormalmente FITS satildeo lidos escritos por bibliotecas prontas de (relativamente) alto niacutevel usuaacuterio natildeo tem que saber como os dados satildeo armazenados no arquivo nem como os ler escrever Ex (IDL com a biblioteca idlastro)

IDLgt fits_info2dspectrumfits2dspectrumfits has 3 extensionsPrimary header 288 recordsNo dataExtension 1 -- SCI Header 144 records IMAGE ( 1201 1201 )Extension 2 -- ERR Header 72 records IMAGE ( 1201 1201 )Extension 3 -- DQ Header 72 records IMAGE ( 1201 1201 )

IDLgt mydata=readfits(2dspectrumfitsexten_no=1myheader) READFITS Reading FITS extension of type IMAGE READFITS Now reading 1201 by 1201 array

IDLgt extastmyheadermyastIDLgt sz=size(mydatadimensions)IDLgt xy2ad[1sz[0]][1sz[1]]myastcorners_acorners_dIDLgt printcorners_aCorners of the data array from file 2dspectrumfits are at 14487480 33063480

IDLgt printcorners_d -00041264444 00041402222

Obteacutem os dados de coordenadas (WCS) do header

Coloca os dados no array (2D de floats) mydata e o header no array (1D de strings) myheader

Calcula as coordenadas das quinas da imagem atraveacutes do WCS

Provecirc informaccedilotildees sobre o arquivo

7089

Arquivos - binaacuterios - ISIS Cube

Formatos como FITS se adequam muito a ter uma interface de mais alto niacutevel por objetos

Tambeacutem para dados em tabelas FITS muito mais trabalhosos de ler em baixo niacutevel que se adequam muito mais a mapas ou estruturas

Exemplo (de um formato semelhante a FITS ISIS cube)

O objeto ao ser criado lecirc todo o arquivo

cube=pp_editablecube(CM_1553510065_1_ircub)

Meacutetodos fornecem os dados desejados para obter quando necessaacuterio os dados de interesse

Find out the names of the backplanesprintcubegetproperty(backnames)Get the start time of the cubeprintcubegetfromheader(START_TIME)2007-084T100057286Z

Valores no cabeccedilalho podem ser convenientemente fornecidos como um mapa

header=cubeheader_as_hash()printheader[START_TIME]2007-084T100057286Z

7189

Arquivos - binaacuterios ndash ISIS Cube

Os dados satildeo fornecidos como arraysMake a contour plot of the latitudesc=contour(cubegetsuffixbyname(LATITUDE))Get the band with wavelength nearest to 21 (in the units used in the cube)selband=cubegetbandbywavelength(21wavelengths=selwavs)

Interfaces por overload tornam o acesso ainda mais conveniente

selband=cube[21]

selwavs=cube[21]

Retorna um array com a banda de comprimento de onda mais proacuteximo de 21 (microm)

Retorna o comprimento de onda mais proacuteximo de 21 (microm) da banda retornada acima

7289

Arquivos - binaacuterios ndash ISIS Cube Alteraccedilotildees feitas ao conteuacutedo satildeo automaticamente refletidas em todos os

lugares (cabeccedilalho em particular) afetados mantendo o objeto vaacutelido que pode depois ser gravado em um novo arquivo

IDLgt printcubelinescubesamplescubebands 64 64 256

IDLgt helpcubecoreltExpressiongt FLOAT = Array[64 64 256]

IDLgt cubecore=dblarr(100100256)

A linha acima natildeo eacute uma atribuiccedilatildeo eacute uma invocaccedilatildeo de meacutetodo Eacute equivalente acubesetpropertycore=dblarr(100100256)

Eacute o trabalho da funccedilatildeo setproperty decidir se a propriedade passada (core) faz sentido e se fizer fazer todo o trabalho necessaacuterio a esta mudanccedila Para o usuaacuterio eacute tudo automaacutetico e os dados da classe satildeo vaacutelidos o tempo todo

IDLgt helpcubecoreltExpressiongt DOUBLE = Array[100 100 256]

IDLgt printcubelinescubesamplescubebands 100 100 256

IDLgt cubesaveCM_1553510065_1_ir_editedcub

7389

Arquivos - binaacuterios ndash NetCDF e HDF5

Network Common Data Form e Hierarchical Data Format

Os dois uacutenicos formatos bem estabelecidos para dados cientiacuteficos geneacutericos

Armazenam dados como vaacuterias variaacuteveis e seus metadados Para cada variaacutevel haacute (ou pode haver) os metadados

Nome Dimensotildees (do array) Unidades Comentaacuterios

Ambos permitem arrays multidimensionais

Apenas HDF5 permite estruturas (daiacute vem a hierarquia)

Autodocumentados qualquer software que saiba ler um destes formatos lecirc qualquer arquivo sem precisar de conhecimento preacutevio sobre como o arquivo foi gerado

Muito bem suportados em bibliotecas padratildeo e natildeo padratildeo em softwares interativos e visualizadores (inclusive plugins para navegadores)

httpwwwunidataucaredusoftwarenetcdf httpenwikipediaorgwikiHdf5

NetCDF eacute mais simples de usar por natildeo ter hierarquia dando menos trabalho para ler e escrever dados Se hierarquia natildeo eacute necessaacuteria eacute mais conveniente de usar que HDF5

7489

Arquivos - binaacuterios - NetCDF e HDF5Haacute tambeacutem o formato CDL uma versatildeo ASCII do NetCDF A biblioteca padratildeo do NetCDF inclui conversores entre estes formatos

$ ncdump -h refspec_g01_0ncnetcdf refspec_g01_0 dimensions nlay = 51 nwn = 400 nleg = 33 numu = 2 nlev = 52 nphi = 3 ngas = 2 nwnc = 1 scal = 1 v3 = 3 dnl = 1 nk = 1 tdisr = UNLIMITED (0 currently) na = 16

variables float alb(nwn) float z(nlay) float t(nlay) float p(nlay) float wl(nwn) float iof(nwn) float mtau(nwn) float htau(nwn) float hctaus(nwn) float gtau(nwn) float outcos(scal) float phi(nleg) float phic(scal) float umu(numu) float flux(v3 nwn nlev) float mix(nlay ngas) float c(nlay) float psat(nlay) float ga(nwnc) float wlc(nwnc) float inc(scal) int dm(scal) int ord(scal) float fbeam(scal) float wn(nwn) float tautot(nwn nlay) float htaus(nwn nlay) float htaux(nwn nlay) float taug(nwn nlay) float phase(nwn nlay nleg) float ssa(nwn nlay) float uu(nwn nphi nlev numu) float u0u(nwn nlev numu) float tray(nwn nlay) float gtauo(tdisr nwn nlay)

Haacute 14 variaacuteveis usadas como dimensotildees para as 35 variaacuteveis que satildeo arrays

Ex alb(nwn) indica que alb eacute um array 1D de nwn elementos

nwn estaacute armazenado como uma das dimensotildees e eacute 400 portanto alb tem 400 elementos

Parte do conteuacutedo de um arquivo NetCDF em formato CDL (gerado pelo programa ncdump)

7589

Arquivos - binaacuterios - NetCDF e HDF5Conteuacutedo daquele arquivo visualizado com o ncview (acompanha a biblioteca NetCDF padratildeo)

7689

Arquivos - binaacuterios - NetCDF e HDF5O conteuacutedo de todo o arquivo pode ser lido facilmente com as bibliotecas disponiacuteveis e armazenado em contecirciners convenientes Usando um objeto que gera um resultado um pouco mais conveniente

IDLgt h=pp_readncdf(refspec_g01_0nchash)IDLgt printhvar_dims ltObjHeapVar229(HASH)gtvars ltObjHeapVar152(HASH)gtdims ltObjHeapVar118(HASH)gt

IDLgt printh[vars]T 173203 175459 175848 176001 175975 Z 431869 418858 406067 393403 380464 FLUX 300660 145536 0705180 0341669 0165532 PHASE 100000 0779034 0660858 0542052 0449983 TAUTOT0694377 0693420 0693474 0693540 0693636()

IDLgt help(h[vars])[TAUTOT]ltExpressiongt FLOAT = Array[51 400]

IDLgt print(h[var_dims])[TAUTOT]NLAY NWN

IDLgt print(h[dims])[(h[var_dims])[TAUTOT]]NLAY 51NWN 400

7789

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5)

Visualizaccedilatildeo da variaacutevel selecionada

Metadados e alguns valores da variaacutevel selecionada

Variaacutevel a ser criada com o conteuacutedo desta variaacutevel do arquivo

Hierarquia das variaacuteveis do arquivo

7889

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5) Imported variable az

IDLgt helpaz Structure ltd5723f38gt 13 tags length=448 data length=444 refs=1 _NAME STRING az _ICONTYPE STRING binary _TYPE STRING DATASET _FILE STRING INTENSI_test_409OUTh5 _PATH STRING _DATA DOUBLE Array[38] _NDIMENSIONS LONG 1 _DIMENSIONS ULONG64 Array[1] _NELEMENTS ULONG64 38 _DATATYPE STRING H5T_FLOAT _STORAGESIZE ULONG 8 _PRECISION LONG 64 _SIGN STRING

IDLgt printaz_data 00000000 10000000 20000000 30000000 40000000 50000000 60000000 80000000 ()

7989

Arquivos - binaacuterios - imagens

JPEG JPEG200 TIFF GeoTIFF etc

Os formatos comuns de imagens satildeo bem suportados em muacuteltiplas plataformas para uso dentro de programas e interativamente

Alguns formatos tecircm opccedilatildeo de compressatildeo com perda eou sem perda

Armazenam imagens como arrays 2D ou 3D (3D frequumlentemente limitado a 3 ou 4 em uma das dimensotildees uma imagem em 3 ou 4 bandas) de inteiros ou (em alguns formatos) reais

Alguns formatos permitem armazenar metadados para caracterizar as imagens armazenadas

JPEG2000 e GeoTIFF (um subconjunto de TIFF) comuns em astronomia e aacutereas proacuteximas

8089

Arquivos - binaacuterios ndash imagens ndash exemplo (IDL)IDLgt printquery_tiff(issmap_2009tiffinfogeotiff=geo) 1

IDLgt helpinfo Structure ltd4eca4b8gt 18 tags length=144 data length=132 refs=1 CHANNELS LONG 4 DIMENSIONS LONG Array[2] IMAGE_INDEX LONG 0 NUM_IMAGES LONG 1 PIXEL_TYPE INT 1 TYPE STRING TIFF BITS_PER_SAMPLE LONG 8 POSITION FLOAT Array[2] RESOLUTION FLOAT Array[2] UNITS LONG 2 TILE_SIZE LONG Array[2] DESCRIPTION STRING ISS (2009) DATE_TIME STRING 20100218 012436()

IDLgt helpgeo Structure ltd4efa1b8gt 10 tags length=264 data length=262 refs=1 MODELPIXELSCALETAG DOUBLE Array[3] MODELTIEPOINTTAG DOUBLE Array[6 4] GEOGRAPHICTYPEGEOKEY INT 4035 GEOGSEMIMAJORAXISGEOKEY DOUBLE 25750000 GEOGSEMIMINORAXISGEOKEY DOUBLE 25750000()

IDLgt myimage=read_tiff(issmap_2009tiff) Lecirc a imagem para o array myimage

Obteacutem informaccedilotildees sobre o arquivo

8189

Arquivos - binaacuterios ndash formatos nativosLinguagens como IDL R Python Java tecircm seu formato nativo binaacuterio acessado em alto niacutevel Basta mandar salvar ler variaacuteveis no do arquivo a biblioteca padratildeo automagicamente faz todo o trabalho de decidir como gravar ler os dados

Conveniente de usar na proacutepria linguagem Mas raramente existem bibliotecas para ler gravar o formato nativo de uma linguagem a partir de outra Ex (IDL)

IDLgt savefile=2dspectrumsavmydatamyheadercorners_dcorners_averbosecompress SAVE Portable (XDR) compressed SAVERESTORE file SAVE Saved variable MYDATA SAVE Saved variable MYHEADER()

Pode ser lido com apenas (haacute formas mais elaboradas)

IDLgt restore2dspectrumsavverbose RESTORE Portable (XDR) compressed SAVERESTORE file RESTORE Save file written by ltunknowngtltunknowngt Thu Jan 27 191422 2011 RESTORE IDL version 801 (linux x86_64) RESTORE Restored variable MYDATA RESTORE Restored variable MYHEADER()

IDLgt helpmydatamyheadercorners_dcorners_aMYDATA FLOAT = Array[1201 1201]MYHEADER STRING = Array[144]()

8289

Arquivos - processamento em baixo niacutevel

Nem sempre um formato padratildeo eacute a melhor escolha para o problema

Nem sempre haacute escolha (pode-se ter que trabalhar com arquivos que jaacute foram escritos em algum formato proprietaacuterio)

Agraves vezes o formato eacute padratildeo mas natildeo haacute bom suporte a ele disponiacutevel

Em todos estes casos eacute necessaacuterio escrever rotinas em baixo niacutevel que vatildeo ler processar diretamente o conteuacutedo do arquivo

Preferencialmente criando interfaces de alto niacutevel para o programa que vai as usar

8389

Arquivos - processamento em baixo niacutevel - texto

Tomando o exemplo anterior onde as colunas eram de diferentes tipos

NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS dec18s0001 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0002 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0003 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 FLAT 5408757812500 460000 5 dec18s0004 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 DARK 5408757812500 460000 5

A forma mais simples de o ler diretamente eacute definir uma estrutura para receber cada linha e um array destas estruturas para receber todo o arquivo Ex (IDL)

IDLgt record=namecalmpos0filnameechlpos0d0disppos0d0targnameposdirclassmjd_obsitime0d0coadds0IDLgt nlines=file_lines(filesearch_scamtxt)IDLgt mydata=replicate(recordnlines-1)IDLgt header=

Depois de definidas as variaacuteveis que vatildeo receber os dados o arquivo pode ser lido

IDLgt openrunitfilesearch_scamtxtget_lunIDLgt readfunitheaderIDLgt readfunitmydataformat=(A14I8A15F104F104A18A19A15F158F105I15)IDLgt free_lununit

A gravaccedilatildeo de um arquivo texto poderia ser feita de forma semelhante apenas trocando openr por openw (abrir o arquivo para gravaccedilatildeo natildeo leitura) e readf por printf

O arquivo eacute aberto em uma unidade (unit) usada para especificar de onde eacute feita a leitura

Ao final o arquivo eacute fechado

8489

Arquivos - processamento em baixo niacutevel - texto

O que resulta em

IDLgt printheader NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS

IDLgt helpmydataMYDATA STRUCT = -gt ltAnonymousgt Array[4]

IDLgt helpmydata[0] Structure ltd5e38f68gt 11 tags length=136 data length=124 refs=3 NAME STRING dec18s0001 CALMPOS INT 0 FILNAME STRING NIRSPEC-5-AO ECHLPOS DOUBLE 62630000 DISPPOS DOUBLE 36450000 TARGNAME STRING HD85258 POSDIR STRING NIRSPEC-5-AOp1 CLASS STRING STAR MJD_OBS STRING 54087574 ITIME DOUBLE 10000000 COADDS INT 1

Este caso eacute mais complicado que os mais comuns por haver colunas de strings

Se todas fossem de nuacutemeros natildeo teria sido necessaacuterio especificar o formato explicitamente As colunas teriam sido adivinhadas pela biblioteca que lecirc o arquivo Poderia ter sido lido escrito soacute com um array de nuacutemeros sem estruturas

8589

Arquivos - processamento em baixo niacutevel - binaacuterio

Formatos binaacuterios podem ser definidos de qualquer forma O arquivo eacute apenas um conjunto de bytes Cabe ao software saber como os interpretar

Uma escolha comum para que sejam autodocumentados eacute incluir um cabeccedilalho de texto informando as caracteriacutesticas dos dados necessaacuterias para os ler

Ex (IDL) criar um arquivo que armazene um array de doubles com um cabeccedilalho informando as dimensotildees para que o programa que o lecirc saiba como ler os dados

Inventa dados e abre o arquivo

IDLgt data_to_write=dindgen(34)IDLgt openwunitbinary_exampledatget_lun

Escreve as dimensotildees como texto

IDLgt printfunitdimensions of the double array stored belowIDLgt printfunitsize(data_to_writedimensions)

Escreve os dados binaacuterios

IDLgt writeuunitdata_to_write

Fecha o arquivo

IDLgt free_lununit

Escreve em binaacuterio (write unformatted)

8689

Arquivos - processamento em baixo niacutevel - binaacuterio

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

dimensions of the double array stored below 3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

8789

Arquivos - processamento em baixo niacutevel - binaacuterioA leitura deste arquivo eacute igualmente simples

IDLgt header=IDLgt dims=[00]IDLgt openrunitbinary_exampledatget_lun

Lecirc as dimensotildees (armazenadas como texto)

IDLgt readfunitheaderIDLgt readfunitdims

Lecirc a parte binaacuteria depois de saber as dimensotildees

IDLgt data_read=dblarr(dims)IDLgt readuunitdata_read

Fecha o arquivo

IDLgt free_lununit

Verifica que os dados foram gravados e lidos corretamente

IDLgt printarray_equal(data_to_writedata_read) 1

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Lecirc dados binaacuterios (read unformatted)

8889

Sumaacuterio

5 ndash Slides em httpwwwppenteadonetpeapea04_strings_iopdf Strings Expressotildees regulares Arquivos

httpwwwppenteadonetpea

8989

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89

Arquivos - texto - CSVEx (IDL) Criaccedilatildeo de um CSV com uma tabela de valores

Criaccedilatildeo de 3 arrays 1D (12 elementos) um para cada coluna

IDLgt x=dindgen(3)IDLgt y=dindgen(4)IDLgt xx=reform(rebin(x34)12)IDLgt yy=reform(rebin(reform(y14)34)12)IDLgt f=xx+yy10IDLgt helpxxyyfXX DOUBLE = Array[12]YY DOUBLE = Array[12]F DOUBLE = Array[12]

Escrita do arquivo

IDLgt write_csvexamplecsvxxyyfheader=[XYX+10Y]

ResultadoXYX+10Y000000000000000000000000100000000000000010000000200000000000000020000000000000001000000010000000100000001000000011000000()

6189

Arquivos - texto - ldquoColunas regularesrdquoFixed column width

Natildeo eacute exatamente um padratildeo Eacute uma praacutetica comum

Armazena uma tabela (array 2D) de forma regular simples de ser interpretada e lida

Costumam ter linha(s) de cabeccedilalho descrevendo o conteuacutedo do arquivo em geral com uma linha para os nomes das colunas

As demais linhas conteacutem os dados sempre ocupando a mesma largura por coluna e escritos no mesmo formato em cada coluna

Costumam ser simples de ler inclusive interativamente (exs Excel Calc Origin read_ascii)

Ex (IDL) Uma simples tabela soacute de nuacutemeros

wavl CH4=33 wavl CH4=25 wavl CH4=10 wavl CH4=08 wavl CH4=05 wavl CH4=026 wavl CH4=02 477330000 0090130 477330000 0091110 477330000 0089250 477330000 0087000 477330000 0087140 477330000 0090080 477330000 0088110 480040000 0090930 480040000 0091930 480040000 0090160 480040000 0087930 480040000 0088110 480040000 0090950 480040000 0089090 482750000 0091710 482750000 0092730 482750000 0091060 482750000 0088850 482750000 0089080 482750000 0091810 482750000 0090060 485450000 0092530 485450000 0093570 485450000 0092000 485450000 0089810 485450000 0090100 485450000 0092730 485450000 0091090

IDLgt a=read_ascii(specs_27s_ntxtdata_start=1header=header)IDLgt printheader wavl CH4=33 wavl CH4=25 wavl CH4=10 wavl CH4=08 wavl CH4=05 wavl CH4=026 wavl CH4=02 IDLgt helpa Structure ltd423c9a8gt 1 tags length=224 data length=224 refs=1 FIELD01 FLOAT Array[14 4]

6289

Arquivos - texto - ldquoColunas regularesrdquoJaacute um arquivo um pouco mais difiacutecil de ler

NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS dec18s0001 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0002 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0003 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 FLAT 5408757812500 460000 5 dec18s0004 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 DARK 5408757812500 460000 5

Por ter colunas de tipos diferentes (strings inteiros reais) natildeo eacute possiacutevel o ler em um simples array Mas eacute faacutecil o colocar em uma estrutura de arrays onde cada campo eacute uma coluna

Especificando interativamente como interpretar as linhasIDLgt templ=ascii_template(filesearch_scamtxt)

Nome do campo (default mostrado)

Tipo do campo (identificado automaticamente)

Posiccedilatildeo (caracter) do comeccedilo (identificada automaticamente)

Linha de exemplo para verificar as colunas

6389

Arquivos - texto - ldquoColunas regularesrdquoDepois de feito o template o arquivo pode ser lido com apenas

IDLgt a=read_ascii(filesearch_scamtxttemplate=templ)IDLgt helpa Structure ltd4ec4608gt 11 tags length=416 data length=416 refs=1 FIELD01 STRING Array[4] FIELD02 LONG Array[4] FIELD03 STRING Array[4] FIELD04 FLOAT Array[4] FIELD05 FLOAT Array[4] FIELD06 STRING Array[4] FIELD07 STRING Array[4] FIELD08 STRING Array[4] FIELD09 FLOAT Array[4] FIELD10 FLOAT Array[4] FIELD11 LONG Array[4]IDLgt printafield01dec18s0001 dec18s0002 dec18s0003 dec18s0004IDLgt printafield04 626300 626300 626300 626300

O template (uma estrutura contendo dados sobre como ler o arquivo) pode ser usado para outros arquivos no mesmo formato No lugar de ter sido criado interativamente poderia ter sido lido de algum arquivo Poderia ter especificado nomes para os campos que seriam mais amigaacuteveis que coias como FIELD11

6489

Arquivos - texto - XML

Extensible Markup Language

Admite grande flexibilidade e por isso pode ter alta complexidade

Valores satildeo colocados dentro de uma estrutura em hieraacuterquica (em uma aacutervore) com os noacutes identificados pelos seus nomes (chaves)

Largamente usado em muitas aacutereas para armazenar conjuntos arbitraacuterios de quaisquer estruturas de dados

A maioria das aplicaccedilotildees usa um formato que eacute um subconjunto do XML especificado por um Schema comumente em um arquivo XML DTD (Document Type Definition)

6589

Arquivos - texto ndash XML ndash exemplos de usos

Armazenamento de dados de aplicaccedilotildees web (comum para exportar importar dados MediaWiki DokuWiki WordPress ADS Lattes etc)

Documentos Office (docx pptx xlsx) OpenOffice (odt opd ods)

Como versotildees de outros formatos FITSML XDF

ldquoScientific Dataset XML NASAs Astronomical Data Center (ADC) sponsors a number of research projects that

use XML for scientific data representation The XML activities at the ADC are sponsored and supported by the NASA Office of Space Science Applied Information Systems Research Program (AISRP)rdquo - httpxmlcoverpagesorgnasa-adchtml

Astronomical Instrument Markup Language (AIML)

SVG ndash Scalable Vector Graphics

Muitas de outras aplicaccedilotildees listadas em httpxmlcoverpagesorgxmlhtmlapplications

6689

Arquivos - texto ndash XML - exemploltxml version=10 gtltDOCTYPE Xdmf SYSTEM Xdmfdtd []gtltXdmf xmlnsxi=httpwwww3org2001XInclude Version=20gt ltDomaingt lt-- Example of Basic Topologies --gt ltInformation Name=Descriptiongt Example of a Polyvertex Topology ltInformationgt ltGrid Name=Polyvertex GridType=Uniformgt ltTopology TopologyType=Polyvertex Dimensions=3 NodesPerElement=3gt ltDataItem Format=XML Dimensions=3 3 NumberType=Floatgt 0 1 2 4 5 6 8 9 10 ltDataItemgt ltTopologygt ltGeometry Type=XYZgt ltDataItem Format=XML Dimensions=4 4 3gt 00 00 00 10 00 00()Que mostra que a interpretaccedilatildeo (parsing) de XML eacute em geral complexa

6789

Arquivos - texto - XML

Haacute muitas bibliotecas de alto niacutevel para fazer o processamento (parsing) e entregar os dados em uma estrutura conveniente

A complexidade em processar XML estaacute em decidir o que fazer com os dados jaacute que os arquivos podem ser muito complexos

As APIs (Application Programming Interfaces) mais comuns para processar XML que satildeo implementadas em muitas linguagens

DOM (Document Object Model) ndash manteacutem todo o conteuacutedo do em uma estrutura de dados (em geral uma aacutervore) em uma variaacutevel (em geral um objeto) Esta pode ser consultada para obter os valores de interesse para os alterar e usada para escrever um arquivo

SAX (Simple API for XML) ndash Interpretador (parser) por objetos O usuaacuterio escreve uma classe herdando da classe SAX provendo os meacutetodos que vatildeo processar os campos agrave medida em que estes satildeo lidos

6889

Arquivos - binaacuterios - FITSFlexible Image Transport System

O formato mais comum para observaccedilotildees astronocircmicas Tambeacutem usado para armazenar quaisquer dados mesmo natildeo relacionados a observaccedilotildees (especialmente tabelas como eacute praacutetica do STSCI)

Conteacutem um (ou mais) cabeccedilalho(s) de texto com metadados (informaccedilotildees sobre os dados como caracteriacutesticas (necessaacuterias para os ler) origem condiccedilotildees em que foram obtidos processamento realizado etc)

SIMPLE = T image conforms to FITS standard BITPIX = 32 bits per data value NAXIS = 2 number of axes NAXIS1 = 1024 NAXIS2 = 1024 BSCALE = 100000 Scaling factor BZERO = 000000 Scaling zero-point TELESCOP= Keck II Telescope SLITNAME= 0041x226 Slit Name SLITPA = 351979 Slit position angle SLITX = 131500 X pixel of the center of the slit LST = 12010446 local apparent sidereal time (()

Depois do cabeccedilalho haacute uma (ou mais) seccedilatildeo(otildees) de dados binaacuterios Costuma(m) ser array(s) 1D (espectros) 2D (imagens) ou 3D (ldquocubos de dadosrdquo)

De inteiros ou reais inteiros satildeo comuns em contagens de instrumentos reais para valores derivados (fluxos intensidades etc)

6989

Arquivos - binaacuterios - FITSNormalmente FITS satildeo lidos escritos por bibliotecas prontas de (relativamente) alto niacutevel usuaacuterio natildeo tem que saber como os dados satildeo armazenados no arquivo nem como os ler escrever Ex (IDL com a biblioteca idlastro)

IDLgt fits_info2dspectrumfits2dspectrumfits has 3 extensionsPrimary header 288 recordsNo dataExtension 1 -- SCI Header 144 records IMAGE ( 1201 1201 )Extension 2 -- ERR Header 72 records IMAGE ( 1201 1201 )Extension 3 -- DQ Header 72 records IMAGE ( 1201 1201 )

IDLgt mydata=readfits(2dspectrumfitsexten_no=1myheader) READFITS Reading FITS extension of type IMAGE READFITS Now reading 1201 by 1201 array

IDLgt extastmyheadermyastIDLgt sz=size(mydatadimensions)IDLgt xy2ad[1sz[0]][1sz[1]]myastcorners_acorners_dIDLgt printcorners_aCorners of the data array from file 2dspectrumfits are at 14487480 33063480

IDLgt printcorners_d -00041264444 00041402222

Obteacutem os dados de coordenadas (WCS) do header

Coloca os dados no array (2D de floats) mydata e o header no array (1D de strings) myheader

Calcula as coordenadas das quinas da imagem atraveacutes do WCS

Provecirc informaccedilotildees sobre o arquivo

7089

Arquivos - binaacuterios - ISIS Cube

Formatos como FITS se adequam muito a ter uma interface de mais alto niacutevel por objetos

Tambeacutem para dados em tabelas FITS muito mais trabalhosos de ler em baixo niacutevel que se adequam muito mais a mapas ou estruturas

Exemplo (de um formato semelhante a FITS ISIS cube)

O objeto ao ser criado lecirc todo o arquivo

cube=pp_editablecube(CM_1553510065_1_ircub)

Meacutetodos fornecem os dados desejados para obter quando necessaacuterio os dados de interesse

Find out the names of the backplanesprintcubegetproperty(backnames)Get the start time of the cubeprintcubegetfromheader(START_TIME)2007-084T100057286Z

Valores no cabeccedilalho podem ser convenientemente fornecidos como um mapa

header=cubeheader_as_hash()printheader[START_TIME]2007-084T100057286Z

7189

Arquivos - binaacuterios ndash ISIS Cube

Os dados satildeo fornecidos como arraysMake a contour plot of the latitudesc=contour(cubegetsuffixbyname(LATITUDE))Get the band with wavelength nearest to 21 (in the units used in the cube)selband=cubegetbandbywavelength(21wavelengths=selwavs)

Interfaces por overload tornam o acesso ainda mais conveniente

selband=cube[21]

selwavs=cube[21]

Retorna um array com a banda de comprimento de onda mais proacuteximo de 21 (microm)

Retorna o comprimento de onda mais proacuteximo de 21 (microm) da banda retornada acima

7289

Arquivos - binaacuterios ndash ISIS Cube Alteraccedilotildees feitas ao conteuacutedo satildeo automaticamente refletidas em todos os

lugares (cabeccedilalho em particular) afetados mantendo o objeto vaacutelido que pode depois ser gravado em um novo arquivo

IDLgt printcubelinescubesamplescubebands 64 64 256

IDLgt helpcubecoreltExpressiongt FLOAT = Array[64 64 256]

IDLgt cubecore=dblarr(100100256)

A linha acima natildeo eacute uma atribuiccedilatildeo eacute uma invocaccedilatildeo de meacutetodo Eacute equivalente acubesetpropertycore=dblarr(100100256)

Eacute o trabalho da funccedilatildeo setproperty decidir se a propriedade passada (core) faz sentido e se fizer fazer todo o trabalho necessaacuterio a esta mudanccedila Para o usuaacuterio eacute tudo automaacutetico e os dados da classe satildeo vaacutelidos o tempo todo

IDLgt helpcubecoreltExpressiongt DOUBLE = Array[100 100 256]

IDLgt printcubelinescubesamplescubebands 100 100 256

IDLgt cubesaveCM_1553510065_1_ir_editedcub

7389

Arquivos - binaacuterios ndash NetCDF e HDF5

Network Common Data Form e Hierarchical Data Format

Os dois uacutenicos formatos bem estabelecidos para dados cientiacuteficos geneacutericos

Armazenam dados como vaacuterias variaacuteveis e seus metadados Para cada variaacutevel haacute (ou pode haver) os metadados

Nome Dimensotildees (do array) Unidades Comentaacuterios

Ambos permitem arrays multidimensionais

Apenas HDF5 permite estruturas (daiacute vem a hierarquia)

Autodocumentados qualquer software que saiba ler um destes formatos lecirc qualquer arquivo sem precisar de conhecimento preacutevio sobre como o arquivo foi gerado

Muito bem suportados em bibliotecas padratildeo e natildeo padratildeo em softwares interativos e visualizadores (inclusive plugins para navegadores)

httpwwwunidataucaredusoftwarenetcdf httpenwikipediaorgwikiHdf5

NetCDF eacute mais simples de usar por natildeo ter hierarquia dando menos trabalho para ler e escrever dados Se hierarquia natildeo eacute necessaacuteria eacute mais conveniente de usar que HDF5

7489

Arquivos - binaacuterios - NetCDF e HDF5Haacute tambeacutem o formato CDL uma versatildeo ASCII do NetCDF A biblioteca padratildeo do NetCDF inclui conversores entre estes formatos

$ ncdump -h refspec_g01_0ncnetcdf refspec_g01_0 dimensions nlay = 51 nwn = 400 nleg = 33 numu = 2 nlev = 52 nphi = 3 ngas = 2 nwnc = 1 scal = 1 v3 = 3 dnl = 1 nk = 1 tdisr = UNLIMITED (0 currently) na = 16

variables float alb(nwn) float z(nlay) float t(nlay) float p(nlay) float wl(nwn) float iof(nwn) float mtau(nwn) float htau(nwn) float hctaus(nwn) float gtau(nwn) float outcos(scal) float phi(nleg) float phic(scal) float umu(numu) float flux(v3 nwn nlev) float mix(nlay ngas) float c(nlay) float psat(nlay) float ga(nwnc) float wlc(nwnc) float inc(scal) int dm(scal) int ord(scal) float fbeam(scal) float wn(nwn) float tautot(nwn nlay) float htaus(nwn nlay) float htaux(nwn nlay) float taug(nwn nlay) float phase(nwn nlay nleg) float ssa(nwn nlay) float uu(nwn nphi nlev numu) float u0u(nwn nlev numu) float tray(nwn nlay) float gtauo(tdisr nwn nlay)

Haacute 14 variaacuteveis usadas como dimensotildees para as 35 variaacuteveis que satildeo arrays

Ex alb(nwn) indica que alb eacute um array 1D de nwn elementos

nwn estaacute armazenado como uma das dimensotildees e eacute 400 portanto alb tem 400 elementos

Parte do conteuacutedo de um arquivo NetCDF em formato CDL (gerado pelo programa ncdump)

7589

Arquivos - binaacuterios - NetCDF e HDF5Conteuacutedo daquele arquivo visualizado com o ncview (acompanha a biblioteca NetCDF padratildeo)

7689

Arquivos - binaacuterios - NetCDF e HDF5O conteuacutedo de todo o arquivo pode ser lido facilmente com as bibliotecas disponiacuteveis e armazenado em contecirciners convenientes Usando um objeto que gera um resultado um pouco mais conveniente

IDLgt h=pp_readncdf(refspec_g01_0nchash)IDLgt printhvar_dims ltObjHeapVar229(HASH)gtvars ltObjHeapVar152(HASH)gtdims ltObjHeapVar118(HASH)gt

IDLgt printh[vars]T 173203 175459 175848 176001 175975 Z 431869 418858 406067 393403 380464 FLUX 300660 145536 0705180 0341669 0165532 PHASE 100000 0779034 0660858 0542052 0449983 TAUTOT0694377 0693420 0693474 0693540 0693636()

IDLgt help(h[vars])[TAUTOT]ltExpressiongt FLOAT = Array[51 400]

IDLgt print(h[var_dims])[TAUTOT]NLAY NWN

IDLgt print(h[dims])[(h[var_dims])[TAUTOT]]NLAY 51NWN 400

7789

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5)

Visualizaccedilatildeo da variaacutevel selecionada

Metadados e alguns valores da variaacutevel selecionada

Variaacutevel a ser criada com o conteuacutedo desta variaacutevel do arquivo

Hierarquia das variaacuteveis do arquivo

7889

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5) Imported variable az

IDLgt helpaz Structure ltd5723f38gt 13 tags length=448 data length=444 refs=1 _NAME STRING az _ICONTYPE STRING binary _TYPE STRING DATASET _FILE STRING INTENSI_test_409OUTh5 _PATH STRING _DATA DOUBLE Array[38] _NDIMENSIONS LONG 1 _DIMENSIONS ULONG64 Array[1] _NELEMENTS ULONG64 38 _DATATYPE STRING H5T_FLOAT _STORAGESIZE ULONG 8 _PRECISION LONG 64 _SIGN STRING

IDLgt printaz_data 00000000 10000000 20000000 30000000 40000000 50000000 60000000 80000000 ()

7989

Arquivos - binaacuterios - imagens

JPEG JPEG200 TIFF GeoTIFF etc

Os formatos comuns de imagens satildeo bem suportados em muacuteltiplas plataformas para uso dentro de programas e interativamente

Alguns formatos tecircm opccedilatildeo de compressatildeo com perda eou sem perda

Armazenam imagens como arrays 2D ou 3D (3D frequumlentemente limitado a 3 ou 4 em uma das dimensotildees uma imagem em 3 ou 4 bandas) de inteiros ou (em alguns formatos) reais

Alguns formatos permitem armazenar metadados para caracterizar as imagens armazenadas

JPEG2000 e GeoTIFF (um subconjunto de TIFF) comuns em astronomia e aacutereas proacuteximas

8089

Arquivos - binaacuterios ndash imagens ndash exemplo (IDL)IDLgt printquery_tiff(issmap_2009tiffinfogeotiff=geo) 1

IDLgt helpinfo Structure ltd4eca4b8gt 18 tags length=144 data length=132 refs=1 CHANNELS LONG 4 DIMENSIONS LONG Array[2] IMAGE_INDEX LONG 0 NUM_IMAGES LONG 1 PIXEL_TYPE INT 1 TYPE STRING TIFF BITS_PER_SAMPLE LONG 8 POSITION FLOAT Array[2] RESOLUTION FLOAT Array[2] UNITS LONG 2 TILE_SIZE LONG Array[2] DESCRIPTION STRING ISS (2009) DATE_TIME STRING 20100218 012436()

IDLgt helpgeo Structure ltd4efa1b8gt 10 tags length=264 data length=262 refs=1 MODELPIXELSCALETAG DOUBLE Array[3] MODELTIEPOINTTAG DOUBLE Array[6 4] GEOGRAPHICTYPEGEOKEY INT 4035 GEOGSEMIMAJORAXISGEOKEY DOUBLE 25750000 GEOGSEMIMINORAXISGEOKEY DOUBLE 25750000()

IDLgt myimage=read_tiff(issmap_2009tiff) Lecirc a imagem para o array myimage

Obteacutem informaccedilotildees sobre o arquivo

8189

Arquivos - binaacuterios ndash formatos nativosLinguagens como IDL R Python Java tecircm seu formato nativo binaacuterio acessado em alto niacutevel Basta mandar salvar ler variaacuteveis no do arquivo a biblioteca padratildeo automagicamente faz todo o trabalho de decidir como gravar ler os dados

Conveniente de usar na proacutepria linguagem Mas raramente existem bibliotecas para ler gravar o formato nativo de uma linguagem a partir de outra Ex (IDL)

IDLgt savefile=2dspectrumsavmydatamyheadercorners_dcorners_averbosecompress SAVE Portable (XDR) compressed SAVERESTORE file SAVE Saved variable MYDATA SAVE Saved variable MYHEADER()

Pode ser lido com apenas (haacute formas mais elaboradas)

IDLgt restore2dspectrumsavverbose RESTORE Portable (XDR) compressed SAVERESTORE file RESTORE Save file written by ltunknowngtltunknowngt Thu Jan 27 191422 2011 RESTORE IDL version 801 (linux x86_64) RESTORE Restored variable MYDATA RESTORE Restored variable MYHEADER()

IDLgt helpmydatamyheadercorners_dcorners_aMYDATA FLOAT = Array[1201 1201]MYHEADER STRING = Array[144]()

8289

Arquivos - processamento em baixo niacutevel

Nem sempre um formato padratildeo eacute a melhor escolha para o problema

Nem sempre haacute escolha (pode-se ter que trabalhar com arquivos que jaacute foram escritos em algum formato proprietaacuterio)

Agraves vezes o formato eacute padratildeo mas natildeo haacute bom suporte a ele disponiacutevel

Em todos estes casos eacute necessaacuterio escrever rotinas em baixo niacutevel que vatildeo ler processar diretamente o conteuacutedo do arquivo

Preferencialmente criando interfaces de alto niacutevel para o programa que vai as usar

8389

Arquivos - processamento em baixo niacutevel - texto

Tomando o exemplo anterior onde as colunas eram de diferentes tipos

NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS dec18s0001 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0002 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0003 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 FLAT 5408757812500 460000 5 dec18s0004 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 DARK 5408757812500 460000 5

A forma mais simples de o ler diretamente eacute definir uma estrutura para receber cada linha e um array destas estruturas para receber todo o arquivo Ex (IDL)

IDLgt record=namecalmpos0filnameechlpos0d0disppos0d0targnameposdirclassmjd_obsitime0d0coadds0IDLgt nlines=file_lines(filesearch_scamtxt)IDLgt mydata=replicate(recordnlines-1)IDLgt header=

Depois de definidas as variaacuteveis que vatildeo receber os dados o arquivo pode ser lido

IDLgt openrunitfilesearch_scamtxtget_lunIDLgt readfunitheaderIDLgt readfunitmydataformat=(A14I8A15F104F104A18A19A15F158F105I15)IDLgt free_lununit

A gravaccedilatildeo de um arquivo texto poderia ser feita de forma semelhante apenas trocando openr por openw (abrir o arquivo para gravaccedilatildeo natildeo leitura) e readf por printf

O arquivo eacute aberto em uma unidade (unit) usada para especificar de onde eacute feita a leitura

Ao final o arquivo eacute fechado

8489

Arquivos - processamento em baixo niacutevel - texto

O que resulta em

IDLgt printheader NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS

IDLgt helpmydataMYDATA STRUCT = -gt ltAnonymousgt Array[4]

IDLgt helpmydata[0] Structure ltd5e38f68gt 11 tags length=136 data length=124 refs=3 NAME STRING dec18s0001 CALMPOS INT 0 FILNAME STRING NIRSPEC-5-AO ECHLPOS DOUBLE 62630000 DISPPOS DOUBLE 36450000 TARGNAME STRING HD85258 POSDIR STRING NIRSPEC-5-AOp1 CLASS STRING STAR MJD_OBS STRING 54087574 ITIME DOUBLE 10000000 COADDS INT 1

Este caso eacute mais complicado que os mais comuns por haver colunas de strings

Se todas fossem de nuacutemeros natildeo teria sido necessaacuterio especificar o formato explicitamente As colunas teriam sido adivinhadas pela biblioteca que lecirc o arquivo Poderia ter sido lido escrito soacute com um array de nuacutemeros sem estruturas

8589

Arquivos - processamento em baixo niacutevel - binaacuterio

Formatos binaacuterios podem ser definidos de qualquer forma O arquivo eacute apenas um conjunto de bytes Cabe ao software saber como os interpretar

Uma escolha comum para que sejam autodocumentados eacute incluir um cabeccedilalho de texto informando as caracteriacutesticas dos dados necessaacuterias para os ler

Ex (IDL) criar um arquivo que armazene um array de doubles com um cabeccedilalho informando as dimensotildees para que o programa que o lecirc saiba como ler os dados

Inventa dados e abre o arquivo

IDLgt data_to_write=dindgen(34)IDLgt openwunitbinary_exampledatget_lun

Escreve as dimensotildees como texto

IDLgt printfunitdimensions of the double array stored belowIDLgt printfunitsize(data_to_writedimensions)

Escreve os dados binaacuterios

IDLgt writeuunitdata_to_write

Fecha o arquivo

IDLgt free_lununit

Escreve em binaacuterio (write unformatted)

8689

Arquivos - processamento em baixo niacutevel - binaacuterio

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

dimensions of the double array stored below 3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

8789

Arquivos - processamento em baixo niacutevel - binaacuterioA leitura deste arquivo eacute igualmente simples

IDLgt header=IDLgt dims=[00]IDLgt openrunitbinary_exampledatget_lun

Lecirc as dimensotildees (armazenadas como texto)

IDLgt readfunitheaderIDLgt readfunitdims

Lecirc a parte binaacuteria depois de saber as dimensotildees

IDLgt data_read=dblarr(dims)IDLgt readuunitdata_read

Fecha o arquivo

IDLgt free_lununit

Verifica que os dados foram gravados e lidos corretamente

IDLgt printarray_equal(data_to_writedata_read) 1

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Lecirc dados binaacuterios (read unformatted)

8889

Sumaacuterio

5 ndash Slides em httpwwwppenteadonetpeapea04_strings_iopdf Strings Expressotildees regulares Arquivos

httpwwwppenteadonetpea

8989

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89

Arquivos - texto - ldquoColunas regularesrdquoFixed column width

Natildeo eacute exatamente um padratildeo Eacute uma praacutetica comum

Armazena uma tabela (array 2D) de forma regular simples de ser interpretada e lida

Costumam ter linha(s) de cabeccedilalho descrevendo o conteuacutedo do arquivo em geral com uma linha para os nomes das colunas

As demais linhas conteacutem os dados sempre ocupando a mesma largura por coluna e escritos no mesmo formato em cada coluna

Costumam ser simples de ler inclusive interativamente (exs Excel Calc Origin read_ascii)

Ex (IDL) Uma simples tabela soacute de nuacutemeros

wavl CH4=33 wavl CH4=25 wavl CH4=10 wavl CH4=08 wavl CH4=05 wavl CH4=026 wavl CH4=02 477330000 0090130 477330000 0091110 477330000 0089250 477330000 0087000 477330000 0087140 477330000 0090080 477330000 0088110 480040000 0090930 480040000 0091930 480040000 0090160 480040000 0087930 480040000 0088110 480040000 0090950 480040000 0089090 482750000 0091710 482750000 0092730 482750000 0091060 482750000 0088850 482750000 0089080 482750000 0091810 482750000 0090060 485450000 0092530 485450000 0093570 485450000 0092000 485450000 0089810 485450000 0090100 485450000 0092730 485450000 0091090

IDLgt a=read_ascii(specs_27s_ntxtdata_start=1header=header)IDLgt printheader wavl CH4=33 wavl CH4=25 wavl CH4=10 wavl CH4=08 wavl CH4=05 wavl CH4=026 wavl CH4=02 IDLgt helpa Structure ltd423c9a8gt 1 tags length=224 data length=224 refs=1 FIELD01 FLOAT Array[14 4]

6289

Arquivos - texto - ldquoColunas regularesrdquoJaacute um arquivo um pouco mais difiacutecil de ler

NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS dec18s0001 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0002 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0003 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 FLAT 5408757812500 460000 5 dec18s0004 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 DARK 5408757812500 460000 5

Por ter colunas de tipos diferentes (strings inteiros reais) natildeo eacute possiacutevel o ler em um simples array Mas eacute faacutecil o colocar em uma estrutura de arrays onde cada campo eacute uma coluna

Especificando interativamente como interpretar as linhasIDLgt templ=ascii_template(filesearch_scamtxt)

Nome do campo (default mostrado)

Tipo do campo (identificado automaticamente)

Posiccedilatildeo (caracter) do comeccedilo (identificada automaticamente)

Linha de exemplo para verificar as colunas

6389

Arquivos - texto - ldquoColunas regularesrdquoDepois de feito o template o arquivo pode ser lido com apenas

IDLgt a=read_ascii(filesearch_scamtxttemplate=templ)IDLgt helpa Structure ltd4ec4608gt 11 tags length=416 data length=416 refs=1 FIELD01 STRING Array[4] FIELD02 LONG Array[4] FIELD03 STRING Array[4] FIELD04 FLOAT Array[4] FIELD05 FLOAT Array[4] FIELD06 STRING Array[4] FIELD07 STRING Array[4] FIELD08 STRING Array[4] FIELD09 FLOAT Array[4] FIELD10 FLOAT Array[4] FIELD11 LONG Array[4]IDLgt printafield01dec18s0001 dec18s0002 dec18s0003 dec18s0004IDLgt printafield04 626300 626300 626300 626300

O template (uma estrutura contendo dados sobre como ler o arquivo) pode ser usado para outros arquivos no mesmo formato No lugar de ter sido criado interativamente poderia ter sido lido de algum arquivo Poderia ter especificado nomes para os campos que seriam mais amigaacuteveis que coias como FIELD11

6489

Arquivos - texto - XML

Extensible Markup Language

Admite grande flexibilidade e por isso pode ter alta complexidade

Valores satildeo colocados dentro de uma estrutura em hieraacuterquica (em uma aacutervore) com os noacutes identificados pelos seus nomes (chaves)

Largamente usado em muitas aacutereas para armazenar conjuntos arbitraacuterios de quaisquer estruturas de dados

A maioria das aplicaccedilotildees usa um formato que eacute um subconjunto do XML especificado por um Schema comumente em um arquivo XML DTD (Document Type Definition)

6589

Arquivos - texto ndash XML ndash exemplos de usos

Armazenamento de dados de aplicaccedilotildees web (comum para exportar importar dados MediaWiki DokuWiki WordPress ADS Lattes etc)

Documentos Office (docx pptx xlsx) OpenOffice (odt opd ods)

Como versotildees de outros formatos FITSML XDF

ldquoScientific Dataset XML NASAs Astronomical Data Center (ADC) sponsors a number of research projects that

use XML for scientific data representation The XML activities at the ADC are sponsored and supported by the NASA Office of Space Science Applied Information Systems Research Program (AISRP)rdquo - httpxmlcoverpagesorgnasa-adchtml

Astronomical Instrument Markup Language (AIML)

SVG ndash Scalable Vector Graphics

Muitas de outras aplicaccedilotildees listadas em httpxmlcoverpagesorgxmlhtmlapplications

6689

Arquivos - texto ndash XML - exemploltxml version=10 gtltDOCTYPE Xdmf SYSTEM Xdmfdtd []gtltXdmf xmlnsxi=httpwwww3org2001XInclude Version=20gt ltDomaingt lt-- Example of Basic Topologies --gt ltInformation Name=Descriptiongt Example of a Polyvertex Topology ltInformationgt ltGrid Name=Polyvertex GridType=Uniformgt ltTopology TopologyType=Polyvertex Dimensions=3 NodesPerElement=3gt ltDataItem Format=XML Dimensions=3 3 NumberType=Floatgt 0 1 2 4 5 6 8 9 10 ltDataItemgt ltTopologygt ltGeometry Type=XYZgt ltDataItem Format=XML Dimensions=4 4 3gt 00 00 00 10 00 00()Que mostra que a interpretaccedilatildeo (parsing) de XML eacute em geral complexa

6789

Arquivos - texto - XML

Haacute muitas bibliotecas de alto niacutevel para fazer o processamento (parsing) e entregar os dados em uma estrutura conveniente

A complexidade em processar XML estaacute em decidir o que fazer com os dados jaacute que os arquivos podem ser muito complexos

As APIs (Application Programming Interfaces) mais comuns para processar XML que satildeo implementadas em muitas linguagens

DOM (Document Object Model) ndash manteacutem todo o conteuacutedo do em uma estrutura de dados (em geral uma aacutervore) em uma variaacutevel (em geral um objeto) Esta pode ser consultada para obter os valores de interesse para os alterar e usada para escrever um arquivo

SAX (Simple API for XML) ndash Interpretador (parser) por objetos O usuaacuterio escreve uma classe herdando da classe SAX provendo os meacutetodos que vatildeo processar os campos agrave medida em que estes satildeo lidos

6889

Arquivos - binaacuterios - FITSFlexible Image Transport System

O formato mais comum para observaccedilotildees astronocircmicas Tambeacutem usado para armazenar quaisquer dados mesmo natildeo relacionados a observaccedilotildees (especialmente tabelas como eacute praacutetica do STSCI)

Conteacutem um (ou mais) cabeccedilalho(s) de texto com metadados (informaccedilotildees sobre os dados como caracteriacutesticas (necessaacuterias para os ler) origem condiccedilotildees em que foram obtidos processamento realizado etc)

SIMPLE = T image conforms to FITS standard BITPIX = 32 bits per data value NAXIS = 2 number of axes NAXIS1 = 1024 NAXIS2 = 1024 BSCALE = 100000 Scaling factor BZERO = 000000 Scaling zero-point TELESCOP= Keck II Telescope SLITNAME= 0041x226 Slit Name SLITPA = 351979 Slit position angle SLITX = 131500 X pixel of the center of the slit LST = 12010446 local apparent sidereal time (()

Depois do cabeccedilalho haacute uma (ou mais) seccedilatildeo(otildees) de dados binaacuterios Costuma(m) ser array(s) 1D (espectros) 2D (imagens) ou 3D (ldquocubos de dadosrdquo)

De inteiros ou reais inteiros satildeo comuns em contagens de instrumentos reais para valores derivados (fluxos intensidades etc)

6989

Arquivos - binaacuterios - FITSNormalmente FITS satildeo lidos escritos por bibliotecas prontas de (relativamente) alto niacutevel usuaacuterio natildeo tem que saber como os dados satildeo armazenados no arquivo nem como os ler escrever Ex (IDL com a biblioteca idlastro)

IDLgt fits_info2dspectrumfits2dspectrumfits has 3 extensionsPrimary header 288 recordsNo dataExtension 1 -- SCI Header 144 records IMAGE ( 1201 1201 )Extension 2 -- ERR Header 72 records IMAGE ( 1201 1201 )Extension 3 -- DQ Header 72 records IMAGE ( 1201 1201 )

IDLgt mydata=readfits(2dspectrumfitsexten_no=1myheader) READFITS Reading FITS extension of type IMAGE READFITS Now reading 1201 by 1201 array

IDLgt extastmyheadermyastIDLgt sz=size(mydatadimensions)IDLgt xy2ad[1sz[0]][1sz[1]]myastcorners_acorners_dIDLgt printcorners_aCorners of the data array from file 2dspectrumfits are at 14487480 33063480

IDLgt printcorners_d -00041264444 00041402222

Obteacutem os dados de coordenadas (WCS) do header

Coloca os dados no array (2D de floats) mydata e o header no array (1D de strings) myheader

Calcula as coordenadas das quinas da imagem atraveacutes do WCS

Provecirc informaccedilotildees sobre o arquivo

7089

Arquivos - binaacuterios - ISIS Cube

Formatos como FITS se adequam muito a ter uma interface de mais alto niacutevel por objetos

Tambeacutem para dados em tabelas FITS muito mais trabalhosos de ler em baixo niacutevel que se adequam muito mais a mapas ou estruturas

Exemplo (de um formato semelhante a FITS ISIS cube)

O objeto ao ser criado lecirc todo o arquivo

cube=pp_editablecube(CM_1553510065_1_ircub)

Meacutetodos fornecem os dados desejados para obter quando necessaacuterio os dados de interesse

Find out the names of the backplanesprintcubegetproperty(backnames)Get the start time of the cubeprintcubegetfromheader(START_TIME)2007-084T100057286Z

Valores no cabeccedilalho podem ser convenientemente fornecidos como um mapa

header=cubeheader_as_hash()printheader[START_TIME]2007-084T100057286Z

7189

Arquivos - binaacuterios ndash ISIS Cube

Os dados satildeo fornecidos como arraysMake a contour plot of the latitudesc=contour(cubegetsuffixbyname(LATITUDE))Get the band with wavelength nearest to 21 (in the units used in the cube)selband=cubegetbandbywavelength(21wavelengths=selwavs)

Interfaces por overload tornam o acesso ainda mais conveniente

selband=cube[21]

selwavs=cube[21]

Retorna um array com a banda de comprimento de onda mais proacuteximo de 21 (microm)

Retorna o comprimento de onda mais proacuteximo de 21 (microm) da banda retornada acima

7289

Arquivos - binaacuterios ndash ISIS Cube Alteraccedilotildees feitas ao conteuacutedo satildeo automaticamente refletidas em todos os

lugares (cabeccedilalho em particular) afetados mantendo o objeto vaacutelido que pode depois ser gravado em um novo arquivo

IDLgt printcubelinescubesamplescubebands 64 64 256

IDLgt helpcubecoreltExpressiongt FLOAT = Array[64 64 256]

IDLgt cubecore=dblarr(100100256)

A linha acima natildeo eacute uma atribuiccedilatildeo eacute uma invocaccedilatildeo de meacutetodo Eacute equivalente acubesetpropertycore=dblarr(100100256)

Eacute o trabalho da funccedilatildeo setproperty decidir se a propriedade passada (core) faz sentido e se fizer fazer todo o trabalho necessaacuterio a esta mudanccedila Para o usuaacuterio eacute tudo automaacutetico e os dados da classe satildeo vaacutelidos o tempo todo

IDLgt helpcubecoreltExpressiongt DOUBLE = Array[100 100 256]

IDLgt printcubelinescubesamplescubebands 100 100 256

IDLgt cubesaveCM_1553510065_1_ir_editedcub

7389

Arquivos - binaacuterios ndash NetCDF e HDF5

Network Common Data Form e Hierarchical Data Format

Os dois uacutenicos formatos bem estabelecidos para dados cientiacuteficos geneacutericos

Armazenam dados como vaacuterias variaacuteveis e seus metadados Para cada variaacutevel haacute (ou pode haver) os metadados

Nome Dimensotildees (do array) Unidades Comentaacuterios

Ambos permitem arrays multidimensionais

Apenas HDF5 permite estruturas (daiacute vem a hierarquia)

Autodocumentados qualquer software que saiba ler um destes formatos lecirc qualquer arquivo sem precisar de conhecimento preacutevio sobre como o arquivo foi gerado

Muito bem suportados em bibliotecas padratildeo e natildeo padratildeo em softwares interativos e visualizadores (inclusive plugins para navegadores)

httpwwwunidataucaredusoftwarenetcdf httpenwikipediaorgwikiHdf5

NetCDF eacute mais simples de usar por natildeo ter hierarquia dando menos trabalho para ler e escrever dados Se hierarquia natildeo eacute necessaacuteria eacute mais conveniente de usar que HDF5

7489

Arquivos - binaacuterios - NetCDF e HDF5Haacute tambeacutem o formato CDL uma versatildeo ASCII do NetCDF A biblioteca padratildeo do NetCDF inclui conversores entre estes formatos

$ ncdump -h refspec_g01_0ncnetcdf refspec_g01_0 dimensions nlay = 51 nwn = 400 nleg = 33 numu = 2 nlev = 52 nphi = 3 ngas = 2 nwnc = 1 scal = 1 v3 = 3 dnl = 1 nk = 1 tdisr = UNLIMITED (0 currently) na = 16

variables float alb(nwn) float z(nlay) float t(nlay) float p(nlay) float wl(nwn) float iof(nwn) float mtau(nwn) float htau(nwn) float hctaus(nwn) float gtau(nwn) float outcos(scal) float phi(nleg) float phic(scal) float umu(numu) float flux(v3 nwn nlev) float mix(nlay ngas) float c(nlay) float psat(nlay) float ga(nwnc) float wlc(nwnc) float inc(scal) int dm(scal) int ord(scal) float fbeam(scal) float wn(nwn) float tautot(nwn nlay) float htaus(nwn nlay) float htaux(nwn nlay) float taug(nwn nlay) float phase(nwn nlay nleg) float ssa(nwn nlay) float uu(nwn nphi nlev numu) float u0u(nwn nlev numu) float tray(nwn nlay) float gtauo(tdisr nwn nlay)

Haacute 14 variaacuteveis usadas como dimensotildees para as 35 variaacuteveis que satildeo arrays

Ex alb(nwn) indica que alb eacute um array 1D de nwn elementos

nwn estaacute armazenado como uma das dimensotildees e eacute 400 portanto alb tem 400 elementos

Parte do conteuacutedo de um arquivo NetCDF em formato CDL (gerado pelo programa ncdump)

7589

Arquivos - binaacuterios - NetCDF e HDF5Conteuacutedo daquele arquivo visualizado com o ncview (acompanha a biblioteca NetCDF padratildeo)

7689

Arquivos - binaacuterios - NetCDF e HDF5O conteuacutedo de todo o arquivo pode ser lido facilmente com as bibliotecas disponiacuteveis e armazenado em contecirciners convenientes Usando um objeto que gera um resultado um pouco mais conveniente

IDLgt h=pp_readncdf(refspec_g01_0nchash)IDLgt printhvar_dims ltObjHeapVar229(HASH)gtvars ltObjHeapVar152(HASH)gtdims ltObjHeapVar118(HASH)gt

IDLgt printh[vars]T 173203 175459 175848 176001 175975 Z 431869 418858 406067 393403 380464 FLUX 300660 145536 0705180 0341669 0165532 PHASE 100000 0779034 0660858 0542052 0449983 TAUTOT0694377 0693420 0693474 0693540 0693636()

IDLgt help(h[vars])[TAUTOT]ltExpressiongt FLOAT = Array[51 400]

IDLgt print(h[var_dims])[TAUTOT]NLAY NWN

IDLgt print(h[dims])[(h[var_dims])[TAUTOT]]NLAY 51NWN 400

7789

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5)

Visualizaccedilatildeo da variaacutevel selecionada

Metadados e alguns valores da variaacutevel selecionada

Variaacutevel a ser criada com o conteuacutedo desta variaacutevel do arquivo

Hierarquia das variaacuteveis do arquivo

7889

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5) Imported variable az

IDLgt helpaz Structure ltd5723f38gt 13 tags length=448 data length=444 refs=1 _NAME STRING az _ICONTYPE STRING binary _TYPE STRING DATASET _FILE STRING INTENSI_test_409OUTh5 _PATH STRING _DATA DOUBLE Array[38] _NDIMENSIONS LONG 1 _DIMENSIONS ULONG64 Array[1] _NELEMENTS ULONG64 38 _DATATYPE STRING H5T_FLOAT _STORAGESIZE ULONG 8 _PRECISION LONG 64 _SIGN STRING

IDLgt printaz_data 00000000 10000000 20000000 30000000 40000000 50000000 60000000 80000000 ()

7989

Arquivos - binaacuterios - imagens

JPEG JPEG200 TIFF GeoTIFF etc

Os formatos comuns de imagens satildeo bem suportados em muacuteltiplas plataformas para uso dentro de programas e interativamente

Alguns formatos tecircm opccedilatildeo de compressatildeo com perda eou sem perda

Armazenam imagens como arrays 2D ou 3D (3D frequumlentemente limitado a 3 ou 4 em uma das dimensotildees uma imagem em 3 ou 4 bandas) de inteiros ou (em alguns formatos) reais

Alguns formatos permitem armazenar metadados para caracterizar as imagens armazenadas

JPEG2000 e GeoTIFF (um subconjunto de TIFF) comuns em astronomia e aacutereas proacuteximas

8089

Arquivos - binaacuterios ndash imagens ndash exemplo (IDL)IDLgt printquery_tiff(issmap_2009tiffinfogeotiff=geo) 1

IDLgt helpinfo Structure ltd4eca4b8gt 18 tags length=144 data length=132 refs=1 CHANNELS LONG 4 DIMENSIONS LONG Array[2] IMAGE_INDEX LONG 0 NUM_IMAGES LONG 1 PIXEL_TYPE INT 1 TYPE STRING TIFF BITS_PER_SAMPLE LONG 8 POSITION FLOAT Array[2] RESOLUTION FLOAT Array[2] UNITS LONG 2 TILE_SIZE LONG Array[2] DESCRIPTION STRING ISS (2009) DATE_TIME STRING 20100218 012436()

IDLgt helpgeo Structure ltd4efa1b8gt 10 tags length=264 data length=262 refs=1 MODELPIXELSCALETAG DOUBLE Array[3] MODELTIEPOINTTAG DOUBLE Array[6 4] GEOGRAPHICTYPEGEOKEY INT 4035 GEOGSEMIMAJORAXISGEOKEY DOUBLE 25750000 GEOGSEMIMINORAXISGEOKEY DOUBLE 25750000()

IDLgt myimage=read_tiff(issmap_2009tiff) Lecirc a imagem para o array myimage

Obteacutem informaccedilotildees sobre o arquivo

8189

Arquivos - binaacuterios ndash formatos nativosLinguagens como IDL R Python Java tecircm seu formato nativo binaacuterio acessado em alto niacutevel Basta mandar salvar ler variaacuteveis no do arquivo a biblioteca padratildeo automagicamente faz todo o trabalho de decidir como gravar ler os dados

Conveniente de usar na proacutepria linguagem Mas raramente existem bibliotecas para ler gravar o formato nativo de uma linguagem a partir de outra Ex (IDL)

IDLgt savefile=2dspectrumsavmydatamyheadercorners_dcorners_averbosecompress SAVE Portable (XDR) compressed SAVERESTORE file SAVE Saved variable MYDATA SAVE Saved variable MYHEADER()

Pode ser lido com apenas (haacute formas mais elaboradas)

IDLgt restore2dspectrumsavverbose RESTORE Portable (XDR) compressed SAVERESTORE file RESTORE Save file written by ltunknowngtltunknowngt Thu Jan 27 191422 2011 RESTORE IDL version 801 (linux x86_64) RESTORE Restored variable MYDATA RESTORE Restored variable MYHEADER()

IDLgt helpmydatamyheadercorners_dcorners_aMYDATA FLOAT = Array[1201 1201]MYHEADER STRING = Array[144]()

8289

Arquivos - processamento em baixo niacutevel

Nem sempre um formato padratildeo eacute a melhor escolha para o problema

Nem sempre haacute escolha (pode-se ter que trabalhar com arquivos que jaacute foram escritos em algum formato proprietaacuterio)

Agraves vezes o formato eacute padratildeo mas natildeo haacute bom suporte a ele disponiacutevel

Em todos estes casos eacute necessaacuterio escrever rotinas em baixo niacutevel que vatildeo ler processar diretamente o conteuacutedo do arquivo

Preferencialmente criando interfaces de alto niacutevel para o programa que vai as usar

8389

Arquivos - processamento em baixo niacutevel - texto

Tomando o exemplo anterior onde as colunas eram de diferentes tipos

NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS dec18s0001 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0002 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0003 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 FLAT 5408757812500 460000 5 dec18s0004 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 DARK 5408757812500 460000 5

A forma mais simples de o ler diretamente eacute definir uma estrutura para receber cada linha e um array destas estruturas para receber todo o arquivo Ex (IDL)

IDLgt record=namecalmpos0filnameechlpos0d0disppos0d0targnameposdirclassmjd_obsitime0d0coadds0IDLgt nlines=file_lines(filesearch_scamtxt)IDLgt mydata=replicate(recordnlines-1)IDLgt header=

Depois de definidas as variaacuteveis que vatildeo receber os dados o arquivo pode ser lido

IDLgt openrunitfilesearch_scamtxtget_lunIDLgt readfunitheaderIDLgt readfunitmydataformat=(A14I8A15F104F104A18A19A15F158F105I15)IDLgt free_lununit

A gravaccedilatildeo de um arquivo texto poderia ser feita de forma semelhante apenas trocando openr por openw (abrir o arquivo para gravaccedilatildeo natildeo leitura) e readf por printf

O arquivo eacute aberto em uma unidade (unit) usada para especificar de onde eacute feita a leitura

Ao final o arquivo eacute fechado

8489

Arquivos - processamento em baixo niacutevel - texto

O que resulta em

IDLgt printheader NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS

IDLgt helpmydataMYDATA STRUCT = -gt ltAnonymousgt Array[4]

IDLgt helpmydata[0] Structure ltd5e38f68gt 11 tags length=136 data length=124 refs=3 NAME STRING dec18s0001 CALMPOS INT 0 FILNAME STRING NIRSPEC-5-AO ECHLPOS DOUBLE 62630000 DISPPOS DOUBLE 36450000 TARGNAME STRING HD85258 POSDIR STRING NIRSPEC-5-AOp1 CLASS STRING STAR MJD_OBS STRING 54087574 ITIME DOUBLE 10000000 COADDS INT 1

Este caso eacute mais complicado que os mais comuns por haver colunas de strings

Se todas fossem de nuacutemeros natildeo teria sido necessaacuterio especificar o formato explicitamente As colunas teriam sido adivinhadas pela biblioteca que lecirc o arquivo Poderia ter sido lido escrito soacute com um array de nuacutemeros sem estruturas

8589

Arquivos - processamento em baixo niacutevel - binaacuterio

Formatos binaacuterios podem ser definidos de qualquer forma O arquivo eacute apenas um conjunto de bytes Cabe ao software saber como os interpretar

Uma escolha comum para que sejam autodocumentados eacute incluir um cabeccedilalho de texto informando as caracteriacutesticas dos dados necessaacuterias para os ler

Ex (IDL) criar um arquivo que armazene um array de doubles com um cabeccedilalho informando as dimensotildees para que o programa que o lecirc saiba como ler os dados

Inventa dados e abre o arquivo

IDLgt data_to_write=dindgen(34)IDLgt openwunitbinary_exampledatget_lun

Escreve as dimensotildees como texto

IDLgt printfunitdimensions of the double array stored belowIDLgt printfunitsize(data_to_writedimensions)

Escreve os dados binaacuterios

IDLgt writeuunitdata_to_write

Fecha o arquivo

IDLgt free_lununit

Escreve em binaacuterio (write unformatted)

8689

Arquivos - processamento em baixo niacutevel - binaacuterio

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

dimensions of the double array stored below 3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

8789

Arquivos - processamento em baixo niacutevel - binaacuterioA leitura deste arquivo eacute igualmente simples

IDLgt header=IDLgt dims=[00]IDLgt openrunitbinary_exampledatget_lun

Lecirc as dimensotildees (armazenadas como texto)

IDLgt readfunitheaderIDLgt readfunitdims

Lecirc a parte binaacuteria depois de saber as dimensotildees

IDLgt data_read=dblarr(dims)IDLgt readuunitdata_read

Fecha o arquivo

IDLgt free_lununit

Verifica que os dados foram gravados e lidos corretamente

IDLgt printarray_equal(data_to_writedata_read) 1

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Lecirc dados binaacuterios (read unformatted)

8889

Sumaacuterio

5 ndash Slides em httpwwwppenteadonetpeapea04_strings_iopdf Strings Expressotildees regulares Arquivos

httpwwwppenteadonetpea

8989

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89

Arquivos - texto - ldquoColunas regularesrdquoJaacute um arquivo um pouco mais difiacutecil de ler

NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS dec18s0001 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0002 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0003 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 FLAT 5408757812500 460000 5 dec18s0004 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 DARK 5408757812500 460000 5

Por ter colunas de tipos diferentes (strings inteiros reais) natildeo eacute possiacutevel o ler em um simples array Mas eacute faacutecil o colocar em uma estrutura de arrays onde cada campo eacute uma coluna

Especificando interativamente como interpretar as linhasIDLgt templ=ascii_template(filesearch_scamtxt)

Nome do campo (default mostrado)

Tipo do campo (identificado automaticamente)

Posiccedilatildeo (caracter) do comeccedilo (identificada automaticamente)

Linha de exemplo para verificar as colunas

6389

Arquivos - texto - ldquoColunas regularesrdquoDepois de feito o template o arquivo pode ser lido com apenas

IDLgt a=read_ascii(filesearch_scamtxttemplate=templ)IDLgt helpa Structure ltd4ec4608gt 11 tags length=416 data length=416 refs=1 FIELD01 STRING Array[4] FIELD02 LONG Array[4] FIELD03 STRING Array[4] FIELD04 FLOAT Array[4] FIELD05 FLOAT Array[4] FIELD06 STRING Array[4] FIELD07 STRING Array[4] FIELD08 STRING Array[4] FIELD09 FLOAT Array[4] FIELD10 FLOAT Array[4] FIELD11 LONG Array[4]IDLgt printafield01dec18s0001 dec18s0002 dec18s0003 dec18s0004IDLgt printafield04 626300 626300 626300 626300

O template (uma estrutura contendo dados sobre como ler o arquivo) pode ser usado para outros arquivos no mesmo formato No lugar de ter sido criado interativamente poderia ter sido lido de algum arquivo Poderia ter especificado nomes para os campos que seriam mais amigaacuteveis que coias como FIELD11

6489

Arquivos - texto - XML

Extensible Markup Language

Admite grande flexibilidade e por isso pode ter alta complexidade

Valores satildeo colocados dentro de uma estrutura em hieraacuterquica (em uma aacutervore) com os noacutes identificados pelos seus nomes (chaves)

Largamente usado em muitas aacutereas para armazenar conjuntos arbitraacuterios de quaisquer estruturas de dados

A maioria das aplicaccedilotildees usa um formato que eacute um subconjunto do XML especificado por um Schema comumente em um arquivo XML DTD (Document Type Definition)

6589

Arquivos - texto ndash XML ndash exemplos de usos

Armazenamento de dados de aplicaccedilotildees web (comum para exportar importar dados MediaWiki DokuWiki WordPress ADS Lattes etc)

Documentos Office (docx pptx xlsx) OpenOffice (odt opd ods)

Como versotildees de outros formatos FITSML XDF

ldquoScientific Dataset XML NASAs Astronomical Data Center (ADC) sponsors a number of research projects that

use XML for scientific data representation The XML activities at the ADC are sponsored and supported by the NASA Office of Space Science Applied Information Systems Research Program (AISRP)rdquo - httpxmlcoverpagesorgnasa-adchtml

Astronomical Instrument Markup Language (AIML)

SVG ndash Scalable Vector Graphics

Muitas de outras aplicaccedilotildees listadas em httpxmlcoverpagesorgxmlhtmlapplications

6689

Arquivos - texto ndash XML - exemploltxml version=10 gtltDOCTYPE Xdmf SYSTEM Xdmfdtd []gtltXdmf xmlnsxi=httpwwww3org2001XInclude Version=20gt ltDomaingt lt-- Example of Basic Topologies --gt ltInformation Name=Descriptiongt Example of a Polyvertex Topology ltInformationgt ltGrid Name=Polyvertex GridType=Uniformgt ltTopology TopologyType=Polyvertex Dimensions=3 NodesPerElement=3gt ltDataItem Format=XML Dimensions=3 3 NumberType=Floatgt 0 1 2 4 5 6 8 9 10 ltDataItemgt ltTopologygt ltGeometry Type=XYZgt ltDataItem Format=XML Dimensions=4 4 3gt 00 00 00 10 00 00()Que mostra que a interpretaccedilatildeo (parsing) de XML eacute em geral complexa

6789

Arquivos - texto - XML

Haacute muitas bibliotecas de alto niacutevel para fazer o processamento (parsing) e entregar os dados em uma estrutura conveniente

A complexidade em processar XML estaacute em decidir o que fazer com os dados jaacute que os arquivos podem ser muito complexos

As APIs (Application Programming Interfaces) mais comuns para processar XML que satildeo implementadas em muitas linguagens

DOM (Document Object Model) ndash manteacutem todo o conteuacutedo do em uma estrutura de dados (em geral uma aacutervore) em uma variaacutevel (em geral um objeto) Esta pode ser consultada para obter os valores de interesse para os alterar e usada para escrever um arquivo

SAX (Simple API for XML) ndash Interpretador (parser) por objetos O usuaacuterio escreve uma classe herdando da classe SAX provendo os meacutetodos que vatildeo processar os campos agrave medida em que estes satildeo lidos

6889

Arquivos - binaacuterios - FITSFlexible Image Transport System

O formato mais comum para observaccedilotildees astronocircmicas Tambeacutem usado para armazenar quaisquer dados mesmo natildeo relacionados a observaccedilotildees (especialmente tabelas como eacute praacutetica do STSCI)

Conteacutem um (ou mais) cabeccedilalho(s) de texto com metadados (informaccedilotildees sobre os dados como caracteriacutesticas (necessaacuterias para os ler) origem condiccedilotildees em que foram obtidos processamento realizado etc)

SIMPLE = T image conforms to FITS standard BITPIX = 32 bits per data value NAXIS = 2 number of axes NAXIS1 = 1024 NAXIS2 = 1024 BSCALE = 100000 Scaling factor BZERO = 000000 Scaling zero-point TELESCOP= Keck II Telescope SLITNAME= 0041x226 Slit Name SLITPA = 351979 Slit position angle SLITX = 131500 X pixel of the center of the slit LST = 12010446 local apparent sidereal time (()

Depois do cabeccedilalho haacute uma (ou mais) seccedilatildeo(otildees) de dados binaacuterios Costuma(m) ser array(s) 1D (espectros) 2D (imagens) ou 3D (ldquocubos de dadosrdquo)

De inteiros ou reais inteiros satildeo comuns em contagens de instrumentos reais para valores derivados (fluxos intensidades etc)

6989

Arquivos - binaacuterios - FITSNormalmente FITS satildeo lidos escritos por bibliotecas prontas de (relativamente) alto niacutevel usuaacuterio natildeo tem que saber como os dados satildeo armazenados no arquivo nem como os ler escrever Ex (IDL com a biblioteca idlastro)

IDLgt fits_info2dspectrumfits2dspectrumfits has 3 extensionsPrimary header 288 recordsNo dataExtension 1 -- SCI Header 144 records IMAGE ( 1201 1201 )Extension 2 -- ERR Header 72 records IMAGE ( 1201 1201 )Extension 3 -- DQ Header 72 records IMAGE ( 1201 1201 )

IDLgt mydata=readfits(2dspectrumfitsexten_no=1myheader) READFITS Reading FITS extension of type IMAGE READFITS Now reading 1201 by 1201 array

IDLgt extastmyheadermyastIDLgt sz=size(mydatadimensions)IDLgt xy2ad[1sz[0]][1sz[1]]myastcorners_acorners_dIDLgt printcorners_aCorners of the data array from file 2dspectrumfits are at 14487480 33063480

IDLgt printcorners_d -00041264444 00041402222

Obteacutem os dados de coordenadas (WCS) do header

Coloca os dados no array (2D de floats) mydata e o header no array (1D de strings) myheader

Calcula as coordenadas das quinas da imagem atraveacutes do WCS

Provecirc informaccedilotildees sobre o arquivo

7089

Arquivos - binaacuterios - ISIS Cube

Formatos como FITS se adequam muito a ter uma interface de mais alto niacutevel por objetos

Tambeacutem para dados em tabelas FITS muito mais trabalhosos de ler em baixo niacutevel que se adequam muito mais a mapas ou estruturas

Exemplo (de um formato semelhante a FITS ISIS cube)

O objeto ao ser criado lecirc todo o arquivo

cube=pp_editablecube(CM_1553510065_1_ircub)

Meacutetodos fornecem os dados desejados para obter quando necessaacuterio os dados de interesse

Find out the names of the backplanesprintcubegetproperty(backnames)Get the start time of the cubeprintcubegetfromheader(START_TIME)2007-084T100057286Z

Valores no cabeccedilalho podem ser convenientemente fornecidos como um mapa

header=cubeheader_as_hash()printheader[START_TIME]2007-084T100057286Z

7189

Arquivos - binaacuterios ndash ISIS Cube

Os dados satildeo fornecidos como arraysMake a contour plot of the latitudesc=contour(cubegetsuffixbyname(LATITUDE))Get the band with wavelength nearest to 21 (in the units used in the cube)selband=cubegetbandbywavelength(21wavelengths=selwavs)

Interfaces por overload tornam o acesso ainda mais conveniente

selband=cube[21]

selwavs=cube[21]

Retorna um array com a banda de comprimento de onda mais proacuteximo de 21 (microm)

Retorna o comprimento de onda mais proacuteximo de 21 (microm) da banda retornada acima

7289

Arquivos - binaacuterios ndash ISIS Cube Alteraccedilotildees feitas ao conteuacutedo satildeo automaticamente refletidas em todos os

lugares (cabeccedilalho em particular) afetados mantendo o objeto vaacutelido que pode depois ser gravado em um novo arquivo

IDLgt printcubelinescubesamplescubebands 64 64 256

IDLgt helpcubecoreltExpressiongt FLOAT = Array[64 64 256]

IDLgt cubecore=dblarr(100100256)

A linha acima natildeo eacute uma atribuiccedilatildeo eacute uma invocaccedilatildeo de meacutetodo Eacute equivalente acubesetpropertycore=dblarr(100100256)

Eacute o trabalho da funccedilatildeo setproperty decidir se a propriedade passada (core) faz sentido e se fizer fazer todo o trabalho necessaacuterio a esta mudanccedila Para o usuaacuterio eacute tudo automaacutetico e os dados da classe satildeo vaacutelidos o tempo todo

IDLgt helpcubecoreltExpressiongt DOUBLE = Array[100 100 256]

IDLgt printcubelinescubesamplescubebands 100 100 256

IDLgt cubesaveCM_1553510065_1_ir_editedcub

7389

Arquivos - binaacuterios ndash NetCDF e HDF5

Network Common Data Form e Hierarchical Data Format

Os dois uacutenicos formatos bem estabelecidos para dados cientiacuteficos geneacutericos

Armazenam dados como vaacuterias variaacuteveis e seus metadados Para cada variaacutevel haacute (ou pode haver) os metadados

Nome Dimensotildees (do array) Unidades Comentaacuterios

Ambos permitem arrays multidimensionais

Apenas HDF5 permite estruturas (daiacute vem a hierarquia)

Autodocumentados qualquer software que saiba ler um destes formatos lecirc qualquer arquivo sem precisar de conhecimento preacutevio sobre como o arquivo foi gerado

Muito bem suportados em bibliotecas padratildeo e natildeo padratildeo em softwares interativos e visualizadores (inclusive plugins para navegadores)

httpwwwunidataucaredusoftwarenetcdf httpenwikipediaorgwikiHdf5

NetCDF eacute mais simples de usar por natildeo ter hierarquia dando menos trabalho para ler e escrever dados Se hierarquia natildeo eacute necessaacuteria eacute mais conveniente de usar que HDF5

7489

Arquivos - binaacuterios - NetCDF e HDF5Haacute tambeacutem o formato CDL uma versatildeo ASCII do NetCDF A biblioteca padratildeo do NetCDF inclui conversores entre estes formatos

$ ncdump -h refspec_g01_0ncnetcdf refspec_g01_0 dimensions nlay = 51 nwn = 400 nleg = 33 numu = 2 nlev = 52 nphi = 3 ngas = 2 nwnc = 1 scal = 1 v3 = 3 dnl = 1 nk = 1 tdisr = UNLIMITED (0 currently) na = 16

variables float alb(nwn) float z(nlay) float t(nlay) float p(nlay) float wl(nwn) float iof(nwn) float mtau(nwn) float htau(nwn) float hctaus(nwn) float gtau(nwn) float outcos(scal) float phi(nleg) float phic(scal) float umu(numu) float flux(v3 nwn nlev) float mix(nlay ngas) float c(nlay) float psat(nlay) float ga(nwnc) float wlc(nwnc) float inc(scal) int dm(scal) int ord(scal) float fbeam(scal) float wn(nwn) float tautot(nwn nlay) float htaus(nwn nlay) float htaux(nwn nlay) float taug(nwn nlay) float phase(nwn nlay nleg) float ssa(nwn nlay) float uu(nwn nphi nlev numu) float u0u(nwn nlev numu) float tray(nwn nlay) float gtauo(tdisr nwn nlay)

Haacute 14 variaacuteveis usadas como dimensotildees para as 35 variaacuteveis que satildeo arrays

Ex alb(nwn) indica que alb eacute um array 1D de nwn elementos

nwn estaacute armazenado como uma das dimensotildees e eacute 400 portanto alb tem 400 elementos

Parte do conteuacutedo de um arquivo NetCDF em formato CDL (gerado pelo programa ncdump)

7589

Arquivos - binaacuterios - NetCDF e HDF5Conteuacutedo daquele arquivo visualizado com o ncview (acompanha a biblioteca NetCDF padratildeo)

7689

Arquivos - binaacuterios - NetCDF e HDF5O conteuacutedo de todo o arquivo pode ser lido facilmente com as bibliotecas disponiacuteveis e armazenado em contecirciners convenientes Usando um objeto que gera um resultado um pouco mais conveniente

IDLgt h=pp_readncdf(refspec_g01_0nchash)IDLgt printhvar_dims ltObjHeapVar229(HASH)gtvars ltObjHeapVar152(HASH)gtdims ltObjHeapVar118(HASH)gt

IDLgt printh[vars]T 173203 175459 175848 176001 175975 Z 431869 418858 406067 393403 380464 FLUX 300660 145536 0705180 0341669 0165532 PHASE 100000 0779034 0660858 0542052 0449983 TAUTOT0694377 0693420 0693474 0693540 0693636()

IDLgt help(h[vars])[TAUTOT]ltExpressiongt FLOAT = Array[51 400]

IDLgt print(h[var_dims])[TAUTOT]NLAY NWN

IDLgt print(h[dims])[(h[var_dims])[TAUTOT]]NLAY 51NWN 400

7789

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5)

Visualizaccedilatildeo da variaacutevel selecionada

Metadados e alguns valores da variaacutevel selecionada

Variaacutevel a ser criada com o conteuacutedo desta variaacutevel do arquivo

Hierarquia das variaacuteveis do arquivo

7889

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5) Imported variable az

IDLgt helpaz Structure ltd5723f38gt 13 tags length=448 data length=444 refs=1 _NAME STRING az _ICONTYPE STRING binary _TYPE STRING DATASET _FILE STRING INTENSI_test_409OUTh5 _PATH STRING _DATA DOUBLE Array[38] _NDIMENSIONS LONG 1 _DIMENSIONS ULONG64 Array[1] _NELEMENTS ULONG64 38 _DATATYPE STRING H5T_FLOAT _STORAGESIZE ULONG 8 _PRECISION LONG 64 _SIGN STRING

IDLgt printaz_data 00000000 10000000 20000000 30000000 40000000 50000000 60000000 80000000 ()

7989

Arquivos - binaacuterios - imagens

JPEG JPEG200 TIFF GeoTIFF etc

Os formatos comuns de imagens satildeo bem suportados em muacuteltiplas plataformas para uso dentro de programas e interativamente

Alguns formatos tecircm opccedilatildeo de compressatildeo com perda eou sem perda

Armazenam imagens como arrays 2D ou 3D (3D frequumlentemente limitado a 3 ou 4 em uma das dimensotildees uma imagem em 3 ou 4 bandas) de inteiros ou (em alguns formatos) reais

Alguns formatos permitem armazenar metadados para caracterizar as imagens armazenadas

JPEG2000 e GeoTIFF (um subconjunto de TIFF) comuns em astronomia e aacutereas proacuteximas

8089

Arquivos - binaacuterios ndash imagens ndash exemplo (IDL)IDLgt printquery_tiff(issmap_2009tiffinfogeotiff=geo) 1

IDLgt helpinfo Structure ltd4eca4b8gt 18 tags length=144 data length=132 refs=1 CHANNELS LONG 4 DIMENSIONS LONG Array[2] IMAGE_INDEX LONG 0 NUM_IMAGES LONG 1 PIXEL_TYPE INT 1 TYPE STRING TIFF BITS_PER_SAMPLE LONG 8 POSITION FLOAT Array[2] RESOLUTION FLOAT Array[2] UNITS LONG 2 TILE_SIZE LONG Array[2] DESCRIPTION STRING ISS (2009) DATE_TIME STRING 20100218 012436()

IDLgt helpgeo Structure ltd4efa1b8gt 10 tags length=264 data length=262 refs=1 MODELPIXELSCALETAG DOUBLE Array[3] MODELTIEPOINTTAG DOUBLE Array[6 4] GEOGRAPHICTYPEGEOKEY INT 4035 GEOGSEMIMAJORAXISGEOKEY DOUBLE 25750000 GEOGSEMIMINORAXISGEOKEY DOUBLE 25750000()

IDLgt myimage=read_tiff(issmap_2009tiff) Lecirc a imagem para o array myimage

Obteacutem informaccedilotildees sobre o arquivo

8189

Arquivos - binaacuterios ndash formatos nativosLinguagens como IDL R Python Java tecircm seu formato nativo binaacuterio acessado em alto niacutevel Basta mandar salvar ler variaacuteveis no do arquivo a biblioteca padratildeo automagicamente faz todo o trabalho de decidir como gravar ler os dados

Conveniente de usar na proacutepria linguagem Mas raramente existem bibliotecas para ler gravar o formato nativo de uma linguagem a partir de outra Ex (IDL)

IDLgt savefile=2dspectrumsavmydatamyheadercorners_dcorners_averbosecompress SAVE Portable (XDR) compressed SAVERESTORE file SAVE Saved variable MYDATA SAVE Saved variable MYHEADER()

Pode ser lido com apenas (haacute formas mais elaboradas)

IDLgt restore2dspectrumsavverbose RESTORE Portable (XDR) compressed SAVERESTORE file RESTORE Save file written by ltunknowngtltunknowngt Thu Jan 27 191422 2011 RESTORE IDL version 801 (linux x86_64) RESTORE Restored variable MYDATA RESTORE Restored variable MYHEADER()

IDLgt helpmydatamyheadercorners_dcorners_aMYDATA FLOAT = Array[1201 1201]MYHEADER STRING = Array[144]()

8289

Arquivos - processamento em baixo niacutevel

Nem sempre um formato padratildeo eacute a melhor escolha para o problema

Nem sempre haacute escolha (pode-se ter que trabalhar com arquivos que jaacute foram escritos em algum formato proprietaacuterio)

Agraves vezes o formato eacute padratildeo mas natildeo haacute bom suporte a ele disponiacutevel

Em todos estes casos eacute necessaacuterio escrever rotinas em baixo niacutevel que vatildeo ler processar diretamente o conteuacutedo do arquivo

Preferencialmente criando interfaces de alto niacutevel para o programa que vai as usar

8389

Arquivos - processamento em baixo niacutevel - texto

Tomando o exemplo anterior onde as colunas eram de diferentes tipos

NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS dec18s0001 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0002 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0003 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 FLAT 5408757812500 460000 5 dec18s0004 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 DARK 5408757812500 460000 5

A forma mais simples de o ler diretamente eacute definir uma estrutura para receber cada linha e um array destas estruturas para receber todo o arquivo Ex (IDL)

IDLgt record=namecalmpos0filnameechlpos0d0disppos0d0targnameposdirclassmjd_obsitime0d0coadds0IDLgt nlines=file_lines(filesearch_scamtxt)IDLgt mydata=replicate(recordnlines-1)IDLgt header=

Depois de definidas as variaacuteveis que vatildeo receber os dados o arquivo pode ser lido

IDLgt openrunitfilesearch_scamtxtget_lunIDLgt readfunitheaderIDLgt readfunitmydataformat=(A14I8A15F104F104A18A19A15F158F105I15)IDLgt free_lununit

A gravaccedilatildeo de um arquivo texto poderia ser feita de forma semelhante apenas trocando openr por openw (abrir o arquivo para gravaccedilatildeo natildeo leitura) e readf por printf

O arquivo eacute aberto em uma unidade (unit) usada para especificar de onde eacute feita a leitura

Ao final o arquivo eacute fechado

8489

Arquivos - processamento em baixo niacutevel - texto

O que resulta em

IDLgt printheader NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS

IDLgt helpmydataMYDATA STRUCT = -gt ltAnonymousgt Array[4]

IDLgt helpmydata[0] Structure ltd5e38f68gt 11 tags length=136 data length=124 refs=3 NAME STRING dec18s0001 CALMPOS INT 0 FILNAME STRING NIRSPEC-5-AO ECHLPOS DOUBLE 62630000 DISPPOS DOUBLE 36450000 TARGNAME STRING HD85258 POSDIR STRING NIRSPEC-5-AOp1 CLASS STRING STAR MJD_OBS STRING 54087574 ITIME DOUBLE 10000000 COADDS INT 1

Este caso eacute mais complicado que os mais comuns por haver colunas de strings

Se todas fossem de nuacutemeros natildeo teria sido necessaacuterio especificar o formato explicitamente As colunas teriam sido adivinhadas pela biblioteca que lecirc o arquivo Poderia ter sido lido escrito soacute com um array de nuacutemeros sem estruturas

8589

Arquivos - processamento em baixo niacutevel - binaacuterio

Formatos binaacuterios podem ser definidos de qualquer forma O arquivo eacute apenas um conjunto de bytes Cabe ao software saber como os interpretar

Uma escolha comum para que sejam autodocumentados eacute incluir um cabeccedilalho de texto informando as caracteriacutesticas dos dados necessaacuterias para os ler

Ex (IDL) criar um arquivo que armazene um array de doubles com um cabeccedilalho informando as dimensotildees para que o programa que o lecirc saiba como ler os dados

Inventa dados e abre o arquivo

IDLgt data_to_write=dindgen(34)IDLgt openwunitbinary_exampledatget_lun

Escreve as dimensotildees como texto

IDLgt printfunitdimensions of the double array stored belowIDLgt printfunitsize(data_to_writedimensions)

Escreve os dados binaacuterios

IDLgt writeuunitdata_to_write

Fecha o arquivo

IDLgt free_lununit

Escreve em binaacuterio (write unformatted)

8689

Arquivos - processamento em baixo niacutevel - binaacuterio

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

dimensions of the double array stored below 3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

8789

Arquivos - processamento em baixo niacutevel - binaacuterioA leitura deste arquivo eacute igualmente simples

IDLgt header=IDLgt dims=[00]IDLgt openrunitbinary_exampledatget_lun

Lecirc as dimensotildees (armazenadas como texto)

IDLgt readfunitheaderIDLgt readfunitdims

Lecirc a parte binaacuteria depois de saber as dimensotildees

IDLgt data_read=dblarr(dims)IDLgt readuunitdata_read

Fecha o arquivo

IDLgt free_lununit

Verifica que os dados foram gravados e lidos corretamente

IDLgt printarray_equal(data_to_writedata_read) 1

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Lecirc dados binaacuterios (read unformatted)

8889

Sumaacuterio

5 ndash Slides em httpwwwppenteadonetpeapea04_strings_iopdf Strings Expressotildees regulares Arquivos

httpwwwppenteadonetpea

8989

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89

Arquivos - texto - ldquoColunas regularesrdquoDepois de feito o template o arquivo pode ser lido com apenas

IDLgt a=read_ascii(filesearch_scamtxttemplate=templ)IDLgt helpa Structure ltd4ec4608gt 11 tags length=416 data length=416 refs=1 FIELD01 STRING Array[4] FIELD02 LONG Array[4] FIELD03 STRING Array[4] FIELD04 FLOAT Array[4] FIELD05 FLOAT Array[4] FIELD06 STRING Array[4] FIELD07 STRING Array[4] FIELD08 STRING Array[4] FIELD09 FLOAT Array[4] FIELD10 FLOAT Array[4] FIELD11 LONG Array[4]IDLgt printafield01dec18s0001 dec18s0002 dec18s0003 dec18s0004IDLgt printafield04 626300 626300 626300 626300

O template (uma estrutura contendo dados sobre como ler o arquivo) pode ser usado para outros arquivos no mesmo formato No lugar de ter sido criado interativamente poderia ter sido lido de algum arquivo Poderia ter especificado nomes para os campos que seriam mais amigaacuteveis que coias como FIELD11

6489

Arquivos - texto - XML

Extensible Markup Language

Admite grande flexibilidade e por isso pode ter alta complexidade

Valores satildeo colocados dentro de uma estrutura em hieraacuterquica (em uma aacutervore) com os noacutes identificados pelos seus nomes (chaves)

Largamente usado em muitas aacutereas para armazenar conjuntos arbitraacuterios de quaisquer estruturas de dados

A maioria das aplicaccedilotildees usa um formato que eacute um subconjunto do XML especificado por um Schema comumente em um arquivo XML DTD (Document Type Definition)

6589

Arquivos - texto ndash XML ndash exemplos de usos

Armazenamento de dados de aplicaccedilotildees web (comum para exportar importar dados MediaWiki DokuWiki WordPress ADS Lattes etc)

Documentos Office (docx pptx xlsx) OpenOffice (odt opd ods)

Como versotildees de outros formatos FITSML XDF

ldquoScientific Dataset XML NASAs Astronomical Data Center (ADC) sponsors a number of research projects that

use XML for scientific data representation The XML activities at the ADC are sponsored and supported by the NASA Office of Space Science Applied Information Systems Research Program (AISRP)rdquo - httpxmlcoverpagesorgnasa-adchtml

Astronomical Instrument Markup Language (AIML)

SVG ndash Scalable Vector Graphics

Muitas de outras aplicaccedilotildees listadas em httpxmlcoverpagesorgxmlhtmlapplications

6689

Arquivos - texto ndash XML - exemploltxml version=10 gtltDOCTYPE Xdmf SYSTEM Xdmfdtd []gtltXdmf xmlnsxi=httpwwww3org2001XInclude Version=20gt ltDomaingt lt-- Example of Basic Topologies --gt ltInformation Name=Descriptiongt Example of a Polyvertex Topology ltInformationgt ltGrid Name=Polyvertex GridType=Uniformgt ltTopology TopologyType=Polyvertex Dimensions=3 NodesPerElement=3gt ltDataItem Format=XML Dimensions=3 3 NumberType=Floatgt 0 1 2 4 5 6 8 9 10 ltDataItemgt ltTopologygt ltGeometry Type=XYZgt ltDataItem Format=XML Dimensions=4 4 3gt 00 00 00 10 00 00()Que mostra que a interpretaccedilatildeo (parsing) de XML eacute em geral complexa

6789

Arquivos - texto - XML

Haacute muitas bibliotecas de alto niacutevel para fazer o processamento (parsing) e entregar os dados em uma estrutura conveniente

A complexidade em processar XML estaacute em decidir o que fazer com os dados jaacute que os arquivos podem ser muito complexos

As APIs (Application Programming Interfaces) mais comuns para processar XML que satildeo implementadas em muitas linguagens

DOM (Document Object Model) ndash manteacutem todo o conteuacutedo do em uma estrutura de dados (em geral uma aacutervore) em uma variaacutevel (em geral um objeto) Esta pode ser consultada para obter os valores de interesse para os alterar e usada para escrever um arquivo

SAX (Simple API for XML) ndash Interpretador (parser) por objetos O usuaacuterio escreve uma classe herdando da classe SAX provendo os meacutetodos que vatildeo processar os campos agrave medida em que estes satildeo lidos

6889

Arquivos - binaacuterios - FITSFlexible Image Transport System

O formato mais comum para observaccedilotildees astronocircmicas Tambeacutem usado para armazenar quaisquer dados mesmo natildeo relacionados a observaccedilotildees (especialmente tabelas como eacute praacutetica do STSCI)

Conteacutem um (ou mais) cabeccedilalho(s) de texto com metadados (informaccedilotildees sobre os dados como caracteriacutesticas (necessaacuterias para os ler) origem condiccedilotildees em que foram obtidos processamento realizado etc)

SIMPLE = T image conforms to FITS standard BITPIX = 32 bits per data value NAXIS = 2 number of axes NAXIS1 = 1024 NAXIS2 = 1024 BSCALE = 100000 Scaling factor BZERO = 000000 Scaling zero-point TELESCOP= Keck II Telescope SLITNAME= 0041x226 Slit Name SLITPA = 351979 Slit position angle SLITX = 131500 X pixel of the center of the slit LST = 12010446 local apparent sidereal time (()

Depois do cabeccedilalho haacute uma (ou mais) seccedilatildeo(otildees) de dados binaacuterios Costuma(m) ser array(s) 1D (espectros) 2D (imagens) ou 3D (ldquocubos de dadosrdquo)

De inteiros ou reais inteiros satildeo comuns em contagens de instrumentos reais para valores derivados (fluxos intensidades etc)

6989

Arquivos - binaacuterios - FITSNormalmente FITS satildeo lidos escritos por bibliotecas prontas de (relativamente) alto niacutevel usuaacuterio natildeo tem que saber como os dados satildeo armazenados no arquivo nem como os ler escrever Ex (IDL com a biblioteca idlastro)

IDLgt fits_info2dspectrumfits2dspectrumfits has 3 extensionsPrimary header 288 recordsNo dataExtension 1 -- SCI Header 144 records IMAGE ( 1201 1201 )Extension 2 -- ERR Header 72 records IMAGE ( 1201 1201 )Extension 3 -- DQ Header 72 records IMAGE ( 1201 1201 )

IDLgt mydata=readfits(2dspectrumfitsexten_no=1myheader) READFITS Reading FITS extension of type IMAGE READFITS Now reading 1201 by 1201 array

IDLgt extastmyheadermyastIDLgt sz=size(mydatadimensions)IDLgt xy2ad[1sz[0]][1sz[1]]myastcorners_acorners_dIDLgt printcorners_aCorners of the data array from file 2dspectrumfits are at 14487480 33063480

IDLgt printcorners_d -00041264444 00041402222

Obteacutem os dados de coordenadas (WCS) do header

Coloca os dados no array (2D de floats) mydata e o header no array (1D de strings) myheader

Calcula as coordenadas das quinas da imagem atraveacutes do WCS

Provecirc informaccedilotildees sobre o arquivo

7089

Arquivos - binaacuterios - ISIS Cube

Formatos como FITS se adequam muito a ter uma interface de mais alto niacutevel por objetos

Tambeacutem para dados em tabelas FITS muito mais trabalhosos de ler em baixo niacutevel que se adequam muito mais a mapas ou estruturas

Exemplo (de um formato semelhante a FITS ISIS cube)

O objeto ao ser criado lecirc todo o arquivo

cube=pp_editablecube(CM_1553510065_1_ircub)

Meacutetodos fornecem os dados desejados para obter quando necessaacuterio os dados de interesse

Find out the names of the backplanesprintcubegetproperty(backnames)Get the start time of the cubeprintcubegetfromheader(START_TIME)2007-084T100057286Z

Valores no cabeccedilalho podem ser convenientemente fornecidos como um mapa

header=cubeheader_as_hash()printheader[START_TIME]2007-084T100057286Z

7189

Arquivos - binaacuterios ndash ISIS Cube

Os dados satildeo fornecidos como arraysMake a contour plot of the latitudesc=contour(cubegetsuffixbyname(LATITUDE))Get the band with wavelength nearest to 21 (in the units used in the cube)selband=cubegetbandbywavelength(21wavelengths=selwavs)

Interfaces por overload tornam o acesso ainda mais conveniente

selband=cube[21]

selwavs=cube[21]

Retorna um array com a banda de comprimento de onda mais proacuteximo de 21 (microm)

Retorna o comprimento de onda mais proacuteximo de 21 (microm) da banda retornada acima

7289

Arquivos - binaacuterios ndash ISIS Cube Alteraccedilotildees feitas ao conteuacutedo satildeo automaticamente refletidas em todos os

lugares (cabeccedilalho em particular) afetados mantendo o objeto vaacutelido que pode depois ser gravado em um novo arquivo

IDLgt printcubelinescubesamplescubebands 64 64 256

IDLgt helpcubecoreltExpressiongt FLOAT = Array[64 64 256]

IDLgt cubecore=dblarr(100100256)

A linha acima natildeo eacute uma atribuiccedilatildeo eacute uma invocaccedilatildeo de meacutetodo Eacute equivalente acubesetpropertycore=dblarr(100100256)

Eacute o trabalho da funccedilatildeo setproperty decidir se a propriedade passada (core) faz sentido e se fizer fazer todo o trabalho necessaacuterio a esta mudanccedila Para o usuaacuterio eacute tudo automaacutetico e os dados da classe satildeo vaacutelidos o tempo todo

IDLgt helpcubecoreltExpressiongt DOUBLE = Array[100 100 256]

IDLgt printcubelinescubesamplescubebands 100 100 256

IDLgt cubesaveCM_1553510065_1_ir_editedcub

7389

Arquivos - binaacuterios ndash NetCDF e HDF5

Network Common Data Form e Hierarchical Data Format

Os dois uacutenicos formatos bem estabelecidos para dados cientiacuteficos geneacutericos

Armazenam dados como vaacuterias variaacuteveis e seus metadados Para cada variaacutevel haacute (ou pode haver) os metadados

Nome Dimensotildees (do array) Unidades Comentaacuterios

Ambos permitem arrays multidimensionais

Apenas HDF5 permite estruturas (daiacute vem a hierarquia)

Autodocumentados qualquer software que saiba ler um destes formatos lecirc qualquer arquivo sem precisar de conhecimento preacutevio sobre como o arquivo foi gerado

Muito bem suportados em bibliotecas padratildeo e natildeo padratildeo em softwares interativos e visualizadores (inclusive plugins para navegadores)

httpwwwunidataucaredusoftwarenetcdf httpenwikipediaorgwikiHdf5

NetCDF eacute mais simples de usar por natildeo ter hierarquia dando menos trabalho para ler e escrever dados Se hierarquia natildeo eacute necessaacuteria eacute mais conveniente de usar que HDF5

7489

Arquivos - binaacuterios - NetCDF e HDF5Haacute tambeacutem o formato CDL uma versatildeo ASCII do NetCDF A biblioteca padratildeo do NetCDF inclui conversores entre estes formatos

$ ncdump -h refspec_g01_0ncnetcdf refspec_g01_0 dimensions nlay = 51 nwn = 400 nleg = 33 numu = 2 nlev = 52 nphi = 3 ngas = 2 nwnc = 1 scal = 1 v3 = 3 dnl = 1 nk = 1 tdisr = UNLIMITED (0 currently) na = 16

variables float alb(nwn) float z(nlay) float t(nlay) float p(nlay) float wl(nwn) float iof(nwn) float mtau(nwn) float htau(nwn) float hctaus(nwn) float gtau(nwn) float outcos(scal) float phi(nleg) float phic(scal) float umu(numu) float flux(v3 nwn nlev) float mix(nlay ngas) float c(nlay) float psat(nlay) float ga(nwnc) float wlc(nwnc) float inc(scal) int dm(scal) int ord(scal) float fbeam(scal) float wn(nwn) float tautot(nwn nlay) float htaus(nwn nlay) float htaux(nwn nlay) float taug(nwn nlay) float phase(nwn nlay nleg) float ssa(nwn nlay) float uu(nwn nphi nlev numu) float u0u(nwn nlev numu) float tray(nwn nlay) float gtauo(tdisr nwn nlay)

Haacute 14 variaacuteveis usadas como dimensotildees para as 35 variaacuteveis que satildeo arrays

Ex alb(nwn) indica que alb eacute um array 1D de nwn elementos

nwn estaacute armazenado como uma das dimensotildees e eacute 400 portanto alb tem 400 elementos

Parte do conteuacutedo de um arquivo NetCDF em formato CDL (gerado pelo programa ncdump)

7589

Arquivos - binaacuterios - NetCDF e HDF5Conteuacutedo daquele arquivo visualizado com o ncview (acompanha a biblioteca NetCDF padratildeo)

7689

Arquivos - binaacuterios - NetCDF e HDF5O conteuacutedo de todo o arquivo pode ser lido facilmente com as bibliotecas disponiacuteveis e armazenado em contecirciners convenientes Usando um objeto que gera um resultado um pouco mais conveniente

IDLgt h=pp_readncdf(refspec_g01_0nchash)IDLgt printhvar_dims ltObjHeapVar229(HASH)gtvars ltObjHeapVar152(HASH)gtdims ltObjHeapVar118(HASH)gt

IDLgt printh[vars]T 173203 175459 175848 176001 175975 Z 431869 418858 406067 393403 380464 FLUX 300660 145536 0705180 0341669 0165532 PHASE 100000 0779034 0660858 0542052 0449983 TAUTOT0694377 0693420 0693474 0693540 0693636()

IDLgt help(h[vars])[TAUTOT]ltExpressiongt FLOAT = Array[51 400]

IDLgt print(h[var_dims])[TAUTOT]NLAY NWN

IDLgt print(h[dims])[(h[var_dims])[TAUTOT]]NLAY 51NWN 400

7789

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5)

Visualizaccedilatildeo da variaacutevel selecionada

Metadados e alguns valores da variaacutevel selecionada

Variaacutevel a ser criada com o conteuacutedo desta variaacutevel do arquivo

Hierarquia das variaacuteveis do arquivo

7889

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5) Imported variable az

IDLgt helpaz Structure ltd5723f38gt 13 tags length=448 data length=444 refs=1 _NAME STRING az _ICONTYPE STRING binary _TYPE STRING DATASET _FILE STRING INTENSI_test_409OUTh5 _PATH STRING _DATA DOUBLE Array[38] _NDIMENSIONS LONG 1 _DIMENSIONS ULONG64 Array[1] _NELEMENTS ULONG64 38 _DATATYPE STRING H5T_FLOAT _STORAGESIZE ULONG 8 _PRECISION LONG 64 _SIGN STRING

IDLgt printaz_data 00000000 10000000 20000000 30000000 40000000 50000000 60000000 80000000 ()

7989

Arquivos - binaacuterios - imagens

JPEG JPEG200 TIFF GeoTIFF etc

Os formatos comuns de imagens satildeo bem suportados em muacuteltiplas plataformas para uso dentro de programas e interativamente

Alguns formatos tecircm opccedilatildeo de compressatildeo com perda eou sem perda

Armazenam imagens como arrays 2D ou 3D (3D frequumlentemente limitado a 3 ou 4 em uma das dimensotildees uma imagem em 3 ou 4 bandas) de inteiros ou (em alguns formatos) reais

Alguns formatos permitem armazenar metadados para caracterizar as imagens armazenadas

JPEG2000 e GeoTIFF (um subconjunto de TIFF) comuns em astronomia e aacutereas proacuteximas

8089

Arquivos - binaacuterios ndash imagens ndash exemplo (IDL)IDLgt printquery_tiff(issmap_2009tiffinfogeotiff=geo) 1

IDLgt helpinfo Structure ltd4eca4b8gt 18 tags length=144 data length=132 refs=1 CHANNELS LONG 4 DIMENSIONS LONG Array[2] IMAGE_INDEX LONG 0 NUM_IMAGES LONG 1 PIXEL_TYPE INT 1 TYPE STRING TIFF BITS_PER_SAMPLE LONG 8 POSITION FLOAT Array[2] RESOLUTION FLOAT Array[2] UNITS LONG 2 TILE_SIZE LONG Array[2] DESCRIPTION STRING ISS (2009) DATE_TIME STRING 20100218 012436()

IDLgt helpgeo Structure ltd4efa1b8gt 10 tags length=264 data length=262 refs=1 MODELPIXELSCALETAG DOUBLE Array[3] MODELTIEPOINTTAG DOUBLE Array[6 4] GEOGRAPHICTYPEGEOKEY INT 4035 GEOGSEMIMAJORAXISGEOKEY DOUBLE 25750000 GEOGSEMIMINORAXISGEOKEY DOUBLE 25750000()

IDLgt myimage=read_tiff(issmap_2009tiff) Lecirc a imagem para o array myimage

Obteacutem informaccedilotildees sobre o arquivo

8189

Arquivos - binaacuterios ndash formatos nativosLinguagens como IDL R Python Java tecircm seu formato nativo binaacuterio acessado em alto niacutevel Basta mandar salvar ler variaacuteveis no do arquivo a biblioteca padratildeo automagicamente faz todo o trabalho de decidir como gravar ler os dados

Conveniente de usar na proacutepria linguagem Mas raramente existem bibliotecas para ler gravar o formato nativo de uma linguagem a partir de outra Ex (IDL)

IDLgt savefile=2dspectrumsavmydatamyheadercorners_dcorners_averbosecompress SAVE Portable (XDR) compressed SAVERESTORE file SAVE Saved variable MYDATA SAVE Saved variable MYHEADER()

Pode ser lido com apenas (haacute formas mais elaboradas)

IDLgt restore2dspectrumsavverbose RESTORE Portable (XDR) compressed SAVERESTORE file RESTORE Save file written by ltunknowngtltunknowngt Thu Jan 27 191422 2011 RESTORE IDL version 801 (linux x86_64) RESTORE Restored variable MYDATA RESTORE Restored variable MYHEADER()

IDLgt helpmydatamyheadercorners_dcorners_aMYDATA FLOAT = Array[1201 1201]MYHEADER STRING = Array[144]()

8289

Arquivos - processamento em baixo niacutevel

Nem sempre um formato padratildeo eacute a melhor escolha para o problema

Nem sempre haacute escolha (pode-se ter que trabalhar com arquivos que jaacute foram escritos em algum formato proprietaacuterio)

Agraves vezes o formato eacute padratildeo mas natildeo haacute bom suporte a ele disponiacutevel

Em todos estes casos eacute necessaacuterio escrever rotinas em baixo niacutevel que vatildeo ler processar diretamente o conteuacutedo do arquivo

Preferencialmente criando interfaces de alto niacutevel para o programa que vai as usar

8389

Arquivos - processamento em baixo niacutevel - texto

Tomando o exemplo anterior onde as colunas eram de diferentes tipos

NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS dec18s0001 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0002 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0003 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 FLAT 5408757812500 460000 5 dec18s0004 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 DARK 5408757812500 460000 5

A forma mais simples de o ler diretamente eacute definir uma estrutura para receber cada linha e um array destas estruturas para receber todo o arquivo Ex (IDL)

IDLgt record=namecalmpos0filnameechlpos0d0disppos0d0targnameposdirclassmjd_obsitime0d0coadds0IDLgt nlines=file_lines(filesearch_scamtxt)IDLgt mydata=replicate(recordnlines-1)IDLgt header=

Depois de definidas as variaacuteveis que vatildeo receber os dados o arquivo pode ser lido

IDLgt openrunitfilesearch_scamtxtget_lunIDLgt readfunitheaderIDLgt readfunitmydataformat=(A14I8A15F104F104A18A19A15F158F105I15)IDLgt free_lununit

A gravaccedilatildeo de um arquivo texto poderia ser feita de forma semelhante apenas trocando openr por openw (abrir o arquivo para gravaccedilatildeo natildeo leitura) e readf por printf

O arquivo eacute aberto em uma unidade (unit) usada para especificar de onde eacute feita a leitura

Ao final o arquivo eacute fechado

8489

Arquivos - processamento em baixo niacutevel - texto

O que resulta em

IDLgt printheader NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS

IDLgt helpmydataMYDATA STRUCT = -gt ltAnonymousgt Array[4]

IDLgt helpmydata[0] Structure ltd5e38f68gt 11 tags length=136 data length=124 refs=3 NAME STRING dec18s0001 CALMPOS INT 0 FILNAME STRING NIRSPEC-5-AO ECHLPOS DOUBLE 62630000 DISPPOS DOUBLE 36450000 TARGNAME STRING HD85258 POSDIR STRING NIRSPEC-5-AOp1 CLASS STRING STAR MJD_OBS STRING 54087574 ITIME DOUBLE 10000000 COADDS INT 1

Este caso eacute mais complicado que os mais comuns por haver colunas de strings

Se todas fossem de nuacutemeros natildeo teria sido necessaacuterio especificar o formato explicitamente As colunas teriam sido adivinhadas pela biblioteca que lecirc o arquivo Poderia ter sido lido escrito soacute com um array de nuacutemeros sem estruturas

8589

Arquivos - processamento em baixo niacutevel - binaacuterio

Formatos binaacuterios podem ser definidos de qualquer forma O arquivo eacute apenas um conjunto de bytes Cabe ao software saber como os interpretar

Uma escolha comum para que sejam autodocumentados eacute incluir um cabeccedilalho de texto informando as caracteriacutesticas dos dados necessaacuterias para os ler

Ex (IDL) criar um arquivo que armazene um array de doubles com um cabeccedilalho informando as dimensotildees para que o programa que o lecirc saiba como ler os dados

Inventa dados e abre o arquivo

IDLgt data_to_write=dindgen(34)IDLgt openwunitbinary_exampledatget_lun

Escreve as dimensotildees como texto

IDLgt printfunitdimensions of the double array stored belowIDLgt printfunitsize(data_to_writedimensions)

Escreve os dados binaacuterios

IDLgt writeuunitdata_to_write

Fecha o arquivo

IDLgt free_lununit

Escreve em binaacuterio (write unformatted)

8689

Arquivos - processamento em baixo niacutevel - binaacuterio

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

dimensions of the double array stored below 3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

8789

Arquivos - processamento em baixo niacutevel - binaacuterioA leitura deste arquivo eacute igualmente simples

IDLgt header=IDLgt dims=[00]IDLgt openrunitbinary_exampledatget_lun

Lecirc as dimensotildees (armazenadas como texto)

IDLgt readfunitheaderIDLgt readfunitdims

Lecirc a parte binaacuteria depois de saber as dimensotildees

IDLgt data_read=dblarr(dims)IDLgt readuunitdata_read

Fecha o arquivo

IDLgt free_lununit

Verifica que os dados foram gravados e lidos corretamente

IDLgt printarray_equal(data_to_writedata_read) 1

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Lecirc dados binaacuterios (read unformatted)

8889

Sumaacuterio

5 ndash Slides em httpwwwppenteadonetpeapea04_strings_iopdf Strings Expressotildees regulares Arquivos

httpwwwppenteadonetpea

8989

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89

Arquivos - texto - XML

Extensible Markup Language

Admite grande flexibilidade e por isso pode ter alta complexidade

Valores satildeo colocados dentro de uma estrutura em hieraacuterquica (em uma aacutervore) com os noacutes identificados pelos seus nomes (chaves)

Largamente usado em muitas aacutereas para armazenar conjuntos arbitraacuterios de quaisquer estruturas de dados

A maioria das aplicaccedilotildees usa um formato que eacute um subconjunto do XML especificado por um Schema comumente em um arquivo XML DTD (Document Type Definition)

6589

Arquivos - texto ndash XML ndash exemplos de usos

Armazenamento de dados de aplicaccedilotildees web (comum para exportar importar dados MediaWiki DokuWiki WordPress ADS Lattes etc)

Documentos Office (docx pptx xlsx) OpenOffice (odt opd ods)

Como versotildees de outros formatos FITSML XDF

ldquoScientific Dataset XML NASAs Astronomical Data Center (ADC) sponsors a number of research projects that

use XML for scientific data representation The XML activities at the ADC are sponsored and supported by the NASA Office of Space Science Applied Information Systems Research Program (AISRP)rdquo - httpxmlcoverpagesorgnasa-adchtml

Astronomical Instrument Markup Language (AIML)

SVG ndash Scalable Vector Graphics

Muitas de outras aplicaccedilotildees listadas em httpxmlcoverpagesorgxmlhtmlapplications

6689

Arquivos - texto ndash XML - exemploltxml version=10 gtltDOCTYPE Xdmf SYSTEM Xdmfdtd []gtltXdmf xmlnsxi=httpwwww3org2001XInclude Version=20gt ltDomaingt lt-- Example of Basic Topologies --gt ltInformation Name=Descriptiongt Example of a Polyvertex Topology ltInformationgt ltGrid Name=Polyvertex GridType=Uniformgt ltTopology TopologyType=Polyvertex Dimensions=3 NodesPerElement=3gt ltDataItem Format=XML Dimensions=3 3 NumberType=Floatgt 0 1 2 4 5 6 8 9 10 ltDataItemgt ltTopologygt ltGeometry Type=XYZgt ltDataItem Format=XML Dimensions=4 4 3gt 00 00 00 10 00 00()Que mostra que a interpretaccedilatildeo (parsing) de XML eacute em geral complexa

6789

Arquivos - texto - XML

Haacute muitas bibliotecas de alto niacutevel para fazer o processamento (parsing) e entregar os dados em uma estrutura conveniente

A complexidade em processar XML estaacute em decidir o que fazer com os dados jaacute que os arquivos podem ser muito complexos

As APIs (Application Programming Interfaces) mais comuns para processar XML que satildeo implementadas em muitas linguagens

DOM (Document Object Model) ndash manteacutem todo o conteuacutedo do em uma estrutura de dados (em geral uma aacutervore) em uma variaacutevel (em geral um objeto) Esta pode ser consultada para obter os valores de interesse para os alterar e usada para escrever um arquivo

SAX (Simple API for XML) ndash Interpretador (parser) por objetos O usuaacuterio escreve uma classe herdando da classe SAX provendo os meacutetodos que vatildeo processar os campos agrave medida em que estes satildeo lidos

6889

Arquivos - binaacuterios - FITSFlexible Image Transport System

O formato mais comum para observaccedilotildees astronocircmicas Tambeacutem usado para armazenar quaisquer dados mesmo natildeo relacionados a observaccedilotildees (especialmente tabelas como eacute praacutetica do STSCI)

Conteacutem um (ou mais) cabeccedilalho(s) de texto com metadados (informaccedilotildees sobre os dados como caracteriacutesticas (necessaacuterias para os ler) origem condiccedilotildees em que foram obtidos processamento realizado etc)

SIMPLE = T image conforms to FITS standard BITPIX = 32 bits per data value NAXIS = 2 number of axes NAXIS1 = 1024 NAXIS2 = 1024 BSCALE = 100000 Scaling factor BZERO = 000000 Scaling zero-point TELESCOP= Keck II Telescope SLITNAME= 0041x226 Slit Name SLITPA = 351979 Slit position angle SLITX = 131500 X pixel of the center of the slit LST = 12010446 local apparent sidereal time (()

Depois do cabeccedilalho haacute uma (ou mais) seccedilatildeo(otildees) de dados binaacuterios Costuma(m) ser array(s) 1D (espectros) 2D (imagens) ou 3D (ldquocubos de dadosrdquo)

De inteiros ou reais inteiros satildeo comuns em contagens de instrumentos reais para valores derivados (fluxos intensidades etc)

6989

Arquivos - binaacuterios - FITSNormalmente FITS satildeo lidos escritos por bibliotecas prontas de (relativamente) alto niacutevel usuaacuterio natildeo tem que saber como os dados satildeo armazenados no arquivo nem como os ler escrever Ex (IDL com a biblioteca idlastro)

IDLgt fits_info2dspectrumfits2dspectrumfits has 3 extensionsPrimary header 288 recordsNo dataExtension 1 -- SCI Header 144 records IMAGE ( 1201 1201 )Extension 2 -- ERR Header 72 records IMAGE ( 1201 1201 )Extension 3 -- DQ Header 72 records IMAGE ( 1201 1201 )

IDLgt mydata=readfits(2dspectrumfitsexten_no=1myheader) READFITS Reading FITS extension of type IMAGE READFITS Now reading 1201 by 1201 array

IDLgt extastmyheadermyastIDLgt sz=size(mydatadimensions)IDLgt xy2ad[1sz[0]][1sz[1]]myastcorners_acorners_dIDLgt printcorners_aCorners of the data array from file 2dspectrumfits are at 14487480 33063480

IDLgt printcorners_d -00041264444 00041402222

Obteacutem os dados de coordenadas (WCS) do header

Coloca os dados no array (2D de floats) mydata e o header no array (1D de strings) myheader

Calcula as coordenadas das quinas da imagem atraveacutes do WCS

Provecirc informaccedilotildees sobre o arquivo

7089

Arquivos - binaacuterios - ISIS Cube

Formatos como FITS se adequam muito a ter uma interface de mais alto niacutevel por objetos

Tambeacutem para dados em tabelas FITS muito mais trabalhosos de ler em baixo niacutevel que se adequam muito mais a mapas ou estruturas

Exemplo (de um formato semelhante a FITS ISIS cube)

O objeto ao ser criado lecirc todo o arquivo

cube=pp_editablecube(CM_1553510065_1_ircub)

Meacutetodos fornecem os dados desejados para obter quando necessaacuterio os dados de interesse

Find out the names of the backplanesprintcubegetproperty(backnames)Get the start time of the cubeprintcubegetfromheader(START_TIME)2007-084T100057286Z

Valores no cabeccedilalho podem ser convenientemente fornecidos como um mapa

header=cubeheader_as_hash()printheader[START_TIME]2007-084T100057286Z

7189

Arquivos - binaacuterios ndash ISIS Cube

Os dados satildeo fornecidos como arraysMake a contour plot of the latitudesc=contour(cubegetsuffixbyname(LATITUDE))Get the band with wavelength nearest to 21 (in the units used in the cube)selband=cubegetbandbywavelength(21wavelengths=selwavs)

Interfaces por overload tornam o acesso ainda mais conveniente

selband=cube[21]

selwavs=cube[21]

Retorna um array com a banda de comprimento de onda mais proacuteximo de 21 (microm)

Retorna o comprimento de onda mais proacuteximo de 21 (microm) da banda retornada acima

7289

Arquivos - binaacuterios ndash ISIS Cube Alteraccedilotildees feitas ao conteuacutedo satildeo automaticamente refletidas em todos os

lugares (cabeccedilalho em particular) afetados mantendo o objeto vaacutelido que pode depois ser gravado em um novo arquivo

IDLgt printcubelinescubesamplescubebands 64 64 256

IDLgt helpcubecoreltExpressiongt FLOAT = Array[64 64 256]

IDLgt cubecore=dblarr(100100256)

A linha acima natildeo eacute uma atribuiccedilatildeo eacute uma invocaccedilatildeo de meacutetodo Eacute equivalente acubesetpropertycore=dblarr(100100256)

Eacute o trabalho da funccedilatildeo setproperty decidir se a propriedade passada (core) faz sentido e se fizer fazer todo o trabalho necessaacuterio a esta mudanccedila Para o usuaacuterio eacute tudo automaacutetico e os dados da classe satildeo vaacutelidos o tempo todo

IDLgt helpcubecoreltExpressiongt DOUBLE = Array[100 100 256]

IDLgt printcubelinescubesamplescubebands 100 100 256

IDLgt cubesaveCM_1553510065_1_ir_editedcub

7389

Arquivos - binaacuterios ndash NetCDF e HDF5

Network Common Data Form e Hierarchical Data Format

Os dois uacutenicos formatos bem estabelecidos para dados cientiacuteficos geneacutericos

Armazenam dados como vaacuterias variaacuteveis e seus metadados Para cada variaacutevel haacute (ou pode haver) os metadados

Nome Dimensotildees (do array) Unidades Comentaacuterios

Ambos permitem arrays multidimensionais

Apenas HDF5 permite estruturas (daiacute vem a hierarquia)

Autodocumentados qualquer software que saiba ler um destes formatos lecirc qualquer arquivo sem precisar de conhecimento preacutevio sobre como o arquivo foi gerado

Muito bem suportados em bibliotecas padratildeo e natildeo padratildeo em softwares interativos e visualizadores (inclusive plugins para navegadores)

httpwwwunidataucaredusoftwarenetcdf httpenwikipediaorgwikiHdf5

NetCDF eacute mais simples de usar por natildeo ter hierarquia dando menos trabalho para ler e escrever dados Se hierarquia natildeo eacute necessaacuteria eacute mais conveniente de usar que HDF5

7489

Arquivos - binaacuterios - NetCDF e HDF5Haacute tambeacutem o formato CDL uma versatildeo ASCII do NetCDF A biblioteca padratildeo do NetCDF inclui conversores entre estes formatos

$ ncdump -h refspec_g01_0ncnetcdf refspec_g01_0 dimensions nlay = 51 nwn = 400 nleg = 33 numu = 2 nlev = 52 nphi = 3 ngas = 2 nwnc = 1 scal = 1 v3 = 3 dnl = 1 nk = 1 tdisr = UNLIMITED (0 currently) na = 16

variables float alb(nwn) float z(nlay) float t(nlay) float p(nlay) float wl(nwn) float iof(nwn) float mtau(nwn) float htau(nwn) float hctaus(nwn) float gtau(nwn) float outcos(scal) float phi(nleg) float phic(scal) float umu(numu) float flux(v3 nwn nlev) float mix(nlay ngas) float c(nlay) float psat(nlay) float ga(nwnc) float wlc(nwnc) float inc(scal) int dm(scal) int ord(scal) float fbeam(scal) float wn(nwn) float tautot(nwn nlay) float htaus(nwn nlay) float htaux(nwn nlay) float taug(nwn nlay) float phase(nwn nlay nleg) float ssa(nwn nlay) float uu(nwn nphi nlev numu) float u0u(nwn nlev numu) float tray(nwn nlay) float gtauo(tdisr nwn nlay)

Haacute 14 variaacuteveis usadas como dimensotildees para as 35 variaacuteveis que satildeo arrays

Ex alb(nwn) indica que alb eacute um array 1D de nwn elementos

nwn estaacute armazenado como uma das dimensotildees e eacute 400 portanto alb tem 400 elementos

Parte do conteuacutedo de um arquivo NetCDF em formato CDL (gerado pelo programa ncdump)

7589

Arquivos - binaacuterios - NetCDF e HDF5Conteuacutedo daquele arquivo visualizado com o ncview (acompanha a biblioteca NetCDF padratildeo)

7689

Arquivos - binaacuterios - NetCDF e HDF5O conteuacutedo de todo o arquivo pode ser lido facilmente com as bibliotecas disponiacuteveis e armazenado em contecirciners convenientes Usando um objeto que gera um resultado um pouco mais conveniente

IDLgt h=pp_readncdf(refspec_g01_0nchash)IDLgt printhvar_dims ltObjHeapVar229(HASH)gtvars ltObjHeapVar152(HASH)gtdims ltObjHeapVar118(HASH)gt

IDLgt printh[vars]T 173203 175459 175848 176001 175975 Z 431869 418858 406067 393403 380464 FLUX 300660 145536 0705180 0341669 0165532 PHASE 100000 0779034 0660858 0542052 0449983 TAUTOT0694377 0693420 0693474 0693540 0693636()

IDLgt help(h[vars])[TAUTOT]ltExpressiongt FLOAT = Array[51 400]

IDLgt print(h[var_dims])[TAUTOT]NLAY NWN

IDLgt print(h[dims])[(h[var_dims])[TAUTOT]]NLAY 51NWN 400

7789

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5)

Visualizaccedilatildeo da variaacutevel selecionada

Metadados e alguns valores da variaacutevel selecionada

Variaacutevel a ser criada com o conteuacutedo desta variaacutevel do arquivo

Hierarquia das variaacuteveis do arquivo

7889

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5) Imported variable az

IDLgt helpaz Structure ltd5723f38gt 13 tags length=448 data length=444 refs=1 _NAME STRING az _ICONTYPE STRING binary _TYPE STRING DATASET _FILE STRING INTENSI_test_409OUTh5 _PATH STRING _DATA DOUBLE Array[38] _NDIMENSIONS LONG 1 _DIMENSIONS ULONG64 Array[1] _NELEMENTS ULONG64 38 _DATATYPE STRING H5T_FLOAT _STORAGESIZE ULONG 8 _PRECISION LONG 64 _SIGN STRING

IDLgt printaz_data 00000000 10000000 20000000 30000000 40000000 50000000 60000000 80000000 ()

7989

Arquivos - binaacuterios - imagens

JPEG JPEG200 TIFF GeoTIFF etc

Os formatos comuns de imagens satildeo bem suportados em muacuteltiplas plataformas para uso dentro de programas e interativamente

Alguns formatos tecircm opccedilatildeo de compressatildeo com perda eou sem perda

Armazenam imagens como arrays 2D ou 3D (3D frequumlentemente limitado a 3 ou 4 em uma das dimensotildees uma imagem em 3 ou 4 bandas) de inteiros ou (em alguns formatos) reais

Alguns formatos permitem armazenar metadados para caracterizar as imagens armazenadas

JPEG2000 e GeoTIFF (um subconjunto de TIFF) comuns em astronomia e aacutereas proacuteximas

8089

Arquivos - binaacuterios ndash imagens ndash exemplo (IDL)IDLgt printquery_tiff(issmap_2009tiffinfogeotiff=geo) 1

IDLgt helpinfo Structure ltd4eca4b8gt 18 tags length=144 data length=132 refs=1 CHANNELS LONG 4 DIMENSIONS LONG Array[2] IMAGE_INDEX LONG 0 NUM_IMAGES LONG 1 PIXEL_TYPE INT 1 TYPE STRING TIFF BITS_PER_SAMPLE LONG 8 POSITION FLOAT Array[2] RESOLUTION FLOAT Array[2] UNITS LONG 2 TILE_SIZE LONG Array[2] DESCRIPTION STRING ISS (2009) DATE_TIME STRING 20100218 012436()

IDLgt helpgeo Structure ltd4efa1b8gt 10 tags length=264 data length=262 refs=1 MODELPIXELSCALETAG DOUBLE Array[3] MODELTIEPOINTTAG DOUBLE Array[6 4] GEOGRAPHICTYPEGEOKEY INT 4035 GEOGSEMIMAJORAXISGEOKEY DOUBLE 25750000 GEOGSEMIMINORAXISGEOKEY DOUBLE 25750000()

IDLgt myimage=read_tiff(issmap_2009tiff) Lecirc a imagem para o array myimage

Obteacutem informaccedilotildees sobre o arquivo

8189

Arquivos - binaacuterios ndash formatos nativosLinguagens como IDL R Python Java tecircm seu formato nativo binaacuterio acessado em alto niacutevel Basta mandar salvar ler variaacuteveis no do arquivo a biblioteca padratildeo automagicamente faz todo o trabalho de decidir como gravar ler os dados

Conveniente de usar na proacutepria linguagem Mas raramente existem bibliotecas para ler gravar o formato nativo de uma linguagem a partir de outra Ex (IDL)

IDLgt savefile=2dspectrumsavmydatamyheadercorners_dcorners_averbosecompress SAVE Portable (XDR) compressed SAVERESTORE file SAVE Saved variable MYDATA SAVE Saved variable MYHEADER()

Pode ser lido com apenas (haacute formas mais elaboradas)

IDLgt restore2dspectrumsavverbose RESTORE Portable (XDR) compressed SAVERESTORE file RESTORE Save file written by ltunknowngtltunknowngt Thu Jan 27 191422 2011 RESTORE IDL version 801 (linux x86_64) RESTORE Restored variable MYDATA RESTORE Restored variable MYHEADER()

IDLgt helpmydatamyheadercorners_dcorners_aMYDATA FLOAT = Array[1201 1201]MYHEADER STRING = Array[144]()

8289

Arquivos - processamento em baixo niacutevel

Nem sempre um formato padratildeo eacute a melhor escolha para o problema

Nem sempre haacute escolha (pode-se ter que trabalhar com arquivos que jaacute foram escritos em algum formato proprietaacuterio)

Agraves vezes o formato eacute padratildeo mas natildeo haacute bom suporte a ele disponiacutevel

Em todos estes casos eacute necessaacuterio escrever rotinas em baixo niacutevel que vatildeo ler processar diretamente o conteuacutedo do arquivo

Preferencialmente criando interfaces de alto niacutevel para o programa que vai as usar

8389

Arquivos - processamento em baixo niacutevel - texto

Tomando o exemplo anterior onde as colunas eram de diferentes tipos

NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS dec18s0001 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0002 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0003 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 FLAT 5408757812500 460000 5 dec18s0004 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 DARK 5408757812500 460000 5

A forma mais simples de o ler diretamente eacute definir uma estrutura para receber cada linha e um array destas estruturas para receber todo o arquivo Ex (IDL)

IDLgt record=namecalmpos0filnameechlpos0d0disppos0d0targnameposdirclassmjd_obsitime0d0coadds0IDLgt nlines=file_lines(filesearch_scamtxt)IDLgt mydata=replicate(recordnlines-1)IDLgt header=

Depois de definidas as variaacuteveis que vatildeo receber os dados o arquivo pode ser lido

IDLgt openrunitfilesearch_scamtxtget_lunIDLgt readfunitheaderIDLgt readfunitmydataformat=(A14I8A15F104F104A18A19A15F158F105I15)IDLgt free_lununit

A gravaccedilatildeo de um arquivo texto poderia ser feita de forma semelhante apenas trocando openr por openw (abrir o arquivo para gravaccedilatildeo natildeo leitura) e readf por printf

O arquivo eacute aberto em uma unidade (unit) usada para especificar de onde eacute feita a leitura

Ao final o arquivo eacute fechado

8489

Arquivos - processamento em baixo niacutevel - texto

O que resulta em

IDLgt printheader NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS

IDLgt helpmydataMYDATA STRUCT = -gt ltAnonymousgt Array[4]

IDLgt helpmydata[0] Structure ltd5e38f68gt 11 tags length=136 data length=124 refs=3 NAME STRING dec18s0001 CALMPOS INT 0 FILNAME STRING NIRSPEC-5-AO ECHLPOS DOUBLE 62630000 DISPPOS DOUBLE 36450000 TARGNAME STRING HD85258 POSDIR STRING NIRSPEC-5-AOp1 CLASS STRING STAR MJD_OBS STRING 54087574 ITIME DOUBLE 10000000 COADDS INT 1

Este caso eacute mais complicado que os mais comuns por haver colunas de strings

Se todas fossem de nuacutemeros natildeo teria sido necessaacuterio especificar o formato explicitamente As colunas teriam sido adivinhadas pela biblioteca que lecirc o arquivo Poderia ter sido lido escrito soacute com um array de nuacutemeros sem estruturas

8589

Arquivos - processamento em baixo niacutevel - binaacuterio

Formatos binaacuterios podem ser definidos de qualquer forma O arquivo eacute apenas um conjunto de bytes Cabe ao software saber como os interpretar

Uma escolha comum para que sejam autodocumentados eacute incluir um cabeccedilalho de texto informando as caracteriacutesticas dos dados necessaacuterias para os ler

Ex (IDL) criar um arquivo que armazene um array de doubles com um cabeccedilalho informando as dimensotildees para que o programa que o lecirc saiba como ler os dados

Inventa dados e abre o arquivo

IDLgt data_to_write=dindgen(34)IDLgt openwunitbinary_exampledatget_lun

Escreve as dimensotildees como texto

IDLgt printfunitdimensions of the double array stored belowIDLgt printfunitsize(data_to_writedimensions)

Escreve os dados binaacuterios

IDLgt writeuunitdata_to_write

Fecha o arquivo

IDLgt free_lununit

Escreve em binaacuterio (write unformatted)

8689

Arquivos - processamento em baixo niacutevel - binaacuterio

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

dimensions of the double array stored below 3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

8789

Arquivos - processamento em baixo niacutevel - binaacuterioA leitura deste arquivo eacute igualmente simples

IDLgt header=IDLgt dims=[00]IDLgt openrunitbinary_exampledatget_lun

Lecirc as dimensotildees (armazenadas como texto)

IDLgt readfunitheaderIDLgt readfunitdims

Lecirc a parte binaacuteria depois de saber as dimensotildees

IDLgt data_read=dblarr(dims)IDLgt readuunitdata_read

Fecha o arquivo

IDLgt free_lununit

Verifica que os dados foram gravados e lidos corretamente

IDLgt printarray_equal(data_to_writedata_read) 1

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Lecirc dados binaacuterios (read unformatted)

8889

Sumaacuterio

5 ndash Slides em httpwwwppenteadonetpeapea04_strings_iopdf Strings Expressotildees regulares Arquivos

httpwwwppenteadonetpea

8989

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89

Arquivos - texto ndash XML ndash exemplos de usos

Armazenamento de dados de aplicaccedilotildees web (comum para exportar importar dados MediaWiki DokuWiki WordPress ADS Lattes etc)

Documentos Office (docx pptx xlsx) OpenOffice (odt opd ods)

Como versotildees de outros formatos FITSML XDF

ldquoScientific Dataset XML NASAs Astronomical Data Center (ADC) sponsors a number of research projects that

use XML for scientific data representation The XML activities at the ADC are sponsored and supported by the NASA Office of Space Science Applied Information Systems Research Program (AISRP)rdquo - httpxmlcoverpagesorgnasa-adchtml

Astronomical Instrument Markup Language (AIML)

SVG ndash Scalable Vector Graphics

Muitas de outras aplicaccedilotildees listadas em httpxmlcoverpagesorgxmlhtmlapplications

6689

Arquivos - texto ndash XML - exemploltxml version=10 gtltDOCTYPE Xdmf SYSTEM Xdmfdtd []gtltXdmf xmlnsxi=httpwwww3org2001XInclude Version=20gt ltDomaingt lt-- Example of Basic Topologies --gt ltInformation Name=Descriptiongt Example of a Polyvertex Topology ltInformationgt ltGrid Name=Polyvertex GridType=Uniformgt ltTopology TopologyType=Polyvertex Dimensions=3 NodesPerElement=3gt ltDataItem Format=XML Dimensions=3 3 NumberType=Floatgt 0 1 2 4 5 6 8 9 10 ltDataItemgt ltTopologygt ltGeometry Type=XYZgt ltDataItem Format=XML Dimensions=4 4 3gt 00 00 00 10 00 00()Que mostra que a interpretaccedilatildeo (parsing) de XML eacute em geral complexa

6789

Arquivos - texto - XML

Haacute muitas bibliotecas de alto niacutevel para fazer o processamento (parsing) e entregar os dados em uma estrutura conveniente

A complexidade em processar XML estaacute em decidir o que fazer com os dados jaacute que os arquivos podem ser muito complexos

As APIs (Application Programming Interfaces) mais comuns para processar XML que satildeo implementadas em muitas linguagens

DOM (Document Object Model) ndash manteacutem todo o conteuacutedo do em uma estrutura de dados (em geral uma aacutervore) em uma variaacutevel (em geral um objeto) Esta pode ser consultada para obter os valores de interesse para os alterar e usada para escrever um arquivo

SAX (Simple API for XML) ndash Interpretador (parser) por objetos O usuaacuterio escreve uma classe herdando da classe SAX provendo os meacutetodos que vatildeo processar os campos agrave medida em que estes satildeo lidos

6889

Arquivos - binaacuterios - FITSFlexible Image Transport System

O formato mais comum para observaccedilotildees astronocircmicas Tambeacutem usado para armazenar quaisquer dados mesmo natildeo relacionados a observaccedilotildees (especialmente tabelas como eacute praacutetica do STSCI)

Conteacutem um (ou mais) cabeccedilalho(s) de texto com metadados (informaccedilotildees sobre os dados como caracteriacutesticas (necessaacuterias para os ler) origem condiccedilotildees em que foram obtidos processamento realizado etc)

SIMPLE = T image conforms to FITS standard BITPIX = 32 bits per data value NAXIS = 2 number of axes NAXIS1 = 1024 NAXIS2 = 1024 BSCALE = 100000 Scaling factor BZERO = 000000 Scaling zero-point TELESCOP= Keck II Telescope SLITNAME= 0041x226 Slit Name SLITPA = 351979 Slit position angle SLITX = 131500 X pixel of the center of the slit LST = 12010446 local apparent sidereal time (()

Depois do cabeccedilalho haacute uma (ou mais) seccedilatildeo(otildees) de dados binaacuterios Costuma(m) ser array(s) 1D (espectros) 2D (imagens) ou 3D (ldquocubos de dadosrdquo)

De inteiros ou reais inteiros satildeo comuns em contagens de instrumentos reais para valores derivados (fluxos intensidades etc)

6989

Arquivos - binaacuterios - FITSNormalmente FITS satildeo lidos escritos por bibliotecas prontas de (relativamente) alto niacutevel usuaacuterio natildeo tem que saber como os dados satildeo armazenados no arquivo nem como os ler escrever Ex (IDL com a biblioteca idlastro)

IDLgt fits_info2dspectrumfits2dspectrumfits has 3 extensionsPrimary header 288 recordsNo dataExtension 1 -- SCI Header 144 records IMAGE ( 1201 1201 )Extension 2 -- ERR Header 72 records IMAGE ( 1201 1201 )Extension 3 -- DQ Header 72 records IMAGE ( 1201 1201 )

IDLgt mydata=readfits(2dspectrumfitsexten_no=1myheader) READFITS Reading FITS extension of type IMAGE READFITS Now reading 1201 by 1201 array

IDLgt extastmyheadermyastIDLgt sz=size(mydatadimensions)IDLgt xy2ad[1sz[0]][1sz[1]]myastcorners_acorners_dIDLgt printcorners_aCorners of the data array from file 2dspectrumfits are at 14487480 33063480

IDLgt printcorners_d -00041264444 00041402222

Obteacutem os dados de coordenadas (WCS) do header

Coloca os dados no array (2D de floats) mydata e o header no array (1D de strings) myheader

Calcula as coordenadas das quinas da imagem atraveacutes do WCS

Provecirc informaccedilotildees sobre o arquivo

7089

Arquivos - binaacuterios - ISIS Cube

Formatos como FITS se adequam muito a ter uma interface de mais alto niacutevel por objetos

Tambeacutem para dados em tabelas FITS muito mais trabalhosos de ler em baixo niacutevel que se adequam muito mais a mapas ou estruturas

Exemplo (de um formato semelhante a FITS ISIS cube)

O objeto ao ser criado lecirc todo o arquivo

cube=pp_editablecube(CM_1553510065_1_ircub)

Meacutetodos fornecem os dados desejados para obter quando necessaacuterio os dados de interesse

Find out the names of the backplanesprintcubegetproperty(backnames)Get the start time of the cubeprintcubegetfromheader(START_TIME)2007-084T100057286Z

Valores no cabeccedilalho podem ser convenientemente fornecidos como um mapa

header=cubeheader_as_hash()printheader[START_TIME]2007-084T100057286Z

7189

Arquivos - binaacuterios ndash ISIS Cube

Os dados satildeo fornecidos como arraysMake a contour plot of the latitudesc=contour(cubegetsuffixbyname(LATITUDE))Get the band with wavelength nearest to 21 (in the units used in the cube)selband=cubegetbandbywavelength(21wavelengths=selwavs)

Interfaces por overload tornam o acesso ainda mais conveniente

selband=cube[21]

selwavs=cube[21]

Retorna um array com a banda de comprimento de onda mais proacuteximo de 21 (microm)

Retorna o comprimento de onda mais proacuteximo de 21 (microm) da banda retornada acima

7289

Arquivos - binaacuterios ndash ISIS Cube Alteraccedilotildees feitas ao conteuacutedo satildeo automaticamente refletidas em todos os

lugares (cabeccedilalho em particular) afetados mantendo o objeto vaacutelido que pode depois ser gravado em um novo arquivo

IDLgt printcubelinescubesamplescubebands 64 64 256

IDLgt helpcubecoreltExpressiongt FLOAT = Array[64 64 256]

IDLgt cubecore=dblarr(100100256)

A linha acima natildeo eacute uma atribuiccedilatildeo eacute uma invocaccedilatildeo de meacutetodo Eacute equivalente acubesetpropertycore=dblarr(100100256)

Eacute o trabalho da funccedilatildeo setproperty decidir se a propriedade passada (core) faz sentido e se fizer fazer todo o trabalho necessaacuterio a esta mudanccedila Para o usuaacuterio eacute tudo automaacutetico e os dados da classe satildeo vaacutelidos o tempo todo

IDLgt helpcubecoreltExpressiongt DOUBLE = Array[100 100 256]

IDLgt printcubelinescubesamplescubebands 100 100 256

IDLgt cubesaveCM_1553510065_1_ir_editedcub

7389

Arquivos - binaacuterios ndash NetCDF e HDF5

Network Common Data Form e Hierarchical Data Format

Os dois uacutenicos formatos bem estabelecidos para dados cientiacuteficos geneacutericos

Armazenam dados como vaacuterias variaacuteveis e seus metadados Para cada variaacutevel haacute (ou pode haver) os metadados

Nome Dimensotildees (do array) Unidades Comentaacuterios

Ambos permitem arrays multidimensionais

Apenas HDF5 permite estruturas (daiacute vem a hierarquia)

Autodocumentados qualquer software que saiba ler um destes formatos lecirc qualquer arquivo sem precisar de conhecimento preacutevio sobre como o arquivo foi gerado

Muito bem suportados em bibliotecas padratildeo e natildeo padratildeo em softwares interativos e visualizadores (inclusive plugins para navegadores)

httpwwwunidataucaredusoftwarenetcdf httpenwikipediaorgwikiHdf5

NetCDF eacute mais simples de usar por natildeo ter hierarquia dando menos trabalho para ler e escrever dados Se hierarquia natildeo eacute necessaacuteria eacute mais conveniente de usar que HDF5

7489

Arquivos - binaacuterios - NetCDF e HDF5Haacute tambeacutem o formato CDL uma versatildeo ASCII do NetCDF A biblioteca padratildeo do NetCDF inclui conversores entre estes formatos

$ ncdump -h refspec_g01_0ncnetcdf refspec_g01_0 dimensions nlay = 51 nwn = 400 nleg = 33 numu = 2 nlev = 52 nphi = 3 ngas = 2 nwnc = 1 scal = 1 v3 = 3 dnl = 1 nk = 1 tdisr = UNLIMITED (0 currently) na = 16

variables float alb(nwn) float z(nlay) float t(nlay) float p(nlay) float wl(nwn) float iof(nwn) float mtau(nwn) float htau(nwn) float hctaus(nwn) float gtau(nwn) float outcos(scal) float phi(nleg) float phic(scal) float umu(numu) float flux(v3 nwn nlev) float mix(nlay ngas) float c(nlay) float psat(nlay) float ga(nwnc) float wlc(nwnc) float inc(scal) int dm(scal) int ord(scal) float fbeam(scal) float wn(nwn) float tautot(nwn nlay) float htaus(nwn nlay) float htaux(nwn nlay) float taug(nwn nlay) float phase(nwn nlay nleg) float ssa(nwn nlay) float uu(nwn nphi nlev numu) float u0u(nwn nlev numu) float tray(nwn nlay) float gtauo(tdisr nwn nlay)

Haacute 14 variaacuteveis usadas como dimensotildees para as 35 variaacuteveis que satildeo arrays

Ex alb(nwn) indica que alb eacute um array 1D de nwn elementos

nwn estaacute armazenado como uma das dimensotildees e eacute 400 portanto alb tem 400 elementos

Parte do conteuacutedo de um arquivo NetCDF em formato CDL (gerado pelo programa ncdump)

7589

Arquivos - binaacuterios - NetCDF e HDF5Conteuacutedo daquele arquivo visualizado com o ncview (acompanha a biblioteca NetCDF padratildeo)

7689

Arquivos - binaacuterios - NetCDF e HDF5O conteuacutedo de todo o arquivo pode ser lido facilmente com as bibliotecas disponiacuteveis e armazenado em contecirciners convenientes Usando um objeto que gera um resultado um pouco mais conveniente

IDLgt h=pp_readncdf(refspec_g01_0nchash)IDLgt printhvar_dims ltObjHeapVar229(HASH)gtvars ltObjHeapVar152(HASH)gtdims ltObjHeapVar118(HASH)gt

IDLgt printh[vars]T 173203 175459 175848 176001 175975 Z 431869 418858 406067 393403 380464 FLUX 300660 145536 0705180 0341669 0165532 PHASE 100000 0779034 0660858 0542052 0449983 TAUTOT0694377 0693420 0693474 0693540 0693636()

IDLgt help(h[vars])[TAUTOT]ltExpressiongt FLOAT = Array[51 400]

IDLgt print(h[var_dims])[TAUTOT]NLAY NWN

IDLgt print(h[dims])[(h[var_dims])[TAUTOT]]NLAY 51NWN 400

7789

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5)

Visualizaccedilatildeo da variaacutevel selecionada

Metadados e alguns valores da variaacutevel selecionada

Variaacutevel a ser criada com o conteuacutedo desta variaacutevel do arquivo

Hierarquia das variaacuteveis do arquivo

7889

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5) Imported variable az

IDLgt helpaz Structure ltd5723f38gt 13 tags length=448 data length=444 refs=1 _NAME STRING az _ICONTYPE STRING binary _TYPE STRING DATASET _FILE STRING INTENSI_test_409OUTh5 _PATH STRING _DATA DOUBLE Array[38] _NDIMENSIONS LONG 1 _DIMENSIONS ULONG64 Array[1] _NELEMENTS ULONG64 38 _DATATYPE STRING H5T_FLOAT _STORAGESIZE ULONG 8 _PRECISION LONG 64 _SIGN STRING

IDLgt printaz_data 00000000 10000000 20000000 30000000 40000000 50000000 60000000 80000000 ()

7989

Arquivos - binaacuterios - imagens

JPEG JPEG200 TIFF GeoTIFF etc

Os formatos comuns de imagens satildeo bem suportados em muacuteltiplas plataformas para uso dentro de programas e interativamente

Alguns formatos tecircm opccedilatildeo de compressatildeo com perda eou sem perda

Armazenam imagens como arrays 2D ou 3D (3D frequumlentemente limitado a 3 ou 4 em uma das dimensotildees uma imagem em 3 ou 4 bandas) de inteiros ou (em alguns formatos) reais

Alguns formatos permitem armazenar metadados para caracterizar as imagens armazenadas

JPEG2000 e GeoTIFF (um subconjunto de TIFF) comuns em astronomia e aacutereas proacuteximas

8089

Arquivos - binaacuterios ndash imagens ndash exemplo (IDL)IDLgt printquery_tiff(issmap_2009tiffinfogeotiff=geo) 1

IDLgt helpinfo Structure ltd4eca4b8gt 18 tags length=144 data length=132 refs=1 CHANNELS LONG 4 DIMENSIONS LONG Array[2] IMAGE_INDEX LONG 0 NUM_IMAGES LONG 1 PIXEL_TYPE INT 1 TYPE STRING TIFF BITS_PER_SAMPLE LONG 8 POSITION FLOAT Array[2] RESOLUTION FLOAT Array[2] UNITS LONG 2 TILE_SIZE LONG Array[2] DESCRIPTION STRING ISS (2009) DATE_TIME STRING 20100218 012436()

IDLgt helpgeo Structure ltd4efa1b8gt 10 tags length=264 data length=262 refs=1 MODELPIXELSCALETAG DOUBLE Array[3] MODELTIEPOINTTAG DOUBLE Array[6 4] GEOGRAPHICTYPEGEOKEY INT 4035 GEOGSEMIMAJORAXISGEOKEY DOUBLE 25750000 GEOGSEMIMINORAXISGEOKEY DOUBLE 25750000()

IDLgt myimage=read_tiff(issmap_2009tiff) Lecirc a imagem para o array myimage

Obteacutem informaccedilotildees sobre o arquivo

8189

Arquivos - binaacuterios ndash formatos nativosLinguagens como IDL R Python Java tecircm seu formato nativo binaacuterio acessado em alto niacutevel Basta mandar salvar ler variaacuteveis no do arquivo a biblioteca padratildeo automagicamente faz todo o trabalho de decidir como gravar ler os dados

Conveniente de usar na proacutepria linguagem Mas raramente existem bibliotecas para ler gravar o formato nativo de uma linguagem a partir de outra Ex (IDL)

IDLgt savefile=2dspectrumsavmydatamyheadercorners_dcorners_averbosecompress SAVE Portable (XDR) compressed SAVERESTORE file SAVE Saved variable MYDATA SAVE Saved variable MYHEADER()

Pode ser lido com apenas (haacute formas mais elaboradas)

IDLgt restore2dspectrumsavverbose RESTORE Portable (XDR) compressed SAVERESTORE file RESTORE Save file written by ltunknowngtltunknowngt Thu Jan 27 191422 2011 RESTORE IDL version 801 (linux x86_64) RESTORE Restored variable MYDATA RESTORE Restored variable MYHEADER()

IDLgt helpmydatamyheadercorners_dcorners_aMYDATA FLOAT = Array[1201 1201]MYHEADER STRING = Array[144]()

8289

Arquivos - processamento em baixo niacutevel

Nem sempre um formato padratildeo eacute a melhor escolha para o problema

Nem sempre haacute escolha (pode-se ter que trabalhar com arquivos que jaacute foram escritos em algum formato proprietaacuterio)

Agraves vezes o formato eacute padratildeo mas natildeo haacute bom suporte a ele disponiacutevel

Em todos estes casos eacute necessaacuterio escrever rotinas em baixo niacutevel que vatildeo ler processar diretamente o conteuacutedo do arquivo

Preferencialmente criando interfaces de alto niacutevel para o programa que vai as usar

8389

Arquivos - processamento em baixo niacutevel - texto

Tomando o exemplo anterior onde as colunas eram de diferentes tipos

NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS dec18s0001 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0002 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0003 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 FLAT 5408757812500 460000 5 dec18s0004 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 DARK 5408757812500 460000 5

A forma mais simples de o ler diretamente eacute definir uma estrutura para receber cada linha e um array destas estruturas para receber todo o arquivo Ex (IDL)

IDLgt record=namecalmpos0filnameechlpos0d0disppos0d0targnameposdirclassmjd_obsitime0d0coadds0IDLgt nlines=file_lines(filesearch_scamtxt)IDLgt mydata=replicate(recordnlines-1)IDLgt header=

Depois de definidas as variaacuteveis que vatildeo receber os dados o arquivo pode ser lido

IDLgt openrunitfilesearch_scamtxtget_lunIDLgt readfunitheaderIDLgt readfunitmydataformat=(A14I8A15F104F104A18A19A15F158F105I15)IDLgt free_lununit

A gravaccedilatildeo de um arquivo texto poderia ser feita de forma semelhante apenas trocando openr por openw (abrir o arquivo para gravaccedilatildeo natildeo leitura) e readf por printf

O arquivo eacute aberto em uma unidade (unit) usada para especificar de onde eacute feita a leitura

Ao final o arquivo eacute fechado

8489

Arquivos - processamento em baixo niacutevel - texto

O que resulta em

IDLgt printheader NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS

IDLgt helpmydataMYDATA STRUCT = -gt ltAnonymousgt Array[4]

IDLgt helpmydata[0] Structure ltd5e38f68gt 11 tags length=136 data length=124 refs=3 NAME STRING dec18s0001 CALMPOS INT 0 FILNAME STRING NIRSPEC-5-AO ECHLPOS DOUBLE 62630000 DISPPOS DOUBLE 36450000 TARGNAME STRING HD85258 POSDIR STRING NIRSPEC-5-AOp1 CLASS STRING STAR MJD_OBS STRING 54087574 ITIME DOUBLE 10000000 COADDS INT 1

Este caso eacute mais complicado que os mais comuns por haver colunas de strings

Se todas fossem de nuacutemeros natildeo teria sido necessaacuterio especificar o formato explicitamente As colunas teriam sido adivinhadas pela biblioteca que lecirc o arquivo Poderia ter sido lido escrito soacute com um array de nuacutemeros sem estruturas

8589

Arquivos - processamento em baixo niacutevel - binaacuterio

Formatos binaacuterios podem ser definidos de qualquer forma O arquivo eacute apenas um conjunto de bytes Cabe ao software saber como os interpretar

Uma escolha comum para que sejam autodocumentados eacute incluir um cabeccedilalho de texto informando as caracteriacutesticas dos dados necessaacuterias para os ler

Ex (IDL) criar um arquivo que armazene um array de doubles com um cabeccedilalho informando as dimensotildees para que o programa que o lecirc saiba como ler os dados

Inventa dados e abre o arquivo

IDLgt data_to_write=dindgen(34)IDLgt openwunitbinary_exampledatget_lun

Escreve as dimensotildees como texto

IDLgt printfunitdimensions of the double array stored belowIDLgt printfunitsize(data_to_writedimensions)

Escreve os dados binaacuterios

IDLgt writeuunitdata_to_write

Fecha o arquivo

IDLgt free_lununit

Escreve em binaacuterio (write unformatted)

8689

Arquivos - processamento em baixo niacutevel - binaacuterio

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

dimensions of the double array stored below 3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

8789

Arquivos - processamento em baixo niacutevel - binaacuterioA leitura deste arquivo eacute igualmente simples

IDLgt header=IDLgt dims=[00]IDLgt openrunitbinary_exampledatget_lun

Lecirc as dimensotildees (armazenadas como texto)

IDLgt readfunitheaderIDLgt readfunitdims

Lecirc a parte binaacuteria depois de saber as dimensotildees

IDLgt data_read=dblarr(dims)IDLgt readuunitdata_read

Fecha o arquivo

IDLgt free_lununit

Verifica que os dados foram gravados e lidos corretamente

IDLgt printarray_equal(data_to_writedata_read) 1

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Lecirc dados binaacuterios (read unformatted)

8889

Sumaacuterio

5 ndash Slides em httpwwwppenteadonetpeapea04_strings_iopdf Strings Expressotildees regulares Arquivos

httpwwwppenteadonetpea

8989

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89

Arquivos - texto ndash XML - exemploltxml version=10 gtltDOCTYPE Xdmf SYSTEM Xdmfdtd []gtltXdmf xmlnsxi=httpwwww3org2001XInclude Version=20gt ltDomaingt lt-- Example of Basic Topologies --gt ltInformation Name=Descriptiongt Example of a Polyvertex Topology ltInformationgt ltGrid Name=Polyvertex GridType=Uniformgt ltTopology TopologyType=Polyvertex Dimensions=3 NodesPerElement=3gt ltDataItem Format=XML Dimensions=3 3 NumberType=Floatgt 0 1 2 4 5 6 8 9 10 ltDataItemgt ltTopologygt ltGeometry Type=XYZgt ltDataItem Format=XML Dimensions=4 4 3gt 00 00 00 10 00 00()Que mostra que a interpretaccedilatildeo (parsing) de XML eacute em geral complexa

6789

Arquivos - texto - XML

Haacute muitas bibliotecas de alto niacutevel para fazer o processamento (parsing) e entregar os dados em uma estrutura conveniente

A complexidade em processar XML estaacute em decidir o que fazer com os dados jaacute que os arquivos podem ser muito complexos

As APIs (Application Programming Interfaces) mais comuns para processar XML que satildeo implementadas em muitas linguagens

DOM (Document Object Model) ndash manteacutem todo o conteuacutedo do em uma estrutura de dados (em geral uma aacutervore) em uma variaacutevel (em geral um objeto) Esta pode ser consultada para obter os valores de interesse para os alterar e usada para escrever um arquivo

SAX (Simple API for XML) ndash Interpretador (parser) por objetos O usuaacuterio escreve uma classe herdando da classe SAX provendo os meacutetodos que vatildeo processar os campos agrave medida em que estes satildeo lidos

6889

Arquivos - binaacuterios - FITSFlexible Image Transport System

O formato mais comum para observaccedilotildees astronocircmicas Tambeacutem usado para armazenar quaisquer dados mesmo natildeo relacionados a observaccedilotildees (especialmente tabelas como eacute praacutetica do STSCI)

Conteacutem um (ou mais) cabeccedilalho(s) de texto com metadados (informaccedilotildees sobre os dados como caracteriacutesticas (necessaacuterias para os ler) origem condiccedilotildees em que foram obtidos processamento realizado etc)

SIMPLE = T image conforms to FITS standard BITPIX = 32 bits per data value NAXIS = 2 number of axes NAXIS1 = 1024 NAXIS2 = 1024 BSCALE = 100000 Scaling factor BZERO = 000000 Scaling zero-point TELESCOP= Keck II Telescope SLITNAME= 0041x226 Slit Name SLITPA = 351979 Slit position angle SLITX = 131500 X pixel of the center of the slit LST = 12010446 local apparent sidereal time (()

Depois do cabeccedilalho haacute uma (ou mais) seccedilatildeo(otildees) de dados binaacuterios Costuma(m) ser array(s) 1D (espectros) 2D (imagens) ou 3D (ldquocubos de dadosrdquo)

De inteiros ou reais inteiros satildeo comuns em contagens de instrumentos reais para valores derivados (fluxos intensidades etc)

6989

Arquivos - binaacuterios - FITSNormalmente FITS satildeo lidos escritos por bibliotecas prontas de (relativamente) alto niacutevel usuaacuterio natildeo tem que saber como os dados satildeo armazenados no arquivo nem como os ler escrever Ex (IDL com a biblioteca idlastro)

IDLgt fits_info2dspectrumfits2dspectrumfits has 3 extensionsPrimary header 288 recordsNo dataExtension 1 -- SCI Header 144 records IMAGE ( 1201 1201 )Extension 2 -- ERR Header 72 records IMAGE ( 1201 1201 )Extension 3 -- DQ Header 72 records IMAGE ( 1201 1201 )

IDLgt mydata=readfits(2dspectrumfitsexten_no=1myheader) READFITS Reading FITS extension of type IMAGE READFITS Now reading 1201 by 1201 array

IDLgt extastmyheadermyastIDLgt sz=size(mydatadimensions)IDLgt xy2ad[1sz[0]][1sz[1]]myastcorners_acorners_dIDLgt printcorners_aCorners of the data array from file 2dspectrumfits are at 14487480 33063480

IDLgt printcorners_d -00041264444 00041402222

Obteacutem os dados de coordenadas (WCS) do header

Coloca os dados no array (2D de floats) mydata e o header no array (1D de strings) myheader

Calcula as coordenadas das quinas da imagem atraveacutes do WCS

Provecirc informaccedilotildees sobre o arquivo

7089

Arquivos - binaacuterios - ISIS Cube

Formatos como FITS se adequam muito a ter uma interface de mais alto niacutevel por objetos

Tambeacutem para dados em tabelas FITS muito mais trabalhosos de ler em baixo niacutevel que se adequam muito mais a mapas ou estruturas

Exemplo (de um formato semelhante a FITS ISIS cube)

O objeto ao ser criado lecirc todo o arquivo

cube=pp_editablecube(CM_1553510065_1_ircub)

Meacutetodos fornecem os dados desejados para obter quando necessaacuterio os dados de interesse

Find out the names of the backplanesprintcubegetproperty(backnames)Get the start time of the cubeprintcubegetfromheader(START_TIME)2007-084T100057286Z

Valores no cabeccedilalho podem ser convenientemente fornecidos como um mapa

header=cubeheader_as_hash()printheader[START_TIME]2007-084T100057286Z

7189

Arquivos - binaacuterios ndash ISIS Cube

Os dados satildeo fornecidos como arraysMake a contour plot of the latitudesc=contour(cubegetsuffixbyname(LATITUDE))Get the band with wavelength nearest to 21 (in the units used in the cube)selband=cubegetbandbywavelength(21wavelengths=selwavs)

Interfaces por overload tornam o acesso ainda mais conveniente

selband=cube[21]

selwavs=cube[21]

Retorna um array com a banda de comprimento de onda mais proacuteximo de 21 (microm)

Retorna o comprimento de onda mais proacuteximo de 21 (microm) da banda retornada acima

7289

Arquivos - binaacuterios ndash ISIS Cube Alteraccedilotildees feitas ao conteuacutedo satildeo automaticamente refletidas em todos os

lugares (cabeccedilalho em particular) afetados mantendo o objeto vaacutelido que pode depois ser gravado em um novo arquivo

IDLgt printcubelinescubesamplescubebands 64 64 256

IDLgt helpcubecoreltExpressiongt FLOAT = Array[64 64 256]

IDLgt cubecore=dblarr(100100256)

A linha acima natildeo eacute uma atribuiccedilatildeo eacute uma invocaccedilatildeo de meacutetodo Eacute equivalente acubesetpropertycore=dblarr(100100256)

Eacute o trabalho da funccedilatildeo setproperty decidir se a propriedade passada (core) faz sentido e se fizer fazer todo o trabalho necessaacuterio a esta mudanccedila Para o usuaacuterio eacute tudo automaacutetico e os dados da classe satildeo vaacutelidos o tempo todo

IDLgt helpcubecoreltExpressiongt DOUBLE = Array[100 100 256]

IDLgt printcubelinescubesamplescubebands 100 100 256

IDLgt cubesaveCM_1553510065_1_ir_editedcub

7389

Arquivos - binaacuterios ndash NetCDF e HDF5

Network Common Data Form e Hierarchical Data Format

Os dois uacutenicos formatos bem estabelecidos para dados cientiacuteficos geneacutericos

Armazenam dados como vaacuterias variaacuteveis e seus metadados Para cada variaacutevel haacute (ou pode haver) os metadados

Nome Dimensotildees (do array) Unidades Comentaacuterios

Ambos permitem arrays multidimensionais

Apenas HDF5 permite estruturas (daiacute vem a hierarquia)

Autodocumentados qualquer software que saiba ler um destes formatos lecirc qualquer arquivo sem precisar de conhecimento preacutevio sobre como o arquivo foi gerado

Muito bem suportados em bibliotecas padratildeo e natildeo padratildeo em softwares interativos e visualizadores (inclusive plugins para navegadores)

httpwwwunidataucaredusoftwarenetcdf httpenwikipediaorgwikiHdf5

NetCDF eacute mais simples de usar por natildeo ter hierarquia dando menos trabalho para ler e escrever dados Se hierarquia natildeo eacute necessaacuteria eacute mais conveniente de usar que HDF5

7489

Arquivos - binaacuterios - NetCDF e HDF5Haacute tambeacutem o formato CDL uma versatildeo ASCII do NetCDF A biblioteca padratildeo do NetCDF inclui conversores entre estes formatos

$ ncdump -h refspec_g01_0ncnetcdf refspec_g01_0 dimensions nlay = 51 nwn = 400 nleg = 33 numu = 2 nlev = 52 nphi = 3 ngas = 2 nwnc = 1 scal = 1 v3 = 3 dnl = 1 nk = 1 tdisr = UNLIMITED (0 currently) na = 16

variables float alb(nwn) float z(nlay) float t(nlay) float p(nlay) float wl(nwn) float iof(nwn) float mtau(nwn) float htau(nwn) float hctaus(nwn) float gtau(nwn) float outcos(scal) float phi(nleg) float phic(scal) float umu(numu) float flux(v3 nwn nlev) float mix(nlay ngas) float c(nlay) float psat(nlay) float ga(nwnc) float wlc(nwnc) float inc(scal) int dm(scal) int ord(scal) float fbeam(scal) float wn(nwn) float tautot(nwn nlay) float htaus(nwn nlay) float htaux(nwn nlay) float taug(nwn nlay) float phase(nwn nlay nleg) float ssa(nwn nlay) float uu(nwn nphi nlev numu) float u0u(nwn nlev numu) float tray(nwn nlay) float gtauo(tdisr nwn nlay)

Haacute 14 variaacuteveis usadas como dimensotildees para as 35 variaacuteveis que satildeo arrays

Ex alb(nwn) indica que alb eacute um array 1D de nwn elementos

nwn estaacute armazenado como uma das dimensotildees e eacute 400 portanto alb tem 400 elementos

Parte do conteuacutedo de um arquivo NetCDF em formato CDL (gerado pelo programa ncdump)

7589

Arquivos - binaacuterios - NetCDF e HDF5Conteuacutedo daquele arquivo visualizado com o ncview (acompanha a biblioteca NetCDF padratildeo)

7689

Arquivos - binaacuterios - NetCDF e HDF5O conteuacutedo de todo o arquivo pode ser lido facilmente com as bibliotecas disponiacuteveis e armazenado em contecirciners convenientes Usando um objeto que gera um resultado um pouco mais conveniente

IDLgt h=pp_readncdf(refspec_g01_0nchash)IDLgt printhvar_dims ltObjHeapVar229(HASH)gtvars ltObjHeapVar152(HASH)gtdims ltObjHeapVar118(HASH)gt

IDLgt printh[vars]T 173203 175459 175848 176001 175975 Z 431869 418858 406067 393403 380464 FLUX 300660 145536 0705180 0341669 0165532 PHASE 100000 0779034 0660858 0542052 0449983 TAUTOT0694377 0693420 0693474 0693540 0693636()

IDLgt help(h[vars])[TAUTOT]ltExpressiongt FLOAT = Array[51 400]

IDLgt print(h[var_dims])[TAUTOT]NLAY NWN

IDLgt print(h[dims])[(h[var_dims])[TAUTOT]]NLAY 51NWN 400

7789

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5)

Visualizaccedilatildeo da variaacutevel selecionada

Metadados e alguns valores da variaacutevel selecionada

Variaacutevel a ser criada com o conteuacutedo desta variaacutevel do arquivo

Hierarquia das variaacuteveis do arquivo

7889

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5) Imported variable az

IDLgt helpaz Structure ltd5723f38gt 13 tags length=448 data length=444 refs=1 _NAME STRING az _ICONTYPE STRING binary _TYPE STRING DATASET _FILE STRING INTENSI_test_409OUTh5 _PATH STRING _DATA DOUBLE Array[38] _NDIMENSIONS LONG 1 _DIMENSIONS ULONG64 Array[1] _NELEMENTS ULONG64 38 _DATATYPE STRING H5T_FLOAT _STORAGESIZE ULONG 8 _PRECISION LONG 64 _SIGN STRING

IDLgt printaz_data 00000000 10000000 20000000 30000000 40000000 50000000 60000000 80000000 ()

7989

Arquivos - binaacuterios - imagens

JPEG JPEG200 TIFF GeoTIFF etc

Os formatos comuns de imagens satildeo bem suportados em muacuteltiplas plataformas para uso dentro de programas e interativamente

Alguns formatos tecircm opccedilatildeo de compressatildeo com perda eou sem perda

Armazenam imagens como arrays 2D ou 3D (3D frequumlentemente limitado a 3 ou 4 em uma das dimensotildees uma imagem em 3 ou 4 bandas) de inteiros ou (em alguns formatos) reais

Alguns formatos permitem armazenar metadados para caracterizar as imagens armazenadas

JPEG2000 e GeoTIFF (um subconjunto de TIFF) comuns em astronomia e aacutereas proacuteximas

8089

Arquivos - binaacuterios ndash imagens ndash exemplo (IDL)IDLgt printquery_tiff(issmap_2009tiffinfogeotiff=geo) 1

IDLgt helpinfo Structure ltd4eca4b8gt 18 tags length=144 data length=132 refs=1 CHANNELS LONG 4 DIMENSIONS LONG Array[2] IMAGE_INDEX LONG 0 NUM_IMAGES LONG 1 PIXEL_TYPE INT 1 TYPE STRING TIFF BITS_PER_SAMPLE LONG 8 POSITION FLOAT Array[2] RESOLUTION FLOAT Array[2] UNITS LONG 2 TILE_SIZE LONG Array[2] DESCRIPTION STRING ISS (2009) DATE_TIME STRING 20100218 012436()

IDLgt helpgeo Structure ltd4efa1b8gt 10 tags length=264 data length=262 refs=1 MODELPIXELSCALETAG DOUBLE Array[3] MODELTIEPOINTTAG DOUBLE Array[6 4] GEOGRAPHICTYPEGEOKEY INT 4035 GEOGSEMIMAJORAXISGEOKEY DOUBLE 25750000 GEOGSEMIMINORAXISGEOKEY DOUBLE 25750000()

IDLgt myimage=read_tiff(issmap_2009tiff) Lecirc a imagem para o array myimage

Obteacutem informaccedilotildees sobre o arquivo

8189

Arquivos - binaacuterios ndash formatos nativosLinguagens como IDL R Python Java tecircm seu formato nativo binaacuterio acessado em alto niacutevel Basta mandar salvar ler variaacuteveis no do arquivo a biblioteca padratildeo automagicamente faz todo o trabalho de decidir como gravar ler os dados

Conveniente de usar na proacutepria linguagem Mas raramente existem bibliotecas para ler gravar o formato nativo de uma linguagem a partir de outra Ex (IDL)

IDLgt savefile=2dspectrumsavmydatamyheadercorners_dcorners_averbosecompress SAVE Portable (XDR) compressed SAVERESTORE file SAVE Saved variable MYDATA SAVE Saved variable MYHEADER()

Pode ser lido com apenas (haacute formas mais elaboradas)

IDLgt restore2dspectrumsavverbose RESTORE Portable (XDR) compressed SAVERESTORE file RESTORE Save file written by ltunknowngtltunknowngt Thu Jan 27 191422 2011 RESTORE IDL version 801 (linux x86_64) RESTORE Restored variable MYDATA RESTORE Restored variable MYHEADER()

IDLgt helpmydatamyheadercorners_dcorners_aMYDATA FLOAT = Array[1201 1201]MYHEADER STRING = Array[144]()

8289

Arquivos - processamento em baixo niacutevel

Nem sempre um formato padratildeo eacute a melhor escolha para o problema

Nem sempre haacute escolha (pode-se ter que trabalhar com arquivos que jaacute foram escritos em algum formato proprietaacuterio)

Agraves vezes o formato eacute padratildeo mas natildeo haacute bom suporte a ele disponiacutevel

Em todos estes casos eacute necessaacuterio escrever rotinas em baixo niacutevel que vatildeo ler processar diretamente o conteuacutedo do arquivo

Preferencialmente criando interfaces de alto niacutevel para o programa que vai as usar

8389

Arquivos - processamento em baixo niacutevel - texto

Tomando o exemplo anterior onde as colunas eram de diferentes tipos

NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS dec18s0001 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0002 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0003 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 FLAT 5408757812500 460000 5 dec18s0004 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 DARK 5408757812500 460000 5

A forma mais simples de o ler diretamente eacute definir uma estrutura para receber cada linha e um array destas estruturas para receber todo o arquivo Ex (IDL)

IDLgt record=namecalmpos0filnameechlpos0d0disppos0d0targnameposdirclassmjd_obsitime0d0coadds0IDLgt nlines=file_lines(filesearch_scamtxt)IDLgt mydata=replicate(recordnlines-1)IDLgt header=

Depois de definidas as variaacuteveis que vatildeo receber os dados o arquivo pode ser lido

IDLgt openrunitfilesearch_scamtxtget_lunIDLgt readfunitheaderIDLgt readfunitmydataformat=(A14I8A15F104F104A18A19A15F158F105I15)IDLgt free_lununit

A gravaccedilatildeo de um arquivo texto poderia ser feita de forma semelhante apenas trocando openr por openw (abrir o arquivo para gravaccedilatildeo natildeo leitura) e readf por printf

O arquivo eacute aberto em uma unidade (unit) usada para especificar de onde eacute feita a leitura

Ao final o arquivo eacute fechado

8489

Arquivos - processamento em baixo niacutevel - texto

O que resulta em

IDLgt printheader NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS

IDLgt helpmydataMYDATA STRUCT = -gt ltAnonymousgt Array[4]

IDLgt helpmydata[0] Structure ltd5e38f68gt 11 tags length=136 data length=124 refs=3 NAME STRING dec18s0001 CALMPOS INT 0 FILNAME STRING NIRSPEC-5-AO ECHLPOS DOUBLE 62630000 DISPPOS DOUBLE 36450000 TARGNAME STRING HD85258 POSDIR STRING NIRSPEC-5-AOp1 CLASS STRING STAR MJD_OBS STRING 54087574 ITIME DOUBLE 10000000 COADDS INT 1

Este caso eacute mais complicado que os mais comuns por haver colunas de strings

Se todas fossem de nuacutemeros natildeo teria sido necessaacuterio especificar o formato explicitamente As colunas teriam sido adivinhadas pela biblioteca que lecirc o arquivo Poderia ter sido lido escrito soacute com um array de nuacutemeros sem estruturas

8589

Arquivos - processamento em baixo niacutevel - binaacuterio

Formatos binaacuterios podem ser definidos de qualquer forma O arquivo eacute apenas um conjunto de bytes Cabe ao software saber como os interpretar

Uma escolha comum para que sejam autodocumentados eacute incluir um cabeccedilalho de texto informando as caracteriacutesticas dos dados necessaacuterias para os ler

Ex (IDL) criar um arquivo que armazene um array de doubles com um cabeccedilalho informando as dimensotildees para que o programa que o lecirc saiba como ler os dados

Inventa dados e abre o arquivo

IDLgt data_to_write=dindgen(34)IDLgt openwunitbinary_exampledatget_lun

Escreve as dimensotildees como texto

IDLgt printfunitdimensions of the double array stored belowIDLgt printfunitsize(data_to_writedimensions)

Escreve os dados binaacuterios

IDLgt writeuunitdata_to_write

Fecha o arquivo

IDLgt free_lununit

Escreve em binaacuterio (write unformatted)

8689

Arquivos - processamento em baixo niacutevel - binaacuterio

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

dimensions of the double array stored below 3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

8789

Arquivos - processamento em baixo niacutevel - binaacuterioA leitura deste arquivo eacute igualmente simples

IDLgt header=IDLgt dims=[00]IDLgt openrunitbinary_exampledatget_lun

Lecirc as dimensotildees (armazenadas como texto)

IDLgt readfunitheaderIDLgt readfunitdims

Lecirc a parte binaacuteria depois de saber as dimensotildees

IDLgt data_read=dblarr(dims)IDLgt readuunitdata_read

Fecha o arquivo

IDLgt free_lununit

Verifica que os dados foram gravados e lidos corretamente

IDLgt printarray_equal(data_to_writedata_read) 1

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Lecirc dados binaacuterios (read unformatted)

8889

Sumaacuterio

5 ndash Slides em httpwwwppenteadonetpeapea04_strings_iopdf Strings Expressotildees regulares Arquivos

httpwwwppenteadonetpea

8989

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89

Arquivos - texto - XML

Haacute muitas bibliotecas de alto niacutevel para fazer o processamento (parsing) e entregar os dados em uma estrutura conveniente

A complexidade em processar XML estaacute em decidir o que fazer com os dados jaacute que os arquivos podem ser muito complexos

As APIs (Application Programming Interfaces) mais comuns para processar XML que satildeo implementadas em muitas linguagens

DOM (Document Object Model) ndash manteacutem todo o conteuacutedo do em uma estrutura de dados (em geral uma aacutervore) em uma variaacutevel (em geral um objeto) Esta pode ser consultada para obter os valores de interesse para os alterar e usada para escrever um arquivo

SAX (Simple API for XML) ndash Interpretador (parser) por objetos O usuaacuterio escreve uma classe herdando da classe SAX provendo os meacutetodos que vatildeo processar os campos agrave medida em que estes satildeo lidos

6889

Arquivos - binaacuterios - FITSFlexible Image Transport System

O formato mais comum para observaccedilotildees astronocircmicas Tambeacutem usado para armazenar quaisquer dados mesmo natildeo relacionados a observaccedilotildees (especialmente tabelas como eacute praacutetica do STSCI)

Conteacutem um (ou mais) cabeccedilalho(s) de texto com metadados (informaccedilotildees sobre os dados como caracteriacutesticas (necessaacuterias para os ler) origem condiccedilotildees em que foram obtidos processamento realizado etc)

SIMPLE = T image conforms to FITS standard BITPIX = 32 bits per data value NAXIS = 2 number of axes NAXIS1 = 1024 NAXIS2 = 1024 BSCALE = 100000 Scaling factor BZERO = 000000 Scaling zero-point TELESCOP= Keck II Telescope SLITNAME= 0041x226 Slit Name SLITPA = 351979 Slit position angle SLITX = 131500 X pixel of the center of the slit LST = 12010446 local apparent sidereal time (()

Depois do cabeccedilalho haacute uma (ou mais) seccedilatildeo(otildees) de dados binaacuterios Costuma(m) ser array(s) 1D (espectros) 2D (imagens) ou 3D (ldquocubos de dadosrdquo)

De inteiros ou reais inteiros satildeo comuns em contagens de instrumentos reais para valores derivados (fluxos intensidades etc)

6989

Arquivos - binaacuterios - FITSNormalmente FITS satildeo lidos escritos por bibliotecas prontas de (relativamente) alto niacutevel usuaacuterio natildeo tem que saber como os dados satildeo armazenados no arquivo nem como os ler escrever Ex (IDL com a biblioteca idlastro)

IDLgt fits_info2dspectrumfits2dspectrumfits has 3 extensionsPrimary header 288 recordsNo dataExtension 1 -- SCI Header 144 records IMAGE ( 1201 1201 )Extension 2 -- ERR Header 72 records IMAGE ( 1201 1201 )Extension 3 -- DQ Header 72 records IMAGE ( 1201 1201 )

IDLgt mydata=readfits(2dspectrumfitsexten_no=1myheader) READFITS Reading FITS extension of type IMAGE READFITS Now reading 1201 by 1201 array

IDLgt extastmyheadermyastIDLgt sz=size(mydatadimensions)IDLgt xy2ad[1sz[0]][1sz[1]]myastcorners_acorners_dIDLgt printcorners_aCorners of the data array from file 2dspectrumfits are at 14487480 33063480

IDLgt printcorners_d -00041264444 00041402222

Obteacutem os dados de coordenadas (WCS) do header

Coloca os dados no array (2D de floats) mydata e o header no array (1D de strings) myheader

Calcula as coordenadas das quinas da imagem atraveacutes do WCS

Provecirc informaccedilotildees sobre o arquivo

7089

Arquivos - binaacuterios - ISIS Cube

Formatos como FITS se adequam muito a ter uma interface de mais alto niacutevel por objetos

Tambeacutem para dados em tabelas FITS muito mais trabalhosos de ler em baixo niacutevel que se adequam muito mais a mapas ou estruturas

Exemplo (de um formato semelhante a FITS ISIS cube)

O objeto ao ser criado lecirc todo o arquivo

cube=pp_editablecube(CM_1553510065_1_ircub)

Meacutetodos fornecem os dados desejados para obter quando necessaacuterio os dados de interesse

Find out the names of the backplanesprintcubegetproperty(backnames)Get the start time of the cubeprintcubegetfromheader(START_TIME)2007-084T100057286Z

Valores no cabeccedilalho podem ser convenientemente fornecidos como um mapa

header=cubeheader_as_hash()printheader[START_TIME]2007-084T100057286Z

7189

Arquivos - binaacuterios ndash ISIS Cube

Os dados satildeo fornecidos como arraysMake a contour plot of the latitudesc=contour(cubegetsuffixbyname(LATITUDE))Get the band with wavelength nearest to 21 (in the units used in the cube)selband=cubegetbandbywavelength(21wavelengths=selwavs)

Interfaces por overload tornam o acesso ainda mais conveniente

selband=cube[21]

selwavs=cube[21]

Retorna um array com a banda de comprimento de onda mais proacuteximo de 21 (microm)

Retorna o comprimento de onda mais proacuteximo de 21 (microm) da banda retornada acima

7289

Arquivos - binaacuterios ndash ISIS Cube Alteraccedilotildees feitas ao conteuacutedo satildeo automaticamente refletidas em todos os

lugares (cabeccedilalho em particular) afetados mantendo o objeto vaacutelido que pode depois ser gravado em um novo arquivo

IDLgt printcubelinescubesamplescubebands 64 64 256

IDLgt helpcubecoreltExpressiongt FLOAT = Array[64 64 256]

IDLgt cubecore=dblarr(100100256)

A linha acima natildeo eacute uma atribuiccedilatildeo eacute uma invocaccedilatildeo de meacutetodo Eacute equivalente acubesetpropertycore=dblarr(100100256)

Eacute o trabalho da funccedilatildeo setproperty decidir se a propriedade passada (core) faz sentido e se fizer fazer todo o trabalho necessaacuterio a esta mudanccedila Para o usuaacuterio eacute tudo automaacutetico e os dados da classe satildeo vaacutelidos o tempo todo

IDLgt helpcubecoreltExpressiongt DOUBLE = Array[100 100 256]

IDLgt printcubelinescubesamplescubebands 100 100 256

IDLgt cubesaveCM_1553510065_1_ir_editedcub

7389

Arquivos - binaacuterios ndash NetCDF e HDF5

Network Common Data Form e Hierarchical Data Format

Os dois uacutenicos formatos bem estabelecidos para dados cientiacuteficos geneacutericos

Armazenam dados como vaacuterias variaacuteveis e seus metadados Para cada variaacutevel haacute (ou pode haver) os metadados

Nome Dimensotildees (do array) Unidades Comentaacuterios

Ambos permitem arrays multidimensionais

Apenas HDF5 permite estruturas (daiacute vem a hierarquia)

Autodocumentados qualquer software que saiba ler um destes formatos lecirc qualquer arquivo sem precisar de conhecimento preacutevio sobre como o arquivo foi gerado

Muito bem suportados em bibliotecas padratildeo e natildeo padratildeo em softwares interativos e visualizadores (inclusive plugins para navegadores)

httpwwwunidataucaredusoftwarenetcdf httpenwikipediaorgwikiHdf5

NetCDF eacute mais simples de usar por natildeo ter hierarquia dando menos trabalho para ler e escrever dados Se hierarquia natildeo eacute necessaacuteria eacute mais conveniente de usar que HDF5

7489

Arquivos - binaacuterios - NetCDF e HDF5Haacute tambeacutem o formato CDL uma versatildeo ASCII do NetCDF A biblioteca padratildeo do NetCDF inclui conversores entre estes formatos

$ ncdump -h refspec_g01_0ncnetcdf refspec_g01_0 dimensions nlay = 51 nwn = 400 nleg = 33 numu = 2 nlev = 52 nphi = 3 ngas = 2 nwnc = 1 scal = 1 v3 = 3 dnl = 1 nk = 1 tdisr = UNLIMITED (0 currently) na = 16

variables float alb(nwn) float z(nlay) float t(nlay) float p(nlay) float wl(nwn) float iof(nwn) float mtau(nwn) float htau(nwn) float hctaus(nwn) float gtau(nwn) float outcos(scal) float phi(nleg) float phic(scal) float umu(numu) float flux(v3 nwn nlev) float mix(nlay ngas) float c(nlay) float psat(nlay) float ga(nwnc) float wlc(nwnc) float inc(scal) int dm(scal) int ord(scal) float fbeam(scal) float wn(nwn) float tautot(nwn nlay) float htaus(nwn nlay) float htaux(nwn nlay) float taug(nwn nlay) float phase(nwn nlay nleg) float ssa(nwn nlay) float uu(nwn nphi nlev numu) float u0u(nwn nlev numu) float tray(nwn nlay) float gtauo(tdisr nwn nlay)

Haacute 14 variaacuteveis usadas como dimensotildees para as 35 variaacuteveis que satildeo arrays

Ex alb(nwn) indica que alb eacute um array 1D de nwn elementos

nwn estaacute armazenado como uma das dimensotildees e eacute 400 portanto alb tem 400 elementos

Parte do conteuacutedo de um arquivo NetCDF em formato CDL (gerado pelo programa ncdump)

7589

Arquivos - binaacuterios - NetCDF e HDF5Conteuacutedo daquele arquivo visualizado com o ncview (acompanha a biblioteca NetCDF padratildeo)

7689

Arquivos - binaacuterios - NetCDF e HDF5O conteuacutedo de todo o arquivo pode ser lido facilmente com as bibliotecas disponiacuteveis e armazenado em contecirciners convenientes Usando um objeto que gera um resultado um pouco mais conveniente

IDLgt h=pp_readncdf(refspec_g01_0nchash)IDLgt printhvar_dims ltObjHeapVar229(HASH)gtvars ltObjHeapVar152(HASH)gtdims ltObjHeapVar118(HASH)gt

IDLgt printh[vars]T 173203 175459 175848 176001 175975 Z 431869 418858 406067 393403 380464 FLUX 300660 145536 0705180 0341669 0165532 PHASE 100000 0779034 0660858 0542052 0449983 TAUTOT0694377 0693420 0693474 0693540 0693636()

IDLgt help(h[vars])[TAUTOT]ltExpressiongt FLOAT = Array[51 400]

IDLgt print(h[var_dims])[TAUTOT]NLAY NWN

IDLgt print(h[dims])[(h[var_dims])[TAUTOT]]NLAY 51NWN 400

7789

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5)

Visualizaccedilatildeo da variaacutevel selecionada

Metadados e alguns valores da variaacutevel selecionada

Variaacutevel a ser criada com o conteuacutedo desta variaacutevel do arquivo

Hierarquia das variaacuteveis do arquivo

7889

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5) Imported variable az

IDLgt helpaz Structure ltd5723f38gt 13 tags length=448 data length=444 refs=1 _NAME STRING az _ICONTYPE STRING binary _TYPE STRING DATASET _FILE STRING INTENSI_test_409OUTh5 _PATH STRING _DATA DOUBLE Array[38] _NDIMENSIONS LONG 1 _DIMENSIONS ULONG64 Array[1] _NELEMENTS ULONG64 38 _DATATYPE STRING H5T_FLOAT _STORAGESIZE ULONG 8 _PRECISION LONG 64 _SIGN STRING

IDLgt printaz_data 00000000 10000000 20000000 30000000 40000000 50000000 60000000 80000000 ()

7989

Arquivos - binaacuterios - imagens

JPEG JPEG200 TIFF GeoTIFF etc

Os formatos comuns de imagens satildeo bem suportados em muacuteltiplas plataformas para uso dentro de programas e interativamente

Alguns formatos tecircm opccedilatildeo de compressatildeo com perda eou sem perda

Armazenam imagens como arrays 2D ou 3D (3D frequumlentemente limitado a 3 ou 4 em uma das dimensotildees uma imagem em 3 ou 4 bandas) de inteiros ou (em alguns formatos) reais

Alguns formatos permitem armazenar metadados para caracterizar as imagens armazenadas

JPEG2000 e GeoTIFF (um subconjunto de TIFF) comuns em astronomia e aacutereas proacuteximas

8089

Arquivos - binaacuterios ndash imagens ndash exemplo (IDL)IDLgt printquery_tiff(issmap_2009tiffinfogeotiff=geo) 1

IDLgt helpinfo Structure ltd4eca4b8gt 18 tags length=144 data length=132 refs=1 CHANNELS LONG 4 DIMENSIONS LONG Array[2] IMAGE_INDEX LONG 0 NUM_IMAGES LONG 1 PIXEL_TYPE INT 1 TYPE STRING TIFF BITS_PER_SAMPLE LONG 8 POSITION FLOAT Array[2] RESOLUTION FLOAT Array[2] UNITS LONG 2 TILE_SIZE LONG Array[2] DESCRIPTION STRING ISS (2009) DATE_TIME STRING 20100218 012436()

IDLgt helpgeo Structure ltd4efa1b8gt 10 tags length=264 data length=262 refs=1 MODELPIXELSCALETAG DOUBLE Array[3] MODELTIEPOINTTAG DOUBLE Array[6 4] GEOGRAPHICTYPEGEOKEY INT 4035 GEOGSEMIMAJORAXISGEOKEY DOUBLE 25750000 GEOGSEMIMINORAXISGEOKEY DOUBLE 25750000()

IDLgt myimage=read_tiff(issmap_2009tiff) Lecirc a imagem para o array myimage

Obteacutem informaccedilotildees sobre o arquivo

8189

Arquivos - binaacuterios ndash formatos nativosLinguagens como IDL R Python Java tecircm seu formato nativo binaacuterio acessado em alto niacutevel Basta mandar salvar ler variaacuteveis no do arquivo a biblioteca padratildeo automagicamente faz todo o trabalho de decidir como gravar ler os dados

Conveniente de usar na proacutepria linguagem Mas raramente existem bibliotecas para ler gravar o formato nativo de uma linguagem a partir de outra Ex (IDL)

IDLgt savefile=2dspectrumsavmydatamyheadercorners_dcorners_averbosecompress SAVE Portable (XDR) compressed SAVERESTORE file SAVE Saved variable MYDATA SAVE Saved variable MYHEADER()

Pode ser lido com apenas (haacute formas mais elaboradas)

IDLgt restore2dspectrumsavverbose RESTORE Portable (XDR) compressed SAVERESTORE file RESTORE Save file written by ltunknowngtltunknowngt Thu Jan 27 191422 2011 RESTORE IDL version 801 (linux x86_64) RESTORE Restored variable MYDATA RESTORE Restored variable MYHEADER()

IDLgt helpmydatamyheadercorners_dcorners_aMYDATA FLOAT = Array[1201 1201]MYHEADER STRING = Array[144]()

8289

Arquivos - processamento em baixo niacutevel

Nem sempre um formato padratildeo eacute a melhor escolha para o problema

Nem sempre haacute escolha (pode-se ter que trabalhar com arquivos que jaacute foram escritos em algum formato proprietaacuterio)

Agraves vezes o formato eacute padratildeo mas natildeo haacute bom suporte a ele disponiacutevel

Em todos estes casos eacute necessaacuterio escrever rotinas em baixo niacutevel que vatildeo ler processar diretamente o conteuacutedo do arquivo

Preferencialmente criando interfaces de alto niacutevel para o programa que vai as usar

8389

Arquivos - processamento em baixo niacutevel - texto

Tomando o exemplo anterior onde as colunas eram de diferentes tipos

NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS dec18s0001 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0002 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0003 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 FLAT 5408757812500 460000 5 dec18s0004 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 DARK 5408757812500 460000 5

A forma mais simples de o ler diretamente eacute definir uma estrutura para receber cada linha e um array destas estruturas para receber todo o arquivo Ex (IDL)

IDLgt record=namecalmpos0filnameechlpos0d0disppos0d0targnameposdirclassmjd_obsitime0d0coadds0IDLgt nlines=file_lines(filesearch_scamtxt)IDLgt mydata=replicate(recordnlines-1)IDLgt header=

Depois de definidas as variaacuteveis que vatildeo receber os dados o arquivo pode ser lido

IDLgt openrunitfilesearch_scamtxtget_lunIDLgt readfunitheaderIDLgt readfunitmydataformat=(A14I8A15F104F104A18A19A15F158F105I15)IDLgt free_lununit

A gravaccedilatildeo de um arquivo texto poderia ser feita de forma semelhante apenas trocando openr por openw (abrir o arquivo para gravaccedilatildeo natildeo leitura) e readf por printf

O arquivo eacute aberto em uma unidade (unit) usada para especificar de onde eacute feita a leitura

Ao final o arquivo eacute fechado

8489

Arquivos - processamento em baixo niacutevel - texto

O que resulta em

IDLgt printheader NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS

IDLgt helpmydataMYDATA STRUCT = -gt ltAnonymousgt Array[4]

IDLgt helpmydata[0] Structure ltd5e38f68gt 11 tags length=136 data length=124 refs=3 NAME STRING dec18s0001 CALMPOS INT 0 FILNAME STRING NIRSPEC-5-AO ECHLPOS DOUBLE 62630000 DISPPOS DOUBLE 36450000 TARGNAME STRING HD85258 POSDIR STRING NIRSPEC-5-AOp1 CLASS STRING STAR MJD_OBS STRING 54087574 ITIME DOUBLE 10000000 COADDS INT 1

Este caso eacute mais complicado que os mais comuns por haver colunas de strings

Se todas fossem de nuacutemeros natildeo teria sido necessaacuterio especificar o formato explicitamente As colunas teriam sido adivinhadas pela biblioteca que lecirc o arquivo Poderia ter sido lido escrito soacute com um array de nuacutemeros sem estruturas

8589

Arquivos - processamento em baixo niacutevel - binaacuterio

Formatos binaacuterios podem ser definidos de qualquer forma O arquivo eacute apenas um conjunto de bytes Cabe ao software saber como os interpretar

Uma escolha comum para que sejam autodocumentados eacute incluir um cabeccedilalho de texto informando as caracteriacutesticas dos dados necessaacuterias para os ler

Ex (IDL) criar um arquivo que armazene um array de doubles com um cabeccedilalho informando as dimensotildees para que o programa que o lecirc saiba como ler os dados

Inventa dados e abre o arquivo

IDLgt data_to_write=dindgen(34)IDLgt openwunitbinary_exampledatget_lun

Escreve as dimensotildees como texto

IDLgt printfunitdimensions of the double array stored belowIDLgt printfunitsize(data_to_writedimensions)

Escreve os dados binaacuterios

IDLgt writeuunitdata_to_write

Fecha o arquivo

IDLgt free_lununit

Escreve em binaacuterio (write unformatted)

8689

Arquivos - processamento em baixo niacutevel - binaacuterio

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

dimensions of the double array stored below 3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

8789

Arquivos - processamento em baixo niacutevel - binaacuterioA leitura deste arquivo eacute igualmente simples

IDLgt header=IDLgt dims=[00]IDLgt openrunitbinary_exampledatget_lun

Lecirc as dimensotildees (armazenadas como texto)

IDLgt readfunitheaderIDLgt readfunitdims

Lecirc a parte binaacuteria depois de saber as dimensotildees

IDLgt data_read=dblarr(dims)IDLgt readuunitdata_read

Fecha o arquivo

IDLgt free_lununit

Verifica que os dados foram gravados e lidos corretamente

IDLgt printarray_equal(data_to_writedata_read) 1

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Lecirc dados binaacuterios (read unformatted)

8889

Sumaacuterio

5 ndash Slides em httpwwwppenteadonetpeapea04_strings_iopdf Strings Expressotildees regulares Arquivos

httpwwwppenteadonetpea

8989

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89

Arquivos - binaacuterios - FITSFlexible Image Transport System

O formato mais comum para observaccedilotildees astronocircmicas Tambeacutem usado para armazenar quaisquer dados mesmo natildeo relacionados a observaccedilotildees (especialmente tabelas como eacute praacutetica do STSCI)

Conteacutem um (ou mais) cabeccedilalho(s) de texto com metadados (informaccedilotildees sobre os dados como caracteriacutesticas (necessaacuterias para os ler) origem condiccedilotildees em que foram obtidos processamento realizado etc)

SIMPLE = T image conforms to FITS standard BITPIX = 32 bits per data value NAXIS = 2 number of axes NAXIS1 = 1024 NAXIS2 = 1024 BSCALE = 100000 Scaling factor BZERO = 000000 Scaling zero-point TELESCOP= Keck II Telescope SLITNAME= 0041x226 Slit Name SLITPA = 351979 Slit position angle SLITX = 131500 X pixel of the center of the slit LST = 12010446 local apparent sidereal time (()

Depois do cabeccedilalho haacute uma (ou mais) seccedilatildeo(otildees) de dados binaacuterios Costuma(m) ser array(s) 1D (espectros) 2D (imagens) ou 3D (ldquocubos de dadosrdquo)

De inteiros ou reais inteiros satildeo comuns em contagens de instrumentos reais para valores derivados (fluxos intensidades etc)

6989

Arquivos - binaacuterios - FITSNormalmente FITS satildeo lidos escritos por bibliotecas prontas de (relativamente) alto niacutevel usuaacuterio natildeo tem que saber como os dados satildeo armazenados no arquivo nem como os ler escrever Ex (IDL com a biblioteca idlastro)

IDLgt fits_info2dspectrumfits2dspectrumfits has 3 extensionsPrimary header 288 recordsNo dataExtension 1 -- SCI Header 144 records IMAGE ( 1201 1201 )Extension 2 -- ERR Header 72 records IMAGE ( 1201 1201 )Extension 3 -- DQ Header 72 records IMAGE ( 1201 1201 )

IDLgt mydata=readfits(2dspectrumfitsexten_no=1myheader) READFITS Reading FITS extension of type IMAGE READFITS Now reading 1201 by 1201 array

IDLgt extastmyheadermyastIDLgt sz=size(mydatadimensions)IDLgt xy2ad[1sz[0]][1sz[1]]myastcorners_acorners_dIDLgt printcorners_aCorners of the data array from file 2dspectrumfits are at 14487480 33063480

IDLgt printcorners_d -00041264444 00041402222

Obteacutem os dados de coordenadas (WCS) do header

Coloca os dados no array (2D de floats) mydata e o header no array (1D de strings) myheader

Calcula as coordenadas das quinas da imagem atraveacutes do WCS

Provecirc informaccedilotildees sobre o arquivo

7089

Arquivos - binaacuterios - ISIS Cube

Formatos como FITS se adequam muito a ter uma interface de mais alto niacutevel por objetos

Tambeacutem para dados em tabelas FITS muito mais trabalhosos de ler em baixo niacutevel que se adequam muito mais a mapas ou estruturas

Exemplo (de um formato semelhante a FITS ISIS cube)

O objeto ao ser criado lecirc todo o arquivo

cube=pp_editablecube(CM_1553510065_1_ircub)

Meacutetodos fornecem os dados desejados para obter quando necessaacuterio os dados de interesse

Find out the names of the backplanesprintcubegetproperty(backnames)Get the start time of the cubeprintcubegetfromheader(START_TIME)2007-084T100057286Z

Valores no cabeccedilalho podem ser convenientemente fornecidos como um mapa

header=cubeheader_as_hash()printheader[START_TIME]2007-084T100057286Z

7189

Arquivos - binaacuterios ndash ISIS Cube

Os dados satildeo fornecidos como arraysMake a contour plot of the latitudesc=contour(cubegetsuffixbyname(LATITUDE))Get the band with wavelength nearest to 21 (in the units used in the cube)selband=cubegetbandbywavelength(21wavelengths=selwavs)

Interfaces por overload tornam o acesso ainda mais conveniente

selband=cube[21]

selwavs=cube[21]

Retorna um array com a banda de comprimento de onda mais proacuteximo de 21 (microm)

Retorna o comprimento de onda mais proacuteximo de 21 (microm) da banda retornada acima

7289

Arquivos - binaacuterios ndash ISIS Cube Alteraccedilotildees feitas ao conteuacutedo satildeo automaticamente refletidas em todos os

lugares (cabeccedilalho em particular) afetados mantendo o objeto vaacutelido que pode depois ser gravado em um novo arquivo

IDLgt printcubelinescubesamplescubebands 64 64 256

IDLgt helpcubecoreltExpressiongt FLOAT = Array[64 64 256]

IDLgt cubecore=dblarr(100100256)

A linha acima natildeo eacute uma atribuiccedilatildeo eacute uma invocaccedilatildeo de meacutetodo Eacute equivalente acubesetpropertycore=dblarr(100100256)

Eacute o trabalho da funccedilatildeo setproperty decidir se a propriedade passada (core) faz sentido e se fizer fazer todo o trabalho necessaacuterio a esta mudanccedila Para o usuaacuterio eacute tudo automaacutetico e os dados da classe satildeo vaacutelidos o tempo todo

IDLgt helpcubecoreltExpressiongt DOUBLE = Array[100 100 256]

IDLgt printcubelinescubesamplescubebands 100 100 256

IDLgt cubesaveCM_1553510065_1_ir_editedcub

7389

Arquivos - binaacuterios ndash NetCDF e HDF5

Network Common Data Form e Hierarchical Data Format

Os dois uacutenicos formatos bem estabelecidos para dados cientiacuteficos geneacutericos

Armazenam dados como vaacuterias variaacuteveis e seus metadados Para cada variaacutevel haacute (ou pode haver) os metadados

Nome Dimensotildees (do array) Unidades Comentaacuterios

Ambos permitem arrays multidimensionais

Apenas HDF5 permite estruturas (daiacute vem a hierarquia)

Autodocumentados qualquer software que saiba ler um destes formatos lecirc qualquer arquivo sem precisar de conhecimento preacutevio sobre como o arquivo foi gerado

Muito bem suportados em bibliotecas padratildeo e natildeo padratildeo em softwares interativos e visualizadores (inclusive plugins para navegadores)

httpwwwunidataucaredusoftwarenetcdf httpenwikipediaorgwikiHdf5

NetCDF eacute mais simples de usar por natildeo ter hierarquia dando menos trabalho para ler e escrever dados Se hierarquia natildeo eacute necessaacuteria eacute mais conveniente de usar que HDF5

7489

Arquivos - binaacuterios - NetCDF e HDF5Haacute tambeacutem o formato CDL uma versatildeo ASCII do NetCDF A biblioteca padratildeo do NetCDF inclui conversores entre estes formatos

$ ncdump -h refspec_g01_0ncnetcdf refspec_g01_0 dimensions nlay = 51 nwn = 400 nleg = 33 numu = 2 nlev = 52 nphi = 3 ngas = 2 nwnc = 1 scal = 1 v3 = 3 dnl = 1 nk = 1 tdisr = UNLIMITED (0 currently) na = 16

variables float alb(nwn) float z(nlay) float t(nlay) float p(nlay) float wl(nwn) float iof(nwn) float mtau(nwn) float htau(nwn) float hctaus(nwn) float gtau(nwn) float outcos(scal) float phi(nleg) float phic(scal) float umu(numu) float flux(v3 nwn nlev) float mix(nlay ngas) float c(nlay) float psat(nlay) float ga(nwnc) float wlc(nwnc) float inc(scal) int dm(scal) int ord(scal) float fbeam(scal) float wn(nwn) float tautot(nwn nlay) float htaus(nwn nlay) float htaux(nwn nlay) float taug(nwn nlay) float phase(nwn nlay nleg) float ssa(nwn nlay) float uu(nwn nphi nlev numu) float u0u(nwn nlev numu) float tray(nwn nlay) float gtauo(tdisr nwn nlay)

Haacute 14 variaacuteveis usadas como dimensotildees para as 35 variaacuteveis que satildeo arrays

Ex alb(nwn) indica que alb eacute um array 1D de nwn elementos

nwn estaacute armazenado como uma das dimensotildees e eacute 400 portanto alb tem 400 elementos

Parte do conteuacutedo de um arquivo NetCDF em formato CDL (gerado pelo programa ncdump)

7589

Arquivos - binaacuterios - NetCDF e HDF5Conteuacutedo daquele arquivo visualizado com o ncview (acompanha a biblioteca NetCDF padratildeo)

7689

Arquivos - binaacuterios - NetCDF e HDF5O conteuacutedo de todo o arquivo pode ser lido facilmente com as bibliotecas disponiacuteveis e armazenado em contecirciners convenientes Usando um objeto que gera um resultado um pouco mais conveniente

IDLgt h=pp_readncdf(refspec_g01_0nchash)IDLgt printhvar_dims ltObjHeapVar229(HASH)gtvars ltObjHeapVar152(HASH)gtdims ltObjHeapVar118(HASH)gt

IDLgt printh[vars]T 173203 175459 175848 176001 175975 Z 431869 418858 406067 393403 380464 FLUX 300660 145536 0705180 0341669 0165532 PHASE 100000 0779034 0660858 0542052 0449983 TAUTOT0694377 0693420 0693474 0693540 0693636()

IDLgt help(h[vars])[TAUTOT]ltExpressiongt FLOAT = Array[51 400]

IDLgt print(h[var_dims])[TAUTOT]NLAY NWN

IDLgt print(h[dims])[(h[var_dims])[TAUTOT]]NLAY 51NWN 400

7789

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5)

Visualizaccedilatildeo da variaacutevel selecionada

Metadados e alguns valores da variaacutevel selecionada

Variaacutevel a ser criada com o conteuacutedo desta variaacutevel do arquivo

Hierarquia das variaacuteveis do arquivo

7889

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5) Imported variable az

IDLgt helpaz Structure ltd5723f38gt 13 tags length=448 data length=444 refs=1 _NAME STRING az _ICONTYPE STRING binary _TYPE STRING DATASET _FILE STRING INTENSI_test_409OUTh5 _PATH STRING _DATA DOUBLE Array[38] _NDIMENSIONS LONG 1 _DIMENSIONS ULONG64 Array[1] _NELEMENTS ULONG64 38 _DATATYPE STRING H5T_FLOAT _STORAGESIZE ULONG 8 _PRECISION LONG 64 _SIGN STRING

IDLgt printaz_data 00000000 10000000 20000000 30000000 40000000 50000000 60000000 80000000 ()

7989

Arquivos - binaacuterios - imagens

JPEG JPEG200 TIFF GeoTIFF etc

Os formatos comuns de imagens satildeo bem suportados em muacuteltiplas plataformas para uso dentro de programas e interativamente

Alguns formatos tecircm opccedilatildeo de compressatildeo com perda eou sem perda

Armazenam imagens como arrays 2D ou 3D (3D frequumlentemente limitado a 3 ou 4 em uma das dimensotildees uma imagem em 3 ou 4 bandas) de inteiros ou (em alguns formatos) reais

Alguns formatos permitem armazenar metadados para caracterizar as imagens armazenadas

JPEG2000 e GeoTIFF (um subconjunto de TIFF) comuns em astronomia e aacutereas proacuteximas

8089

Arquivos - binaacuterios ndash imagens ndash exemplo (IDL)IDLgt printquery_tiff(issmap_2009tiffinfogeotiff=geo) 1

IDLgt helpinfo Structure ltd4eca4b8gt 18 tags length=144 data length=132 refs=1 CHANNELS LONG 4 DIMENSIONS LONG Array[2] IMAGE_INDEX LONG 0 NUM_IMAGES LONG 1 PIXEL_TYPE INT 1 TYPE STRING TIFF BITS_PER_SAMPLE LONG 8 POSITION FLOAT Array[2] RESOLUTION FLOAT Array[2] UNITS LONG 2 TILE_SIZE LONG Array[2] DESCRIPTION STRING ISS (2009) DATE_TIME STRING 20100218 012436()

IDLgt helpgeo Structure ltd4efa1b8gt 10 tags length=264 data length=262 refs=1 MODELPIXELSCALETAG DOUBLE Array[3] MODELTIEPOINTTAG DOUBLE Array[6 4] GEOGRAPHICTYPEGEOKEY INT 4035 GEOGSEMIMAJORAXISGEOKEY DOUBLE 25750000 GEOGSEMIMINORAXISGEOKEY DOUBLE 25750000()

IDLgt myimage=read_tiff(issmap_2009tiff) Lecirc a imagem para o array myimage

Obteacutem informaccedilotildees sobre o arquivo

8189

Arquivos - binaacuterios ndash formatos nativosLinguagens como IDL R Python Java tecircm seu formato nativo binaacuterio acessado em alto niacutevel Basta mandar salvar ler variaacuteveis no do arquivo a biblioteca padratildeo automagicamente faz todo o trabalho de decidir como gravar ler os dados

Conveniente de usar na proacutepria linguagem Mas raramente existem bibliotecas para ler gravar o formato nativo de uma linguagem a partir de outra Ex (IDL)

IDLgt savefile=2dspectrumsavmydatamyheadercorners_dcorners_averbosecompress SAVE Portable (XDR) compressed SAVERESTORE file SAVE Saved variable MYDATA SAVE Saved variable MYHEADER()

Pode ser lido com apenas (haacute formas mais elaboradas)

IDLgt restore2dspectrumsavverbose RESTORE Portable (XDR) compressed SAVERESTORE file RESTORE Save file written by ltunknowngtltunknowngt Thu Jan 27 191422 2011 RESTORE IDL version 801 (linux x86_64) RESTORE Restored variable MYDATA RESTORE Restored variable MYHEADER()

IDLgt helpmydatamyheadercorners_dcorners_aMYDATA FLOAT = Array[1201 1201]MYHEADER STRING = Array[144]()

8289

Arquivos - processamento em baixo niacutevel

Nem sempre um formato padratildeo eacute a melhor escolha para o problema

Nem sempre haacute escolha (pode-se ter que trabalhar com arquivos que jaacute foram escritos em algum formato proprietaacuterio)

Agraves vezes o formato eacute padratildeo mas natildeo haacute bom suporte a ele disponiacutevel

Em todos estes casos eacute necessaacuterio escrever rotinas em baixo niacutevel que vatildeo ler processar diretamente o conteuacutedo do arquivo

Preferencialmente criando interfaces de alto niacutevel para o programa que vai as usar

8389

Arquivos - processamento em baixo niacutevel - texto

Tomando o exemplo anterior onde as colunas eram de diferentes tipos

NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS dec18s0001 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0002 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0003 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 FLAT 5408757812500 460000 5 dec18s0004 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 DARK 5408757812500 460000 5

A forma mais simples de o ler diretamente eacute definir uma estrutura para receber cada linha e um array destas estruturas para receber todo o arquivo Ex (IDL)

IDLgt record=namecalmpos0filnameechlpos0d0disppos0d0targnameposdirclassmjd_obsitime0d0coadds0IDLgt nlines=file_lines(filesearch_scamtxt)IDLgt mydata=replicate(recordnlines-1)IDLgt header=

Depois de definidas as variaacuteveis que vatildeo receber os dados o arquivo pode ser lido

IDLgt openrunitfilesearch_scamtxtget_lunIDLgt readfunitheaderIDLgt readfunitmydataformat=(A14I8A15F104F104A18A19A15F158F105I15)IDLgt free_lununit

A gravaccedilatildeo de um arquivo texto poderia ser feita de forma semelhante apenas trocando openr por openw (abrir o arquivo para gravaccedilatildeo natildeo leitura) e readf por printf

O arquivo eacute aberto em uma unidade (unit) usada para especificar de onde eacute feita a leitura

Ao final o arquivo eacute fechado

8489

Arquivos - processamento em baixo niacutevel - texto

O que resulta em

IDLgt printheader NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS

IDLgt helpmydataMYDATA STRUCT = -gt ltAnonymousgt Array[4]

IDLgt helpmydata[0] Structure ltd5e38f68gt 11 tags length=136 data length=124 refs=3 NAME STRING dec18s0001 CALMPOS INT 0 FILNAME STRING NIRSPEC-5-AO ECHLPOS DOUBLE 62630000 DISPPOS DOUBLE 36450000 TARGNAME STRING HD85258 POSDIR STRING NIRSPEC-5-AOp1 CLASS STRING STAR MJD_OBS STRING 54087574 ITIME DOUBLE 10000000 COADDS INT 1

Este caso eacute mais complicado que os mais comuns por haver colunas de strings

Se todas fossem de nuacutemeros natildeo teria sido necessaacuterio especificar o formato explicitamente As colunas teriam sido adivinhadas pela biblioteca que lecirc o arquivo Poderia ter sido lido escrito soacute com um array de nuacutemeros sem estruturas

8589

Arquivos - processamento em baixo niacutevel - binaacuterio

Formatos binaacuterios podem ser definidos de qualquer forma O arquivo eacute apenas um conjunto de bytes Cabe ao software saber como os interpretar

Uma escolha comum para que sejam autodocumentados eacute incluir um cabeccedilalho de texto informando as caracteriacutesticas dos dados necessaacuterias para os ler

Ex (IDL) criar um arquivo que armazene um array de doubles com um cabeccedilalho informando as dimensotildees para que o programa que o lecirc saiba como ler os dados

Inventa dados e abre o arquivo

IDLgt data_to_write=dindgen(34)IDLgt openwunitbinary_exampledatget_lun

Escreve as dimensotildees como texto

IDLgt printfunitdimensions of the double array stored belowIDLgt printfunitsize(data_to_writedimensions)

Escreve os dados binaacuterios

IDLgt writeuunitdata_to_write

Fecha o arquivo

IDLgt free_lununit

Escreve em binaacuterio (write unformatted)

8689

Arquivos - processamento em baixo niacutevel - binaacuterio

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

dimensions of the double array stored below 3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

8789

Arquivos - processamento em baixo niacutevel - binaacuterioA leitura deste arquivo eacute igualmente simples

IDLgt header=IDLgt dims=[00]IDLgt openrunitbinary_exampledatget_lun

Lecirc as dimensotildees (armazenadas como texto)

IDLgt readfunitheaderIDLgt readfunitdims

Lecirc a parte binaacuteria depois de saber as dimensotildees

IDLgt data_read=dblarr(dims)IDLgt readuunitdata_read

Fecha o arquivo

IDLgt free_lununit

Verifica que os dados foram gravados e lidos corretamente

IDLgt printarray_equal(data_to_writedata_read) 1

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Lecirc dados binaacuterios (read unformatted)

8889

Sumaacuterio

5 ndash Slides em httpwwwppenteadonetpeapea04_strings_iopdf Strings Expressotildees regulares Arquivos

httpwwwppenteadonetpea

8989

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89

Arquivos - binaacuterios - FITSNormalmente FITS satildeo lidos escritos por bibliotecas prontas de (relativamente) alto niacutevel usuaacuterio natildeo tem que saber como os dados satildeo armazenados no arquivo nem como os ler escrever Ex (IDL com a biblioteca idlastro)

IDLgt fits_info2dspectrumfits2dspectrumfits has 3 extensionsPrimary header 288 recordsNo dataExtension 1 -- SCI Header 144 records IMAGE ( 1201 1201 )Extension 2 -- ERR Header 72 records IMAGE ( 1201 1201 )Extension 3 -- DQ Header 72 records IMAGE ( 1201 1201 )

IDLgt mydata=readfits(2dspectrumfitsexten_no=1myheader) READFITS Reading FITS extension of type IMAGE READFITS Now reading 1201 by 1201 array

IDLgt extastmyheadermyastIDLgt sz=size(mydatadimensions)IDLgt xy2ad[1sz[0]][1sz[1]]myastcorners_acorners_dIDLgt printcorners_aCorners of the data array from file 2dspectrumfits are at 14487480 33063480

IDLgt printcorners_d -00041264444 00041402222

Obteacutem os dados de coordenadas (WCS) do header

Coloca os dados no array (2D de floats) mydata e o header no array (1D de strings) myheader

Calcula as coordenadas das quinas da imagem atraveacutes do WCS

Provecirc informaccedilotildees sobre o arquivo

7089

Arquivos - binaacuterios - ISIS Cube

Formatos como FITS se adequam muito a ter uma interface de mais alto niacutevel por objetos

Tambeacutem para dados em tabelas FITS muito mais trabalhosos de ler em baixo niacutevel que se adequam muito mais a mapas ou estruturas

Exemplo (de um formato semelhante a FITS ISIS cube)

O objeto ao ser criado lecirc todo o arquivo

cube=pp_editablecube(CM_1553510065_1_ircub)

Meacutetodos fornecem os dados desejados para obter quando necessaacuterio os dados de interesse

Find out the names of the backplanesprintcubegetproperty(backnames)Get the start time of the cubeprintcubegetfromheader(START_TIME)2007-084T100057286Z

Valores no cabeccedilalho podem ser convenientemente fornecidos como um mapa

header=cubeheader_as_hash()printheader[START_TIME]2007-084T100057286Z

7189

Arquivos - binaacuterios ndash ISIS Cube

Os dados satildeo fornecidos como arraysMake a contour plot of the latitudesc=contour(cubegetsuffixbyname(LATITUDE))Get the band with wavelength nearest to 21 (in the units used in the cube)selband=cubegetbandbywavelength(21wavelengths=selwavs)

Interfaces por overload tornam o acesso ainda mais conveniente

selband=cube[21]

selwavs=cube[21]

Retorna um array com a banda de comprimento de onda mais proacuteximo de 21 (microm)

Retorna o comprimento de onda mais proacuteximo de 21 (microm) da banda retornada acima

7289

Arquivos - binaacuterios ndash ISIS Cube Alteraccedilotildees feitas ao conteuacutedo satildeo automaticamente refletidas em todos os

lugares (cabeccedilalho em particular) afetados mantendo o objeto vaacutelido que pode depois ser gravado em um novo arquivo

IDLgt printcubelinescubesamplescubebands 64 64 256

IDLgt helpcubecoreltExpressiongt FLOAT = Array[64 64 256]

IDLgt cubecore=dblarr(100100256)

A linha acima natildeo eacute uma atribuiccedilatildeo eacute uma invocaccedilatildeo de meacutetodo Eacute equivalente acubesetpropertycore=dblarr(100100256)

Eacute o trabalho da funccedilatildeo setproperty decidir se a propriedade passada (core) faz sentido e se fizer fazer todo o trabalho necessaacuterio a esta mudanccedila Para o usuaacuterio eacute tudo automaacutetico e os dados da classe satildeo vaacutelidos o tempo todo

IDLgt helpcubecoreltExpressiongt DOUBLE = Array[100 100 256]

IDLgt printcubelinescubesamplescubebands 100 100 256

IDLgt cubesaveCM_1553510065_1_ir_editedcub

7389

Arquivos - binaacuterios ndash NetCDF e HDF5

Network Common Data Form e Hierarchical Data Format

Os dois uacutenicos formatos bem estabelecidos para dados cientiacuteficos geneacutericos

Armazenam dados como vaacuterias variaacuteveis e seus metadados Para cada variaacutevel haacute (ou pode haver) os metadados

Nome Dimensotildees (do array) Unidades Comentaacuterios

Ambos permitem arrays multidimensionais

Apenas HDF5 permite estruturas (daiacute vem a hierarquia)

Autodocumentados qualquer software que saiba ler um destes formatos lecirc qualquer arquivo sem precisar de conhecimento preacutevio sobre como o arquivo foi gerado

Muito bem suportados em bibliotecas padratildeo e natildeo padratildeo em softwares interativos e visualizadores (inclusive plugins para navegadores)

httpwwwunidataucaredusoftwarenetcdf httpenwikipediaorgwikiHdf5

NetCDF eacute mais simples de usar por natildeo ter hierarquia dando menos trabalho para ler e escrever dados Se hierarquia natildeo eacute necessaacuteria eacute mais conveniente de usar que HDF5

7489

Arquivos - binaacuterios - NetCDF e HDF5Haacute tambeacutem o formato CDL uma versatildeo ASCII do NetCDF A biblioteca padratildeo do NetCDF inclui conversores entre estes formatos

$ ncdump -h refspec_g01_0ncnetcdf refspec_g01_0 dimensions nlay = 51 nwn = 400 nleg = 33 numu = 2 nlev = 52 nphi = 3 ngas = 2 nwnc = 1 scal = 1 v3 = 3 dnl = 1 nk = 1 tdisr = UNLIMITED (0 currently) na = 16

variables float alb(nwn) float z(nlay) float t(nlay) float p(nlay) float wl(nwn) float iof(nwn) float mtau(nwn) float htau(nwn) float hctaus(nwn) float gtau(nwn) float outcos(scal) float phi(nleg) float phic(scal) float umu(numu) float flux(v3 nwn nlev) float mix(nlay ngas) float c(nlay) float psat(nlay) float ga(nwnc) float wlc(nwnc) float inc(scal) int dm(scal) int ord(scal) float fbeam(scal) float wn(nwn) float tautot(nwn nlay) float htaus(nwn nlay) float htaux(nwn nlay) float taug(nwn nlay) float phase(nwn nlay nleg) float ssa(nwn nlay) float uu(nwn nphi nlev numu) float u0u(nwn nlev numu) float tray(nwn nlay) float gtauo(tdisr nwn nlay)

Haacute 14 variaacuteveis usadas como dimensotildees para as 35 variaacuteveis que satildeo arrays

Ex alb(nwn) indica que alb eacute um array 1D de nwn elementos

nwn estaacute armazenado como uma das dimensotildees e eacute 400 portanto alb tem 400 elementos

Parte do conteuacutedo de um arquivo NetCDF em formato CDL (gerado pelo programa ncdump)

7589

Arquivos - binaacuterios - NetCDF e HDF5Conteuacutedo daquele arquivo visualizado com o ncview (acompanha a biblioteca NetCDF padratildeo)

7689

Arquivos - binaacuterios - NetCDF e HDF5O conteuacutedo de todo o arquivo pode ser lido facilmente com as bibliotecas disponiacuteveis e armazenado em contecirciners convenientes Usando um objeto que gera um resultado um pouco mais conveniente

IDLgt h=pp_readncdf(refspec_g01_0nchash)IDLgt printhvar_dims ltObjHeapVar229(HASH)gtvars ltObjHeapVar152(HASH)gtdims ltObjHeapVar118(HASH)gt

IDLgt printh[vars]T 173203 175459 175848 176001 175975 Z 431869 418858 406067 393403 380464 FLUX 300660 145536 0705180 0341669 0165532 PHASE 100000 0779034 0660858 0542052 0449983 TAUTOT0694377 0693420 0693474 0693540 0693636()

IDLgt help(h[vars])[TAUTOT]ltExpressiongt FLOAT = Array[51 400]

IDLgt print(h[var_dims])[TAUTOT]NLAY NWN

IDLgt print(h[dims])[(h[var_dims])[TAUTOT]]NLAY 51NWN 400

7789

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5)

Visualizaccedilatildeo da variaacutevel selecionada

Metadados e alguns valores da variaacutevel selecionada

Variaacutevel a ser criada com o conteuacutedo desta variaacutevel do arquivo

Hierarquia das variaacuteveis do arquivo

7889

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5) Imported variable az

IDLgt helpaz Structure ltd5723f38gt 13 tags length=448 data length=444 refs=1 _NAME STRING az _ICONTYPE STRING binary _TYPE STRING DATASET _FILE STRING INTENSI_test_409OUTh5 _PATH STRING _DATA DOUBLE Array[38] _NDIMENSIONS LONG 1 _DIMENSIONS ULONG64 Array[1] _NELEMENTS ULONG64 38 _DATATYPE STRING H5T_FLOAT _STORAGESIZE ULONG 8 _PRECISION LONG 64 _SIGN STRING

IDLgt printaz_data 00000000 10000000 20000000 30000000 40000000 50000000 60000000 80000000 ()

7989

Arquivos - binaacuterios - imagens

JPEG JPEG200 TIFF GeoTIFF etc

Os formatos comuns de imagens satildeo bem suportados em muacuteltiplas plataformas para uso dentro de programas e interativamente

Alguns formatos tecircm opccedilatildeo de compressatildeo com perda eou sem perda

Armazenam imagens como arrays 2D ou 3D (3D frequumlentemente limitado a 3 ou 4 em uma das dimensotildees uma imagem em 3 ou 4 bandas) de inteiros ou (em alguns formatos) reais

Alguns formatos permitem armazenar metadados para caracterizar as imagens armazenadas

JPEG2000 e GeoTIFF (um subconjunto de TIFF) comuns em astronomia e aacutereas proacuteximas

8089

Arquivos - binaacuterios ndash imagens ndash exemplo (IDL)IDLgt printquery_tiff(issmap_2009tiffinfogeotiff=geo) 1

IDLgt helpinfo Structure ltd4eca4b8gt 18 tags length=144 data length=132 refs=1 CHANNELS LONG 4 DIMENSIONS LONG Array[2] IMAGE_INDEX LONG 0 NUM_IMAGES LONG 1 PIXEL_TYPE INT 1 TYPE STRING TIFF BITS_PER_SAMPLE LONG 8 POSITION FLOAT Array[2] RESOLUTION FLOAT Array[2] UNITS LONG 2 TILE_SIZE LONG Array[2] DESCRIPTION STRING ISS (2009) DATE_TIME STRING 20100218 012436()

IDLgt helpgeo Structure ltd4efa1b8gt 10 tags length=264 data length=262 refs=1 MODELPIXELSCALETAG DOUBLE Array[3] MODELTIEPOINTTAG DOUBLE Array[6 4] GEOGRAPHICTYPEGEOKEY INT 4035 GEOGSEMIMAJORAXISGEOKEY DOUBLE 25750000 GEOGSEMIMINORAXISGEOKEY DOUBLE 25750000()

IDLgt myimage=read_tiff(issmap_2009tiff) Lecirc a imagem para o array myimage

Obteacutem informaccedilotildees sobre o arquivo

8189

Arquivos - binaacuterios ndash formatos nativosLinguagens como IDL R Python Java tecircm seu formato nativo binaacuterio acessado em alto niacutevel Basta mandar salvar ler variaacuteveis no do arquivo a biblioteca padratildeo automagicamente faz todo o trabalho de decidir como gravar ler os dados

Conveniente de usar na proacutepria linguagem Mas raramente existem bibliotecas para ler gravar o formato nativo de uma linguagem a partir de outra Ex (IDL)

IDLgt savefile=2dspectrumsavmydatamyheadercorners_dcorners_averbosecompress SAVE Portable (XDR) compressed SAVERESTORE file SAVE Saved variable MYDATA SAVE Saved variable MYHEADER()

Pode ser lido com apenas (haacute formas mais elaboradas)

IDLgt restore2dspectrumsavverbose RESTORE Portable (XDR) compressed SAVERESTORE file RESTORE Save file written by ltunknowngtltunknowngt Thu Jan 27 191422 2011 RESTORE IDL version 801 (linux x86_64) RESTORE Restored variable MYDATA RESTORE Restored variable MYHEADER()

IDLgt helpmydatamyheadercorners_dcorners_aMYDATA FLOAT = Array[1201 1201]MYHEADER STRING = Array[144]()

8289

Arquivos - processamento em baixo niacutevel

Nem sempre um formato padratildeo eacute a melhor escolha para o problema

Nem sempre haacute escolha (pode-se ter que trabalhar com arquivos que jaacute foram escritos em algum formato proprietaacuterio)

Agraves vezes o formato eacute padratildeo mas natildeo haacute bom suporte a ele disponiacutevel

Em todos estes casos eacute necessaacuterio escrever rotinas em baixo niacutevel que vatildeo ler processar diretamente o conteuacutedo do arquivo

Preferencialmente criando interfaces de alto niacutevel para o programa que vai as usar

8389

Arquivos - processamento em baixo niacutevel - texto

Tomando o exemplo anterior onde as colunas eram de diferentes tipos

NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS dec18s0001 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0002 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0003 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 FLAT 5408757812500 460000 5 dec18s0004 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 DARK 5408757812500 460000 5

A forma mais simples de o ler diretamente eacute definir uma estrutura para receber cada linha e um array destas estruturas para receber todo o arquivo Ex (IDL)

IDLgt record=namecalmpos0filnameechlpos0d0disppos0d0targnameposdirclassmjd_obsitime0d0coadds0IDLgt nlines=file_lines(filesearch_scamtxt)IDLgt mydata=replicate(recordnlines-1)IDLgt header=

Depois de definidas as variaacuteveis que vatildeo receber os dados o arquivo pode ser lido

IDLgt openrunitfilesearch_scamtxtget_lunIDLgt readfunitheaderIDLgt readfunitmydataformat=(A14I8A15F104F104A18A19A15F158F105I15)IDLgt free_lununit

A gravaccedilatildeo de um arquivo texto poderia ser feita de forma semelhante apenas trocando openr por openw (abrir o arquivo para gravaccedilatildeo natildeo leitura) e readf por printf

O arquivo eacute aberto em uma unidade (unit) usada para especificar de onde eacute feita a leitura

Ao final o arquivo eacute fechado

8489

Arquivos - processamento em baixo niacutevel - texto

O que resulta em

IDLgt printheader NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS

IDLgt helpmydataMYDATA STRUCT = -gt ltAnonymousgt Array[4]

IDLgt helpmydata[0] Structure ltd5e38f68gt 11 tags length=136 data length=124 refs=3 NAME STRING dec18s0001 CALMPOS INT 0 FILNAME STRING NIRSPEC-5-AO ECHLPOS DOUBLE 62630000 DISPPOS DOUBLE 36450000 TARGNAME STRING HD85258 POSDIR STRING NIRSPEC-5-AOp1 CLASS STRING STAR MJD_OBS STRING 54087574 ITIME DOUBLE 10000000 COADDS INT 1

Este caso eacute mais complicado que os mais comuns por haver colunas de strings

Se todas fossem de nuacutemeros natildeo teria sido necessaacuterio especificar o formato explicitamente As colunas teriam sido adivinhadas pela biblioteca que lecirc o arquivo Poderia ter sido lido escrito soacute com um array de nuacutemeros sem estruturas

8589

Arquivos - processamento em baixo niacutevel - binaacuterio

Formatos binaacuterios podem ser definidos de qualquer forma O arquivo eacute apenas um conjunto de bytes Cabe ao software saber como os interpretar

Uma escolha comum para que sejam autodocumentados eacute incluir um cabeccedilalho de texto informando as caracteriacutesticas dos dados necessaacuterias para os ler

Ex (IDL) criar um arquivo que armazene um array de doubles com um cabeccedilalho informando as dimensotildees para que o programa que o lecirc saiba como ler os dados

Inventa dados e abre o arquivo

IDLgt data_to_write=dindgen(34)IDLgt openwunitbinary_exampledatget_lun

Escreve as dimensotildees como texto

IDLgt printfunitdimensions of the double array stored belowIDLgt printfunitsize(data_to_writedimensions)

Escreve os dados binaacuterios

IDLgt writeuunitdata_to_write

Fecha o arquivo

IDLgt free_lununit

Escreve em binaacuterio (write unformatted)

8689

Arquivos - processamento em baixo niacutevel - binaacuterio

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

dimensions of the double array stored below 3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

8789

Arquivos - processamento em baixo niacutevel - binaacuterioA leitura deste arquivo eacute igualmente simples

IDLgt header=IDLgt dims=[00]IDLgt openrunitbinary_exampledatget_lun

Lecirc as dimensotildees (armazenadas como texto)

IDLgt readfunitheaderIDLgt readfunitdims

Lecirc a parte binaacuteria depois de saber as dimensotildees

IDLgt data_read=dblarr(dims)IDLgt readuunitdata_read

Fecha o arquivo

IDLgt free_lununit

Verifica que os dados foram gravados e lidos corretamente

IDLgt printarray_equal(data_to_writedata_read) 1

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Lecirc dados binaacuterios (read unformatted)

8889

Sumaacuterio

5 ndash Slides em httpwwwppenteadonetpeapea04_strings_iopdf Strings Expressotildees regulares Arquivos

httpwwwppenteadonetpea

8989

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89

Arquivos - binaacuterios - ISIS Cube

Formatos como FITS se adequam muito a ter uma interface de mais alto niacutevel por objetos

Tambeacutem para dados em tabelas FITS muito mais trabalhosos de ler em baixo niacutevel que se adequam muito mais a mapas ou estruturas

Exemplo (de um formato semelhante a FITS ISIS cube)

O objeto ao ser criado lecirc todo o arquivo

cube=pp_editablecube(CM_1553510065_1_ircub)

Meacutetodos fornecem os dados desejados para obter quando necessaacuterio os dados de interesse

Find out the names of the backplanesprintcubegetproperty(backnames)Get the start time of the cubeprintcubegetfromheader(START_TIME)2007-084T100057286Z

Valores no cabeccedilalho podem ser convenientemente fornecidos como um mapa

header=cubeheader_as_hash()printheader[START_TIME]2007-084T100057286Z

7189

Arquivos - binaacuterios ndash ISIS Cube

Os dados satildeo fornecidos como arraysMake a contour plot of the latitudesc=contour(cubegetsuffixbyname(LATITUDE))Get the band with wavelength nearest to 21 (in the units used in the cube)selband=cubegetbandbywavelength(21wavelengths=selwavs)

Interfaces por overload tornam o acesso ainda mais conveniente

selband=cube[21]

selwavs=cube[21]

Retorna um array com a banda de comprimento de onda mais proacuteximo de 21 (microm)

Retorna o comprimento de onda mais proacuteximo de 21 (microm) da banda retornada acima

7289

Arquivos - binaacuterios ndash ISIS Cube Alteraccedilotildees feitas ao conteuacutedo satildeo automaticamente refletidas em todos os

lugares (cabeccedilalho em particular) afetados mantendo o objeto vaacutelido que pode depois ser gravado em um novo arquivo

IDLgt printcubelinescubesamplescubebands 64 64 256

IDLgt helpcubecoreltExpressiongt FLOAT = Array[64 64 256]

IDLgt cubecore=dblarr(100100256)

A linha acima natildeo eacute uma atribuiccedilatildeo eacute uma invocaccedilatildeo de meacutetodo Eacute equivalente acubesetpropertycore=dblarr(100100256)

Eacute o trabalho da funccedilatildeo setproperty decidir se a propriedade passada (core) faz sentido e se fizer fazer todo o trabalho necessaacuterio a esta mudanccedila Para o usuaacuterio eacute tudo automaacutetico e os dados da classe satildeo vaacutelidos o tempo todo

IDLgt helpcubecoreltExpressiongt DOUBLE = Array[100 100 256]

IDLgt printcubelinescubesamplescubebands 100 100 256

IDLgt cubesaveCM_1553510065_1_ir_editedcub

7389

Arquivos - binaacuterios ndash NetCDF e HDF5

Network Common Data Form e Hierarchical Data Format

Os dois uacutenicos formatos bem estabelecidos para dados cientiacuteficos geneacutericos

Armazenam dados como vaacuterias variaacuteveis e seus metadados Para cada variaacutevel haacute (ou pode haver) os metadados

Nome Dimensotildees (do array) Unidades Comentaacuterios

Ambos permitem arrays multidimensionais

Apenas HDF5 permite estruturas (daiacute vem a hierarquia)

Autodocumentados qualquer software que saiba ler um destes formatos lecirc qualquer arquivo sem precisar de conhecimento preacutevio sobre como o arquivo foi gerado

Muito bem suportados em bibliotecas padratildeo e natildeo padratildeo em softwares interativos e visualizadores (inclusive plugins para navegadores)

httpwwwunidataucaredusoftwarenetcdf httpenwikipediaorgwikiHdf5

NetCDF eacute mais simples de usar por natildeo ter hierarquia dando menos trabalho para ler e escrever dados Se hierarquia natildeo eacute necessaacuteria eacute mais conveniente de usar que HDF5

7489

Arquivos - binaacuterios - NetCDF e HDF5Haacute tambeacutem o formato CDL uma versatildeo ASCII do NetCDF A biblioteca padratildeo do NetCDF inclui conversores entre estes formatos

$ ncdump -h refspec_g01_0ncnetcdf refspec_g01_0 dimensions nlay = 51 nwn = 400 nleg = 33 numu = 2 nlev = 52 nphi = 3 ngas = 2 nwnc = 1 scal = 1 v3 = 3 dnl = 1 nk = 1 tdisr = UNLIMITED (0 currently) na = 16

variables float alb(nwn) float z(nlay) float t(nlay) float p(nlay) float wl(nwn) float iof(nwn) float mtau(nwn) float htau(nwn) float hctaus(nwn) float gtau(nwn) float outcos(scal) float phi(nleg) float phic(scal) float umu(numu) float flux(v3 nwn nlev) float mix(nlay ngas) float c(nlay) float psat(nlay) float ga(nwnc) float wlc(nwnc) float inc(scal) int dm(scal) int ord(scal) float fbeam(scal) float wn(nwn) float tautot(nwn nlay) float htaus(nwn nlay) float htaux(nwn nlay) float taug(nwn nlay) float phase(nwn nlay nleg) float ssa(nwn nlay) float uu(nwn nphi nlev numu) float u0u(nwn nlev numu) float tray(nwn nlay) float gtauo(tdisr nwn nlay)

Haacute 14 variaacuteveis usadas como dimensotildees para as 35 variaacuteveis que satildeo arrays

Ex alb(nwn) indica que alb eacute um array 1D de nwn elementos

nwn estaacute armazenado como uma das dimensotildees e eacute 400 portanto alb tem 400 elementos

Parte do conteuacutedo de um arquivo NetCDF em formato CDL (gerado pelo programa ncdump)

7589

Arquivos - binaacuterios - NetCDF e HDF5Conteuacutedo daquele arquivo visualizado com o ncview (acompanha a biblioteca NetCDF padratildeo)

7689

Arquivos - binaacuterios - NetCDF e HDF5O conteuacutedo de todo o arquivo pode ser lido facilmente com as bibliotecas disponiacuteveis e armazenado em contecirciners convenientes Usando um objeto que gera um resultado um pouco mais conveniente

IDLgt h=pp_readncdf(refspec_g01_0nchash)IDLgt printhvar_dims ltObjHeapVar229(HASH)gtvars ltObjHeapVar152(HASH)gtdims ltObjHeapVar118(HASH)gt

IDLgt printh[vars]T 173203 175459 175848 176001 175975 Z 431869 418858 406067 393403 380464 FLUX 300660 145536 0705180 0341669 0165532 PHASE 100000 0779034 0660858 0542052 0449983 TAUTOT0694377 0693420 0693474 0693540 0693636()

IDLgt help(h[vars])[TAUTOT]ltExpressiongt FLOAT = Array[51 400]

IDLgt print(h[var_dims])[TAUTOT]NLAY NWN

IDLgt print(h[dims])[(h[var_dims])[TAUTOT]]NLAY 51NWN 400

7789

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5)

Visualizaccedilatildeo da variaacutevel selecionada

Metadados e alguns valores da variaacutevel selecionada

Variaacutevel a ser criada com o conteuacutedo desta variaacutevel do arquivo

Hierarquia das variaacuteveis do arquivo

7889

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5) Imported variable az

IDLgt helpaz Structure ltd5723f38gt 13 tags length=448 data length=444 refs=1 _NAME STRING az _ICONTYPE STRING binary _TYPE STRING DATASET _FILE STRING INTENSI_test_409OUTh5 _PATH STRING _DATA DOUBLE Array[38] _NDIMENSIONS LONG 1 _DIMENSIONS ULONG64 Array[1] _NELEMENTS ULONG64 38 _DATATYPE STRING H5T_FLOAT _STORAGESIZE ULONG 8 _PRECISION LONG 64 _SIGN STRING

IDLgt printaz_data 00000000 10000000 20000000 30000000 40000000 50000000 60000000 80000000 ()

7989

Arquivos - binaacuterios - imagens

JPEG JPEG200 TIFF GeoTIFF etc

Os formatos comuns de imagens satildeo bem suportados em muacuteltiplas plataformas para uso dentro de programas e interativamente

Alguns formatos tecircm opccedilatildeo de compressatildeo com perda eou sem perda

Armazenam imagens como arrays 2D ou 3D (3D frequumlentemente limitado a 3 ou 4 em uma das dimensotildees uma imagem em 3 ou 4 bandas) de inteiros ou (em alguns formatos) reais

Alguns formatos permitem armazenar metadados para caracterizar as imagens armazenadas

JPEG2000 e GeoTIFF (um subconjunto de TIFF) comuns em astronomia e aacutereas proacuteximas

8089

Arquivos - binaacuterios ndash imagens ndash exemplo (IDL)IDLgt printquery_tiff(issmap_2009tiffinfogeotiff=geo) 1

IDLgt helpinfo Structure ltd4eca4b8gt 18 tags length=144 data length=132 refs=1 CHANNELS LONG 4 DIMENSIONS LONG Array[2] IMAGE_INDEX LONG 0 NUM_IMAGES LONG 1 PIXEL_TYPE INT 1 TYPE STRING TIFF BITS_PER_SAMPLE LONG 8 POSITION FLOAT Array[2] RESOLUTION FLOAT Array[2] UNITS LONG 2 TILE_SIZE LONG Array[2] DESCRIPTION STRING ISS (2009) DATE_TIME STRING 20100218 012436()

IDLgt helpgeo Structure ltd4efa1b8gt 10 tags length=264 data length=262 refs=1 MODELPIXELSCALETAG DOUBLE Array[3] MODELTIEPOINTTAG DOUBLE Array[6 4] GEOGRAPHICTYPEGEOKEY INT 4035 GEOGSEMIMAJORAXISGEOKEY DOUBLE 25750000 GEOGSEMIMINORAXISGEOKEY DOUBLE 25750000()

IDLgt myimage=read_tiff(issmap_2009tiff) Lecirc a imagem para o array myimage

Obteacutem informaccedilotildees sobre o arquivo

8189

Arquivos - binaacuterios ndash formatos nativosLinguagens como IDL R Python Java tecircm seu formato nativo binaacuterio acessado em alto niacutevel Basta mandar salvar ler variaacuteveis no do arquivo a biblioteca padratildeo automagicamente faz todo o trabalho de decidir como gravar ler os dados

Conveniente de usar na proacutepria linguagem Mas raramente existem bibliotecas para ler gravar o formato nativo de uma linguagem a partir de outra Ex (IDL)

IDLgt savefile=2dspectrumsavmydatamyheadercorners_dcorners_averbosecompress SAVE Portable (XDR) compressed SAVERESTORE file SAVE Saved variable MYDATA SAVE Saved variable MYHEADER()

Pode ser lido com apenas (haacute formas mais elaboradas)

IDLgt restore2dspectrumsavverbose RESTORE Portable (XDR) compressed SAVERESTORE file RESTORE Save file written by ltunknowngtltunknowngt Thu Jan 27 191422 2011 RESTORE IDL version 801 (linux x86_64) RESTORE Restored variable MYDATA RESTORE Restored variable MYHEADER()

IDLgt helpmydatamyheadercorners_dcorners_aMYDATA FLOAT = Array[1201 1201]MYHEADER STRING = Array[144]()

8289

Arquivos - processamento em baixo niacutevel

Nem sempre um formato padratildeo eacute a melhor escolha para o problema

Nem sempre haacute escolha (pode-se ter que trabalhar com arquivos que jaacute foram escritos em algum formato proprietaacuterio)

Agraves vezes o formato eacute padratildeo mas natildeo haacute bom suporte a ele disponiacutevel

Em todos estes casos eacute necessaacuterio escrever rotinas em baixo niacutevel que vatildeo ler processar diretamente o conteuacutedo do arquivo

Preferencialmente criando interfaces de alto niacutevel para o programa que vai as usar

8389

Arquivos - processamento em baixo niacutevel - texto

Tomando o exemplo anterior onde as colunas eram de diferentes tipos

NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS dec18s0001 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0002 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0003 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 FLAT 5408757812500 460000 5 dec18s0004 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 DARK 5408757812500 460000 5

A forma mais simples de o ler diretamente eacute definir uma estrutura para receber cada linha e um array destas estruturas para receber todo o arquivo Ex (IDL)

IDLgt record=namecalmpos0filnameechlpos0d0disppos0d0targnameposdirclassmjd_obsitime0d0coadds0IDLgt nlines=file_lines(filesearch_scamtxt)IDLgt mydata=replicate(recordnlines-1)IDLgt header=

Depois de definidas as variaacuteveis que vatildeo receber os dados o arquivo pode ser lido

IDLgt openrunitfilesearch_scamtxtget_lunIDLgt readfunitheaderIDLgt readfunitmydataformat=(A14I8A15F104F104A18A19A15F158F105I15)IDLgt free_lununit

A gravaccedilatildeo de um arquivo texto poderia ser feita de forma semelhante apenas trocando openr por openw (abrir o arquivo para gravaccedilatildeo natildeo leitura) e readf por printf

O arquivo eacute aberto em uma unidade (unit) usada para especificar de onde eacute feita a leitura

Ao final o arquivo eacute fechado

8489

Arquivos - processamento em baixo niacutevel - texto

O que resulta em

IDLgt printheader NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS

IDLgt helpmydataMYDATA STRUCT = -gt ltAnonymousgt Array[4]

IDLgt helpmydata[0] Structure ltd5e38f68gt 11 tags length=136 data length=124 refs=3 NAME STRING dec18s0001 CALMPOS INT 0 FILNAME STRING NIRSPEC-5-AO ECHLPOS DOUBLE 62630000 DISPPOS DOUBLE 36450000 TARGNAME STRING HD85258 POSDIR STRING NIRSPEC-5-AOp1 CLASS STRING STAR MJD_OBS STRING 54087574 ITIME DOUBLE 10000000 COADDS INT 1

Este caso eacute mais complicado que os mais comuns por haver colunas de strings

Se todas fossem de nuacutemeros natildeo teria sido necessaacuterio especificar o formato explicitamente As colunas teriam sido adivinhadas pela biblioteca que lecirc o arquivo Poderia ter sido lido escrito soacute com um array de nuacutemeros sem estruturas

8589

Arquivos - processamento em baixo niacutevel - binaacuterio

Formatos binaacuterios podem ser definidos de qualquer forma O arquivo eacute apenas um conjunto de bytes Cabe ao software saber como os interpretar

Uma escolha comum para que sejam autodocumentados eacute incluir um cabeccedilalho de texto informando as caracteriacutesticas dos dados necessaacuterias para os ler

Ex (IDL) criar um arquivo que armazene um array de doubles com um cabeccedilalho informando as dimensotildees para que o programa que o lecirc saiba como ler os dados

Inventa dados e abre o arquivo

IDLgt data_to_write=dindgen(34)IDLgt openwunitbinary_exampledatget_lun

Escreve as dimensotildees como texto

IDLgt printfunitdimensions of the double array stored belowIDLgt printfunitsize(data_to_writedimensions)

Escreve os dados binaacuterios

IDLgt writeuunitdata_to_write

Fecha o arquivo

IDLgt free_lununit

Escreve em binaacuterio (write unformatted)

8689

Arquivos - processamento em baixo niacutevel - binaacuterio

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

dimensions of the double array stored below 3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

8789

Arquivos - processamento em baixo niacutevel - binaacuterioA leitura deste arquivo eacute igualmente simples

IDLgt header=IDLgt dims=[00]IDLgt openrunitbinary_exampledatget_lun

Lecirc as dimensotildees (armazenadas como texto)

IDLgt readfunitheaderIDLgt readfunitdims

Lecirc a parte binaacuteria depois de saber as dimensotildees

IDLgt data_read=dblarr(dims)IDLgt readuunitdata_read

Fecha o arquivo

IDLgt free_lununit

Verifica que os dados foram gravados e lidos corretamente

IDLgt printarray_equal(data_to_writedata_read) 1

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Lecirc dados binaacuterios (read unformatted)

8889

Sumaacuterio

5 ndash Slides em httpwwwppenteadonetpeapea04_strings_iopdf Strings Expressotildees regulares Arquivos

httpwwwppenteadonetpea

8989

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89

Arquivos - binaacuterios ndash ISIS Cube

Os dados satildeo fornecidos como arraysMake a contour plot of the latitudesc=contour(cubegetsuffixbyname(LATITUDE))Get the band with wavelength nearest to 21 (in the units used in the cube)selband=cubegetbandbywavelength(21wavelengths=selwavs)

Interfaces por overload tornam o acesso ainda mais conveniente

selband=cube[21]

selwavs=cube[21]

Retorna um array com a banda de comprimento de onda mais proacuteximo de 21 (microm)

Retorna o comprimento de onda mais proacuteximo de 21 (microm) da banda retornada acima

7289

Arquivos - binaacuterios ndash ISIS Cube Alteraccedilotildees feitas ao conteuacutedo satildeo automaticamente refletidas em todos os

lugares (cabeccedilalho em particular) afetados mantendo o objeto vaacutelido que pode depois ser gravado em um novo arquivo

IDLgt printcubelinescubesamplescubebands 64 64 256

IDLgt helpcubecoreltExpressiongt FLOAT = Array[64 64 256]

IDLgt cubecore=dblarr(100100256)

A linha acima natildeo eacute uma atribuiccedilatildeo eacute uma invocaccedilatildeo de meacutetodo Eacute equivalente acubesetpropertycore=dblarr(100100256)

Eacute o trabalho da funccedilatildeo setproperty decidir se a propriedade passada (core) faz sentido e se fizer fazer todo o trabalho necessaacuterio a esta mudanccedila Para o usuaacuterio eacute tudo automaacutetico e os dados da classe satildeo vaacutelidos o tempo todo

IDLgt helpcubecoreltExpressiongt DOUBLE = Array[100 100 256]

IDLgt printcubelinescubesamplescubebands 100 100 256

IDLgt cubesaveCM_1553510065_1_ir_editedcub

7389

Arquivos - binaacuterios ndash NetCDF e HDF5

Network Common Data Form e Hierarchical Data Format

Os dois uacutenicos formatos bem estabelecidos para dados cientiacuteficos geneacutericos

Armazenam dados como vaacuterias variaacuteveis e seus metadados Para cada variaacutevel haacute (ou pode haver) os metadados

Nome Dimensotildees (do array) Unidades Comentaacuterios

Ambos permitem arrays multidimensionais

Apenas HDF5 permite estruturas (daiacute vem a hierarquia)

Autodocumentados qualquer software que saiba ler um destes formatos lecirc qualquer arquivo sem precisar de conhecimento preacutevio sobre como o arquivo foi gerado

Muito bem suportados em bibliotecas padratildeo e natildeo padratildeo em softwares interativos e visualizadores (inclusive plugins para navegadores)

httpwwwunidataucaredusoftwarenetcdf httpenwikipediaorgwikiHdf5

NetCDF eacute mais simples de usar por natildeo ter hierarquia dando menos trabalho para ler e escrever dados Se hierarquia natildeo eacute necessaacuteria eacute mais conveniente de usar que HDF5

7489

Arquivos - binaacuterios - NetCDF e HDF5Haacute tambeacutem o formato CDL uma versatildeo ASCII do NetCDF A biblioteca padratildeo do NetCDF inclui conversores entre estes formatos

$ ncdump -h refspec_g01_0ncnetcdf refspec_g01_0 dimensions nlay = 51 nwn = 400 nleg = 33 numu = 2 nlev = 52 nphi = 3 ngas = 2 nwnc = 1 scal = 1 v3 = 3 dnl = 1 nk = 1 tdisr = UNLIMITED (0 currently) na = 16

variables float alb(nwn) float z(nlay) float t(nlay) float p(nlay) float wl(nwn) float iof(nwn) float mtau(nwn) float htau(nwn) float hctaus(nwn) float gtau(nwn) float outcos(scal) float phi(nleg) float phic(scal) float umu(numu) float flux(v3 nwn nlev) float mix(nlay ngas) float c(nlay) float psat(nlay) float ga(nwnc) float wlc(nwnc) float inc(scal) int dm(scal) int ord(scal) float fbeam(scal) float wn(nwn) float tautot(nwn nlay) float htaus(nwn nlay) float htaux(nwn nlay) float taug(nwn nlay) float phase(nwn nlay nleg) float ssa(nwn nlay) float uu(nwn nphi nlev numu) float u0u(nwn nlev numu) float tray(nwn nlay) float gtauo(tdisr nwn nlay)

Haacute 14 variaacuteveis usadas como dimensotildees para as 35 variaacuteveis que satildeo arrays

Ex alb(nwn) indica que alb eacute um array 1D de nwn elementos

nwn estaacute armazenado como uma das dimensotildees e eacute 400 portanto alb tem 400 elementos

Parte do conteuacutedo de um arquivo NetCDF em formato CDL (gerado pelo programa ncdump)

7589

Arquivos - binaacuterios - NetCDF e HDF5Conteuacutedo daquele arquivo visualizado com o ncview (acompanha a biblioteca NetCDF padratildeo)

7689

Arquivos - binaacuterios - NetCDF e HDF5O conteuacutedo de todo o arquivo pode ser lido facilmente com as bibliotecas disponiacuteveis e armazenado em contecirciners convenientes Usando um objeto que gera um resultado um pouco mais conveniente

IDLgt h=pp_readncdf(refspec_g01_0nchash)IDLgt printhvar_dims ltObjHeapVar229(HASH)gtvars ltObjHeapVar152(HASH)gtdims ltObjHeapVar118(HASH)gt

IDLgt printh[vars]T 173203 175459 175848 176001 175975 Z 431869 418858 406067 393403 380464 FLUX 300660 145536 0705180 0341669 0165532 PHASE 100000 0779034 0660858 0542052 0449983 TAUTOT0694377 0693420 0693474 0693540 0693636()

IDLgt help(h[vars])[TAUTOT]ltExpressiongt FLOAT = Array[51 400]

IDLgt print(h[var_dims])[TAUTOT]NLAY NWN

IDLgt print(h[dims])[(h[var_dims])[TAUTOT]]NLAY 51NWN 400

7789

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5)

Visualizaccedilatildeo da variaacutevel selecionada

Metadados e alguns valores da variaacutevel selecionada

Variaacutevel a ser criada com o conteuacutedo desta variaacutevel do arquivo

Hierarquia das variaacuteveis do arquivo

7889

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5) Imported variable az

IDLgt helpaz Structure ltd5723f38gt 13 tags length=448 data length=444 refs=1 _NAME STRING az _ICONTYPE STRING binary _TYPE STRING DATASET _FILE STRING INTENSI_test_409OUTh5 _PATH STRING _DATA DOUBLE Array[38] _NDIMENSIONS LONG 1 _DIMENSIONS ULONG64 Array[1] _NELEMENTS ULONG64 38 _DATATYPE STRING H5T_FLOAT _STORAGESIZE ULONG 8 _PRECISION LONG 64 _SIGN STRING

IDLgt printaz_data 00000000 10000000 20000000 30000000 40000000 50000000 60000000 80000000 ()

7989

Arquivos - binaacuterios - imagens

JPEG JPEG200 TIFF GeoTIFF etc

Os formatos comuns de imagens satildeo bem suportados em muacuteltiplas plataformas para uso dentro de programas e interativamente

Alguns formatos tecircm opccedilatildeo de compressatildeo com perda eou sem perda

Armazenam imagens como arrays 2D ou 3D (3D frequumlentemente limitado a 3 ou 4 em uma das dimensotildees uma imagem em 3 ou 4 bandas) de inteiros ou (em alguns formatos) reais

Alguns formatos permitem armazenar metadados para caracterizar as imagens armazenadas

JPEG2000 e GeoTIFF (um subconjunto de TIFF) comuns em astronomia e aacutereas proacuteximas

8089

Arquivos - binaacuterios ndash imagens ndash exemplo (IDL)IDLgt printquery_tiff(issmap_2009tiffinfogeotiff=geo) 1

IDLgt helpinfo Structure ltd4eca4b8gt 18 tags length=144 data length=132 refs=1 CHANNELS LONG 4 DIMENSIONS LONG Array[2] IMAGE_INDEX LONG 0 NUM_IMAGES LONG 1 PIXEL_TYPE INT 1 TYPE STRING TIFF BITS_PER_SAMPLE LONG 8 POSITION FLOAT Array[2] RESOLUTION FLOAT Array[2] UNITS LONG 2 TILE_SIZE LONG Array[2] DESCRIPTION STRING ISS (2009) DATE_TIME STRING 20100218 012436()

IDLgt helpgeo Structure ltd4efa1b8gt 10 tags length=264 data length=262 refs=1 MODELPIXELSCALETAG DOUBLE Array[3] MODELTIEPOINTTAG DOUBLE Array[6 4] GEOGRAPHICTYPEGEOKEY INT 4035 GEOGSEMIMAJORAXISGEOKEY DOUBLE 25750000 GEOGSEMIMINORAXISGEOKEY DOUBLE 25750000()

IDLgt myimage=read_tiff(issmap_2009tiff) Lecirc a imagem para o array myimage

Obteacutem informaccedilotildees sobre o arquivo

8189

Arquivos - binaacuterios ndash formatos nativosLinguagens como IDL R Python Java tecircm seu formato nativo binaacuterio acessado em alto niacutevel Basta mandar salvar ler variaacuteveis no do arquivo a biblioteca padratildeo automagicamente faz todo o trabalho de decidir como gravar ler os dados

Conveniente de usar na proacutepria linguagem Mas raramente existem bibliotecas para ler gravar o formato nativo de uma linguagem a partir de outra Ex (IDL)

IDLgt savefile=2dspectrumsavmydatamyheadercorners_dcorners_averbosecompress SAVE Portable (XDR) compressed SAVERESTORE file SAVE Saved variable MYDATA SAVE Saved variable MYHEADER()

Pode ser lido com apenas (haacute formas mais elaboradas)

IDLgt restore2dspectrumsavverbose RESTORE Portable (XDR) compressed SAVERESTORE file RESTORE Save file written by ltunknowngtltunknowngt Thu Jan 27 191422 2011 RESTORE IDL version 801 (linux x86_64) RESTORE Restored variable MYDATA RESTORE Restored variable MYHEADER()

IDLgt helpmydatamyheadercorners_dcorners_aMYDATA FLOAT = Array[1201 1201]MYHEADER STRING = Array[144]()

8289

Arquivos - processamento em baixo niacutevel

Nem sempre um formato padratildeo eacute a melhor escolha para o problema

Nem sempre haacute escolha (pode-se ter que trabalhar com arquivos que jaacute foram escritos em algum formato proprietaacuterio)

Agraves vezes o formato eacute padratildeo mas natildeo haacute bom suporte a ele disponiacutevel

Em todos estes casos eacute necessaacuterio escrever rotinas em baixo niacutevel que vatildeo ler processar diretamente o conteuacutedo do arquivo

Preferencialmente criando interfaces de alto niacutevel para o programa que vai as usar

8389

Arquivos - processamento em baixo niacutevel - texto

Tomando o exemplo anterior onde as colunas eram de diferentes tipos

NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS dec18s0001 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0002 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0003 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 FLAT 5408757812500 460000 5 dec18s0004 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 DARK 5408757812500 460000 5

A forma mais simples de o ler diretamente eacute definir uma estrutura para receber cada linha e um array destas estruturas para receber todo o arquivo Ex (IDL)

IDLgt record=namecalmpos0filnameechlpos0d0disppos0d0targnameposdirclassmjd_obsitime0d0coadds0IDLgt nlines=file_lines(filesearch_scamtxt)IDLgt mydata=replicate(recordnlines-1)IDLgt header=

Depois de definidas as variaacuteveis que vatildeo receber os dados o arquivo pode ser lido

IDLgt openrunitfilesearch_scamtxtget_lunIDLgt readfunitheaderIDLgt readfunitmydataformat=(A14I8A15F104F104A18A19A15F158F105I15)IDLgt free_lununit

A gravaccedilatildeo de um arquivo texto poderia ser feita de forma semelhante apenas trocando openr por openw (abrir o arquivo para gravaccedilatildeo natildeo leitura) e readf por printf

O arquivo eacute aberto em uma unidade (unit) usada para especificar de onde eacute feita a leitura

Ao final o arquivo eacute fechado

8489

Arquivos - processamento em baixo niacutevel - texto

O que resulta em

IDLgt printheader NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS

IDLgt helpmydataMYDATA STRUCT = -gt ltAnonymousgt Array[4]

IDLgt helpmydata[0] Structure ltd5e38f68gt 11 tags length=136 data length=124 refs=3 NAME STRING dec18s0001 CALMPOS INT 0 FILNAME STRING NIRSPEC-5-AO ECHLPOS DOUBLE 62630000 DISPPOS DOUBLE 36450000 TARGNAME STRING HD85258 POSDIR STRING NIRSPEC-5-AOp1 CLASS STRING STAR MJD_OBS STRING 54087574 ITIME DOUBLE 10000000 COADDS INT 1

Este caso eacute mais complicado que os mais comuns por haver colunas de strings

Se todas fossem de nuacutemeros natildeo teria sido necessaacuterio especificar o formato explicitamente As colunas teriam sido adivinhadas pela biblioteca que lecirc o arquivo Poderia ter sido lido escrito soacute com um array de nuacutemeros sem estruturas

8589

Arquivos - processamento em baixo niacutevel - binaacuterio

Formatos binaacuterios podem ser definidos de qualquer forma O arquivo eacute apenas um conjunto de bytes Cabe ao software saber como os interpretar

Uma escolha comum para que sejam autodocumentados eacute incluir um cabeccedilalho de texto informando as caracteriacutesticas dos dados necessaacuterias para os ler

Ex (IDL) criar um arquivo que armazene um array de doubles com um cabeccedilalho informando as dimensotildees para que o programa que o lecirc saiba como ler os dados

Inventa dados e abre o arquivo

IDLgt data_to_write=dindgen(34)IDLgt openwunitbinary_exampledatget_lun

Escreve as dimensotildees como texto

IDLgt printfunitdimensions of the double array stored belowIDLgt printfunitsize(data_to_writedimensions)

Escreve os dados binaacuterios

IDLgt writeuunitdata_to_write

Fecha o arquivo

IDLgt free_lununit

Escreve em binaacuterio (write unformatted)

8689

Arquivos - processamento em baixo niacutevel - binaacuterio

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

dimensions of the double array stored below 3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

8789

Arquivos - processamento em baixo niacutevel - binaacuterioA leitura deste arquivo eacute igualmente simples

IDLgt header=IDLgt dims=[00]IDLgt openrunitbinary_exampledatget_lun

Lecirc as dimensotildees (armazenadas como texto)

IDLgt readfunitheaderIDLgt readfunitdims

Lecirc a parte binaacuteria depois de saber as dimensotildees

IDLgt data_read=dblarr(dims)IDLgt readuunitdata_read

Fecha o arquivo

IDLgt free_lununit

Verifica que os dados foram gravados e lidos corretamente

IDLgt printarray_equal(data_to_writedata_read) 1

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Lecirc dados binaacuterios (read unformatted)

8889

Sumaacuterio

5 ndash Slides em httpwwwppenteadonetpeapea04_strings_iopdf Strings Expressotildees regulares Arquivos

httpwwwppenteadonetpea

8989

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89

Arquivos - binaacuterios ndash ISIS Cube Alteraccedilotildees feitas ao conteuacutedo satildeo automaticamente refletidas em todos os

lugares (cabeccedilalho em particular) afetados mantendo o objeto vaacutelido que pode depois ser gravado em um novo arquivo

IDLgt printcubelinescubesamplescubebands 64 64 256

IDLgt helpcubecoreltExpressiongt FLOAT = Array[64 64 256]

IDLgt cubecore=dblarr(100100256)

A linha acima natildeo eacute uma atribuiccedilatildeo eacute uma invocaccedilatildeo de meacutetodo Eacute equivalente acubesetpropertycore=dblarr(100100256)

Eacute o trabalho da funccedilatildeo setproperty decidir se a propriedade passada (core) faz sentido e se fizer fazer todo o trabalho necessaacuterio a esta mudanccedila Para o usuaacuterio eacute tudo automaacutetico e os dados da classe satildeo vaacutelidos o tempo todo

IDLgt helpcubecoreltExpressiongt DOUBLE = Array[100 100 256]

IDLgt printcubelinescubesamplescubebands 100 100 256

IDLgt cubesaveCM_1553510065_1_ir_editedcub

7389

Arquivos - binaacuterios ndash NetCDF e HDF5

Network Common Data Form e Hierarchical Data Format

Os dois uacutenicos formatos bem estabelecidos para dados cientiacuteficos geneacutericos

Armazenam dados como vaacuterias variaacuteveis e seus metadados Para cada variaacutevel haacute (ou pode haver) os metadados

Nome Dimensotildees (do array) Unidades Comentaacuterios

Ambos permitem arrays multidimensionais

Apenas HDF5 permite estruturas (daiacute vem a hierarquia)

Autodocumentados qualquer software que saiba ler um destes formatos lecirc qualquer arquivo sem precisar de conhecimento preacutevio sobre como o arquivo foi gerado

Muito bem suportados em bibliotecas padratildeo e natildeo padratildeo em softwares interativos e visualizadores (inclusive plugins para navegadores)

httpwwwunidataucaredusoftwarenetcdf httpenwikipediaorgwikiHdf5

NetCDF eacute mais simples de usar por natildeo ter hierarquia dando menos trabalho para ler e escrever dados Se hierarquia natildeo eacute necessaacuteria eacute mais conveniente de usar que HDF5

7489

Arquivos - binaacuterios - NetCDF e HDF5Haacute tambeacutem o formato CDL uma versatildeo ASCII do NetCDF A biblioteca padratildeo do NetCDF inclui conversores entre estes formatos

$ ncdump -h refspec_g01_0ncnetcdf refspec_g01_0 dimensions nlay = 51 nwn = 400 nleg = 33 numu = 2 nlev = 52 nphi = 3 ngas = 2 nwnc = 1 scal = 1 v3 = 3 dnl = 1 nk = 1 tdisr = UNLIMITED (0 currently) na = 16

variables float alb(nwn) float z(nlay) float t(nlay) float p(nlay) float wl(nwn) float iof(nwn) float mtau(nwn) float htau(nwn) float hctaus(nwn) float gtau(nwn) float outcos(scal) float phi(nleg) float phic(scal) float umu(numu) float flux(v3 nwn nlev) float mix(nlay ngas) float c(nlay) float psat(nlay) float ga(nwnc) float wlc(nwnc) float inc(scal) int dm(scal) int ord(scal) float fbeam(scal) float wn(nwn) float tautot(nwn nlay) float htaus(nwn nlay) float htaux(nwn nlay) float taug(nwn nlay) float phase(nwn nlay nleg) float ssa(nwn nlay) float uu(nwn nphi nlev numu) float u0u(nwn nlev numu) float tray(nwn nlay) float gtauo(tdisr nwn nlay)

Haacute 14 variaacuteveis usadas como dimensotildees para as 35 variaacuteveis que satildeo arrays

Ex alb(nwn) indica que alb eacute um array 1D de nwn elementos

nwn estaacute armazenado como uma das dimensotildees e eacute 400 portanto alb tem 400 elementos

Parte do conteuacutedo de um arquivo NetCDF em formato CDL (gerado pelo programa ncdump)

7589

Arquivos - binaacuterios - NetCDF e HDF5Conteuacutedo daquele arquivo visualizado com o ncview (acompanha a biblioteca NetCDF padratildeo)

7689

Arquivos - binaacuterios - NetCDF e HDF5O conteuacutedo de todo o arquivo pode ser lido facilmente com as bibliotecas disponiacuteveis e armazenado em contecirciners convenientes Usando um objeto que gera um resultado um pouco mais conveniente

IDLgt h=pp_readncdf(refspec_g01_0nchash)IDLgt printhvar_dims ltObjHeapVar229(HASH)gtvars ltObjHeapVar152(HASH)gtdims ltObjHeapVar118(HASH)gt

IDLgt printh[vars]T 173203 175459 175848 176001 175975 Z 431869 418858 406067 393403 380464 FLUX 300660 145536 0705180 0341669 0165532 PHASE 100000 0779034 0660858 0542052 0449983 TAUTOT0694377 0693420 0693474 0693540 0693636()

IDLgt help(h[vars])[TAUTOT]ltExpressiongt FLOAT = Array[51 400]

IDLgt print(h[var_dims])[TAUTOT]NLAY NWN

IDLgt print(h[dims])[(h[var_dims])[TAUTOT]]NLAY 51NWN 400

7789

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5)

Visualizaccedilatildeo da variaacutevel selecionada

Metadados e alguns valores da variaacutevel selecionada

Variaacutevel a ser criada com o conteuacutedo desta variaacutevel do arquivo

Hierarquia das variaacuteveis do arquivo

7889

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5) Imported variable az

IDLgt helpaz Structure ltd5723f38gt 13 tags length=448 data length=444 refs=1 _NAME STRING az _ICONTYPE STRING binary _TYPE STRING DATASET _FILE STRING INTENSI_test_409OUTh5 _PATH STRING _DATA DOUBLE Array[38] _NDIMENSIONS LONG 1 _DIMENSIONS ULONG64 Array[1] _NELEMENTS ULONG64 38 _DATATYPE STRING H5T_FLOAT _STORAGESIZE ULONG 8 _PRECISION LONG 64 _SIGN STRING

IDLgt printaz_data 00000000 10000000 20000000 30000000 40000000 50000000 60000000 80000000 ()

7989

Arquivos - binaacuterios - imagens

JPEG JPEG200 TIFF GeoTIFF etc

Os formatos comuns de imagens satildeo bem suportados em muacuteltiplas plataformas para uso dentro de programas e interativamente

Alguns formatos tecircm opccedilatildeo de compressatildeo com perda eou sem perda

Armazenam imagens como arrays 2D ou 3D (3D frequumlentemente limitado a 3 ou 4 em uma das dimensotildees uma imagem em 3 ou 4 bandas) de inteiros ou (em alguns formatos) reais

Alguns formatos permitem armazenar metadados para caracterizar as imagens armazenadas

JPEG2000 e GeoTIFF (um subconjunto de TIFF) comuns em astronomia e aacutereas proacuteximas

8089

Arquivos - binaacuterios ndash imagens ndash exemplo (IDL)IDLgt printquery_tiff(issmap_2009tiffinfogeotiff=geo) 1

IDLgt helpinfo Structure ltd4eca4b8gt 18 tags length=144 data length=132 refs=1 CHANNELS LONG 4 DIMENSIONS LONG Array[2] IMAGE_INDEX LONG 0 NUM_IMAGES LONG 1 PIXEL_TYPE INT 1 TYPE STRING TIFF BITS_PER_SAMPLE LONG 8 POSITION FLOAT Array[2] RESOLUTION FLOAT Array[2] UNITS LONG 2 TILE_SIZE LONG Array[2] DESCRIPTION STRING ISS (2009) DATE_TIME STRING 20100218 012436()

IDLgt helpgeo Structure ltd4efa1b8gt 10 tags length=264 data length=262 refs=1 MODELPIXELSCALETAG DOUBLE Array[3] MODELTIEPOINTTAG DOUBLE Array[6 4] GEOGRAPHICTYPEGEOKEY INT 4035 GEOGSEMIMAJORAXISGEOKEY DOUBLE 25750000 GEOGSEMIMINORAXISGEOKEY DOUBLE 25750000()

IDLgt myimage=read_tiff(issmap_2009tiff) Lecirc a imagem para o array myimage

Obteacutem informaccedilotildees sobre o arquivo

8189

Arquivos - binaacuterios ndash formatos nativosLinguagens como IDL R Python Java tecircm seu formato nativo binaacuterio acessado em alto niacutevel Basta mandar salvar ler variaacuteveis no do arquivo a biblioteca padratildeo automagicamente faz todo o trabalho de decidir como gravar ler os dados

Conveniente de usar na proacutepria linguagem Mas raramente existem bibliotecas para ler gravar o formato nativo de uma linguagem a partir de outra Ex (IDL)

IDLgt savefile=2dspectrumsavmydatamyheadercorners_dcorners_averbosecompress SAVE Portable (XDR) compressed SAVERESTORE file SAVE Saved variable MYDATA SAVE Saved variable MYHEADER()

Pode ser lido com apenas (haacute formas mais elaboradas)

IDLgt restore2dspectrumsavverbose RESTORE Portable (XDR) compressed SAVERESTORE file RESTORE Save file written by ltunknowngtltunknowngt Thu Jan 27 191422 2011 RESTORE IDL version 801 (linux x86_64) RESTORE Restored variable MYDATA RESTORE Restored variable MYHEADER()

IDLgt helpmydatamyheadercorners_dcorners_aMYDATA FLOAT = Array[1201 1201]MYHEADER STRING = Array[144]()

8289

Arquivos - processamento em baixo niacutevel

Nem sempre um formato padratildeo eacute a melhor escolha para o problema

Nem sempre haacute escolha (pode-se ter que trabalhar com arquivos que jaacute foram escritos em algum formato proprietaacuterio)

Agraves vezes o formato eacute padratildeo mas natildeo haacute bom suporte a ele disponiacutevel

Em todos estes casos eacute necessaacuterio escrever rotinas em baixo niacutevel que vatildeo ler processar diretamente o conteuacutedo do arquivo

Preferencialmente criando interfaces de alto niacutevel para o programa que vai as usar

8389

Arquivos - processamento em baixo niacutevel - texto

Tomando o exemplo anterior onde as colunas eram de diferentes tipos

NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS dec18s0001 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0002 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0003 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 FLAT 5408757812500 460000 5 dec18s0004 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 DARK 5408757812500 460000 5

A forma mais simples de o ler diretamente eacute definir uma estrutura para receber cada linha e um array destas estruturas para receber todo o arquivo Ex (IDL)

IDLgt record=namecalmpos0filnameechlpos0d0disppos0d0targnameposdirclassmjd_obsitime0d0coadds0IDLgt nlines=file_lines(filesearch_scamtxt)IDLgt mydata=replicate(recordnlines-1)IDLgt header=

Depois de definidas as variaacuteveis que vatildeo receber os dados o arquivo pode ser lido

IDLgt openrunitfilesearch_scamtxtget_lunIDLgt readfunitheaderIDLgt readfunitmydataformat=(A14I8A15F104F104A18A19A15F158F105I15)IDLgt free_lununit

A gravaccedilatildeo de um arquivo texto poderia ser feita de forma semelhante apenas trocando openr por openw (abrir o arquivo para gravaccedilatildeo natildeo leitura) e readf por printf

O arquivo eacute aberto em uma unidade (unit) usada para especificar de onde eacute feita a leitura

Ao final o arquivo eacute fechado

8489

Arquivos - processamento em baixo niacutevel - texto

O que resulta em

IDLgt printheader NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS

IDLgt helpmydataMYDATA STRUCT = -gt ltAnonymousgt Array[4]

IDLgt helpmydata[0] Structure ltd5e38f68gt 11 tags length=136 data length=124 refs=3 NAME STRING dec18s0001 CALMPOS INT 0 FILNAME STRING NIRSPEC-5-AO ECHLPOS DOUBLE 62630000 DISPPOS DOUBLE 36450000 TARGNAME STRING HD85258 POSDIR STRING NIRSPEC-5-AOp1 CLASS STRING STAR MJD_OBS STRING 54087574 ITIME DOUBLE 10000000 COADDS INT 1

Este caso eacute mais complicado que os mais comuns por haver colunas de strings

Se todas fossem de nuacutemeros natildeo teria sido necessaacuterio especificar o formato explicitamente As colunas teriam sido adivinhadas pela biblioteca que lecirc o arquivo Poderia ter sido lido escrito soacute com um array de nuacutemeros sem estruturas

8589

Arquivos - processamento em baixo niacutevel - binaacuterio

Formatos binaacuterios podem ser definidos de qualquer forma O arquivo eacute apenas um conjunto de bytes Cabe ao software saber como os interpretar

Uma escolha comum para que sejam autodocumentados eacute incluir um cabeccedilalho de texto informando as caracteriacutesticas dos dados necessaacuterias para os ler

Ex (IDL) criar um arquivo que armazene um array de doubles com um cabeccedilalho informando as dimensotildees para que o programa que o lecirc saiba como ler os dados

Inventa dados e abre o arquivo

IDLgt data_to_write=dindgen(34)IDLgt openwunitbinary_exampledatget_lun

Escreve as dimensotildees como texto

IDLgt printfunitdimensions of the double array stored belowIDLgt printfunitsize(data_to_writedimensions)

Escreve os dados binaacuterios

IDLgt writeuunitdata_to_write

Fecha o arquivo

IDLgt free_lununit

Escreve em binaacuterio (write unformatted)

8689

Arquivos - processamento em baixo niacutevel - binaacuterio

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

dimensions of the double array stored below 3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

8789

Arquivos - processamento em baixo niacutevel - binaacuterioA leitura deste arquivo eacute igualmente simples

IDLgt header=IDLgt dims=[00]IDLgt openrunitbinary_exampledatget_lun

Lecirc as dimensotildees (armazenadas como texto)

IDLgt readfunitheaderIDLgt readfunitdims

Lecirc a parte binaacuteria depois de saber as dimensotildees

IDLgt data_read=dblarr(dims)IDLgt readuunitdata_read

Fecha o arquivo

IDLgt free_lununit

Verifica que os dados foram gravados e lidos corretamente

IDLgt printarray_equal(data_to_writedata_read) 1

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Lecirc dados binaacuterios (read unformatted)

8889

Sumaacuterio

5 ndash Slides em httpwwwppenteadonetpeapea04_strings_iopdf Strings Expressotildees regulares Arquivos

httpwwwppenteadonetpea

8989

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89

Arquivos - binaacuterios ndash NetCDF e HDF5

Network Common Data Form e Hierarchical Data Format

Os dois uacutenicos formatos bem estabelecidos para dados cientiacuteficos geneacutericos

Armazenam dados como vaacuterias variaacuteveis e seus metadados Para cada variaacutevel haacute (ou pode haver) os metadados

Nome Dimensotildees (do array) Unidades Comentaacuterios

Ambos permitem arrays multidimensionais

Apenas HDF5 permite estruturas (daiacute vem a hierarquia)

Autodocumentados qualquer software que saiba ler um destes formatos lecirc qualquer arquivo sem precisar de conhecimento preacutevio sobre como o arquivo foi gerado

Muito bem suportados em bibliotecas padratildeo e natildeo padratildeo em softwares interativos e visualizadores (inclusive plugins para navegadores)

httpwwwunidataucaredusoftwarenetcdf httpenwikipediaorgwikiHdf5

NetCDF eacute mais simples de usar por natildeo ter hierarquia dando menos trabalho para ler e escrever dados Se hierarquia natildeo eacute necessaacuteria eacute mais conveniente de usar que HDF5

7489

Arquivos - binaacuterios - NetCDF e HDF5Haacute tambeacutem o formato CDL uma versatildeo ASCII do NetCDF A biblioteca padratildeo do NetCDF inclui conversores entre estes formatos

$ ncdump -h refspec_g01_0ncnetcdf refspec_g01_0 dimensions nlay = 51 nwn = 400 nleg = 33 numu = 2 nlev = 52 nphi = 3 ngas = 2 nwnc = 1 scal = 1 v3 = 3 dnl = 1 nk = 1 tdisr = UNLIMITED (0 currently) na = 16

variables float alb(nwn) float z(nlay) float t(nlay) float p(nlay) float wl(nwn) float iof(nwn) float mtau(nwn) float htau(nwn) float hctaus(nwn) float gtau(nwn) float outcos(scal) float phi(nleg) float phic(scal) float umu(numu) float flux(v3 nwn nlev) float mix(nlay ngas) float c(nlay) float psat(nlay) float ga(nwnc) float wlc(nwnc) float inc(scal) int dm(scal) int ord(scal) float fbeam(scal) float wn(nwn) float tautot(nwn nlay) float htaus(nwn nlay) float htaux(nwn nlay) float taug(nwn nlay) float phase(nwn nlay nleg) float ssa(nwn nlay) float uu(nwn nphi nlev numu) float u0u(nwn nlev numu) float tray(nwn nlay) float gtauo(tdisr nwn nlay)

Haacute 14 variaacuteveis usadas como dimensotildees para as 35 variaacuteveis que satildeo arrays

Ex alb(nwn) indica que alb eacute um array 1D de nwn elementos

nwn estaacute armazenado como uma das dimensotildees e eacute 400 portanto alb tem 400 elementos

Parte do conteuacutedo de um arquivo NetCDF em formato CDL (gerado pelo programa ncdump)

7589

Arquivos - binaacuterios - NetCDF e HDF5Conteuacutedo daquele arquivo visualizado com o ncview (acompanha a biblioteca NetCDF padratildeo)

7689

Arquivos - binaacuterios - NetCDF e HDF5O conteuacutedo de todo o arquivo pode ser lido facilmente com as bibliotecas disponiacuteveis e armazenado em contecirciners convenientes Usando um objeto que gera um resultado um pouco mais conveniente

IDLgt h=pp_readncdf(refspec_g01_0nchash)IDLgt printhvar_dims ltObjHeapVar229(HASH)gtvars ltObjHeapVar152(HASH)gtdims ltObjHeapVar118(HASH)gt

IDLgt printh[vars]T 173203 175459 175848 176001 175975 Z 431869 418858 406067 393403 380464 FLUX 300660 145536 0705180 0341669 0165532 PHASE 100000 0779034 0660858 0542052 0449983 TAUTOT0694377 0693420 0693474 0693540 0693636()

IDLgt help(h[vars])[TAUTOT]ltExpressiongt FLOAT = Array[51 400]

IDLgt print(h[var_dims])[TAUTOT]NLAY NWN

IDLgt print(h[dims])[(h[var_dims])[TAUTOT]]NLAY 51NWN 400

7789

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5)

Visualizaccedilatildeo da variaacutevel selecionada

Metadados e alguns valores da variaacutevel selecionada

Variaacutevel a ser criada com o conteuacutedo desta variaacutevel do arquivo

Hierarquia das variaacuteveis do arquivo

7889

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5) Imported variable az

IDLgt helpaz Structure ltd5723f38gt 13 tags length=448 data length=444 refs=1 _NAME STRING az _ICONTYPE STRING binary _TYPE STRING DATASET _FILE STRING INTENSI_test_409OUTh5 _PATH STRING _DATA DOUBLE Array[38] _NDIMENSIONS LONG 1 _DIMENSIONS ULONG64 Array[1] _NELEMENTS ULONG64 38 _DATATYPE STRING H5T_FLOAT _STORAGESIZE ULONG 8 _PRECISION LONG 64 _SIGN STRING

IDLgt printaz_data 00000000 10000000 20000000 30000000 40000000 50000000 60000000 80000000 ()

7989

Arquivos - binaacuterios - imagens

JPEG JPEG200 TIFF GeoTIFF etc

Os formatos comuns de imagens satildeo bem suportados em muacuteltiplas plataformas para uso dentro de programas e interativamente

Alguns formatos tecircm opccedilatildeo de compressatildeo com perda eou sem perda

Armazenam imagens como arrays 2D ou 3D (3D frequumlentemente limitado a 3 ou 4 em uma das dimensotildees uma imagem em 3 ou 4 bandas) de inteiros ou (em alguns formatos) reais

Alguns formatos permitem armazenar metadados para caracterizar as imagens armazenadas

JPEG2000 e GeoTIFF (um subconjunto de TIFF) comuns em astronomia e aacutereas proacuteximas

8089

Arquivos - binaacuterios ndash imagens ndash exemplo (IDL)IDLgt printquery_tiff(issmap_2009tiffinfogeotiff=geo) 1

IDLgt helpinfo Structure ltd4eca4b8gt 18 tags length=144 data length=132 refs=1 CHANNELS LONG 4 DIMENSIONS LONG Array[2] IMAGE_INDEX LONG 0 NUM_IMAGES LONG 1 PIXEL_TYPE INT 1 TYPE STRING TIFF BITS_PER_SAMPLE LONG 8 POSITION FLOAT Array[2] RESOLUTION FLOAT Array[2] UNITS LONG 2 TILE_SIZE LONG Array[2] DESCRIPTION STRING ISS (2009) DATE_TIME STRING 20100218 012436()

IDLgt helpgeo Structure ltd4efa1b8gt 10 tags length=264 data length=262 refs=1 MODELPIXELSCALETAG DOUBLE Array[3] MODELTIEPOINTTAG DOUBLE Array[6 4] GEOGRAPHICTYPEGEOKEY INT 4035 GEOGSEMIMAJORAXISGEOKEY DOUBLE 25750000 GEOGSEMIMINORAXISGEOKEY DOUBLE 25750000()

IDLgt myimage=read_tiff(issmap_2009tiff) Lecirc a imagem para o array myimage

Obteacutem informaccedilotildees sobre o arquivo

8189

Arquivos - binaacuterios ndash formatos nativosLinguagens como IDL R Python Java tecircm seu formato nativo binaacuterio acessado em alto niacutevel Basta mandar salvar ler variaacuteveis no do arquivo a biblioteca padratildeo automagicamente faz todo o trabalho de decidir como gravar ler os dados

Conveniente de usar na proacutepria linguagem Mas raramente existem bibliotecas para ler gravar o formato nativo de uma linguagem a partir de outra Ex (IDL)

IDLgt savefile=2dspectrumsavmydatamyheadercorners_dcorners_averbosecompress SAVE Portable (XDR) compressed SAVERESTORE file SAVE Saved variable MYDATA SAVE Saved variable MYHEADER()

Pode ser lido com apenas (haacute formas mais elaboradas)

IDLgt restore2dspectrumsavverbose RESTORE Portable (XDR) compressed SAVERESTORE file RESTORE Save file written by ltunknowngtltunknowngt Thu Jan 27 191422 2011 RESTORE IDL version 801 (linux x86_64) RESTORE Restored variable MYDATA RESTORE Restored variable MYHEADER()

IDLgt helpmydatamyheadercorners_dcorners_aMYDATA FLOAT = Array[1201 1201]MYHEADER STRING = Array[144]()

8289

Arquivos - processamento em baixo niacutevel

Nem sempre um formato padratildeo eacute a melhor escolha para o problema

Nem sempre haacute escolha (pode-se ter que trabalhar com arquivos que jaacute foram escritos em algum formato proprietaacuterio)

Agraves vezes o formato eacute padratildeo mas natildeo haacute bom suporte a ele disponiacutevel

Em todos estes casos eacute necessaacuterio escrever rotinas em baixo niacutevel que vatildeo ler processar diretamente o conteuacutedo do arquivo

Preferencialmente criando interfaces de alto niacutevel para o programa que vai as usar

8389

Arquivos - processamento em baixo niacutevel - texto

Tomando o exemplo anterior onde as colunas eram de diferentes tipos

NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS dec18s0001 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0002 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0003 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 FLAT 5408757812500 460000 5 dec18s0004 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 DARK 5408757812500 460000 5

A forma mais simples de o ler diretamente eacute definir uma estrutura para receber cada linha e um array destas estruturas para receber todo o arquivo Ex (IDL)

IDLgt record=namecalmpos0filnameechlpos0d0disppos0d0targnameposdirclassmjd_obsitime0d0coadds0IDLgt nlines=file_lines(filesearch_scamtxt)IDLgt mydata=replicate(recordnlines-1)IDLgt header=

Depois de definidas as variaacuteveis que vatildeo receber os dados o arquivo pode ser lido

IDLgt openrunitfilesearch_scamtxtget_lunIDLgt readfunitheaderIDLgt readfunitmydataformat=(A14I8A15F104F104A18A19A15F158F105I15)IDLgt free_lununit

A gravaccedilatildeo de um arquivo texto poderia ser feita de forma semelhante apenas trocando openr por openw (abrir o arquivo para gravaccedilatildeo natildeo leitura) e readf por printf

O arquivo eacute aberto em uma unidade (unit) usada para especificar de onde eacute feita a leitura

Ao final o arquivo eacute fechado

8489

Arquivos - processamento em baixo niacutevel - texto

O que resulta em

IDLgt printheader NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS

IDLgt helpmydataMYDATA STRUCT = -gt ltAnonymousgt Array[4]

IDLgt helpmydata[0] Structure ltd5e38f68gt 11 tags length=136 data length=124 refs=3 NAME STRING dec18s0001 CALMPOS INT 0 FILNAME STRING NIRSPEC-5-AO ECHLPOS DOUBLE 62630000 DISPPOS DOUBLE 36450000 TARGNAME STRING HD85258 POSDIR STRING NIRSPEC-5-AOp1 CLASS STRING STAR MJD_OBS STRING 54087574 ITIME DOUBLE 10000000 COADDS INT 1

Este caso eacute mais complicado que os mais comuns por haver colunas de strings

Se todas fossem de nuacutemeros natildeo teria sido necessaacuterio especificar o formato explicitamente As colunas teriam sido adivinhadas pela biblioteca que lecirc o arquivo Poderia ter sido lido escrito soacute com um array de nuacutemeros sem estruturas

8589

Arquivos - processamento em baixo niacutevel - binaacuterio

Formatos binaacuterios podem ser definidos de qualquer forma O arquivo eacute apenas um conjunto de bytes Cabe ao software saber como os interpretar

Uma escolha comum para que sejam autodocumentados eacute incluir um cabeccedilalho de texto informando as caracteriacutesticas dos dados necessaacuterias para os ler

Ex (IDL) criar um arquivo que armazene um array de doubles com um cabeccedilalho informando as dimensotildees para que o programa que o lecirc saiba como ler os dados

Inventa dados e abre o arquivo

IDLgt data_to_write=dindgen(34)IDLgt openwunitbinary_exampledatget_lun

Escreve as dimensotildees como texto

IDLgt printfunitdimensions of the double array stored belowIDLgt printfunitsize(data_to_writedimensions)

Escreve os dados binaacuterios

IDLgt writeuunitdata_to_write

Fecha o arquivo

IDLgt free_lununit

Escreve em binaacuterio (write unformatted)

8689

Arquivos - processamento em baixo niacutevel - binaacuterio

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

dimensions of the double array stored below 3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

8789

Arquivos - processamento em baixo niacutevel - binaacuterioA leitura deste arquivo eacute igualmente simples

IDLgt header=IDLgt dims=[00]IDLgt openrunitbinary_exampledatget_lun

Lecirc as dimensotildees (armazenadas como texto)

IDLgt readfunitheaderIDLgt readfunitdims

Lecirc a parte binaacuteria depois de saber as dimensotildees

IDLgt data_read=dblarr(dims)IDLgt readuunitdata_read

Fecha o arquivo

IDLgt free_lununit

Verifica que os dados foram gravados e lidos corretamente

IDLgt printarray_equal(data_to_writedata_read) 1

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Lecirc dados binaacuterios (read unformatted)

8889

Sumaacuterio

5 ndash Slides em httpwwwppenteadonetpeapea04_strings_iopdf Strings Expressotildees regulares Arquivos

httpwwwppenteadonetpea

8989

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89

Arquivos - binaacuterios - NetCDF e HDF5Haacute tambeacutem o formato CDL uma versatildeo ASCII do NetCDF A biblioteca padratildeo do NetCDF inclui conversores entre estes formatos

$ ncdump -h refspec_g01_0ncnetcdf refspec_g01_0 dimensions nlay = 51 nwn = 400 nleg = 33 numu = 2 nlev = 52 nphi = 3 ngas = 2 nwnc = 1 scal = 1 v3 = 3 dnl = 1 nk = 1 tdisr = UNLIMITED (0 currently) na = 16

variables float alb(nwn) float z(nlay) float t(nlay) float p(nlay) float wl(nwn) float iof(nwn) float mtau(nwn) float htau(nwn) float hctaus(nwn) float gtau(nwn) float outcos(scal) float phi(nleg) float phic(scal) float umu(numu) float flux(v3 nwn nlev) float mix(nlay ngas) float c(nlay) float psat(nlay) float ga(nwnc) float wlc(nwnc) float inc(scal) int dm(scal) int ord(scal) float fbeam(scal) float wn(nwn) float tautot(nwn nlay) float htaus(nwn nlay) float htaux(nwn nlay) float taug(nwn nlay) float phase(nwn nlay nleg) float ssa(nwn nlay) float uu(nwn nphi nlev numu) float u0u(nwn nlev numu) float tray(nwn nlay) float gtauo(tdisr nwn nlay)

Haacute 14 variaacuteveis usadas como dimensotildees para as 35 variaacuteveis que satildeo arrays

Ex alb(nwn) indica que alb eacute um array 1D de nwn elementos

nwn estaacute armazenado como uma das dimensotildees e eacute 400 portanto alb tem 400 elementos

Parte do conteuacutedo de um arquivo NetCDF em formato CDL (gerado pelo programa ncdump)

7589

Arquivos - binaacuterios - NetCDF e HDF5Conteuacutedo daquele arquivo visualizado com o ncview (acompanha a biblioteca NetCDF padratildeo)

7689

Arquivos - binaacuterios - NetCDF e HDF5O conteuacutedo de todo o arquivo pode ser lido facilmente com as bibliotecas disponiacuteveis e armazenado em contecirciners convenientes Usando um objeto que gera um resultado um pouco mais conveniente

IDLgt h=pp_readncdf(refspec_g01_0nchash)IDLgt printhvar_dims ltObjHeapVar229(HASH)gtvars ltObjHeapVar152(HASH)gtdims ltObjHeapVar118(HASH)gt

IDLgt printh[vars]T 173203 175459 175848 176001 175975 Z 431869 418858 406067 393403 380464 FLUX 300660 145536 0705180 0341669 0165532 PHASE 100000 0779034 0660858 0542052 0449983 TAUTOT0694377 0693420 0693474 0693540 0693636()

IDLgt help(h[vars])[TAUTOT]ltExpressiongt FLOAT = Array[51 400]

IDLgt print(h[var_dims])[TAUTOT]NLAY NWN

IDLgt print(h[dims])[(h[var_dims])[TAUTOT]]NLAY 51NWN 400

7789

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5)

Visualizaccedilatildeo da variaacutevel selecionada

Metadados e alguns valores da variaacutevel selecionada

Variaacutevel a ser criada com o conteuacutedo desta variaacutevel do arquivo

Hierarquia das variaacuteveis do arquivo

7889

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5) Imported variable az

IDLgt helpaz Structure ltd5723f38gt 13 tags length=448 data length=444 refs=1 _NAME STRING az _ICONTYPE STRING binary _TYPE STRING DATASET _FILE STRING INTENSI_test_409OUTh5 _PATH STRING _DATA DOUBLE Array[38] _NDIMENSIONS LONG 1 _DIMENSIONS ULONG64 Array[1] _NELEMENTS ULONG64 38 _DATATYPE STRING H5T_FLOAT _STORAGESIZE ULONG 8 _PRECISION LONG 64 _SIGN STRING

IDLgt printaz_data 00000000 10000000 20000000 30000000 40000000 50000000 60000000 80000000 ()

7989

Arquivos - binaacuterios - imagens

JPEG JPEG200 TIFF GeoTIFF etc

Os formatos comuns de imagens satildeo bem suportados em muacuteltiplas plataformas para uso dentro de programas e interativamente

Alguns formatos tecircm opccedilatildeo de compressatildeo com perda eou sem perda

Armazenam imagens como arrays 2D ou 3D (3D frequumlentemente limitado a 3 ou 4 em uma das dimensotildees uma imagem em 3 ou 4 bandas) de inteiros ou (em alguns formatos) reais

Alguns formatos permitem armazenar metadados para caracterizar as imagens armazenadas

JPEG2000 e GeoTIFF (um subconjunto de TIFF) comuns em astronomia e aacutereas proacuteximas

8089

Arquivos - binaacuterios ndash imagens ndash exemplo (IDL)IDLgt printquery_tiff(issmap_2009tiffinfogeotiff=geo) 1

IDLgt helpinfo Structure ltd4eca4b8gt 18 tags length=144 data length=132 refs=1 CHANNELS LONG 4 DIMENSIONS LONG Array[2] IMAGE_INDEX LONG 0 NUM_IMAGES LONG 1 PIXEL_TYPE INT 1 TYPE STRING TIFF BITS_PER_SAMPLE LONG 8 POSITION FLOAT Array[2] RESOLUTION FLOAT Array[2] UNITS LONG 2 TILE_SIZE LONG Array[2] DESCRIPTION STRING ISS (2009) DATE_TIME STRING 20100218 012436()

IDLgt helpgeo Structure ltd4efa1b8gt 10 tags length=264 data length=262 refs=1 MODELPIXELSCALETAG DOUBLE Array[3] MODELTIEPOINTTAG DOUBLE Array[6 4] GEOGRAPHICTYPEGEOKEY INT 4035 GEOGSEMIMAJORAXISGEOKEY DOUBLE 25750000 GEOGSEMIMINORAXISGEOKEY DOUBLE 25750000()

IDLgt myimage=read_tiff(issmap_2009tiff) Lecirc a imagem para o array myimage

Obteacutem informaccedilotildees sobre o arquivo

8189

Arquivos - binaacuterios ndash formatos nativosLinguagens como IDL R Python Java tecircm seu formato nativo binaacuterio acessado em alto niacutevel Basta mandar salvar ler variaacuteveis no do arquivo a biblioteca padratildeo automagicamente faz todo o trabalho de decidir como gravar ler os dados

Conveniente de usar na proacutepria linguagem Mas raramente existem bibliotecas para ler gravar o formato nativo de uma linguagem a partir de outra Ex (IDL)

IDLgt savefile=2dspectrumsavmydatamyheadercorners_dcorners_averbosecompress SAVE Portable (XDR) compressed SAVERESTORE file SAVE Saved variable MYDATA SAVE Saved variable MYHEADER()

Pode ser lido com apenas (haacute formas mais elaboradas)

IDLgt restore2dspectrumsavverbose RESTORE Portable (XDR) compressed SAVERESTORE file RESTORE Save file written by ltunknowngtltunknowngt Thu Jan 27 191422 2011 RESTORE IDL version 801 (linux x86_64) RESTORE Restored variable MYDATA RESTORE Restored variable MYHEADER()

IDLgt helpmydatamyheadercorners_dcorners_aMYDATA FLOAT = Array[1201 1201]MYHEADER STRING = Array[144]()

8289

Arquivos - processamento em baixo niacutevel

Nem sempre um formato padratildeo eacute a melhor escolha para o problema

Nem sempre haacute escolha (pode-se ter que trabalhar com arquivos que jaacute foram escritos em algum formato proprietaacuterio)

Agraves vezes o formato eacute padratildeo mas natildeo haacute bom suporte a ele disponiacutevel

Em todos estes casos eacute necessaacuterio escrever rotinas em baixo niacutevel que vatildeo ler processar diretamente o conteuacutedo do arquivo

Preferencialmente criando interfaces de alto niacutevel para o programa que vai as usar

8389

Arquivos - processamento em baixo niacutevel - texto

Tomando o exemplo anterior onde as colunas eram de diferentes tipos

NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS dec18s0001 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0002 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0003 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 FLAT 5408757812500 460000 5 dec18s0004 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 DARK 5408757812500 460000 5

A forma mais simples de o ler diretamente eacute definir uma estrutura para receber cada linha e um array destas estruturas para receber todo o arquivo Ex (IDL)

IDLgt record=namecalmpos0filnameechlpos0d0disppos0d0targnameposdirclassmjd_obsitime0d0coadds0IDLgt nlines=file_lines(filesearch_scamtxt)IDLgt mydata=replicate(recordnlines-1)IDLgt header=

Depois de definidas as variaacuteveis que vatildeo receber os dados o arquivo pode ser lido

IDLgt openrunitfilesearch_scamtxtget_lunIDLgt readfunitheaderIDLgt readfunitmydataformat=(A14I8A15F104F104A18A19A15F158F105I15)IDLgt free_lununit

A gravaccedilatildeo de um arquivo texto poderia ser feita de forma semelhante apenas trocando openr por openw (abrir o arquivo para gravaccedilatildeo natildeo leitura) e readf por printf

O arquivo eacute aberto em uma unidade (unit) usada para especificar de onde eacute feita a leitura

Ao final o arquivo eacute fechado

8489

Arquivos - processamento em baixo niacutevel - texto

O que resulta em

IDLgt printheader NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS

IDLgt helpmydataMYDATA STRUCT = -gt ltAnonymousgt Array[4]

IDLgt helpmydata[0] Structure ltd5e38f68gt 11 tags length=136 data length=124 refs=3 NAME STRING dec18s0001 CALMPOS INT 0 FILNAME STRING NIRSPEC-5-AO ECHLPOS DOUBLE 62630000 DISPPOS DOUBLE 36450000 TARGNAME STRING HD85258 POSDIR STRING NIRSPEC-5-AOp1 CLASS STRING STAR MJD_OBS STRING 54087574 ITIME DOUBLE 10000000 COADDS INT 1

Este caso eacute mais complicado que os mais comuns por haver colunas de strings

Se todas fossem de nuacutemeros natildeo teria sido necessaacuterio especificar o formato explicitamente As colunas teriam sido adivinhadas pela biblioteca que lecirc o arquivo Poderia ter sido lido escrito soacute com um array de nuacutemeros sem estruturas

8589

Arquivos - processamento em baixo niacutevel - binaacuterio

Formatos binaacuterios podem ser definidos de qualquer forma O arquivo eacute apenas um conjunto de bytes Cabe ao software saber como os interpretar

Uma escolha comum para que sejam autodocumentados eacute incluir um cabeccedilalho de texto informando as caracteriacutesticas dos dados necessaacuterias para os ler

Ex (IDL) criar um arquivo que armazene um array de doubles com um cabeccedilalho informando as dimensotildees para que o programa que o lecirc saiba como ler os dados

Inventa dados e abre o arquivo

IDLgt data_to_write=dindgen(34)IDLgt openwunitbinary_exampledatget_lun

Escreve as dimensotildees como texto

IDLgt printfunitdimensions of the double array stored belowIDLgt printfunitsize(data_to_writedimensions)

Escreve os dados binaacuterios

IDLgt writeuunitdata_to_write

Fecha o arquivo

IDLgt free_lununit

Escreve em binaacuterio (write unformatted)

8689

Arquivos - processamento em baixo niacutevel - binaacuterio

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

dimensions of the double array stored below 3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

8789

Arquivos - processamento em baixo niacutevel - binaacuterioA leitura deste arquivo eacute igualmente simples

IDLgt header=IDLgt dims=[00]IDLgt openrunitbinary_exampledatget_lun

Lecirc as dimensotildees (armazenadas como texto)

IDLgt readfunitheaderIDLgt readfunitdims

Lecirc a parte binaacuteria depois de saber as dimensotildees

IDLgt data_read=dblarr(dims)IDLgt readuunitdata_read

Fecha o arquivo

IDLgt free_lununit

Verifica que os dados foram gravados e lidos corretamente

IDLgt printarray_equal(data_to_writedata_read) 1

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Lecirc dados binaacuterios (read unformatted)

8889

Sumaacuterio

5 ndash Slides em httpwwwppenteadonetpeapea04_strings_iopdf Strings Expressotildees regulares Arquivos

httpwwwppenteadonetpea

8989

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89

Arquivos - binaacuterios - NetCDF e HDF5Conteuacutedo daquele arquivo visualizado com o ncview (acompanha a biblioteca NetCDF padratildeo)

7689

Arquivos - binaacuterios - NetCDF e HDF5O conteuacutedo de todo o arquivo pode ser lido facilmente com as bibliotecas disponiacuteveis e armazenado em contecirciners convenientes Usando um objeto que gera um resultado um pouco mais conveniente

IDLgt h=pp_readncdf(refspec_g01_0nchash)IDLgt printhvar_dims ltObjHeapVar229(HASH)gtvars ltObjHeapVar152(HASH)gtdims ltObjHeapVar118(HASH)gt

IDLgt printh[vars]T 173203 175459 175848 176001 175975 Z 431869 418858 406067 393403 380464 FLUX 300660 145536 0705180 0341669 0165532 PHASE 100000 0779034 0660858 0542052 0449983 TAUTOT0694377 0693420 0693474 0693540 0693636()

IDLgt help(h[vars])[TAUTOT]ltExpressiongt FLOAT = Array[51 400]

IDLgt print(h[var_dims])[TAUTOT]NLAY NWN

IDLgt print(h[dims])[(h[var_dims])[TAUTOT]]NLAY 51NWN 400

7789

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5)

Visualizaccedilatildeo da variaacutevel selecionada

Metadados e alguns valores da variaacutevel selecionada

Variaacutevel a ser criada com o conteuacutedo desta variaacutevel do arquivo

Hierarquia das variaacuteveis do arquivo

7889

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5) Imported variable az

IDLgt helpaz Structure ltd5723f38gt 13 tags length=448 data length=444 refs=1 _NAME STRING az _ICONTYPE STRING binary _TYPE STRING DATASET _FILE STRING INTENSI_test_409OUTh5 _PATH STRING _DATA DOUBLE Array[38] _NDIMENSIONS LONG 1 _DIMENSIONS ULONG64 Array[1] _NELEMENTS ULONG64 38 _DATATYPE STRING H5T_FLOAT _STORAGESIZE ULONG 8 _PRECISION LONG 64 _SIGN STRING

IDLgt printaz_data 00000000 10000000 20000000 30000000 40000000 50000000 60000000 80000000 ()

7989

Arquivos - binaacuterios - imagens

JPEG JPEG200 TIFF GeoTIFF etc

Os formatos comuns de imagens satildeo bem suportados em muacuteltiplas plataformas para uso dentro de programas e interativamente

Alguns formatos tecircm opccedilatildeo de compressatildeo com perda eou sem perda

Armazenam imagens como arrays 2D ou 3D (3D frequumlentemente limitado a 3 ou 4 em uma das dimensotildees uma imagem em 3 ou 4 bandas) de inteiros ou (em alguns formatos) reais

Alguns formatos permitem armazenar metadados para caracterizar as imagens armazenadas

JPEG2000 e GeoTIFF (um subconjunto de TIFF) comuns em astronomia e aacutereas proacuteximas

8089

Arquivos - binaacuterios ndash imagens ndash exemplo (IDL)IDLgt printquery_tiff(issmap_2009tiffinfogeotiff=geo) 1

IDLgt helpinfo Structure ltd4eca4b8gt 18 tags length=144 data length=132 refs=1 CHANNELS LONG 4 DIMENSIONS LONG Array[2] IMAGE_INDEX LONG 0 NUM_IMAGES LONG 1 PIXEL_TYPE INT 1 TYPE STRING TIFF BITS_PER_SAMPLE LONG 8 POSITION FLOAT Array[2] RESOLUTION FLOAT Array[2] UNITS LONG 2 TILE_SIZE LONG Array[2] DESCRIPTION STRING ISS (2009) DATE_TIME STRING 20100218 012436()

IDLgt helpgeo Structure ltd4efa1b8gt 10 tags length=264 data length=262 refs=1 MODELPIXELSCALETAG DOUBLE Array[3] MODELTIEPOINTTAG DOUBLE Array[6 4] GEOGRAPHICTYPEGEOKEY INT 4035 GEOGSEMIMAJORAXISGEOKEY DOUBLE 25750000 GEOGSEMIMINORAXISGEOKEY DOUBLE 25750000()

IDLgt myimage=read_tiff(issmap_2009tiff) Lecirc a imagem para o array myimage

Obteacutem informaccedilotildees sobre o arquivo

8189

Arquivos - binaacuterios ndash formatos nativosLinguagens como IDL R Python Java tecircm seu formato nativo binaacuterio acessado em alto niacutevel Basta mandar salvar ler variaacuteveis no do arquivo a biblioteca padratildeo automagicamente faz todo o trabalho de decidir como gravar ler os dados

Conveniente de usar na proacutepria linguagem Mas raramente existem bibliotecas para ler gravar o formato nativo de uma linguagem a partir de outra Ex (IDL)

IDLgt savefile=2dspectrumsavmydatamyheadercorners_dcorners_averbosecompress SAVE Portable (XDR) compressed SAVERESTORE file SAVE Saved variable MYDATA SAVE Saved variable MYHEADER()

Pode ser lido com apenas (haacute formas mais elaboradas)

IDLgt restore2dspectrumsavverbose RESTORE Portable (XDR) compressed SAVERESTORE file RESTORE Save file written by ltunknowngtltunknowngt Thu Jan 27 191422 2011 RESTORE IDL version 801 (linux x86_64) RESTORE Restored variable MYDATA RESTORE Restored variable MYHEADER()

IDLgt helpmydatamyheadercorners_dcorners_aMYDATA FLOAT = Array[1201 1201]MYHEADER STRING = Array[144]()

8289

Arquivos - processamento em baixo niacutevel

Nem sempre um formato padratildeo eacute a melhor escolha para o problema

Nem sempre haacute escolha (pode-se ter que trabalhar com arquivos que jaacute foram escritos em algum formato proprietaacuterio)

Agraves vezes o formato eacute padratildeo mas natildeo haacute bom suporte a ele disponiacutevel

Em todos estes casos eacute necessaacuterio escrever rotinas em baixo niacutevel que vatildeo ler processar diretamente o conteuacutedo do arquivo

Preferencialmente criando interfaces de alto niacutevel para o programa que vai as usar

8389

Arquivos - processamento em baixo niacutevel - texto

Tomando o exemplo anterior onde as colunas eram de diferentes tipos

NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS dec18s0001 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0002 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0003 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 FLAT 5408757812500 460000 5 dec18s0004 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 DARK 5408757812500 460000 5

A forma mais simples de o ler diretamente eacute definir uma estrutura para receber cada linha e um array destas estruturas para receber todo o arquivo Ex (IDL)

IDLgt record=namecalmpos0filnameechlpos0d0disppos0d0targnameposdirclassmjd_obsitime0d0coadds0IDLgt nlines=file_lines(filesearch_scamtxt)IDLgt mydata=replicate(recordnlines-1)IDLgt header=

Depois de definidas as variaacuteveis que vatildeo receber os dados o arquivo pode ser lido

IDLgt openrunitfilesearch_scamtxtget_lunIDLgt readfunitheaderIDLgt readfunitmydataformat=(A14I8A15F104F104A18A19A15F158F105I15)IDLgt free_lununit

A gravaccedilatildeo de um arquivo texto poderia ser feita de forma semelhante apenas trocando openr por openw (abrir o arquivo para gravaccedilatildeo natildeo leitura) e readf por printf

O arquivo eacute aberto em uma unidade (unit) usada para especificar de onde eacute feita a leitura

Ao final o arquivo eacute fechado

8489

Arquivos - processamento em baixo niacutevel - texto

O que resulta em

IDLgt printheader NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS

IDLgt helpmydataMYDATA STRUCT = -gt ltAnonymousgt Array[4]

IDLgt helpmydata[0] Structure ltd5e38f68gt 11 tags length=136 data length=124 refs=3 NAME STRING dec18s0001 CALMPOS INT 0 FILNAME STRING NIRSPEC-5-AO ECHLPOS DOUBLE 62630000 DISPPOS DOUBLE 36450000 TARGNAME STRING HD85258 POSDIR STRING NIRSPEC-5-AOp1 CLASS STRING STAR MJD_OBS STRING 54087574 ITIME DOUBLE 10000000 COADDS INT 1

Este caso eacute mais complicado que os mais comuns por haver colunas de strings

Se todas fossem de nuacutemeros natildeo teria sido necessaacuterio especificar o formato explicitamente As colunas teriam sido adivinhadas pela biblioteca que lecirc o arquivo Poderia ter sido lido escrito soacute com um array de nuacutemeros sem estruturas

8589

Arquivos - processamento em baixo niacutevel - binaacuterio

Formatos binaacuterios podem ser definidos de qualquer forma O arquivo eacute apenas um conjunto de bytes Cabe ao software saber como os interpretar

Uma escolha comum para que sejam autodocumentados eacute incluir um cabeccedilalho de texto informando as caracteriacutesticas dos dados necessaacuterias para os ler

Ex (IDL) criar um arquivo que armazene um array de doubles com um cabeccedilalho informando as dimensotildees para que o programa que o lecirc saiba como ler os dados

Inventa dados e abre o arquivo

IDLgt data_to_write=dindgen(34)IDLgt openwunitbinary_exampledatget_lun

Escreve as dimensotildees como texto

IDLgt printfunitdimensions of the double array stored belowIDLgt printfunitsize(data_to_writedimensions)

Escreve os dados binaacuterios

IDLgt writeuunitdata_to_write

Fecha o arquivo

IDLgt free_lununit

Escreve em binaacuterio (write unformatted)

8689

Arquivos - processamento em baixo niacutevel - binaacuterio

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

dimensions of the double array stored below 3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

8789

Arquivos - processamento em baixo niacutevel - binaacuterioA leitura deste arquivo eacute igualmente simples

IDLgt header=IDLgt dims=[00]IDLgt openrunitbinary_exampledatget_lun

Lecirc as dimensotildees (armazenadas como texto)

IDLgt readfunitheaderIDLgt readfunitdims

Lecirc a parte binaacuteria depois de saber as dimensotildees

IDLgt data_read=dblarr(dims)IDLgt readuunitdata_read

Fecha o arquivo

IDLgt free_lununit

Verifica que os dados foram gravados e lidos corretamente

IDLgt printarray_equal(data_to_writedata_read) 1

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Lecirc dados binaacuterios (read unformatted)

8889

Sumaacuterio

5 ndash Slides em httpwwwppenteadonetpeapea04_strings_iopdf Strings Expressotildees regulares Arquivos

httpwwwppenteadonetpea

8989

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89

Arquivos - binaacuterios - NetCDF e HDF5O conteuacutedo de todo o arquivo pode ser lido facilmente com as bibliotecas disponiacuteveis e armazenado em contecirciners convenientes Usando um objeto que gera um resultado um pouco mais conveniente

IDLgt h=pp_readncdf(refspec_g01_0nchash)IDLgt printhvar_dims ltObjHeapVar229(HASH)gtvars ltObjHeapVar152(HASH)gtdims ltObjHeapVar118(HASH)gt

IDLgt printh[vars]T 173203 175459 175848 176001 175975 Z 431869 418858 406067 393403 380464 FLUX 300660 145536 0705180 0341669 0165532 PHASE 100000 0779034 0660858 0542052 0449983 TAUTOT0694377 0693420 0693474 0693540 0693636()

IDLgt help(h[vars])[TAUTOT]ltExpressiongt FLOAT = Array[51 400]

IDLgt print(h[var_dims])[TAUTOT]NLAY NWN

IDLgt print(h[dims])[(h[var_dims])[TAUTOT]]NLAY 51NWN 400

7789

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5)

Visualizaccedilatildeo da variaacutevel selecionada

Metadados e alguns valores da variaacutevel selecionada

Variaacutevel a ser criada com o conteuacutedo desta variaacutevel do arquivo

Hierarquia das variaacuteveis do arquivo

7889

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5) Imported variable az

IDLgt helpaz Structure ltd5723f38gt 13 tags length=448 data length=444 refs=1 _NAME STRING az _ICONTYPE STRING binary _TYPE STRING DATASET _FILE STRING INTENSI_test_409OUTh5 _PATH STRING _DATA DOUBLE Array[38] _NDIMENSIONS LONG 1 _DIMENSIONS ULONG64 Array[1] _NELEMENTS ULONG64 38 _DATATYPE STRING H5T_FLOAT _STORAGESIZE ULONG 8 _PRECISION LONG 64 _SIGN STRING

IDLgt printaz_data 00000000 10000000 20000000 30000000 40000000 50000000 60000000 80000000 ()

7989

Arquivos - binaacuterios - imagens

JPEG JPEG200 TIFF GeoTIFF etc

Os formatos comuns de imagens satildeo bem suportados em muacuteltiplas plataformas para uso dentro de programas e interativamente

Alguns formatos tecircm opccedilatildeo de compressatildeo com perda eou sem perda

Armazenam imagens como arrays 2D ou 3D (3D frequumlentemente limitado a 3 ou 4 em uma das dimensotildees uma imagem em 3 ou 4 bandas) de inteiros ou (em alguns formatos) reais

Alguns formatos permitem armazenar metadados para caracterizar as imagens armazenadas

JPEG2000 e GeoTIFF (um subconjunto de TIFF) comuns em astronomia e aacutereas proacuteximas

8089

Arquivos - binaacuterios ndash imagens ndash exemplo (IDL)IDLgt printquery_tiff(issmap_2009tiffinfogeotiff=geo) 1

IDLgt helpinfo Structure ltd4eca4b8gt 18 tags length=144 data length=132 refs=1 CHANNELS LONG 4 DIMENSIONS LONG Array[2] IMAGE_INDEX LONG 0 NUM_IMAGES LONG 1 PIXEL_TYPE INT 1 TYPE STRING TIFF BITS_PER_SAMPLE LONG 8 POSITION FLOAT Array[2] RESOLUTION FLOAT Array[2] UNITS LONG 2 TILE_SIZE LONG Array[2] DESCRIPTION STRING ISS (2009) DATE_TIME STRING 20100218 012436()

IDLgt helpgeo Structure ltd4efa1b8gt 10 tags length=264 data length=262 refs=1 MODELPIXELSCALETAG DOUBLE Array[3] MODELTIEPOINTTAG DOUBLE Array[6 4] GEOGRAPHICTYPEGEOKEY INT 4035 GEOGSEMIMAJORAXISGEOKEY DOUBLE 25750000 GEOGSEMIMINORAXISGEOKEY DOUBLE 25750000()

IDLgt myimage=read_tiff(issmap_2009tiff) Lecirc a imagem para o array myimage

Obteacutem informaccedilotildees sobre o arquivo

8189

Arquivos - binaacuterios ndash formatos nativosLinguagens como IDL R Python Java tecircm seu formato nativo binaacuterio acessado em alto niacutevel Basta mandar salvar ler variaacuteveis no do arquivo a biblioteca padratildeo automagicamente faz todo o trabalho de decidir como gravar ler os dados

Conveniente de usar na proacutepria linguagem Mas raramente existem bibliotecas para ler gravar o formato nativo de uma linguagem a partir de outra Ex (IDL)

IDLgt savefile=2dspectrumsavmydatamyheadercorners_dcorners_averbosecompress SAVE Portable (XDR) compressed SAVERESTORE file SAVE Saved variable MYDATA SAVE Saved variable MYHEADER()

Pode ser lido com apenas (haacute formas mais elaboradas)

IDLgt restore2dspectrumsavverbose RESTORE Portable (XDR) compressed SAVERESTORE file RESTORE Save file written by ltunknowngtltunknowngt Thu Jan 27 191422 2011 RESTORE IDL version 801 (linux x86_64) RESTORE Restored variable MYDATA RESTORE Restored variable MYHEADER()

IDLgt helpmydatamyheadercorners_dcorners_aMYDATA FLOAT = Array[1201 1201]MYHEADER STRING = Array[144]()

8289

Arquivos - processamento em baixo niacutevel

Nem sempre um formato padratildeo eacute a melhor escolha para o problema

Nem sempre haacute escolha (pode-se ter que trabalhar com arquivos que jaacute foram escritos em algum formato proprietaacuterio)

Agraves vezes o formato eacute padratildeo mas natildeo haacute bom suporte a ele disponiacutevel

Em todos estes casos eacute necessaacuterio escrever rotinas em baixo niacutevel que vatildeo ler processar diretamente o conteuacutedo do arquivo

Preferencialmente criando interfaces de alto niacutevel para o programa que vai as usar

8389

Arquivos - processamento em baixo niacutevel - texto

Tomando o exemplo anterior onde as colunas eram de diferentes tipos

NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS dec18s0001 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0002 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0003 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 FLAT 5408757812500 460000 5 dec18s0004 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 DARK 5408757812500 460000 5

A forma mais simples de o ler diretamente eacute definir uma estrutura para receber cada linha e um array destas estruturas para receber todo o arquivo Ex (IDL)

IDLgt record=namecalmpos0filnameechlpos0d0disppos0d0targnameposdirclassmjd_obsitime0d0coadds0IDLgt nlines=file_lines(filesearch_scamtxt)IDLgt mydata=replicate(recordnlines-1)IDLgt header=

Depois de definidas as variaacuteveis que vatildeo receber os dados o arquivo pode ser lido

IDLgt openrunitfilesearch_scamtxtget_lunIDLgt readfunitheaderIDLgt readfunitmydataformat=(A14I8A15F104F104A18A19A15F158F105I15)IDLgt free_lununit

A gravaccedilatildeo de um arquivo texto poderia ser feita de forma semelhante apenas trocando openr por openw (abrir o arquivo para gravaccedilatildeo natildeo leitura) e readf por printf

O arquivo eacute aberto em uma unidade (unit) usada para especificar de onde eacute feita a leitura

Ao final o arquivo eacute fechado

8489

Arquivos - processamento em baixo niacutevel - texto

O que resulta em

IDLgt printheader NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS

IDLgt helpmydataMYDATA STRUCT = -gt ltAnonymousgt Array[4]

IDLgt helpmydata[0] Structure ltd5e38f68gt 11 tags length=136 data length=124 refs=3 NAME STRING dec18s0001 CALMPOS INT 0 FILNAME STRING NIRSPEC-5-AO ECHLPOS DOUBLE 62630000 DISPPOS DOUBLE 36450000 TARGNAME STRING HD85258 POSDIR STRING NIRSPEC-5-AOp1 CLASS STRING STAR MJD_OBS STRING 54087574 ITIME DOUBLE 10000000 COADDS INT 1

Este caso eacute mais complicado que os mais comuns por haver colunas de strings

Se todas fossem de nuacutemeros natildeo teria sido necessaacuterio especificar o formato explicitamente As colunas teriam sido adivinhadas pela biblioteca que lecirc o arquivo Poderia ter sido lido escrito soacute com um array de nuacutemeros sem estruturas

8589

Arquivos - processamento em baixo niacutevel - binaacuterio

Formatos binaacuterios podem ser definidos de qualquer forma O arquivo eacute apenas um conjunto de bytes Cabe ao software saber como os interpretar

Uma escolha comum para que sejam autodocumentados eacute incluir um cabeccedilalho de texto informando as caracteriacutesticas dos dados necessaacuterias para os ler

Ex (IDL) criar um arquivo que armazene um array de doubles com um cabeccedilalho informando as dimensotildees para que o programa que o lecirc saiba como ler os dados

Inventa dados e abre o arquivo

IDLgt data_to_write=dindgen(34)IDLgt openwunitbinary_exampledatget_lun

Escreve as dimensotildees como texto

IDLgt printfunitdimensions of the double array stored belowIDLgt printfunitsize(data_to_writedimensions)

Escreve os dados binaacuterios

IDLgt writeuunitdata_to_write

Fecha o arquivo

IDLgt free_lununit

Escreve em binaacuterio (write unformatted)

8689

Arquivos - processamento em baixo niacutevel - binaacuterio

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

dimensions of the double array stored below 3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

8789

Arquivos - processamento em baixo niacutevel - binaacuterioA leitura deste arquivo eacute igualmente simples

IDLgt header=IDLgt dims=[00]IDLgt openrunitbinary_exampledatget_lun

Lecirc as dimensotildees (armazenadas como texto)

IDLgt readfunitheaderIDLgt readfunitdims

Lecirc a parte binaacuteria depois de saber as dimensotildees

IDLgt data_read=dblarr(dims)IDLgt readuunitdata_read

Fecha o arquivo

IDLgt free_lununit

Verifica que os dados foram gravados e lidos corretamente

IDLgt printarray_equal(data_to_writedata_read) 1

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Lecirc dados binaacuterios (read unformatted)

8889

Sumaacuterio

5 ndash Slides em httpwwwppenteadonetpeapea04_strings_iopdf Strings Expressotildees regulares Arquivos

httpwwwppenteadonetpea

8989

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5)

Visualizaccedilatildeo da variaacutevel selecionada

Metadados e alguns valores da variaacutevel selecionada

Variaacutevel a ser criada com o conteuacutedo desta variaacutevel do arquivo

Hierarquia das variaacuteveis do arquivo

7889

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5) Imported variable az

IDLgt helpaz Structure ltd5723f38gt 13 tags length=448 data length=444 refs=1 _NAME STRING az _ICONTYPE STRING binary _TYPE STRING DATASET _FILE STRING INTENSI_test_409OUTh5 _PATH STRING _DATA DOUBLE Array[38] _NDIMENSIONS LONG 1 _DIMENSIONS ULONG64 Array[1] _NELEMENTS ULONG64 38 _DATATYPE STRING H5T_FLOAT _STORAGESIZE ULONG 8 _PRECISION LONG 64 _SIGN STRING

IDLgt printaz_data 00000000 10000000 20000000 30000000 40000000 50000000 60000000 80000000 ()

7989

Arquivos - binaacuterios - imagens

JPEG JPEG200 TIFF GeoTIFF etc

Os formatos comuns de imagens satildeo bem suportados em muacuteltiplas plataformas para uso dentro de programas e interativamente

Alguns formatos tecircm opccedilatildeo de compressatildeo com perda eou sem perda

Armazenam imagens como arrays 2D ou 3D (3D frequumlentemente limitado a 3 ou 4 em uma das dimensotildees uma imagem em 3 ou 4 bandas) de inteiros ou (em alguns formatos) reais

Alguns formatos permitem armazenar metadados para caracterizar as imagens armazenadas

JPEG2000 e GeoTIFF (um subconjunto de TIFF) comuns em astronomia e aacutereas proacuteximas

8089

Arquivos - binaacuterios ndash imagens ndash exemplo (IDL)IDLgt printquery_tiff(issmap_2009tiffinfogeotiff=geo) 1

IDLgt helpinfo Structure ltd4eca4b8gt 18 tags length=144 data length=132 refs=1 CHANNELS LONG 4 DIMENSIONS LONG Array[2] IMAGE_INDEX LONG 0 NUM_IMAGES LONG 1 PIXEL_TYPE INT 1 TYPE STRING TIFF BITS_PER_SAMPLE LONG 8 POSITION FLOAT Array[2] RESOLUTION FLOAT Array[2] UNITS LONG 2 TILE_SIZE LONG Array[2] DESCRIPTION STRING ISS (2009) DATE_TIME STRING 20100218 012436()

IDLgt helpgeo Structure ltd4efa1b8gt 10 tags length=264 data length=262 refs=1 MODELPIXELSCALETAG DOUBLE Array[3] MODELTIEPOINTTAG DOUBLE Array[6 4] GEOGRAPHICTYPEGEOKEY INT 4035 GEOGSEMIMAJORAXISGEOKEY DOUBLE 25750000 GEOGSEMIMINORAXISGEOKEY DOUBLE 25750000()

IDLgt myimage=read_tiff(issmap_2009tiff) Lecirc a imagem para o array myimage

Obteacutem informaccedilotildees sobre o arquivo

8189

Arquivos - binaacuterios ndash formatos nativosLinguagens como IDL R Python Java tecircm seu formato nativo binaacuterio acessado em alto niacutevel Basta mandar salvar ler variaacuteveis no do arquivo a biblioteca padratildeo automagicamente faz todo o trabalho de decidir como gravar ler os dados

Conveniente de usar na proacutepria linguagem Mas raramente existem bibliotecas para ler gravar o formato nativo de uma linguagem a partir de outra Ex (IDL)

IDLgt savefile=2dspectrumsavmydatamyheadercorners_dcorners_averbosecompress SAVE Portable (XDR) compressed SAVERESTORE file SAVE Saved variable MYDATA SAVE Saved variable MYHEADER()

Pode ser lido com apenas (haacute formas mais elaboradas)

IDLgt restore2dspectrumsavverbose RESTORE Portable (XDR) compressed SAVERESTORE file RESTORE Save file written by ltunknowngtltunknowngt Thu Jan 27 191422 2011 RESTORE IDL version 801 (linux x86_64) RESTORE Restored variable MYDATA RESTORE Restored variable MYHEADER()

IDLgt helpmydatamyheadercorners_dcorners_aMYDATA FLOAT = Array[1201 1201]MYHEADER STRING = Array[144]()

8289

Arquivos - processamento em baixo niacutevel

Nem sempre um formato padratildeo eacute a melhor escolha para o problema

Nem sempre haacute escolha (pode-se ter que trabalhar com arquivos que jaacute foram escritos em algum formato proprietaacuterio)

Agraves vezes o formato eacute padratildeo mas natildeo haacute bom suporte a ele disponiacutevel

Em todos estes casos eacute necessaacuterio escrever rotinas em baixo niacutevel que vatildeo ler processar diretamente o conteuacutedo do arquivo

Preferencialmente criando interfaces de alto niacutevel para o programa que vai as usar

8389

Arquivos - processamento em baixo niacutevel - texto

Tomando o exemplo anterior onde as colunas eram de diferentes tipos

NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS dec18s0001 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0002 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0003 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 FLAT 5408757812500 460000 5 dec18s0004 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 DARK 5408757812500 460000 5

A forma mais simples de o ler diretamente eacute definir uma estrutura para receber cada linha e um array destas estruturas para receber todo o arquivo Ex (IDL)

IDLgt record=namecalmpos0filnameechlpos0d0disppos0d0targnameposdirclassmjd_obsitime0d0coadds0IDLgt nlines=file_lines(filesearch_scamtxt)IDLgt mydata=replicate(recordnlines-1)IDLgt header=

Depois de definidas as variaacuteveis que vatildeo receber os dados o arquivo pode ser lido

IDLgt openrunitfilesearch_scamtxtget_lunIDLgt readfunitheaderIDLgt readfunitmydataformat=(A14I8A15F104F104A18A19A15F158F105I15)IDLgt free_lununit

A gravaccedilatildeo de um arquivo texto poderia ser feita de forma semelhante apenas trocando openr por openw (abrir o arquivo para gravaccedilatildeo natildeo leitura) e readf por printf

O arquivo eacute aberto em uma unidade (unit) usada para especificar de onde eacute feita a leitura

Ao final o arquivo eacute fechado

8489

Arquivos - processamento em baixo niacutevel - texto

O que resulta em

IDLgt printheader NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS

IDLgt helpmydataMYDATA STRUCT = -gt ltAnonymousgt Array[4]

IDLgt helpmydata[0] Structure ltd5e38f68gt 11 tags length=136 data length=124 refs=3 NAME STRING dec18s0001 CALMPOS INT 0 FILNAME STRING NIRSPEC-5-AO ECHLPOS DOUBLE 62630000 DISPPOS DOUBLE 36450000 TARGNAME STRING HD85258 POSDIR STRING NIRSPEC-5-AOp1 CLASS STRING STAR MJD_OBS STRING 54087574 ITIME DOUBLE 10000000 COADDS INT 1

Este caso eacute mais complicado que os mais comuns por haver colunas de strings

Se todas fossem de nuacutemeros natildeo teria sido necessaacuterio especificar o formato explicitamente As colunas teriam sido adivinhadas pela biblioteca que lecirc o arquivo Poderia ter sido lido escrito soacute com um array de nuacutemeros sem estruturas

8589

Arquivos - processamento em baixo niacutevel - binaacuterio

Formatos binaacuterios podem ser definidos de qualquer forma O arquivo eacute apenas um conjunto de bytes Cabe ao software saber como os interpretar

Uma escolha comum para que sejam autodocumentados eacute incluir um cabeccedilalho de texto informando as caracteriacutesticas dos dados necessaacuterias para os ler

Ex (IDL) criar um arquivo que armazene um array de doubles com um cabeccedilalho informando as dimensotildees para que o programa que o lecirc saiba como ler os dados

Inventa dados e abre o arquivo

IDLgt data_to_write=dindgen(34)IDLgt openwunitbinary_exampledatget_lun

Escreve as dimensotildees como texto

IDLgt printfunitdimensions of the double array stored belowIDLgt printfunitsize(data_to_writedimensions)

Escreve os dados binaacuterios

IDLgt writeuunitdata_to_write

Fecha o arquivo

IDLgt free_lununit

Escreve em binaacuterio (write unformatted)

8689

Arquivos - processamento em baixo niacutevel - binaacuterio

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

dimensions of the double array stored below 3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

8789

Arquivos - processamento em baixo niacutevel - binaacuterioA leitura deste arquivo eacute igualmente simples

IDLgt header=IDLgt dims=[00]IDLgt openrunitbinary_exampledatget_lun

Lecirc as dimensotildees (armazenadas como texto)

IDLgt readfunitheaderIDLgt readfunitdims

Lecirc a parte binaacuteria depois de saber as dimensotildees

IDLgt data_read=dblarr(dims)IDLgt readuunitdata_read

Fecha o arquivo

IDLgt free_lununit

Verifica que os dados foram gravados e lidos corretamente

IDLgt printarray_equal(data_to_writedata_read) 1

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Lecirc dados binaacuterios (read unformatted)

8889

Sumaacuterio

5 ndash Slides em httpwwwppenteadonetpeapea04_strings_iopdf Strings Expressotildees regulares Arquivos

httpwwwppenteadonetpea

8989

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89

Arquivos - binaacuterios - NetCDF e HDF5

Ex (IDL) de conteuacutedo de um arquivo HDF5 visualizado e importado com uma interface graacutefica

IDLgt d=h5_browser(INTENSI_test_409OUTh5) Imported variable az

IDLgt helpaz Structure ltd5723f38gt 13 tags length=448 data length=444 refs=1 _NAME STRING az _ICONTYPE STRING binary _TYPE STRING DATASET _FILE STRING INTENSI_test_409OUTh5 _PATH STRING _DATA DOUBLE Array[38] _NDIMENSIONS LONG 1 _DIMENSIONS ULONG64 Array[1] _NELEMENTS ULONG64 38 _DATATYPE STRING H5T_FLOAT _STORAGESIZE ULONG 8 _PRECISION LONG 64 _SIGN STRING

IDLgt printaz_data 00000000 10000000 20000000 30000000 40000000 50000000 60000000 80000000 ()

7989

Arquivos - binaacuterios - imagens

JPEG JPEG200 TIFF GeoTIFF etc

Os formatos comuns de imagens satildeo bem suportados em muacuteltiplas plataformas para uso dentro de programas e interativamente

Alguns formatos tecircm opccedilatildeo de compressatildeo com perda eou sem perda

Armazenam imagens como arrays 2D ou 3D (3D frequumlentemente limitado a 3 ou 4 em uma das dimensotildees uma imagem em 3 ou 4 bandas) de inteiros ou (em alguns formatos) reais

Alguns formatos permitem armazenar metadados para caracterizar as imagens armazenadas

JPEG2000 e GeoTIFF (um subconjunto de TIFF) comuns em astronomia e aacutereas proacuteximas

8089

Arquivos - binaacuterios ndash imagens ndash exemplo (IDL)IDLgt printquery_tiff(issmap_2009tiffinfogeotiff=geo) 1

IDLgt helpinfo Structure ltd4eca4b8gt 18 tags length=144 data length=132 refs=1 CHANNELS LONG 4 DIMENSIONS LONG Array[2] IMAGE_INDEX LONG 0 NUM_IMAGES LONG 1 PIXEL_TYPE INT 1 TYPE STRING TIFF BITS_PER_SAMPLE LONG 8 POSITION FLOAT Array[2] RESOLUTION FLOAT Array[2] UNITS LONG 2 TILE_SIZE LONG Array[2] DESCRIPTION STRING ISS (2009) DATE_TIME STRING 20100218 012436()

IDLgt helpgeo Structure ltd4efa1b8gt 10 tags length=264 data length=262 refs=1 MODELPIXELSCALETAG DOUBLE Array[3] MODELTIEPOINTTAG DOUBLE Array[6 4] GEOGRAPHICTYPEGEOKEY INT 4035 GEOGSEMIMAJORAXISGEOKEY DOUBLE 25750000 GEOGSEMIMINORAXISGEOKEY DOUBLE 25750000()

IDLgt myimage=read_tiff(issmap_2009tiff) Lecirc a imagem para o array myimage

Obteacutem informaccedilotildees sobre o arquivo

8189

Arquivos - binaacuterios ndash formatos nativosLinguagens como IDL R Python Java tecircm seu formato nativo binaacuterio acessado em alto niacutevel Basta mandar salvar ler variaacuteveis no do arquivo a biblioteca padratildeo automagicamente faz todo o trabalho de decidir como gravar ler os dados

Conveniente de usar na proacutepria linguagem Mas raramente existem bibliotecas para ler gravar o formato nativo de uma linguagem a partir de outra Ex (IDL)

IDLgt savefile=2dspectrumsavmydatamyheadercorners_dcorners_averbosecompress SAVE Portable (XDR) compressed SAVERESTORE file SAVE Saved variable MYDATA SAVE Saved variable MYHEADER()

Pode ser lido com apenas (haacute formas mais elaboradas)

IDLgt restore2dspectrumsavverbose RESTORE Portable (XDR) compressed SAVERESTORE file RESTORE Save file written by ltunknowngtltunknowngt Thu Jan 27 191422 2011 RESTORE IDL version 801 (linux x86_64) RESTORE Restored variable MYDATA RESTORE Restored variable MYHEADER()

IDLgt helpmydatamyheadercorners_dcorners_aMYDATA FLOAT = Array[1201 1201]MYHEADER STRING = Array[144]()

8289

Arquivos - processamento em baixo niacutevel

Nem sempre um formato padratildeo eacute a melhor escolha para o problema

Nem sempre haacute escolha (pode-se ter que trabalhar com arquivos que jaacute foram escritos em algum formato proprietaacuterio)

Agraves vezes o formato eacute padratildeo mas natildeo haacute bom suporte a ele disponiacutevel

Em todos estes casos eacute necessaacuterio escrever rotinas em baixo niacutevel que vatildeo ler processar diretamente o conteuacutedo do arquivo

Preferencialmente criando interfaces de alto niacutevel para o programa que vai as usar

8389

Arquivos - processamento em baixo niacutevel - texto

Tomando o exemplo anterior onde as colunas eram de diferentes tipos

NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS dec18s0001 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0002 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0003 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 FLAT 5408757812500 460000 5 dec18s0004 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 DARK 5408757812500 460000 5

A forma mais simples de o ler diretamente eacute definir uma estrutura para receber cada linha e um array destas estruturas para receber todo o arquivo Ex (IDL)

IDLgt record=namecalmpos0filnameechlpos0d0disppos0d0targnameposdirclassmjd_obsitime0d0coadds0IDLgt nlines=file_lines(filesearch_scamtxt)IDLgt mydata=replicate(recordnlines-1)IDLgt header=

Depois de definidas as variaacuteveis que vatildeo receber os dados o arquivo pode ser lido

IDLgt openrunitfilesearch_scamtxtget_lunIDLgt readfunitheaderIDLgt readfunitmydataformat=(A14I8A15F104F104A18A19A15F158F105I15)IDLgt free_lununit

A gravaccedilatildeo de um arquivo texto poderia ser feita de forma semelhante apenas trocando openr por openw (abrir o arquivo para gravaccedilatildeo natildeo leitura) e readf por printf

O arquivo eacute aberto em uma unidade (unit) usada para especificar de onde eacute feita a leitura

Ao final o arquivo eacute fechado

8489

Arquivos - processamento em baixo niacutevel - texto

O que resulta em

IDLgt printheader NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS

IDLgt helpmydataMYDATA STRUCT = -gt ltAnonymousgt Array[4]

IDLgt helpmydata[0] Structure ltd5e38f68gt 11 tags length=136 data length=124 refs=3 NAME STRING dec18s0001 CALMPOS INT 0 FILNAME STRING NIRSPEC-5-AO ECHLPOS DOUBLE 62630000 DISPPOS DOUBLE 36450000 TARGNAME STRING HD85258 POSDIR STRING NIRSPEC-5-AOp1 CLASS STRING STAR MJD_OBS STRING 54087574 ITIME DOUBLE 10000000 COADDS INT 1

Este caso eacute mais complicado que os mais comuns por haver colunas de strings

Se todas fossem de nuacutemeros natildeo teria sido necessaacuterio especificar o formato explicitamente As colunas teriam sido adivinhadas pela biblioteca que lecirc o arquivo Poderia ter sido lido escrito soacute com um array de nuacutemeros sem estruturas

8589

Arquivos - processamento em baixo niacutevel - binaacuterio

Formatos binaacuterios podem ser definidos de qualquer forma O arquivo eacute apenas um conjunto de bytes Cabe ao software saber como os interpretar

Uma escolha comum para que sejam autodocumentados eacute incluir um cabeccedilalho de texto informando as caracteriacutesticas dos dados necessaacuterias para os ler

Ex (IDL) criar um arquivo que armazene um array de doubles com um cabeccedilalho informando as dimensotildees para que o programa que o lecirc saiba como ler os dados

Inventa dados e abre o arquivo

IDLgt data_to_write=dindgen(34)IDLgt openwunitbinary_exampledatget_lun

Escreve as dimensotildees como texto

IDLgt printfunitdimensions of the double array stored belowIDLgt printfunitsize(data_to_writedimensions)

Escreve os dados binaacuterios

IDLgt writeuunitdata_to_write

Fecha o arquivo

IDLgt free_lununit

Escreve em binaacuterio (write unformatted)

8689

Arquivos - processamento em baixo niacutevel - binaacuterio

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

dimensions of the double array stored below 3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

8789

Arquivos - processamento em baixo niacutevel - binaacuterioA leitura deste arquivo eacute igualmente simples

IDLgt header=IDLgt dims=[00]IDLgt openrunitbinary_exampledatget_lun

Lecirc as dimensotildees (armazenadas como texto)

IDLgt readfunitheaderIDLgt readfunitdims

Lecirc a parte binaacuteria depois de saber as dimensotildees

IDLgt data_read=dblarr(dims)IDLgt readuunitdata_read

Fecha o arquivo

IDLgt free_lununit

Verifica que os dados foram gravados e lidos corretamente

IDLgt printarray_equal(data_to_writedata_read) 1

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Lecirc dados binaacuterios (read unformatted)

8889

Sumaacuterio

5 ndash Slides em httpwwwppenteadonetpeapea04_strings_iopdf Strings Expressotildees regulares Arquivos

httpwwwppenteadonetpea

8989

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89

Arquivos - binaacuterios - imagens

JPEG JPEG200 TIFF GeoTIFF etc

Os formatos comuns de imagens satildeo bem suportados em muacuteltiplas plataformas para uso dentro de programas e interativamente

Alguns formatos tecircm opccedilatildeo de compressatildeo com perda eou sem perda

Armazenam imagens como arrays 2D ou 3D (3D frequumlentemente limitado a 3 ou 4 em uma das dimensotildees uma imagem em 3 ou 4 bandas) de inteiros ou (em alguns formatos) reais

Alguns formatos permitem armazenar metadados para caracterizar as imagens armazenadas

JPEG2000 e GeoTIFF (um subconjunto de TIFF) comuns em astronomia e aacutereas proacuteximas

8089

Arquivos - binaacuterios ndash imagens ndash exemplo (IDL)IDLgt printquery_tiff(issmap_2009tiffinfogeotiff=geo) 1

IDLgt helpinfo Structure ltd4eca4b8gt 18 tags length=144 data length=132 refs=1 CHANNELS LONG 4 DIMENSIONS LONG Array[2] IMAGE_INDEX LONG 0 NUM_IMAGES LONG 1 PIXEL_TYPE INT 1 TYPE STRING TIFF BITS_PER_SAMPLE LONG 8 POSITION FLOAT Array[2] RESOLUTION FLOAT Array[2] UNITS LONG 2 TILE_SIZE LONG Array[2] DESCRIPTION STRING ISS (2009) DATE_TIME STRING 20100218 012436()

IDLgt helpgeo Structure ltd4efa1b8gt 10 tags length=264 data length=262 refs=1 MODELPIXELSCALETAG DOUBLE Array[3] MODELTIEPOINTTAG DOUBLE Array[6 4] GEOGRAPHICTYPEGEOKEY INT 4035 GEOGSEMIMAJORAXISGEOKEY DOUBLE 25750000 GEOGSEMIMINORAXISGEOKEY DOUBLE 25750000()

IDLgt myimage=read_tiff(issmap_2009tiff) Lecirc a imagem para o array myimage

Obteacutem informaccedilotildees sobre o arquivo

8189

Arquivos - binaacuterios ndash formatos nativosLinguagens como IDL R Python Java tecircm seu formato nativo binaacuterio acessado em alto niacutevel Basta mandar salvar ler variaacuteveis no do arquivo a biblioteca padratildeo automagicamente faz todo o trabalho de decidir como gravar ler os dados

Conveniente de usar na proacutepria linguagem Mas raramente existem bibliotecas para ler gravar o formato nativo de uma linguagem a partir de outra Ex (IDL)

IDLgt savefile=2dspectrumsavmydatamyheadercorners_dcorners_averbosecompress SAVE Portable (XDR) compressed SAVERESTORE file SAVE Saved variable MYDATA SAVE Saved variable MYHEADER()

Pode ser lido com apenas (haacute formas mais elaboradas)

IDLgt restore2dspectrumsavverbose RESTORE Portable (XDR) compressed SAVERESTORE file RESTORE Save file written by ltunknowngtltunknowngt Thu Jan 27 191422 2011 RESTORE IDL version 801 (linux x86_64) RESTORE Restored variable MYDATA RESTORE Restored variable MYHEADER()

IDLgt helpmydatamyheadercorners_dcorners_aMYDATA FLOAT = Array[1201 1201]MYHEADER STRING = Array[144]()

8289

Arquivos - processamento em baixo niacutevel

Nem sempre um formato padratildeo eacute a melhor escolha para o problema

Nem sempre haacute escolha (pode-se ter que trabalhar com arquivos que jaacute foram escritos em algum formato proprietaacuterio)

Agraves vezes o formato eacute padratildeo mas natildeo haacute bom suporte a ele disponiacutevel

Em todos estes casos eacute necessaacuterio escrever rotinas em baixo niacutevel que vatildeo ler processar diretamente o conteuacutedo do arquivo

Preferencialmente criando interfaces de alto niacutevel para o programa que vai as usar

8389

Arquivos - processamento em baixo niacutevel - texto

Tomando o exemplo anterior onde as colunas eram de diferentes tipos

NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS dec18s0001 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0002 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0003 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 FLAT 5408757812500 460000 5 dec18s0004 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 DARK 5408757812500 460000 5

A forma mais simples de o ler diretamente eacute definir uma estrutura para receber cada linha e um array destas estruturas para receber todo o arquivo Ex (IDL)

IDLgt record=namecalmpos0filnameechlpos0d0disppos0d0targnameposdirclassmjd_obsitime0d0coadds0IDLgt nlines=file_lines(filesearch_scamtxt)IDLgt mydata=replicate(recordnlines-1)IDLgt header=

Depois de definidas as variaacuteveis que vatildeo receber os dados o arquivo pode ser lido

IDLgt openrunitfilesearch_scamtxtget_lunIDLgt readfunitheaderIDLgt readfunitmydataformat=(A14I8A15F104F104A18A19A15F158F105I15)IDLgt free_lununit

A gravaccedilatildeo de um arquivo texto poderia ser feita de forma semelhante apenas trocando openr por openw (abrir o arquivo para gravaccedilatildeo natildeo leitura) e readf por printf

O arquivo eacute aberto em uma unidade (unit) usada para especificar de onde eacute feita a leitura

Ao final o arquivo eacute fechado

8489

Arquivos - processamento em baixo niacutevel - texto

O que resulta em

IDLgt printheader NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS

IDLgt helpmydataMYDATA STRUCT = -gt ltAnonymousgt Array[4]

IDLgt helpmydata[0] Structure ltd5e38f68gt 11 tags length=136 data length=124 refs=3 NAME STRING dec18s0001 CALMPOS INT 0 FILNAME STRING NIRSPEC-5-AO ECHLPOS DOUBLE 62630000 DISPPOS DOUBLE 36450000 TARGNAME STRING HD85258 POSDIR STRING NIRSPEC-5-AOp1 CLASS STRING STAR MJD_OBS STRING 54087574 ITIME DOUBLE 10000000 COADDS INT 1

Este caso eacute mais complicado que os mais comuns por haver colunas de strings

Se todas fossem de nuacutemeros natildeo teria sido necessaacuterio especificar o formato explicitamente As colunas teriam sido adivinhadas pela biblioteca que lecirc o arquivo Poderia ter sido lido escrito soacute com um array de nuacutemeros sem estruturas

8589

Arquivos - processamento em baixo niacutevel - binaacuterio

Formatos binaacuterios podem ser definidos de qualquer forma O arquivo eacute apenas um conjunto de bytes Cabe ao software saber como os interpretar

Uma escolha comum para que sejam autodocumentados eacute incluir um cabeccedilalho de texto informando as caracteriacutesticas dos dados necessaacuterias para os ler

Ex (IDL) criar um arquivo que armazene um array de doubles com um cabeccedilalho informando as dimensotildees para que o programa que o lecirc saiba como ler os dados

Inventa dados e abre o arquivo

IDLgt data_to_write=dindgen(34)IDLgt openwunitbinary_exampledatget_lun

Escreve as dimensotildees como texto

IDLgt printfunitdimensions of the double array stored belowIDLgt printfunitsize(data_to_writedimensions)

Escreve os dados binaacuterios

IDLgt writeuunitdata_to_write

Fecha o arquivo

IDLgt free_lununit

Escreve em binaacuterio (write unformatted)

8689

Arquivos - processamento em baixo niacutevel - binaacuterio

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

dimensions of the double array stored below 3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

8789

Arquivos - processamento em baixo niacutevel - binaacuterioA leitura deste arquivo eacute igualmente simples

IDLgt header=IDLgt dims=[00]IDLgt openrunitbinary_exampledatget_lun

Lecirc as dimensotildees (armazenadas como texto)

IDLgt readfunitheaderIDLgt readfunitdims

Lecirc a parte binaacuteria depois de saber as dimensotildees

IDLgt data_read=dblarr(dims)IDLgt readuunitdata_read

Fecha o arquivo

IDLgt free_lununit

Verifica que os dados foram gravados e lidos corretamente

IDLgt printarray_equal(data_to_writedata_read) 1

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Lecirc dados binaacuterios (read unformatted)

8889

Sumaacuterio

5 ndash Slides em httpwwwppenteadonetpeapea04_strings_iopdf Strings Expressotildees regulares Arquivos

httpwwwppenteadonetpea

8989

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89

Arquivos - binaacuterios ndash imagens ndash exemplo (IDL)IDLgt printquery_tiff(issmap_2009tiffinfogeotiff=geo) 1

IDLgt helpinfo Structure ltd4eca4b8gt 18 tags length=144 data length=132 refs=1 CHANNELS LONG 4 DIMENSIONS LONG Array[2] IMAGE_INDEX LONG 0 NUM_IMAGES LONG 1 PIXEL_TYPE INT 1 TYPE STRING TIFF BITS_PER_SAMPLE LONG 8 POSITION FLOAT Array[2] RESOLUTION FLOAT Array[2] UNITS LONG 2 TILE_SIZE LONG Array[2] DESCRIPTION STRING ISS (2009) DATE_TIME STRING 20100218 012436()

IDLgt helpgeo Structure ltd4efa1b8gt 10 tags length=264 data length=262 refs=1 MODELPIXELSCALETAG DOUBLE Array[3] MODELTIEPOINTTAG DOUBLE Array[6 4] GEOGRAPHICTYPEGEOKEY INT 4035 GEOGSEMIMAJORAXISGEOKEY DOUBLE 25750000 GEOGSEMIMINORAXISGEOKEY DOUBLE 25750000()

IDLgt myimage=read_tiff(issmap_2009tiff) Lecirc a imagem para o array myimage

Obteacutem informaccedilotildees sobre o arquivo

8189

Arquivos - binaacuterios ndash formatos nativosLinguagens como IDL R Python Java tecircm seu formato nativo binaacuterio acessado em alto niacutevel Basta mandar salvar ler variaacuteveis no do arquivo a biblioteca padratildeo automagicamente faz todo o trabalho de decidir como gravar ler os dados

Conveniente de usar na proacutepria linguagem Mas raramente existem bibliotecas para ler gravar o formato nativo de uma linguagem a partir de outra Ex (IDL)

IDLgt savefile=2dspectrumsavmydatamyheadercorners_dcorners_averbosecompress SAVE Portable (XDR) compressed SAVERESTORE file SAVE Saved variable MYDATA SAVE Saved variable MYHEADER()

Pode ser lido com apenas (haacute formas mais elaboradas)

IDLgt restore2dspectrumsavverbose RESTORE Portable (XDR) compressed SAVERESTORE file RESTORE Save file written by ltunknowngtltunknowngt Thu Jan 27 191422 2011 RESTORE IDL version 801 (linux x86_64) RESTORE Restored variable MYDATA RESTORE Restored variable MYHEADER()

IDLgt helpmydatamyheadercorners_dcorners_aMYDATA FLOAT = Array[1201 1201]MYHEADER STRING = Array[144]()

8289

Arquivos - processamento em baixo niacutevel

Nem sempre um formato padratildeo eacute a melhor escolha para o problema

Nem sempre haacute escolha (pode-se ter que trabalhar com arquivos que jaacute foram escritos em algum formato proprietaacuterio)

Agraves vezes o formato eacute padratildeo mas natildeo haacute bom suporte a ele disponiacutevel

Em todos estes casos eacute necessaacuterio escrever rotinas em baixo niacutevel que vatildeo ler processar diretamente o conteuacutedo do arquivo

Preferencialmente criando interfaces de alto niacutevel para o programa que vai as usar

8389

Arquivos - processamento em baixo niacutevel - texto

Tomando o exemplo anterior onde as colunas eram de diferentes tipos

NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS dec18s0001 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0002 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0003 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 FLAT 5408757812500 460000 5 dec18s0004 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 DARK 5408757812500 460000 5

A forma mais simples de o ler diretamente eacute definir uma estrutura para receber cada linha e um array destas estruturas para receber todo o arquivo Ex (IDL)

IDLgt record=namecalmpos0filnameechlpos0d0disppos0d0targnameposdirclassmjd_obsitime0d0coadds0IDLgt nlines=file_lines(filesearch_scamtxt)IDLgt mydata=replicate(recordnlines-1)IDLgt header=

Depois de definidas as variaacuteveis que vatildeo receber os dados o arquivo pode ser lido

IDLgt openrunitfilesearch_scamtxtget_lunIDLgt readfunitheaderIDLgt readfunitmydataformat=(A14I8A15F104F104A18A19A15F158F105I15)IDLgt free_lununit

A gravaccedilatildeo de um arquivo texto poderia ser feita de forma semelhante apenas trocando openr por openw (abrir o arquivo para gravaccedilatildeo natildeo leitura) e readf por printf

O arquivo eacute aberto em uma unidade (unit) usada para especificar de onde eacute feita a leitura

Ao final o arquivo eacute fechado

8489

Arquivos - processamento em baixo niacutevel - texto

O que resulta em

IDLgt printheader NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS

IDLgt helpmydataMYDATA STRUCT = -gt ltAnonymousgt Array[4]

IDLgt helpmydata[0] Structure ltd5e38f68gt 11 tags length=136 data length=124 refs=3 NAME STRING dec18s0001 CALMPOS INT 0 FILNAME STRING NIRSPEC-5-AO ECHLPOS DOUBLE 62630000 DISPPOS DOUBLE 36450000 TARGNAME STRING HD85258 POSDIR STRING NIRSPEC-5-AOp1 CLASS STRING STAR MJD_OBS STRING 54087574 ITIME DOUBLE 10000000 COADDS INT 1

Este caso eacute mais complicado que os mais comuns por haver colunas de strings

Se todas fossem de nuacutemeros natildeo teria sido necessaacuterio especificar o formato explicitamente As colunas teriam sido adivinhadas pela biblioteca que lecirc o arquivo Poderia ter sido lido escrito soacute com um array de nuacutemeros sem estruturas

8589

Arquivos - processamento em baixo niacutevel - binaacuterio

Formatos binaacuterios podem ser definidos de qualquer forma O arquivo eacute apenas um conjunto de bytes Cabe ao software saber como os interpretar

Uma escolha comum para que sejam autodocumentados eacute incluir um cabeccedilalho de texto informando as caracteriacutesticas dos dados necessaacuterias para os ler

Ex (IDL) criar um arquivo que armazene um array de doubles com um cabeccedilalho informando as dimensotildees para que o programa que o lecirc saiba como ler os dados

Inventa dados e abre o arquivo

IDLgt data_to_write=dindgen(34)IDLgt openwunitbinary_exampledatget_lun

Escreve as dimensotildees como texto

IDLgt printfunitdimensions of the double array stored belowIDLgt printfunitsize(data_to_writedimensions)

Escreve os dados binaacuterios

IDLgt writeuunitdata_to_write

Fecha o arquivo

IDLgt free_lununit

Escreve em binaacuterio (write unformatted)

8689

Arquivos - processamento em baixo niacutevel - binaacuterio

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

dimensions of the double array stored below 3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

8789

Arquivos - processamento em baixo niacutevel - binaacuterioA leitura deste arquivo eacute igualmente simples

IDLgt header=IDLgt dims=[00]IDLgt openrunitbinary_exampledatget_lun

Lecirc as dimensotildees (armazenadas como texto)

IDLgt readfunitheaderIDLgt readfunitdims

Lecirc a parte binaacuteria depois de saber as dimensotildees

IDLgt data_read=dblarr(dims)IDLgt readuunitdata_read

Fecha o arquivo

IDLgt free_lununit

Verifica que os dados foram gravados e lidos corretamente

IDLgt printarray_equal(data_to_writedata_read) 1

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Lecirc dados binaacuterios (read unformatted)

8889

Sumaacuterio

5 ndash Slides em httpwwwppenteadonetpeapea04_strings_iopdf Strings Expressotildees regulares Arquivos

httpwwwppenteadonetpea

8989

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89

Arquivos - binaacuterios ndash formatos nativosLinguagens como IDL R Python Java tecircm seu formato nativo binaacuterio acessado em alto niacutevel Basta mandar salvar ler variaacuteveis no do arquivo a biblioteca padratildeo automagicamente faz todo o trabalho de decidir como gravar ler os dados

Conveniente de usar na proacutepria linguagem Mas raramente existem bibliotecas para ler gravar o formato nativo de uma linguagem a partir de outra Ex (IDL)

IDLgt savefile=2dspectrumsavmydatamyheadercorners_dcorners_averbosecompress SAVE Portable (XDR) compressed SAVERESTORE file SAVE Saved variable MYDATA SAVE Saved variable MYHEADER()

Pode ser lido com apenas (haacute formas mais elaboradas)

IDLgt restore2dspectrumsavverbose RESTORE Portable (XDR) compressed SAVERESTORE file RESTORE Save file written by ltunknowngtltunknowngt Thu Jan 27 191422 2011 RESTORE IDL version 801 (linux x86_64) RESTORE Restored variable MYDATA RESTORE Restored variable MYHEADER()

IDLgt helpmydatamyheadercorners_dcorners_aMYDATA FLOAT = Array[1201 1201]MYHEADER STRING = Array[144]()

8289

Arquivos - processamento em baixo niacutevel

Nem sempre um formato padratildeo eacute a melhor escolha para o problema

Nem sempre haacute escolha (pode-se ter que trabalhar com arquivos que jaacute foram escritos em algum formato proprietaacuterio)

Agraves vezes o formato eacute padratildeo mas natildeo haacute bom suporte a ele disponiacutevel

Em todos estes casos eacute necessaacuterio escrever rotinas em baixo niacutevel que vatildeo ler processar diretamente o conteuacutedo do arquivo

Preferencialmente criando interfaces de alto niacutevel para o programa que vai as usar

8389

Arquivos - processamento em baixo niacutevel - texto

Tomando o exemplo anterior onde as colunas eram de diferentes tipos

NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS dec18s0001 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0002 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0003 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 FLAT 5408757812500 460000 5 dec18s0004 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 DARK 5408757812500 460000 5

A forma mais simples de o ler diretamente eacute definir uma estrutura para receber cada linha e um array destas estruturas para receber todo o arquivo Ex (IDL)

IDLgt record=namecalmpos0filnameechlpos0d0disppos0d0targnameposdirclassmjd_obsitime0d0coadds0IDLgt nlines=file_lines(filesearch_scamtxt)IDLgt mydata=replicate(recordnlines-1)IDLgt header=

Depois de definidas as variaacuteveis que vatildeo receber os dados o arquivo pode ser lido

IDLgt openrunitfilesearch_scamtxtget_lunIDLgt readfunitheaderIDLgt readfunitmydataformat=(A14I8A15F104F104A18A19A15F158F105I15)IDLgt free_lununit

A gravaccedilatildeo de um arquivo texto poderia ser feita de forma semelhante apenas trocando openr por openw (abrir o arquivo para gravaccedilatildeo natildeo leitura) e readf por printf

O arquivo eacute aberto em uma unidade (unit) usada para especificar de onde eacute feita a leitura

Ao final o arquivo eacute fechado

8489

Arquivos - processamento em baixo niacutevel - texto

O que resulta em

IDLgt printheader NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS

IDLgt helpmydataMYDATA STRUCT = -gt ltAnonymousgt Array[4]

IDLgt helpmydata[0] Structure ltd5e38f68gt 11 tags length=136 data length=124 refs=3 NAME STRING dec18s0001 CALMPOS INT 0 FILNAME STRING NIRSPEC-5-AO ECHLPOS DOUBLE 62630000 DISPPOS DOUBLE 36450000 TARGNAME STRING HD85258 POSDIR STRING NIRSPEC-5-AOp1 CLASS STRING STAR MJD_OBS STRING 54087574 ITIME DOUBLE 10000000 COADDS INT 1

Este caso eacute mais complicado que os mais comuns por haver colunas de strings

Se todas fossem de nuacutemeros natildeo teria sido necessaacuterio especificar o formato explicitamente As colunas teriam sido adivinhadas pela biblioteca que lecirc o arquivo Poderia ter sido lido escrito soacute com um array de nuacutemeros sem estruturas

8589

Arquivos - processamento em baixo niacutevel - binaacuterio

Formatos binaacuterios podem ser definidos de qualquer forma O arquivo eacute apenas um conjunto de bytes Cabe ao software saber como os interpretar

Uma escolha comum para que sejam autodocumentados eacute incluir um cabeccedilalho de texto informando as caracteriacutesticas dos dados necessaacuterias para os ler

Ex (IDL) criar um arquivo que armazene um array de doubles com um cabeccedilalho informando as dimensotildees para que o programa que o lecirc saiba como ler os dados

Inventa dados e abre o arquivo

IDLgt data_to_write=dindgen(34)IDLgt openwunitbinary_exampledatget_lun

Escreve as dimensotildees como texto

IDLgt printfunitdimensions of the double array stored belowIDLgt printfunitsize(data_to_writedimensions)

Escreve os dados binaacuterios

IDLgt writeuunitdata_to_write

Fecha o arquivo

IDLgt free_lununit

Escreve em binaacuterio (write unformatted)

8689

Arquivos - processamento em baixo niacutevel - binaacuterio

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

dimensions of the double array stored below 3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

8789

Arquivos - processamento em baixo niacutevel - binaacuterioA leitura deste arquivo eacute igualmente simples

IDLgt header=IDLgt dims=[00]IDLgt openrunitbinary_exampledatget_lun

Lecirc as dimensotildees (armazenadas como texto)

IDLgt readfunitheaderIDLgt readfunitdims

Lecirc a parte binaacuteria depois de saber as dimensotildees

IDLgt data_read=dblarr(dims)IDLgt readuunitdata_read

Fecha o arquivo

IDLgt free_lununit

Verifica que os dados foram gravados e lidos corretamente

IDLgt printarray_equal(data_to_writedata_read) 1

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Lecirc dados binaacuterios (read unformatted)

8889

Sumaacuterio

5 ndash Slides em httpwwwppenteadonetpeapea04_strings_iopdf Strings Expressotildees regulares Arquivos

httpwwwppenteadonetpea

8989

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89

Arquivos - processamento em baixo niacutevel

Nem sempre um formato padratildeo eacute a melhor escolha para o problema

Nem sempre haacute escolha (pode-se ter que trabalhar com arquivos que jaacute foram escritos em algum formato proprietaacuterio)

Agraves vezes o formato eacute padratildeo mas natildeo haacute bom suporte a ele disponiacutevel

Em todos estes casos eacute necessaacuterio escrever rotinas em baixo niacutevel que vatildeo ler processar diretamente o conteuacutedo do arquivo

Preferencialmente criando interfaces de alto niacutevel para o programa que vai as usar

8389

Arquivos - processamento em baixo niacutevel - texto

Tomando o exemplo anterior onde as colunas eram de diferentes tipos

NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS dec18s0001 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0002 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0003 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 FLAT 5408757812500 460000 5 dec18s0004 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 DARK 5408757812500 460000 5

A forma mais simples de o ler diretamente eacute definir uma estrutura para receber cada linha e um array destas estruturas para receber todo o arquivo Ex (IDL)

IDLgt record=namecalmpos0filnameechlpos0d0disppos0d0targnameposdirclassmjd_obsitime0d0coadds0IDLgt nlines=file_lines(filesearch_scamtxt)IDLgt mydata=replicate(recordnlines-1)IDLgt header=

Depois de definidas as variaacuteveis que vatildeo receber os dados o arquivo pode ser lido

IDLgt openrunitfilesearch_scamtxtget_lunIDLgt readfunitheaderIDLgt readfunitmydataformat=(A14I8A15F104F104A18A19A15F158F105I15)IDLgt free_lununit

A gravaccedilatildeo de um arquivo texto poderia ser feita de forma semelhante apenas trocando openr por openw (abrir o arquivo para gravaccedilatildeo natildeo leitura) e readf por printf

O arquivo eacute aberto em uma unidade (unit) usada para especificar de onde eacute feita a leitura

Ao final o arquivo eacute fechado

8489

Arquivos - processamento em baixo niacutevel - texto

O que resulta em

IDLgt printheader NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS

IDLgt helpmydataMYDATA STRUCT = -gt ltAnonymousgt Array[4]

IDLgt helpmydata[0] Structure ltd5e38f68gt 11 tags length=136 data length=124 refs=3 NAME STRING dec18s0001 CALMPOS INT 0 FILNAME STRING NIRSPEC-5-AO ECHLPOS DOUBLE 62630000 DISPPOS DOUBLE 36450000 TARGNAME STRING HD85258 POSDIR STRING NIRSPEC-5-AOp1 CLASS STRING STAR MJD_OBS STRING 54087574 ITIME DOUBLE 10000000 COADDS INT 1

Este caso eacute mais complicado que os mais comuns por haver colunas de strings

Se todas fossem de nuacutemeros natildeo teria sido necessaacuterio especificar o formato explicitamente As colunas teriam sido adivinhadas pela biblioteca que lecirc o arquivo Poderia ter sido lido escrito soacute com um array de nuacutemeros sem estruturas

8589

Arquivos - processamento em baixo niacutevel - binaacuterio

Formatos binaacuterios podem ser definidos de qualquer forma O arquivo eacute apenas um conjunto de bytes Cabe ao software saber como os interpretar

Uma escolha comum para que sejam autodocumentados eacute incluir um cabeccedilalho de texto informando as caracteriacutesticas dos dados necessaacuterias para os ler

Ex (IDL) criar um arquivo que armazene um array de doubles com um cabeccedilalho informando as dimensotildees para que o programa que o lecirc saiba como ler os dados

Inventa dados e abre o arquivo

IDLgt data_to_write=dindgen(34)IDLgt openwunitbinary_exampledatget_lun

Escreve as dimensotildees como texto

IDLgt printfunitdimensions of the double array stored belowIDLgt printfunitsize(data_to_writedimensions)

Escreve os dados binaacuterios

IDLgt writeuunitdata_to_write

Fecha o arquivo

IDLgt free_lununit

Escreve em binaacuterio (write unformatted)

8689

Arquivos - processamento em baixo niacutevel - binaacuterio

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

dimensions of the double array stored below 3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

8789

Arquivos - processamento em baixo niacutevel - binaacuterioA leitura deste arquivo eacute igualmente simples

IDLgt header=IDLgt dims=[00]IDLgt openrunitbinary_exampledatget_lun

Lecirc as dimensotildees (armazenadas como texto)

IDLgt readfunitheaderIDLgt readfunitdims

Lecirc a parte binaacuteria depois de saber as dimensotildees

IDLgt data_read=dblarr(dims)IDLgt readuunitdata_read

Fecha o arquivo

IDLgt free_lununit

Verifica que os dados foram gravados e lidos corretamente

IDLgt printarray_equal(data_to_writedata_read) 1

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Lecirc dados binaacuterios (read unformatted)

8889

Sumaacuterio

5 ndash Slides em httpwwwppenteadonetpeapea04_strings_iopdf Strings Expressotildees regulares Arquivos

httpwwwppenteadonetpea

8989

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89

Arquivos - processamento em baixo niacutevel - texto

Tomando o exemplo anterior onde as colunas eram de diferentes tipos

NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS dec18s0001 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0002 0 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 STAR 5408757421875 10000000 1 dec18s0003 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 FLAT 5408757812500 460000 5 dec18s0004 1 NIRSPEC-5-AO 626300 364500 HD85258 NIRSPEC-5-AOp1 DARK 5408757812500 460000 5

A forma mais simples de o ler diretamente eacute definir uma estrutura para receber cada linha e um array destas estruturas para receber todo o arquivo Ex (IDL)

IDLgt record=namecalmpos0filnameechlpos0d0disppos0d0targnameposdirclassmjd_obsitime0d0coadds0IDLgt nlines=file_lines(filesearch_scamtxt)IDLgt mydata=replicate(recordnlines-1)IDLgt header=

Depois de definidas as variaacuteveis que vatildeo receber os dados o arquivo pode ser lido

IDLgt openrunitfilesearch_scamtxtget_lunIDLgt readfunitheaderIDLgt readfunitmydataformat=(A14I8A15F104F104A18A19A15F158F105I15)IDLgt free_lununit

A gravaccedilatildeo de um arquivo texto poderia ser feita de forma semelhante apenas trocando openr por openw (abrir o arquivo para gravaccedilatildeo natildeo leitura) e readf por printf

O arquivo eacute aberto em uma unidade (unit) usada para especificar de onde eacute feita a leitura

Ao final o arquivo eacute fechado

8489

Arquivos - processamento em baixo niacutevel - texto

O que resulta em

IDLgt printheader NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS

IDLgt helpmydataMYDATA STRUCT = -gt ltAnonymousgt Array[4]

IDLgt helpmydata[0] Structure ltd5e38f68gt 11 tags length=136 data length=124 refs=3 NAME STRING dec18s0001 CALMPOS INT 0 FILNAME STRING NIRSPEC-5-AO ECHLPOS DOUBLE 62630000 DISPPOS DOUBLE 36450000 TARGNAME STRING HD85258 POSDIR STRING NIRSPEC-5-AOp1 CLASS STRING STAR MJD_OBS STRING 54087574 ITIME DOUBLE 10000000 COADDS INT 1

Este caso eacute mais complicado que os mais comuns por haver colunas de strings

Se todas fossem de nuacutemeros natildeo teria sido necessaacuterio especificar o formato explicitamente As colunas teriam sido adivinhadas pela biblioteca que lecirc o arquivo Poderia ter sido lido escrito soacute com um array de nuacutemeros sem estruturas

8589

Arquivos - processamento em baixo niacutevel - binaacuterio

Formatos binaacuterios podem ser definidos de qualquer forma O arquivo eacute apenas um conjunto de bytes Cabe ao software saber como os interpretar

Uma escolha comum para que sejam autodocumentados eacute incluir um cabeccedilalho de texto informando as caracteriacutesticas dos dados necessaacuterias para os ler

Ex (IDL) criar um arquivo que armazene um array de doubles com um cabeccedilalho informando as dimensotildees para que o programa que o lecirc saiba como ler os dados

Inventa dados e abre o arquivo

IDLgt data_to_write=dindgen(34)IDLgt openwunitbinary_exampledatget_lun

Escreve as dimensotildees como texto

IDLgt printfunitdimensions of the double array stored belowIDLgt printfunitsize(data_to_writedimensions)

Escreve os dados binaacuterios

IDLgt writeuunitdata_to_write

Fecha o arquivo

IDLgt free_lununit

Escreve em binaacuterio (write unformatted)

8689

Arquivos - processamento em baixo niacutevel - binaacuterio

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

dimensions of the double array stored below 3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

8789

Arquivos - processamento em baixo niacutevel - binaacuterioA leitura deste arquivo eacute igualmente simples

IDLgt header=IDLgt dims=[00]IDLgt openrunitbinary_exampledatget_lun

Lecirc as dimensotildees (armazenadas como texto)

IDLgt readfunitheaderIDLgt readfunitdims

Lecirc a parte binaacuteria depois de saber as dimensotildees

IDLgt data_read=dblarr(dims)IDLgt readuunitdata_read

Fecha o arquivo

IDLgt free_lununit

Verifica que os dados foram gravados e lidos corretamente

IDLgt printarray_equal(data_to_writedata_read) 1

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Lecirc dados binaacuterios (read unformatted)

8889

Sumaacuterio

5 ndash Slides em httpwwwppenteadonetpeapea04_strings_iopdf Strings Expressotildees regulares Arquivos

httpwwwppenteadonetpea

8989

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89

Arquivos - processamento em baixo niacutevel - texto

O que resulta em

IDLgt printheader NAME CALMPOS FILNAME ECHLPOS DISPPOS TARGNAME POSDIR CLASS MJD-OBS ITIME COADDS

IDLgt helpmydataMYDATA STRUCT = -gt ltAnonymousgt Array[4]

IDLgt helpmydata[0] Structure ltd5e38f68gt 11 tags length=136 data length=124 refs=3 NAME STRING dec18s0001 CALMPOS INT 0 FILNAME STRING NIRSPEC-5-AO ECHLPOS DOUBLE 62630000 DISPPOS DOUBLE 36450000 TARGNAME STRING HD85258 POSDIR STRING NIRSPEC-5-AOp1 CLASS STRING STAR MJD_OBS STRING 54087574 ITIME DOUBLE 10000000 COADDS INT 1

Este caso eacute mais complicado que os mais comuns por haver colunas de strings

Se todas fossem de nuacutemeros natildeo teria sido necessaacuterio especificar o formato explicitamente As colunas teriam sido adivinhadas pela biblioteca que lecirc o arquivo Poderia ter sido lido escrito soacute com um array de nuacutemeros sem estruturas

8589

Arquivos - processamento em baixo niacutevel - binaacuterio

Formatos binaacuterios podem ser definidos de qualquer forma O arquivo eacute apenas um conjunto de bytes Cabe ao software saber como os interpretar

Uma escolha comum para que sejam autodocumentados eacute incluir um cabeccedilalho de texto informando as caracteriacutesticas dos dados necessaacuterias para os ler

Ex (IDL) criar um arquivo que armazene um array de doubles com um cabeccedilalho informando as dimensotildees para que o programa que o lecirc saiba como ler os dados

Inventa dados e abre o arquivo

IDLgt data_to_write=dindgen(34)IDLgt openwunitbinary_exampledatget_lun

Escreve as dimensotildees como texto

IDLgt printfunitdimensions of the double array stored belowIDLgt printfunitsize(data_to_writedimensions)

Escreve os dados binaacuterios

IDLgt writeuunitdata_to_write

Fecha o arquivo

IDLgt free_lununit

Escreve em binaacuterio (write unformatted)

8689

Arquivos - processamento em baixo niacutevel - binaacuterio

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

dimensions of the double array stored below 3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

8789

Arquivos - processamento em baixo niacutevel - binaacuterioA leitura deste arquivo eacute igualmente simples

IDLgt header=IDLgt dims=[00]IDLgt openrunitbinary_exampledatget_lun

Lecirc as dimensotildees (armazenadas como texto)

IDLgt readfunitheaderIDLgt readfunitdims

Lecirc a parte binaacuteria depois de saber as dimensotildees

IDLgt data_read=dblarr(dims)IDLgt readuunitdata_read

Fecha o arquivo

IDLgt free_lununit

Verifica que os dados foram gravados e lidos corretamente

IDLgt printarray_equal(data_to_writedata_read) 1

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Lecirc dados binaacuterios (read unformatted)

8889

Sumaacuterio

5 ndash Slides em httpwwwppenteadonetpeapea04_strings_iopdf Strings Expressotildees regulares Arquivos

httpwwwppenteadonetpea

8989

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89

Arquivos - processamento em baixo niacutevel - binaacuterio

Formatos binaacuterios podem ser definidos de qualquer forma O arquivo eacute apenas um conjunto de bytes Cabe ao software saber como os interpretar

Uma escolha comum para que sejam autodocumentados eacute incluir um cabeccedilalho de texto informando as caracteriacutesticas dos dados necessaacuterias para os ler

Ex (IDL) criar um arquivo que armazene um array de doubles com um cabeccedilalho informando as dimensotildees para que o programa que o lecirc saiba como ler os dados

Inventa dados e abre o arquivo

IDLgt data_to_write=dindgen(34)IDLgt openwunitbinary_exampledatget_lun

Escreve as dimensotildees como texto

IDLgt printfunitdimensions of the double array stored belowIDLgt printfunitsize(data_to_writedimensions)

Escreve os dados binaacuterios

IDLgt writeuunitdata_to_write

Fecha o arquivo

IDLgt free_lununit

Escreve em binaacuterio (write unformatted)

8689

Arquivos - processamento em baixo niacutevel - binaacuterio

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

dimensions of the double array stored below 3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

8789

Arquivos - processamento em baixo niacutevel - binaacuterioA leitura deste arquivo eacute igualmente simples

IDLgt header=IDLgt dims=[00]IDLgt openrunitbinary_exampledatget_lun

Lecirc as dimensotildees (armazenadas como texto)

IDLgt readfunitheaderIDLgt readfunitdims

Lecirc a parte binaacuteria depois de saber as dimensotildees

IDLgt data_read=dblarr(dims)IDLgt readuunitdata_read

Fecha o arquivo

IDLgt free_lununit

Verifica que os dados foram gravados e lidos corretamente

IDLgt printarray_equal(data_to_writedata_read) 1

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Lecirc dados binaacuterios (read unformatted)

8889

Sumaacuterio

5 ndash Slides em httpwwwppenteadonetpeapea04_strings_iopdf Strings Expressotildees regulares Arquivos

httpwwwppenteadonetpea

8989

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89

Arquivos - processamento em baixo niacutevel - binaacuterio

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

dimensions of the double array stored below 3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

8789

Arquivos - processamento em baixo niacutevel - binaacuterioA leitura deste arquivo eacute igualmente simples

IDLgt header=IDLgt dims=[00]IDLgt openrunitbinary_exampledatget_lun

Lecirc as dimensotildees (armazenadas como texto)

IDLgt readfunitheaderIDLgt readfunitdims

Lecirc a parte binaacuteria depois de saber as dimensotildees

IDLgt data_read=dblarr(dims)IDLgt readuunitdata_read

Fecha o arquivo

IDLgt free_lununit

Verifica que os dados foram gravados e lidos corretamente

IDLgt printarray_equal(data_to_writedata_read) 1

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Lecirc dados binaacuterios (read unformatted)

8889

Sumaacuterio

5 ndash Slides em httpwwwppenteadonetpeapea04_strings_iopdf Strings Expressotildees regulares Arquivos

httpwwwppenteadonetpea

8989

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89

Arquivos - processamento em baixo niacutevel - binaacuterioA leitura deste arquivo eacute igualmente simples

IDLgt header=IDLgt dims=[00]IDLgt openrunitbinary_exampledatget_lun

Lecirc as dimensotildees (armazenadas como texto)

IDLgt readfunitheaderIDLgt readfunitdims

Lecirc a parte binaacuteria depois de saber as dimensotildees

IDLgt data_read=dblarr(dims)IDLgt readuunitdata_read

Fecha o arquivo

IDLgt free_lununit

Verifica que os dados foram gravados e lidos corretamente

IDLgt printarray_equal(data_to_writedata_read) 1

A aparecircncia do arquivo visto em um editor de texto comum (que assume codificaccedilatildeo de texto)

3 4^^^^^^^^^^^^^^eth^^^^^^^^^^^^^^H^^^^^^^P^^^^^^^T^^^^^^^X^^^^^^^^^^^^^^^^^^^^^^^^^$^^^^^^amp

Os caracteres abaixo da primeira linha satildeo o resultado de tentar interpretar os bytes dos dados binaacuterios como se fossem texto

A leitura deste arquivo eacute igualmente simples

Lecirc dados binaacuterios (read unformatted)

8889

Sumaacuterio

5 ndash Slides em httpwwwppenteadonetpeapea04_strings_iopdf Strings Expressotildees regulares Arquivos

httpwwwppenteadonetpea

8989

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89

Sumaacuterio

5 ndash Slides em httpwwwppenteadonetpeapea04_strings_iopdf Strings Expressotildees regulares Arquivos

httpwwwppenteadonetpea

8989

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89