Dynamischer Daten Import / Export

datenbank

weil Einfach - produktiver ist
Mit der Freeware Version können bis zu 10.000 Datensätze verarbeitet werden!
Willkommen, Gast
Benutzername: Passwort: Angemeldet bleiben:
Willkommen im FlowHeater Support Forum!

Hier werden Fragen zum Umgang mit dem FlowHeater beantwortet.

THEMA: Kalenderwoche für Dateiname ermitteln

Kalenderwoche für Dateiname ermitteln 2 Jahre 6 Monate her #1647

  • Andreas Knobloch
  • Andreas Knoblochs Avatar
  • Offline
  • Junior Member
  • Beiträge: 33
Hallo Stark,

ich habe folgende Herausforderung:
Für den Dateinamen eines Exportes benötige ich die Kalenderwoche (Datum wird übergeben bzw. Vortag) im Dateinamen.

Ich bin auf dieses Skript gestoßen.
C#-Code:
private void NumberOfWeek(DateTime dte)
        {
            #region WeekNr
            // Aktuelle Kultur ermitteln
            CultureInfo currentCulture = CultureInfo.CurrentCulture;

            // Aktuellen Kalender ermitteln
            Calendar calendar = currentCulture.Calendar;

            // Kalenderwoche über das Calendar-Objekt ermitteln
            int calendarWeek = calendar.GetWeekOfYear(dte,
               currentCulture.DateTimeFormat.CalendarWeekRule,
               currentCulture.DateTimeFormat.FirstDayOfWeek);

            // Überprüfen, ob eine Kalenderwoche größer als 52
            // ermittelt wurde und ob die Kalenderwoche des Datums
            // in einer Woche 2 ergibt: In diesem Fall hat
            // GetWeekOfYear die Kalenderwoche nicht nach ISO 8601
            // berechnet (Montag, der 31.12.2007 wird z. B.
            // fälschlicherweise als KW 53 berechnet).
            // Die Kalenderwoche wird dann auf 1 gesetzt
            if (calendarWeek > 52)
            {
                dte = dte.AddDays(7);
                int testCalendarWeek = calendar.GetWeekOfYear(dte,
                   currentCulture.DateTimeFormat.CalendarWeekRule,
                   currentCulture.DateTimeFormat.FirstDayOfWeek);
                if (testCalendarWeek == 2)
                    calendarWeek = 1;
            }
            WeekNr = calendarWeek;

            // Das Jahr der Kalenderwoche ermitteln
            int year = dte.Year;
            if (calendarWeek == 1 && dte.Month == 12)
                year++;
            if (calendarWeek >= 52 && dte.Month == 1)
                year--;
            YearNr = year;
        }

Originalartikel:
http://dotnet-snippets.de/dns/kalenderwo...nen-SID260.aspx


Leider funktioniert das Skript im Flowheater nicht. Mit dem verlinkten Originalartikel bin ich leider auch nicht weiter gekommen.

Gibt es hier eventuell eine einfachere Lösung mit Heatern? Oder ein einfacheres Skript?

Mit freundlichen Grüßen

Andreas
Der Administrator hat öffentliche Schreibrechte deaktiviert.

Kalenderwoche für Dateiname ermitteln 2 Jahre 6 Monate her #1650

  • FlowHeater-Team
  • FlowHeater-Teams Avatar
  • Offline
  • Administrator
  • Beiträge: 1102
Hallo Herr Knobloch,

damit das Beispiel funktioniert müssen Sie im .NET Skript Heater noch ein zusätzliches „using System.Globalization;“ im Reiter „Erweitert“ angeben. Siehe Screenshot.



Das Skript habe ich etwas angepasst, so dass Sie dem Heater einen Datumswert übergeben können und die Kalenderwoche zurückgeliefert wird. Im Anhang befindet sich ein kleines Beispiel.

C# Code um die aktuelle Kalenderwoche zu ermitteln
public object DoWork()
{
  if (InValues.Length != 1)
    throw new Exception("ein Eingangsparameter erwartet");

  object o = InValues[0].GetDateTime();
  if (o == null)
    return -1; // Kein Datum übergeben

  DateTime dt = (DateTime)o;

  return NumberOfWeek(dt);
}

private int NumberOfWeek(DateTime dte)
{
  CultureInfo currentCulture = CultureInfo.CurrentCulture;
  Calendar calendar = currentCulture.Calendar;

  int calendarWeek = calendar.GetWeekOfYear(dte, 
    currentCulture.DateTimeFormat.CalendarWeekRule,
    currentCulture.DateTimeFormat.FirstDayOfWeek);

  if (calendarWeek > 52)
  {
  	dte = dte.AddDays(7);
      int testCalendarWeek = calendar.GetWeekOfYear(dte,
      currentCulture.DateTimeFormat.CalendarWeekRule,
      currentCulture.DateTimeFormat.FirstDayOfWeek);

      if (testCalendarWeek == 2)
        calendarWeek = 1;
  }

  return calendarWeek;
}


Dateianhang:

Dateiname: Kalenderwoche.zip
Dateigröße:2 KB
gruß
Robert Stark

Wurde Ihre Frage damit beantwortet? Bitte geben Sie ein kurzes Feedback, Sie helfen damit auch anderen die evtl. ein ähnliches Problem haben. Danke.
Letzte Änderung: 2 Jahre 6 Monate her von FlowHeater-Team.
Der Administrator hat öffentliche Schreibrechte deaktiviert.

Kalenderwoche für Dateiname ermitteln 2 Jahre 6 Monate her #1652

  • Andreas Knobloch
  • Andreas Knoblochs Avatar
  • Offline
  • Junior Member
  • Beiträge: 33
Hallo Herr Stark,

vielen Dank für die Unterstützung. Ich habe das Skript etwas modifiziert und funktioniert super.
bool bSetFileName = true;

public object DoWork()
{
	if (InValues.Length != 1)
    	throw new Exception("ein Eingangsparameter erwartet");

 	// Dateiname nicht im Testmodus umbiegen
 	if (bSetFileName && AdapterWrite.OnlyTest == false){
		    // Dateiname nur beim 1. Datensatz/Zeile ändern
    		bSetFileName = false;
    
		// Vom Vortag die KW ermittlen
    		DateTime vorTag = DateTime.Now.AddDays(-1);

		//KW ermitteln
		int KW = NumberOfWeek(vorTag);

		//Hier den Dateipfad ggf. ändern
    		string path = @"C:\Program Files (x86)\FlowHeater\Transfer\NDC\";

    		// Zugriff auf den Textfile Adapter der Write Seite
    		TextFileAdapter adapter = (TextFileAdapter)AdaptersWrite[0];
    
    		// Dateiname ändern, ggf. hier Anpassungen vornehmen!
    		adapter.Filename = path + "FI" + vorTag.ToString("yy") + "KW" + KW + ".txt";
  	}

  	// Eingangsparameter für die weitere Verarbeitung wieder zurückliefern
  	return InValues[0].GetValue();
}

private int NumberOfWeek(DateTime dte)
{
  CultureInfo currentCulture = CultureInfo.CurrentCulture;
  Calendar calendar = currentCulture.Calendar;

  int calendarWeek = calendar.GetWeekOfYear(dte, 
    currentCulture.DateTimeFormat.CalendarWeekRule,
    currentCulture.DateTimeFormat.FirstDayOfWeek);

  if (calendarWeek > 52)
  {
  	dte = dte.AddDays(7);
      int testCalendarWeek = calendar.GetWeekOfYear(dte,
      currentCulture.DateTimeFormat.CalendarWeekRule,
      currentCulture.DateTimeFormat.FirstDayOfWeek);

      if (testCalendarWeek == 2)
        calendarWeek = 1;
  }

  return calendarWeek;
}

Mit freundlichen Grüßen

Andreas Knobloch
Der Administrator hat öffentliche Schreibrechte deaktiviert.
Moderatoren: FlowHeater-Team
Ladezeit der Seite: 0.079 Sekunden