Kamil K.

Kamil K. Informatyk

Temat: Zabawa ze stringami :)

Walcze i walcze i już nie mam pomyslu.
W jaki sposob wyluskac informacje z pola i w jakis sposob zapisac je jako osobne kolumny. I tak:

Mam w polu np taki string:

tekst1 [i]| 1 |[/i] 65,00 | 23 | | | szt | | | 0 | [b]| 238 |[/b] tekst2 [i]| 1 |[/i] 170,00 | 23 | | | szt | | | 0 | [b]| 224 |[/b] tekst3 [i]| 2 |[/i] 12,00 | 23 | text4 | | szt | | | 0 | [b]| 81 |[/b] 7-37tekst5 [i]| 1 |[/i] 12,00 | 23 | text6 | | szt | | | 0 | [b]| 81 |[/b] 7-36

caly tekst jest pisany jednym ciagiem
wyznacznikiem ktora czesc tekstu mam wyluskac z tego pola to tabela slownikowa majaca w polu odpowiednik pogrubionego. Caly wyluskiwany tekst po znalezieniu wartosci w slowniku to np:
tekst1 | 1 | 65,00 | 23 |  |  | szt |  |  | 0 |   238 |
jesli ze slownika porowna 238
lub
7-37tekst5 | 1 | 12,00 | 23 | text6 |  | szt |  |  | 0 |  | 81 |
jesli ze slownika porowna 81

a najlepiej jesli w wyniku daloby
pierwsza czesc do pierwszego | i to co zaznaczylem jako kursywa najlepiej jako cyfra w osobnym polu
Czy ma ktoś pomysl??Kamil K. edytował(a) ten post dnia 16.02.11 o godzinie 18:43
Maciej Lemański

Maciej Lemański Spec ds. Finansów

Temat: Zabawa ze stringami :)

Uff, słabo to wytłumaczyłeś .

Czyli masz AAAAAA BBBBBB CCCCCC ....... ZZZZZZZ

w jednej linii ?
Sposobem trzeba.

1.String kopiujesz do schowka
2.Zapisujesz jako *.txt
3. Importujesz do excela
4. Musisz w excelu wywalić te html-owe formatowania.
Zamieniasz <Ctrl+h> [*] na (puste)
5. Zapisujesz jako xls. Możesz wcześniej nazwać kolumny, nie musisz.
6. Importujesz do Accessa jako tabelę.
7. Teraz tworzysz tabelę z AAAAAA polami, i potem dołączasz kwerendą BBBBBB jako AAAAAA, potem CCCCCC jako AAAAAA
8. W rezultacie masz wszystko w tych samych kolumnach

Ogranicza Cię tylko ilość wierszy excela 65535 szt

Powodzenia
Kamil K.

Kamil K. Informatyk

Temat: Zabawa ze stringami :)

Tak, tylko chodzi o to, ze podlaczenie do bazy jest przez odbc a potrzebne jest raportowanie na podstawie tych danych a baza ciagle zyje .. a osoba uzywajaca aplikacji zrobionej na accesie nie ma bezposredeniego dostepu do danej bazy i nie bedzie miala mozliwosci bawienia sie w excela.

konto usunięte

Temat: Zabawa ze stringami :)

do takich zabaw jest regexp dla VBA
http://vbamania.blogspot.com/2009/10/regexp-jak-to-wyk...

i najważniejsze - kolekcja match

http://www.regular-expressions.info/vb.htmlPrzemysław R. edytował(a) ten post dnia 17.02.11 o godzinie 11:29
Maciej Lemański

Maciej Lemański Spec ds. Finansów

Temat: Zabawa ze stringami :)

Rozumiem.

Nie wiem jeszcze jak machnąć z tego wielkiego stringa tabelę accessa bez vba - nie da się długość pola to maks 255 znaków.
Więc tylko vba. Analiza stringu jak podpowiada koleg1 i tworzenie tabeli.

Drugą część bez visuala by się dało

znacznik występuje n krotnie co 11 pól.

czyli potrzebujesz 1 kwerendę tworzącą tabelę dla pierwszego znacznika
i n-1 kwerend dołączających dla n-01 pozostałych znaczników w wierszu.

Kwerendy muszą zwracać 10 pól na lewo od każdego znacznika.
Wszystko by było w jednej tabeli.Maciej Lemański edytował(a) ten post dnia 17.02.11 o godzinie 12:54
Kamil K.

Kamil K. Informatyk

Temat: Zabawa ze stringami :)

dzieki za info, bede sie musial zaprzyjaznic z VB :(

konto usunięte

Temat: Zabawa ze stringami :)

tekst masz w HTML-u?
Maciej Lemański

Maciej Lemański Spec ds. Finansów

Temat: Zabawa ze stringami :)

Wstępnie to tak będzie wyglądać. By to działało musisz w references w vba dodać microsoft dao 3.6 i przeciągnąć najwyżej w drzewie jak się da. Oczywiście musisz sobie wymyślić jak zaciągnąć przy pomocy DAO to swoje długie pole z danymi do zmiennej.

Powodzenia

Public Function WYCENA() As Variant

On Error GoTo WYCENA_ERR
Dim MDB As Database
Dim MS1 As Recordset

Dim zmienna As String
Dim wart_pola As String
Dim SQL As String
Dim gdzie As Integer
Dim gdzie1 As Integer
gdzie = 0
SQL = "DELETE * FROM zakupy;"

Set MDB = CurrentDb()
MDB.Execute SQL

Set MS1 = MDB.openrecordset("zakupy", dbOpenDynaset)
MS1.AddNew

zmienna = "| 1 | 65,00 | 23 | | | szt | | | 0 | | 238 | tekst2 | 1 | 170,00 | 23 | | | szt | | | 0 | | 224 | tekst3 | 2 | 12,00 | 23 | text4 | | szt | | | 0 | | 81 | 7-37tekst5 | 1 | 12,00 | 23 | text6 | | szt | | | 0 | | 81 | 7-36"

gdzie = InStr(gdzie + 1, zmienna, "|", 1)
gdzie1 = InStr(gdzie + 1, zmienna, "|", 1)

wart_pola = Mid(zmienna, gdzie + 1, gdzie1 - gdzie - 1)
MS1!A = wart_pola

gdzie = gdzie1
gdzie1 = InStr(gdzie + 1, zmienna, "|", 1)

wart_pola = Mid(zmienna, gdzie + 1, gdzie1 - gdzie - 1)
MS1!B = wart_pola

gdzie = gdzie1
gdzie1 = InStr(gdzie + 1, zmienna, "|", 1)

wart_pola = Mid(zmienna, gdzie + 1, gdzie1 - gdzie - 1)
MS1!C = wart_pola

gdzie1 = InStr(gdzie + 1, zmienna, "|", 1)
gdzie1 = InStr(gdzie + 1, zmienna, "|", 1)
gdzie1 = InStr(gdzie + 1, zmienna, "|", 1)

MS1.Update
MS1.Close

WYCENA_EXIT:
Exit Function

WYCENA_ERR:
MsgBox Err.Description
WYCENA = Err.Number
Resume WYCENA_EXIT

End Function
Maciej Lemański

Maciej Lemański Spec ds. Finansów

Temat: Zabawa ze stringami :)

aha w tabeli zakupy muszą być pola A , B , C .... Z odpowiedniego typuMaciej Lemański edytował(a) ten post dnia 17.02.11 o godzinie 13:11
Kamil K.

Kamil K. Informatyk

Temat: Zabawa ze stringami :)

Przemysław R.:
tekst masz w HTML-u?

Nie.
Jest baza do ktorej siegam accessem przz odbc. jedna z tabel ma 10 kolumn z ktorych jedna, w kazdym polu ma zapisy w podobnym formacie, z tym ze w polu ten ciag nie zawsze ma identyczna dlugosc .. moze sie skladac od 1 do 50 taki jednostkowych ciagow.
"tekst1 | 1 | 65,00 | 23 | | | szt | | | 0 | | 238 |"
ciag tekst1 za kazdym razem moze miec inna dlugoscKamil K. edytował(a) ten post dnia 17.02.11 o godzinie 16:58

konto usunięte

Temat: Zabawa ze stringami :)

Panowie
tekst ma stałą strukturę - jest to grupa rekordów separowanych znakiem |

robimy split stringu do array-a i bierzemy po en elementów, robimy transpozycję i mamy pozamiatane



Wyślij zaproszenie do