Extragerea unui text de lungime variabila

Închis
smcsa
Mesaje: 2805
Membru din: Mar Sep 29, 2009 7:29 pm
Localitate: Timisoara

Extragerea unui text de lungime variabila

Mesaj de smcsa » Mar Feb 16, 2010 11:07 am

Am primit pe mesaj privat urmatoarea intrebare:
izolare prefix

Dată expediere: Mar Feb 16, 2010 9:38 am
Expeditor: celpisa
Destinatar: smcsa
salut,
scuze de deranj dar as avea o intrebare careia nu-i prea dau de cap....: Am pachetul: "Tvp50x50x3" ;cum pot izola literele care se afla inaintea 50x50x3 - Tvp ( subliniez faptul ca nu trebuie luat ca reper numarul de litere sau un "x" pt ca numarul de litere ce trebuie izolat poate diferi: "LT40x4" , "patrat50x50".
Acestea sunt profile si am nevoie sa creez o baza de date si trebuie sa izolez literele din prefix pt a obtine tipul de profil.

Multumesc mult si astept o solutie. Am incredere ca se va gasi o modalitate!
Problema se rezolva cu o functie VBA UDF (User Definied Function), adica o functie care se creeaza in VBA si se utilizeaza in Excel ca orice alta functie proprie Excel-ului:

Cod: Selectaţi tot

Function Left_Text(Celula As Range)
    For i = 1 To Len(Celula.Value)
        If IsNumeric(Mid(Celula.Value, i, 1)) Then
            Primele = i - 1
            Exit For
        End If
    Next i
    Left_Text = Left(Celula.Value, Primele)
End Function
Functia creeata de noi verifica fiecare caracter de la inceput, unul cate unul si cand intalneste un caracter cifra, memoreaza pozitia lui si se opreste. Apoi returneaza primele i-1 caractere.
Exemplu de utilizare:

Cod: Selectaţi tot

=Left_Text(A1)
Nota: nu aceasta este metoda de a cere ajutor pe un forum. Daca doriti sa primiti ajutor repede si ceea ce cereti sa poata fi folosit si de altii (pentru ca aceasta este de fapt esenta unui forum), va rugam sa postati pe forum !

Avatar utilizator
gecs
Moderator
Moderator
Mesaje: 2311
Membru din: Sâm Aug 15, 2009 10:05 am
Localitate: Bucuresti

Re: Extragerea unui text de lungime variabila

Mesaj de gecs » Mar Feb 16, 2010 11:27 am

Cu mai bine de 10 ani in urma am scris o aplicatie in VFP care facea o centralizare de .dbf-uri tot cu asmenea profile.
DBF-urile cu pricina erau rezultatul unor completari "de mana" ale unor extrase de materiale folosind un program furnizat de firma (nemtzeasca) care ne comandase proiectul (cacofonia am remarcat-o, dar ramane...) - fiecare obiect (subansamblu) din proiectul respectiv avea dbf-ul lui. Cand ne-au cerut centralizatorul pe profile, noi i-am intrebat: cum face programul vostru chestia asta? Raspuns: nu face ;)

In final am reusit sa scriu programul care facea centralizarea, dar programul era compus din doua parti:
1 - detector si corector de denimiri gresite de profile, ex: L 50x50x5 vs. L50x50x5 vs. l50X50X5 etc. :D
2 - centralizatorul propriu zis.

Un sfat: folositi mai intai "detectorul de greseli", altfel in scurt timp veti face spume la gura de cat de "sacadate" sunt comentariile la adresa colegilor care au completat tabelele de centralizat :lol:

smcsa
Mesaje: 2805
Membru din: Mar Sep 29, 2009 7:29 pm
Localitate: Timisoara

Re: Extragerea unui text de lungime variabila

Mesaj de smcsa » Mar Feb 16, 2010 11:38 am

Corect ce zicea colegul mai sus.
Pentru a aduce la un numitor comun numele profilelor folositi formula de mai jos:
=UPPER(SUBSTITUTE(A1;" ";""))
Aceasta inlocuieste toate spatiile cu nimic (adica le sterge) si apoi converteste textul la litera mare

Avatar utilizator
gecs
Moderator
Moderator
Mesaje: 2311
Membru din: Sâm Aug 15, 2009 10:05 am
Localitate: Bucuresti

Re: Extragerea unui text de lungime variabila

Mesaj de gecs » Mar Feb 16, 2010 11:52 am

Stai sa vezi cand s-or lovi de situatii de felul: "patrat 30x30" vs. "otel patrat 30x30", sau "teava 42.4x2.9" vs. "Ø 42.4x2.9" sau...
Detectorul - corector de greseli despre care vorbeam functiona cam asa:
- facusem o baza de denumiri "standard" (inclusiv dimensiunile pentru toate tipurile de profile);
- cand o pozitie din listele care trebuiau centralizate nu era gasita in tabelul de denumiri "standard" se afisa un dialog care permitea: adaugarea denumirii respective in lista de denumiri "standard" sau inlocuirea denumirii gresite prin selectarea pozitiei corecte din lista "standard".

smcsa
Mesaje: 2805
Membru din: Mar Sep 29, 2009 7:29 pm
Localitate: Timisoara

Re: Extragerea unui text de lungime variabila

Mesaj de smcsa » Mar Feb 16, 2010 12:04 pm

Da - si eu m-am lovit de razboiul "obiceiuri-operator-introducere-date" vs "logica" :lol:

Închis

Înapoi la “Visual Basic for Application (VBA) cu Excel - Intrebari tehnice”