Página 1 de 1

ARRAY - Função que transforma string demilitada em vetor

Enviado: 12 Fev 2007 16:02
por rochinha
Amiguinho

Esta função quebra o galho para criação de vetores, vi algo parecido no VB e encontrei esta em algum lugar vasculhando meus .PRGs.

Para usar basta passar a string contendo os valores separados por um delimitador qualquer, exemplo:

aMeuVetor := StringToArray( "O|Rochinha|e|um|prego", "|" )

Código: Selecionar todos

FUNCTION StringToArray( cString, cSeparator )
   LOCAL nPos
   LOCAL aString := {}
   DEFAULT cSeparator := ";"
   cString := ALLTRIM( cString ) + cSeparator
   DO WHILE .T.
      nPos := AT( cSeparator, cString )
      IF nPos = 0
         EXIT
      ENDIF
      AADD( aString, SUBSTR( cString, 1, nPos-1 ) )
      cString := SUBSTR( cString, nPos+1 )
   ENDDO
   RETURN ( aString )

Re: ARRAY - Função que transforma string demilitada em vetor

Enviado: 18 Jul 2008 20:18
por JLF
Rochinha,

Estou tentando importar um txt sem padrão de tamanho, mas com delimitadores ";" , para o dbf poderia exemplificar como posso fazer uso dessa sua função aqui ?

Abraços!

Enviado: 18 Jul 2008 23:02
por Maligno
A função do amigo Rochinha não vai resolver aquele problema que você relatou em outro tópico. Não totalmente. Você terá de fazer por partes. A função dele pegaria uma linha daquele seu arquivo (um registro) e colocaria cada campo num elemento da matriz devolvida. Mas você terá de separar as linhas manualmente. Ou, opcionalmente, modificar a função dele para já separar as linhas e retornar uma matriz multidimensional com todo o conteúdo do seu arquivo. Seria bem melhro. Só não se esqueça que o Clipper tem um limite para matrizes.

ARRAY - Função que transforma string demilitada em vetor

Enviado: 04 Out 2012 09:57
por Vlademiro
:)Pos

Obrigado. Realmente essa função é muito útil.

Comigo funcionou com as seguintes alterações :

No início
#include "common.ch"

O comando DEFAULT foi alterado para
DEFAULT cSeparator TO ";"

ARRAY - Função que transforma string demilitada em vetor

Enviado: 04 Out 2012 10:18
por sambomb
Se usar xHarbour pode usar o HB_ATokens

Código: Selecionar todos

//HB_ATokens(cString,[cDelimiter],[lSkipQuotes],[lDoubleQuotesOnly])

//-- Quebrar o conteúdo de um txt a cada quebra de linha CRLF
aLinhas := HB_aTokens( MemoRead("C:\Arquivo.TXT"), Chr(13)+Chr(10) )