Vraag


Acties:
  • 0 Henk 'm!

  • tajvdz
  • Registratie: November 2006
  • Laatst online: 31-03 00:43
Hoi,

Voor mijn muziek collectie gebruik ik al ruim 30 jaar Dbase IV. Nu heb ik daar een aantal controles ingebouwd en een daarvan is count.
Ik voer in de database diverse geluidsdragers in die ik benoem in het veld soort. Ik heb een regel ingebouwd die de soorten per drager telt. Dit ging eigenlijk altijd goed tot ik er een nieuwe soort aan had toegevoegd. Het gaat om 12''LD. 12'' bestond al voor maxi singles. Wat er nu echter gebeurd is dat als ik ga tellen op 12'' dat hij de 12''LD daar bij telt: count for soort="12''" klopt dus niet meer. Volgens mij moet ik dan in plaats van = iets anders gebruiken of iets toevoegen dat de waarde exact overeen moet komen. Weet iemand de oplossing hiervoor?

Alle reacties


Acties:
  • 0 Henk 'm!

  • D-dark
  • Registratie: Januari 2008
  • Laatst online: 20:30
Count voor soort 12 wordt in beide situaties waar.

Je kan de bestaande 12 renamen naar 12''MS voor maxi singles
Dan heb je 2 afwijkende namen waar je een count op kan uitvoeren.

count for soort="12''MS" en count for soort="12''LD"

Acties:
  • +1 Henk 'm!

  • OverTheTop
  • Registratie: December 2017
  • Laatst online: 23:44
Verander de = in ==, dan wordt er exact vergeleken en niet alleen het begin
dus: count for soort=="12''LD"

zie bv http://www.dbase.com/help...ls/IDH_OPS_COMPARISON.htm

Acties:
  • 0 Henk 'm!

  • tajvdz
  • Registratie: November 2006
  • Laatst online: 31-03 00:43
D-dark schreef op dinsdag 5 juli 2022 @ 13:51:
Count voor soort 12 wordt in beide situaties waar.

Je kan de bestaande 12 renamen naar 12''MS voor maxi singles
Dan heb je 2 afwijkende namen waar je een count op kan uitvoeren.

count for soort="12''MS" en count for soort="12''LD"
ja door de naam van 12" te veranderen gaat het wel lukken maar er is ook een mogelijkheid om exact te tellen of er een gedeelte aan toe te voegen dat 12''LD uit sluit.

Acties:
  • 0 Henk 'm!

  • tajvdz
  • Registratie: November 2006
  • Laatst online: 31-03 00:43
OverTheTop schreef op dinsdag 5 juli 2022 @ 14:02:
Verander de = in ==, dan wordt er exact vergeleken en niet alleen het begin
dus: count for soort=="12''LD"

zie bv http://www.dbase.com/help...ls/IDH_OPS_COMPARISON.htm
In Dbase IV die ik gebruik is == een onbekend commando en geeft een foutmelding

Acties:
  • 0 Henk 'm!

  • DevWouter
  • Registratie: Februari 2016
  • Laatst online: 23:08

DevWouter

Creator of Todo2d.com

@tajvdz
offtopic:
Allereerst: 30 jaar!? Dat is best een prestatie


Is het probleem niet het feit dat je een string hebt waarbij je tekst een quote bevat?
code:
1
count for soort = "12"LD"


Volgens http://www.dbase.com/help...ls/IDH_OPS_COMPARISON.htm (maar mogelijk niet jouw versie) zou het volgende moeten werken.

code:
1
count for soort = [12"LD]

"Doubt—the concern that my views may not be entirely correct—is the true friend of wisdom and (along with empathy, to which it’s related) the greatest enemy of polarization." -- Václav Havel


Acties:
  • +1 Henk 'm!

  • tajvdz
  • Registratie: November 2006
  • Laatst online: 31-03 00:43
DevWouter schreef op dinsdag 5 juli 2022 @ 15:43:
@tajvdz
offtopic:
Allereerst: 30 jaar!? Dat is best een prestatie


Is het probleem niet het feit dat je een string hebt waarbij je tekst een quote bevat?
code:
1
count for soort = "12"LD"


Volgens http://www.dbase.com/help...ls/IDH_OPS_COMPARISON.htm (maar mogelijk niet jouw versie) zou het volgende moeten werken.

code:
1
count for soort = [12"LD]
Nee daar gaat het niet op mis.
Wat niet blijkt uit het lettertype hier is dat de " " andere zijn dan in 12''. in 12'' zitten namelijk 2 aparte ' achter elkaar.

Acties:
  • 0 Henk 'm!

  • tajvdz
  • Registratie: November 2006
  • Laatst online: 31-03 00:43
Ik heb het momenteel op een andere manier opgelost.
In het telprogramma worden de resultaten opgeslagen in een variabele. In plaats van count for soort="12''" to COUNT-N3 heb ik er een soort van sommetje tussen gezet. Hij gaat eerst op 12'' tellen en daarna op 12''LD. Het eindresultaat is nu die 2 variabele van elkaar afgetrokken. Moet volgens mij in 1 x kunnen maar met deze tussenstap merk je in het resultaat geen enkel verschil. De opdrachten zitten namelijk in een programma.

Acties:
  • 0 Henk 'm!

  • DevWouter
  • Registratie: Februari 2016
  • Laatst online: 23:08

DevWouter

Creator of Todo2d.com

tajvdz schreef op dinsdag 5 juli 2022 @ 15:45:
[...]


Nee daar gaat het niet op mis.
Wat niet blijkt uit het lettertype hier is dat de " " andere zijn dan in 12''. in 12'' zitten namelijk 2 aparte ' achter elkaar.
Ah, dat was mij niet duidelijk. Thanks.

Ik lees trouwens wel het volgende:
String equality comparisons are case-sensitive and follow the rules of SET EXACT. The == operator always compares two strings as if SET EXACT is ON. The other equality operators (=, <>, #) use the current setting of SET EXACT. When SET EXACT is ON, trailing blanks in either string are ignored in the comparison. When SET EXACT is OFF (the default), the = operator act like a "begins with" operator: the string on the left must begin with the string on the right. The <> and # operators act like "does not begin with" operators. Note that there is no single genuinely exactly equal comparison for strings in dBASE Plus.

It is recommended that you leave SET EXACT OFF so that you have the flexibility of doing an "exact" comparison or a "begins with" comparison as needed. By definition, all strings "begin with" an empty string, so when checking if a string is empty, always put the empty string on the left of the equality operator.

WARNING!
For compatibility with earlier versions of dBASE, if the string on the right of the = operator is (or begins with) CHR(0) and SET EXACT is OFF, then the comparison always returns true. When checking for CHR(0), always use the == operator.

The $ operator determines if one string is contained in, or is a substring of, another string. By definition, an empty string is not contained in another string.

[ Voor 35% gewijzigd door DevWouter op 05-07-2022 15:50 ]

"Doubt—the concern that my views may not be entirely correct—is the true friend of wisdom and (along with empathy, to which it’s related) the greatest enemy of polarization." -- Václav Havel


Acties:
  • 0 Henk 'm!

  • tajvdz
  • Registratie: November 2006
  • Laatst online: 31-03 00:43
SET EXACT ON is het dus. Ik had zelf al geprobeerd om het woord EXACT achter de opdracht te typen maar dat gaf een fout. Maar was dus wel iets blijven hangen.
SET EXACT ON
COUNT FOR SOORT="12''"
SET EXACT OFF

in de instellingen kun je ook ergens EXACT=ON zetten zodat het altijd aan staat maar ik weet niet of dat problemen gaat geven voor andere opdrachten

Acties:
  • 0 Henk 'm!

  • tajvdz
  • Registratie: November 2006
  • Laatst online: 31-03 00:43
als EXACT ON nu in het hele programma aanstaat dan geeft het problemen met zoeken. Wat ik nu heb gedaan is in de Dbase instellingen EXACT = ON gezet. zodra ik mijn eigen programma in kom zet ik het op OFF, in het gedeelte waar het mis ging zet ik het op ON en na de telling weer op OFF en bij het verlaten van mijn toepassing weer op ON. Als ik dan losse tel opdrachten vanaf de opdracht prompt doe dan klopt het. Zoeken doe ik toch vrijwel nooit vanaf de opdracht prompt. De oplossing met de extra variabele heb ik weer weg gehaald want die is overbodig. Die zou met EXACT = ON trouwens dan een fout resultaat geven omdat hij dan het aantal 12""LD van het juiste aantal af gaat trekken.

[ Voor 10% gewijzigd door tajvdz op 05-07-2022 17:43 ]


Acties:
  • 0 Henk 'm!

  • D-dark
  • Registratie: Januari 2008
  • Laatst online: 20:30
tajvdz schreef op dinsdag 5 juli 2022 @ 14:59:
[...]


ja door de naam van 12" te veranderen gaat het wel lukken maar er is ook een mogelijkheid om exact te tellen of er een gedeelte aan toe te voegen dat 12''LD uit sluit.
Zoals in een paar latere posts al vertelt is kan je het omzeilen met exact aanpasingen maar die geven weer problemen met andere acties.

Je hebt nu
de soorten per drager

Meest nette oplossing die meer flexibiliteit geeft is denk ik je datamodel aanpassen.
Soort - Drager - Grootte

Nu heb je dit probleem in de 12 range maar krijg je er eentje in de toekomst bij in laten we zeggen de 14 range dan moet je daar ook trucs voor gebruiken.
Pagina: 1