1/89 programação em astronomia: indo além de loops e prints · pode ser visto como um mapa, onde...
TRANSCRIPT
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
-