Search  
Friday, May 25, 2012 ..:: Forum ::.. Register  Login
 Forum Minimize
Pentru a putea posta mesaje trebuie să vă înregistraţi.
Notă: Mesajele cu conţinut jignitor sau ilegal (inclusiv cereri de soft piratat) nu sunt acceptate şi vor fi şterse imediat .

Pentru a primi raspunsuri rapide si corecte, scrieti in mesaj ce intentionati sa faceti, ce mesaj de eroare primiti, in ce context si in urma caror actiuni. De asemenea, mentionati versiunea de FoxPro in care lucrati!
Dacă nu specificați versiunea, se consideră VFP 9.0 SP2.

SearchForum Home
  Visual FoxPro  Baze de date, tabele, view-uri si indecsi  ordonare date a...
 ordonare date alfanumerice
 
 5/30/2011 3:16:36 PM
User is offlineDanT
49 posts




ordonare date alfanumerice
 (Poland) Modified By DanT  on 6/5/2011 12:24:47 PM)
Cum pot face selecta datele dintr-un camp caracter care contine date alfanumerice in asa fel incat sa tina seama de valorile numerice aflate in componenta datelor?
Ca sa fiu mai explicit:
am urmatoarea secventa de date (neordonata):
A1/L
A1/1L
A2/1L
A1/2L
A2/4L
A1/3L
A1/10L
A2/21L

daca incerc sa le ordonez voi avea:
A1/L
A1/1L
A1/10L
A1/2L
A1/3L
A2/1L
A2/21L
A2/4L

iar eu vreau:

A1/L
A1/1L
A1/2L
A1/3L
A1/10L
A2/1L
A2/4L
A2/21L

Poate s-a mai discutat pe forum, insa nu am gasit nimic despre problema asta. Multumesc

Folosesc vfp9
 5/30/2011 4:37:28 PM
User is offlineCostel
227 posts
www.adrisoft.ro
4th




Re: ordonare date alfanumerice
 (N/A)
eu as incerca sa creez o coloana noua ColNew C(6), iar aceasta coloana sa fie populata astfel:
    UPDATE  Tabela  SET  ColNew=left(ColOld,3)+iif(len(allt(ColOld))=4,'00'+right(allt(ColOld),1), ;
                     iif(len(allt(ColOld))=5,'0'+right(allt(ColOld),2),ColOld))
si ordonez datele dupa ColNew





Nu munci atit de mult incit sa nu-ti mai ramina timp ca sa cistigi bani. (proverb evreiesc)
 5/30/2011 5:00:56 PM
User is offlineDanT
49 posts




Re: ordonare date alfanumerice
 (Poland)
Nu merge.
Poate exemplul meu nu a fost tocmai bun.
as putea avea acolo si o valoare de forma AP/10/Q/100

in linii mari este vorba de un program de evidenta a codurilor componentelor unor masini. Utilizatorul are 2 posibilitati de a introduce coduri: prin generare automata (de la... pana la...) sau unul cate unul
Aici e problema: daca se apuca sa genereze coduri dupa un anumit pattern, e ok, insa dupa aceea el poate sa introduca coduri unul cate unul folosind alt pattern si toata ordonarea se duce pe apa sambetei.




 5/30/2011 5:50:08 PM
User is offlineDaniel Buduru
2335 posts
1st




Re: ordonare date alfanumerice
 (N/A)
Asa cum este formatat codul, nu se poate ordona altfel.
Pentru a-l ordona dupa cum ai nevoie, e necesar ca valorile numerice sa fie in format fix, de ex, in loc de AP/10 sa fie AP/0010.
Trebuie doar sa stabilesti numarul de cifre pentru fiecare valoare numerica din cod, si sa aplici acest format.
Se poate scrie o functie pentru asta, dar nu cred ca poate fi folosita direct in indexare/
Mai degraba faci o coloana noua, asa cum s-a sugerat deja, si o completezi in baza de date, apeland functia in record validation rule.
Pentru separarea valorilor numerice, se poate scana sirul caracter cu caracter si evalua cu ISDIGIT(), iar formatarea valorilor numerice se poate face cu TRANSFORM(x,'@L 9999')


Daniel Buduru
 5/30/2011 6:09:09 PM
User is offlinemgabi
135 posts
5th


Re: ordonare date alfanumerice
 (N/A)
Varianta 1 : Impune un patern la introducerea datelor (eu asa as face)

Varianta 2 : Daca am inteles bine, la tine ar tebui o ordonare in care cifrele sa fie mai "mari" decat literele.
         In acest caz ai putea folosi translatarea de caractere:  CHRTRAN(codprodus, '0123456789', chr(200)+chr(201)+chr(202)+chr(203)+chr(204)+...+chr(209) )
         ... astfel,peste tot in codprodus, caracterul  "1" va fi inlocuit cu chr(200)   , sau cu ce caracter special vrei tu.

Varianta 3: Daca nu am inteles bine si iti trebuie alt tip de ordonare, da mai multe amanunte referitor la componenta codului si ordinea in care vrei sa afisezi . O solutie trebuie sa se gaseasca


 5/30/2011 8:08:41 PM
User is offlineDanT
49 posts




Re: ordonare date alfanumerice
 (Poland) Modified By DanT  on 5/31/2011 9:51:57 AM)
Multumesc pentru raspunsuri
in cele din urma am optat pentru crearea unei noi coloane si adaugarea de zerouri la valorile numerice. La prima vedere codul functioneaza. Daca aveti ceva observatii, va rog sa postati.


Parameters parsedstring

newcode = ""
numericpart = ""
For i=1 To Len(Alltrim(parsedstring))+1 Step 1

checkedletter=Substr(parsedstring,i, 1)
If Isdigit(checkedletter)
numericpart = numericpart + checkedletter
Else
If !empty(numericpart)
newcode = newcode + RIGHT(("00000" + numericpart), 5) + checkedletter
numericpart = ""
Else
newcode = newcode + checkedletter
Endif
Endif
Endfor

return newcode


astfel, codul A1/24/Q/100 va deveni
A00001/0024/Q/00100

Exact ce cautam.

LE:
Nu pot introduce un pattern, userul trebuie sa-si compuna codurile cum vrea el.
  Visual FoxPro  Baze de date, tabele, view-uri si indecsi  ordonare date a...

Search  Forum Home         

 Google Ads Minimize

    

Copyright 2002-2010 Profox   Terms Of Use  Privacy Statement