Strings, Horas e Datas

De GNU Octave
Revisão em 00h31min de 15 de outubro de 2012 por Jgrocha (Discussão | contribs) (Criou nova página com 'Em Octave, podem-se representar e manipular strings, isto é, cadeias de caracteres. === Constantes === Uma string consiste numa sequência de caracteres. Um string pode...')

(dif) ← Revisão anterior | Revisão atual (dif) | Revisão seguinte → (dif)
Ir para: navegação, pesquisa

Em Octave, podem-se representar e manipular strings, isto é, cadeias de caracteres.

Constantes

Uma string consiste numa sequência de caracteres. Um string pode ser declarada usando " (aspas) ou ' (pelicas).

Exemplo:

	"asterix"
	'asterix'

Como há carateres especiais como o newline (para indicar o fim de linha), nas strings delimitadas por aspas, é necessário usar o caracter especial '\' para indicar os caracteres especiais. Por exemplo:

octave:30> x = "Os Lusíadas\nLuís Vaz de Camões"
x = Os Lusíadas
Luís Vaz de Camões

As aspas podem ser inseridas usando o '\'. Exemplo:

octave:31> x = "Os \"Patrícios\""
x = Os "Patrícios"

Alternativamente, a string anterior podia ser introduzida com ', sem necessidade de usar o '\' para indicar os caracteres especiais.

octave:32> x = 'Os "Patrícios"'
x = Os "Patrícios"

Nas sequências delimitadas por ', o único caracter especial é a própria '. Para escrever uma string com ', usa-se:

octave:33> x = 'Vitorino d''Almeida'
x = Vitorino d'Almeida


Representação interna de strings

Cara caracter é internamente representado por um código. A função toascii devolve o código do(s) caracter(es).

octave:35> toascii('asterix')
ans =
    97   115   116   101   114   105   120

Significa que o caracter 'a' é representado internamente pelo número 97, o 's' pelo número 115 e assim sucessivamente.

Inversamente, a função char devolve o caracter correspondente a um determinado código.

octave:38> char(97)
ans = a

Uma string é representada internamente como um vetor. Ou seja, a string 'bruno' é representada internamente como o vetor:

[98, 114, 117, 110, 111]

Usando a função whos comprova-se que a variável x é um vetor com a dimensão 1x5.

octave:54> x = 'bruno'
x = bruno
octave:55> whos
Variables in the current scope:
  Attr Name        Size                     Bytes  Class
  ==== ====        ====                     =====  ===== 
       x           1x5                          5  char
Total is 5 elements using 5 bytes

Assim sendo, utilizando as funções toascii e char podemos apresentar a string ora com os respetivos códigos, ora com os caracteres.

octave:49> x = 'bruno'
x = bruno
octave:50> y = toascii(x)
y =
    98   114   117   110   111
octave:51> z = char(y)
z = bruno

Mensagens secretas

Comparação de strings

Datas
    • time()**

Retorna a hora atual, como sendo o número de segundos desde o epoch. O epoch é a data utilizada pelos sistemas operativos a partir da qual são contados os segundos. Habitualmente é a partir de:

  • 1 de Janeiro de 1970, às 00:00:00 (UTC)
  • 1 de Janeiro de 1900, às 00:00:00 (UTC)

Exemplo:

octave:4> format long
octave:5> time()
ans =  1349691018.63123


    • ctime()**

Dado uma hora (em segundos desde o epoch), imprime a hora de acordo com o fuso horário em vigor (que está definido no computador).

Exemplo:

octave:6> ctime(time())
ans = Mon Oct 08 11:16:02 2012

Qual é o epoch utilizado pela função time() no meu computador?

Com as duas funções anteiores, consegue descobrir facilmente o epoch utilizado na função time(), fazendo simplemente:

octave:7> ctime(0)
ans = Thu Jan 01 01:00:00 1970

Repare que, no exemplo anterior, o instante do epoch, no fuso horário local, tem 1 hora de diferença.

    • Representação de datas numa **//time struct//

Por vezes, interessa decompor um data nas suas compoentes. Há duas funções para o fazer: localtime() gmtime()

Ambas recebem como argumento um instante de tempo, e devolvem uma time struct. A função gmtime() retorna o instante medido em UTC, enquanto que localtime() devolve o instante de acordo com o fuso atual. Ambas as funções estão a usar como epoch o dia 1 de Janeiro de 1900 às 00:00:00.

octave:13> localtime(time()) ans = {

 usec =  477904
 sec =  58
 min =  32
 hour =  11
 mday =  8
 mon =  9
 year =  112
 wday =  1
 yday =  281
 isdst =  1
 zone = WEST

}

Sendo uma time struct, os valores de struct podem ser utilizados da seguinte forma:

octave:17> agora = localtime(time());
octave:18> 365-agora.yday
ans =  84


Converter strings em datas

formato = "%Y-%m-%d %H:%M:%S"; data = "2012-10-08 16:04:25";

[hoje, numchars] = strptime(data, formato) fimdoano = "2012-12-31 23:59:59"; [fda, numchars] = strptime(fimdoano, formato)

Exercícios
Diga quantos segundos viveu até agora?











Usando a função


Se o primeiro registo foi às 08:40:19, diga qual o batimento registado mais perto das 9:00:00.

Dga quanto tempo o ritmo cardíaco esteve acima dos 150 . contar as vezes acime de 150 e multiplicar por 5 segundos... . calcular o instante de início e o instante final