🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.vbasic
13 messages
13 total messages Started by loki Thu, 17 Dec 2009 14:39
Prosba o uproszczenie funkcji
#104403
Author: loki
Date: Thu, 17 Dec 2009 14:39
50 lines
1689 bytes
Funkje zamierzam wykorzystywac b. czesto w makrze i zalezy mi by ja jak
nabardziej uproscic.
Celem jej jest zwrocic wyrazenie lub wyrazenia znajdujace sie miedzy
okreslonym separatorem.

--- kod ---
Public Function fragment(wartosc, separator, pozycja, ile_wyrazow)

w = wartosc
s = separator
p = pozycja
i = ile_wyrazow
l = Len(w)

Dim x As Byte
Dim y As Byte

' poczatek
x = 1 'kolejny znak
y = 1 'kolejny przebieg
    Do While y < p
        If IsNumeric(InStr(x, w, s)) Then
            x = InStr(x, w, s) + 1
        End If
        y = y + 1
    Loop
xs = x

' koniec
x = 1
y = 1
    Do While y < p + i
        If IsNumeric(InStr(x, w, s)) Then
            x = InStr(x, w, s) + 1
        End If
        y = y + 1
    Loop
xe = x

fragment = Mid(w, xs, (xe - xs) - 1)

End Function
--- koniec kodu ---

Bede wdzieczny za wszelkie sugestie.

Pozdrawiam

-- 
Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/
Re: Prosba o uproszczenie funkcji
#104404
Author: InDesign Scripts
Date: Thu, 17 Dec 2009 15:43
9 lines
1110 bytes
[...]

> Bede wdzieczny za wszelkie sugestie.

możesz napisać dokładnie co ta funkcja ma robić - bo nie bardzo rozumiem ...

może też poczytaj o SPLIT?

robin
Re: Prosba o uproszczenie funkcji
#104405
Author: loki
Date: Thu, 17 Dec 2009 17:06
16 lines
1412 bytes
> możesz napisać dokładnie co ta funkcja ma robić - bo nie bardzo rozumiem ...
> może też poczytaj o SPLIT?
> robin

Funcja, ma wyciagac fragment oddzielony okreslonym znakiem.
Przykladowo dla tekstu "aaa/bbb/ccc/ddd/eee"
a) uzywajac jej z parametrami "/",3,1 otrzymamy wynik "ccc"
b) dla "/",2,2 "bbb/ccc", itd.
Parametry to kolejno znak rozdzielajacy, ktore z kolei wyrazenie
i ilosc wyrazen.
Najwazniejsze dla mnie, by bylo okreslane ktory z kolei separator.
Zaraz lukne to split, moze ta funkcja posiada to co potrzebuje.


-- 
Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/
Re: Prosba o uproszczenie funkcji
#104414
Author: Michal AKA Miki
Date: Thu, 17 Dec 2009 17:24
21 lines
1766 bytes
Użytkownik "loki" <loki21@NOSPAM.gazeta.pl> napisał w wiadomości 
news:hgdfq6$2ku$1@inews.gazeta.pl...
> Funkje zamierzam wykorzystywac b. czesto w makrze i zalezy mi by ja jak
> nabardziej uproscic.
> Celem jej jest zwrocic wyrazenie lub wyrazenia znajdujace sie miedzy
> okreslonym separatorem.

Pytanie, co ta funkcja ma zwracac, jesli bedzie 5 separatorow? Tablice? 
Pierwsze wyrazenie? Czy ostatnie?
Co okresla parametr "ile_wyrazow"?
Widze, ze sprawdzasz kazdy znak, czy jest cyfra, tylko co to ma na celu?

Przy okazji przydaloby sie tez powiedziec, o jakim programie mowisz... bo 
wiesz - grupa VBASIC zajmuje sie nie tylko VBA, ale tez Visual Studio czy 
nawet VBS.

aha - powiedz, jak rozumiesz "wyrazenie znajdujace sie miedzy separatorem" 
:) To tak jakbys powiedzial, ze jestem pomiedzy ulica :D

Pozdrawiam
Michal
Re: Prosba o uproszczenie funkcji
#104415
Author: InDesign Scripts
Date: Thu, 17 Dec 2009 18:16
5 lines
1238 bytes
> Widze, ze sprawdzasz kazdy znak, czy jest cyfra, tylko co to ma na celu?

to nawet nie jest sprawdzenie znaku - tylko sprawdzenie czy pozycja znaku - wynik InStr - jest liczba ;) a będzie zawsze - bo będzie 0 - brak, albo >0 - czyli pozycja w tekście ;)

robin
Re: Prosba o uproszczenie funkcji
#104406
Author: InDesign Scripts
Date: Thu, 17 Dec 2009 18:23
25 lines
2171 bytes
> Funcja, ma wyciagac fragment oddzielony okreslonym znakiem.
> Przykladowo dla tekstu "aaa/bbb/ccc/ddd/eee"
> a) uzywajac jej z parametrami "/",3,1 otrzymamy wynik "ccc"
> b) dla "/",2,2 "bbb/ccc", itd.
> Parametry to kolejno znak rozdzielajacy, ktore z kolei wyrazenie
> i ilosc wyrazen.

a jakim cudem:

i = ile_wyrazow
...
Do While y < p + i

p+i ma rozszerzyć obszar poszukiwań o np. i=5 kolejnych 3'wyrazowych słów ?
poza tym - przecież pomiędzy separatorem możesz mieć ciągi znaków różnej długości ?

bo aktualnie to rozszerzy obszar poszukiwań o i'kolejnych znaków a nie i'kolejnych ciągów znaków

> Najwazniejsze dla mnie, by bylo okreslane ktory z kolei separator.
> Zaraz lukne to split, moze ta funkcja posiada to co potrzebuje.

najprostrze i najlepsze rozwiązanie ;)
bo wtedy splitujesz i w petli bierzesz sobie elementy od p(ozycja) do p(ozycja)+i(le_wyrazow) - oczywiście najpierw musisz sprawdzić, czy ilość elementów w tablicy (wynik Split) jest większa niż p(ozycja) i czy p(ozycja)+i(le_wyrazów) jest mniejsze od ilości otrzymanych elementów - jeżeli nie to bierzesz do ostatniego elmentu

robin
Re: Prosba o uproszczenie funkcji
#104407
Author: loki
Date: Thu, 17 Dec 2009 19:44
42 lines
2657 bytes
InDesign Scripts <indesignscripts@gazeta.pl> napisał(a): 

> a jakim cudem:
> 
> i = ile_wyrazow
> Do While y < p + i
> 
> p+i ma rozszerzyć obszar poszukiwań o np. i=5 kolejnych 3'wyrazowych słów ?
> poza tym - przecież pomiędzy separatorem możesz mieć ciągi znaków różnej długoś
> ci ?
> 
> bo aktualnie to rozszerzy obszar poszukiwań o i'kolejnych znaków a nie i'kolejn
> ych ciągów znaków

Ja to wykorzystuje do obrobki zrodel stron i czesto sa w linii sepratory
roznych typow.
By latwiej ci przedtawic ten kod nazwe wyrazenie kolumna, a separator tabem.

wtedy p - pierwsza interesujaca nas kolumna, i = ilosc kolumn

W petli odczytuje pozycje kolejnych znakow az nie znajde znaku = tabowi. 
To + 1 jest pozycja 1 kolumny. Oczywiscie zakladajac, ze nie ma tabow
na poczatku linii, wtedy 2-gi wszukiwany tab + 1 = pozycja 1 kolumny.
Kazdy kolejny przebieg dodaje 1 do pozycji startowej szukanego taba.

Dzieki temu niezleznie jakiej dlugosci jest ciag i czy sa rozne znaki
miedzy tabami pozycja jest podawana poprawnie. Gdy pozycja nie jest liczba,
przerwane jest wykonywanie petli i bodaj podaje funkcja arg (tu mozna dodac
cokolwiek sprawdzajace poprawnosc).

czemu p + i? Bo rozna ilosc kolum z roznych fragmentow kodu nas interesuje.
Nieraz 1, nieraz 10 :P p + i okresla szukany tab + wartosc i (kolumn).

Nie mam glowy by to to teraz jasniej tlumaczyc :) Funkcja jako tako dziala
poprawnie, ale nie podoba mi sie uzywanie 2 petli :P
Probowalem w 1 z wykorzystanie dl ciagu, ale glowna szukana wartoscia
musialby byc tab koncowy.
Tyle, ze jego moze wcale nie byc. Gdy interesuje nas tylko ost kolumna,
wtedy tez niemozliwe byloby odczytanie taba poczatkowego...

-- 
Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/
Re: Prosba o uproszczenie funkcji
#104408
Author: InDesign Scripts
Date: Thu, 17 Dec 2009 20:03
41 lines
2284 bytes
> Ja to wykorzystuje do obrobki zrodel stron i czesto sa w linii sepratory
> roznych typow.
> By latwiej ci przedtawic ten kod nazwe wyrazenie kolumna, a separator tabem.
> 
> wtedy p - pierwsza interesujaca nas kolumna, i = ilosc kolumn
> 
> W petli odczytuje pozycje kolejnych znakow az nie znajde znaku = tabowi. 

po co ? po to jest właśnie SPLIT - wtedy Twój jeden wiersz - staje się tablicą z komórkami z danego wiersza

> czemu p + i? Bo rozna ilosc kolum z roznych fragmentow kodu nas interesuje.
> Nieraz 1, nieraz 10 :P p + i okresla szukany tab + wartosc i (kolumn).

dobra - łapie - dodajesz to do p, który jest licznikiem kolumn ...

> Nie mam glowy by to to teraz jasniej tlumaczyc :) Funkcja jako tako dziala
> poprawnie, ale nie podoba mi sie uzywanie 2 petli :P
> Probowalem w 1 z wykorzystanie dl ciagu, ale glowna szukana wartoscia
> musialby byc tab koncowy.
> Tyle, ze jego moze wcale nie byc. Gdy interesuje nas tylko ost kolumna,
> wtedy tez niemozliwe byloby odczytanie taba poczatkowego...

jeszcze raz - UŻYJ SPLIT !! :)

"aaa/bbb/ccc/ddd/eee"
rozbije Ci to na:
aaa
bbb
ccc
ddd
eee

a "/aaa/bbb/ccc/ddd/eee" na:
[puste]
aaa
bbb
ccc
ddd
eee

robin
Re: Prosba o uproszczenie funkcji
#104409
Author: Michal AKA Miki
Date: Fri, 18 Dec 2009 00:07
39 lines
2171 bytes
Użytkownik "loki" <loki21.SKASUJ@gazeta.pl> napisał w wiadomości 
news:hgdoe6$3ia$1@inews.gazeta.pl...
>> możesz napisać dokładnie co ta funkcja ma robić - bo nie bardzo rozumiem 
>> ...
>> może też poczytaj o SPLIT?
>> robin
>
> Funcja, ma wyciagac fragment oddzielony okreslonym znakiem.
> Przykladowo dla tekstu "aaa/bbb/ccc/ddd/eee"
> a) uzywajac jej z parametrami "/",3,1 otrzymamy wynik "ccc"
> b) dla "/",2,2 "bbb/ccc", itd.
> Parametry to kolejno znak rozdzielajacy, ktore z kolei wyrazenie
> i ilosc wyrazen.
> Najwazniejsze dla mnie, by bylo okreslane ktory z kolei separator.
> Zaraz lukne to split, moze ta funkcja posiada to co potrzebuje.
>

To jakby cos w ten desen:

Public Function fragment2(wartosc, separator, pozycja, ile_wyrazow)

Dim arrTablica As Variant
Dim strTablica As String, i As Integer

arrTablica = Split(wartosc, separator)
For i = pozycja - 1 To pozycja + ile_wyrazow - 2
    strTablica = strTablica & arrTablica(i) & separator
Next i

fragment2 = Left(strTablica, Len(strTablica) - 1)

End Function

Malo elegancko, pewnie tez trzeba dokladniej sie przyjrzec, ale tak na 
szybko moze pomoze.


Pozdrawiam
Michal
Re: Prosba o uproszczenie funkcji
#104410
Author: InDesign Scripts
Date: Fri, 18 Dec 2009 09:55
23 lines
1735 bytes
> To jakby cos w ten desen:
> 
> Public Function fragment2(wartosc, separator, pozycja, ile_wyrazow)
> 
> Dim arrTablica As Variant
> Dim strTablica As String, i As Integer
> 
> arrTablica = Split(wartosc, separator)
> For i = pozycja - 1 To pozycja + ile_wyrazow - 2
>     strTablica = strTablica & arrTablica(i) & separator
> Next i
> 
> fragment2 = Left(strTablica, Len(strTablica) - 1)
> 
> End Function
> 
> Malo elegancko, pewnie tez trzeba dokladniej sie przyjrzec, ale tak na 
> szybko moze pomoze.

trzeba by dodać jeszcze sprawdzanie czy tablica nie jest mniejsza niz poczatkowa i koncowa kolumna do "wyciecia"
a separator może też być dłuższy niż jeden znak

robin
Re: Prosba o uproszczenie funkcji
#104411
Author: Tajan
Date: Fri, 18 Dec 2009 10:12
35 lines
2083 bytes
Użytkownik "Michal AKA Miki" <jakistammichal@z.onetu.pl> napisał w 
wiadomości news:hgeh3l$3nt$1@inews.gazeta.pl...
> Użytkownik "loki" <loki21.SKASUJ@gazeta.pl> napisał w wiadomości 
> news:hgdoe6$3ia$1@inews.gazeta.pl...
>>> możesz napisać dokładnie co ta funkcja ma robić - bo nie bardzo rozumiem 
>>> ...
>>> może też poczytaj o SPLIT?
(..)

> To jakby cos w ten desen:
>
> Public Function fragment2(wartosc, separator, pozycja, ile_wyrazow)

Ewentualnie mozna też zaprząc do pracy i Join:

Public Function fragment(wartosc, separator, pozycja, ile_wyrazow)

Dim arrTablica As Variant
Dim arrTablicaWyn As Variant
Dim i As Integer

arrTablica = Split(wartosc, separator)

ReDim arrTablicaWyn(1 To ile_wyrazow)

For i = 1 To ile_wyrazow
    arrTablicaWyn(i) = arrTablica(pozycja + i - 2)
Next i

fragment = Join(arrTablicaWyn, separator)

End Function

Tajan
Re: Prosba o uproszczenie funkcji
#104412
Author: loki
Date: Sat, 19 Dec 2009 14:41
29 lines
1566 bytes
Tajan <Tajan@interia.pl> napisał(a): 

> Ewentualnie mozna też zaprząc do pracy i Join:
> 
> Public Function fragment(wartosc, separator, pozycja, ile_wyrazow)
> 
> Dim arrTablica As Variant
> Dim arrTablicaWyn As Variant
> Dim i As Integer
> 
> arrTablica = Split(wartosc, separator)
> 
> ReDim arrTablicaWyn(1 To ile_wyrazow)
> 
> For i = 1 To ile_wyrazow
>     arrTablicaWyn(i) = arrTablica(pozycja + i - 2)
> Next i
> 
> fragment = Join(arrTablicaWyn, separator)
> 
> End Function

Funkcja dziala poprawnie i szybko, tego potrzebowalem.
Wielkie dzieki.

Pozdrowka

-- 
Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/
Re: Prosba o uproszczenie funkcji
#104413
Author: InDesign Scripts
Date: Sat, 19 Dec 2009 20:13
24 lines
1722 bytes
>> Public Function fragment(wartosc, separator, pozycja, ile_wyrazow)
>>
>> Dim arrTablica As Variant
>> Dim arrTablicaWyn As Variant
>> Dim i As Integer
>>
>> arrTablica = Split(wartosc, separator)
>>
>> ReDim arrTablicaWyn(1 To ile_wyrazow)
>>
>> For i = 1 To ile_wyrazow
>>     arrTablicaWyn(i) = arrTablica(pozycja + i - 2)
>> Next i
>>
>> fragment = Join(arrTablicaWyn, separator)
>>
>> End Function
> 
> Funkcja dziala poprawnie i szybko, tego potrzebowalem.
> Wielkie dzieki.

a dodałeś sprawdzanie czy pozycja i pozycja+ile_wyrazow nie jest większe od UBound(arrTablica)-1 ? ;)

robin
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads