Ga naar inhoud
  • 0

Datum filteren uit tekstveld


Zero55

Vraag

Hallo,

Ik heb een tekstveld dat gevuld wordt met tijdstempels zoals hieronder:

2019-10-16_124743

2020-5-2_14258

2020-5-13_92648

 

Nu zou ik van alle datums die erin staan de meest recente moeten hebben en controleren of deze 3 maanden ouder is dan de huidige datum (tijd is in deze verwaarloosbaar).

Aangezien de datums in verschillende notities kunnen voorkomen, hoe moet ik hieraan beginnen ??

 

GreeTz

Rudi

Link naar reactie

9 antwoorden op deze vraag

Aanbevolen berichten

  • 0

Je zou een extra calculatieveld kunnen maken dat de datum calculeert. Analyseer eerst de verschillende formaten van de timestamps. Wat je in je voorbeeld laat zien is in ieder geval geen probleem: die zijn nagenoeg eenduidig van het jjjj-m-d_xxxxx formaat (weet niet hoe xxxx geïnterpreteerd moet worden).

Rightwords (FuzzyTimestamp; 1 ) levert een converteerbare datum op.

De rest kan je scripten. 

Link naar reactie
  • 0

Ik zie steeds het patroon jaar, maand, dag en dat is je houvast. Voorloopnul is niet relevant. Jaartal is in vier cijfers. 

Verder komt het aan op een goede afsplitsing van de datumgedeelte van de rest. In je voorbeelden wordt consequent een underscore “_” gebruikt. Prima. 

Als de datum in plaats van reguliere koppelstreepjes “-“ een comma bevat, zoals in je voorbeeld, heb je hier een probleem. Dan zou je de datum kunnen afsplitsen op basis van de (eerste) underscore. 

Tijd was de niet relevant, maar toch even: hoe laat was het in je tweede en derde voorbeeld?

Je hebt dus een lijstje: dat had ik nog niet begrepen. Je zou met de ‘while’ functie een datum kunnen vinden, per record, dat aan jou criteria voldoet.  Tenminste als dat is wat je wil, want je omschrijft niet zo precies wat je nu wil bereiken.

Als dit het is:

- een lijstje fuzzy timestamps, per record

- per record de laatste datum bepalen

- als deze groter is dan huidige datum - drie maanden. Indien niet dan leeg. 
 

dan is er geen probleem. 
 

Wellicht overbodig om op te merken: als de fuzziness een probleem blijft zou je ook eens moeten kijken of je je data-leverancier(s) kunt dresseren. Je applicatie is immers geen vuilnisbak, veronderstel ik. 

aangepast door Marsau
Link naar reactie
  • 0

Die komma was een tikfout zie ik nu 😬
Per record heb ik inderdaad een veld gevuld met verschillende regels met timestamps (zie voorbeeld).
Ik moet dus een manier vinden om de datums af te splitsen van de tijd (tijd mag weg)
De uitkomst is dan een lijst met enkel datums, en uit die lijst de meest recente datum.

Zie ik dat correct?

PS. de While-functie heb ik niet... ik zit nog met FM16 😅

Naamloos.fmp12

aangepast door Zero55
Link naar reactie
  • 0

Met deze gegeevns zou je de volgende formule kunnen gebruiken:

Let ( [ 
	myList = Naamloos::timestamp_merge ; 
	srtList = SortValues ( Substitute ( myList ; 
							[ "-1-" ; "-01-" ] ; 
							[ "-2-" ; "-02-" ] ; 
							[ "-3-" ; "-03-" ] ; 
							[ "-4-" ; "-04-" ] ; 
							[ "-5-" ; "-05-" ] ; 
							[ "-6-" ; "-06-" ] ; 
							[ "-7-" ; "-07-" ] ; 
							[ "-8-" ; "-08-" ] ; 
							[ "-9-" ; "-09-" ] ; 
							[ "-1_" ; "-01_" ] ; 
							[ "-2_" ; "-02_" ] ; 
							[ "-3_" ; "-03_" ] ; 
							[ "-4_" ; "-04_" ] ; 
							[ "-5_" ; "-05_" ] ; 
							[ "-6_" ; "-06_" ] ; 
							[ "-7_" ; "-07_" ] ; 
							[ "-8_" ; "-08_" ] ; 
							[ "-9_" ; "-09_" ] ) 
				) ; 
	txt = GetValue ( srtList ; ValueCount ( srtList ) ) ; 
	tdt = Left ( 
			txt ; 
			Position ( txt ; "_" ; 1 ; 1 ) - 1 
			) ; 
	dtl = Substitute ( 
			tdt ; 
			[ "-" ; ¶ ] ) ; 
	dt = If ( length ( dtl ) ; 
		Date ( 
			GetValue ( dtl ; 2 ) ; 
			GetValue ( dtl ; 3 ) ; 
			GetValue ( dtl ; 1 ) 
		) 
	)
] ; 
	dt 
)

 

Link naar reactie
  • 0

Of nog een beetje compacter:

Let ( [
input = "2017-11-15_23423" ;
items = Substitute (input; 
        [ "-" ; "¶" ] ;
        [ "_" ; "¶" ] ;
        [ "," ; "¶" ] ;
        [ "." ; "¶" ] ;
        [ " " ; "¶" ] ;
        [ ";" ; "¶" ]) ] ;
Timestamp ( 
  Date ( GetValue( items ; 2 ) ; GetValue( items; 3 ) ; GetValue( items ; 1 ) ) ;
  Time ( 0 ; 0 ; GetValue( items ; 4 ))
           ))

Je moet eigenlijk nog alle numerieke waarden als Getasnumber omzetten, da's netter. Er er zit geen check op de volgorde natuurlijk.

Link naar reactie

Doe mee aan dit gesprek

Je kunt dit nu plaatsen en later registreren. Indien je reeds een account hebt, log dan nu in om het bericht te plaatsen met je account.

Gast
Beantwoord deze vraag...

×   Geplakt als verrijkte tekst.   Plak in plaats daarvan als platte tekst

  Er zijn maximaal 75 emoji toegestaan.

×   Je link werd automatisch ingevoegd.   Tonen als normale link

×   Je vorige inhoud werd hersteld.   Leeg de tekstverwerker

×   Je kunt afbeeldingen niet direct plakken. Upload of voeg afbeeldingen vanaf een URL in

×
×
  • Nieuwe aanmaken...