Flat File Connection Manager

  • Hi,

    I have a file directory path were I get a csv file per day, with current date. I have set up Flat File Connection manager that uses expression to access that location. When I execute I get an error that it cannot open datafile.

    The problem is, my path doesn't include the filename itself, and I don't understand how should I include file name because the file name changes daily, since it comes with different dates. e.g today's file Generic20170928100320.csv, tomorrow's file Generic20170929110523.csv

    PS: I can also receive files with previous dates and time, e.g Generic20170914110720.csv

    How do I fix this.

  • hoseam - Thursday, September 28, 2017 4:13 AM

    Hi,

    I have a file directory path were I get a csv file per day, with current date. I have set up Flat File Connection manager that uses expression to access that location. When I execute I get an error that it cannot open datafile.

    The problem is, my path doesn't include the filename itself, and I don't understand how should I include file name because the file name changes daily, since it comes with different dates. e.g today's file Generic20170928, tomorrow's file Generic20170929.

    How do I fix this.

    It's straight forward using a script task.
    😎

  • Without a full filepath, this is an example, however, the following expression would return: \\YourFileShare\SharedFiles\Folder\20172809\Generic20170928
    "\\\\YourFileShare\\SharedFiles\\Folder\\" +
    (DT_WSTR,4) DATEPART( "YYYY", GETDATE()) +
    RIGHT("0" + (DT_WSTR,2) DATEPART( "M", GETDATE()),2) +
    RIGHT("0" + (DT_WSTR,2) DATEPART( "D", GETDATE()),2) +
    "\\Generic" + (DT_WSTR,4) DATEPART( "YYYY", GETDATE()) +
    RIGHT("0" + (DT_WSTR,2) DATEPART( "M", GETDATE()),2) +
    RIGHT("0" + (DT_WSTR,2) DATEPART( "D", GETDATE()),2)

    So, much like you used an expression to determine your filepath, you just extend it to have the filename in as well.

    This assume that your files don't have an extension, as your examples show.

    Thom~

    Excuse my typos and sometimes awful grammar. My fingers work faster than my brain does.
    Larnu.uk

  • Thom A - Thursday, September 28, 2017 4:42 AM

    Without a full filepath, this is an example, however, the following expression would return: \\YourFileShare\SharedFiles\Folder\20172809\Generic20170928
    "\\\\YourFileShare\\SharedFiles\\Folder\\" +
    (DT_WSTR,4) DATEPART( "YYYY", GETDATE()) +
    RIGHT("0" + (DT_WSTR,2) DATEPART( "M", GETDATE()),2) +
    RIGHT("0" + (DT_WSTR,2) DATEPART( "D", GETDATE()),2) +
    "\\Generic" + (DT_WSTR,4) DATEPART( "YYYY", GETDATE()) +
    RIGHT("0" + (DT_WSTR,2) DATEPART( "M", GETDATE()),2) +
    RIGHT("0" + (DT_WSTR,2) DATEPART( "D", GETDATE()),2)

    So, much like you used an expression to determine your filepath, you just extend it to have the filename in as well.

    This assume that your files don't have an extension, as your examples show.

    In my case is 

    \\YourFileShare\SharedFiles\Folder\Generic20170928.csv


    The following day they replace the file then I will have 

    \\YourFileShare\SharedFiles\Folder\Generic20170929.csv

  • hoseam - Thursday, September 28, 2017 5:34 AM

    In my case is 

    \\YourFileShare\SharedFiles\Folder\Generic20170928.csv


    The following day they replace the file then I will have 

    \\YourFileShare\SharedFiles\Folder\Generic20170929.csv

    Ok, so you'll to add the file extension onto the expression.

    Thom~

    Excuse my typos and sometimes awful grammar. My fingers work faster than my brain does.
    Larnu.uk

  • Thom A - Thursday, September 28, 2017 6:00 AM

    hoseam - Thursday, September 28, 2017 5:34 AM

    In my case is 

    \\YourFileShare\SharedFiles\Folder\Generic20170928.csv


    The following day they replace the file then I will have 

    \\YourFileShare\SharedFiles\Folder\Generic20170929.csv

    Ok, so you'll to add the file extension onto the expression.

    I am doing that right now, I'm also trying to test other senerios, when I get this file 

    Generic20170913100320.csv

    It has previous date and time, so using that expression with getdate() won't cut it

  • hoseam - Thursday, September 28, 2017 6:12 AM

    I am doing that right now, I'm also trying to test other senerios, when I get this file 

    Generic20170913100320.csv

    It has previous date and time, so using that expression with getdate() won't cut it

    Ok, so the file name might or might not have the time in it?

    Sounds like, at this stage, the name of the file is indeterminable prior to receipt. Therefore, I'd instead suggest using a For Each Loop Container on the folder, and looping around each file in the folder instead.

    Thom~

    Excuse my typos and sometimes awful grammar. My fingers work faster than my brain does.
    Larnu.uk

  • Thom A - Thursday, September 28, 2017 6:20 AM

    hoseam - Thursday, September 28, 2017 6:12 AM

    I am doing that right now, I'm also trying to test other senerios, when I get this file 

    Generic20170913100320.csv

    It has previous date and time, so using that expression with getdate() won't cut it

    Ok, so the file name might or might not have the time in it?

    It will always have time, datetime in that format.

  • hoseam - Thursday, September 28, 2017 6:23 AM

    It will always have time, datetime in that format.

    /facepalm then why did your initial examples not include it? I can see you editted your original post 8 minutes ago with them in now, but Eirikur's quoted post shows you excluded these initially. If the filenames always include the time, then providing examples that don't have a time in them aren't examples.

    You have the logic for how to get the year, month and date into file name. Have a go at doing this yourself for hours, minutes and seconds; the logic is exactly the same. Post back, with what you tried if you don't get it working.

    Thom~

    Excuse my typos and sometimes awful grammar. My fingers work faster than my brain does.
    Larnu.uk

  • Rather than using a complex expression, why not use a foreach container with a filespec of Generic*.csv (on the assumption that files are moved or renamed after they have been processed)?

    The absence of evidence is not evidence of absence.
    Martin Rees

    You can lead a horse to water, but a pencil must be lead.
    Stan Laurel

  • Thom A - Thursday, September 28, 2017 6:30 AM

    hoseam - Thursday, September 28, 2017 6:23 AM

    It will always have time, datetime in that format.

    /facepalm then why did your initial examples not include it? I can see you editted your original post 8 minutes ago with them in now, but Eirikur's quoted post shows you excluded these initially. If the filenames always include the time, then providing examples that don't have a time in them aren't examples.

    You have the logic for how to get the year, month and date into file name. Have a go at doing this yourself for hours, minutes and seconds; the logic is exactly the same. Post back, with what you tried if you don't get it working.

    Your logic uses current dates, I'm struggling to pick up the times on the files.

  • Phil Parkin - Thursday, September 28, 2017 6:47 AM

    Rather than using a complex expression, why not use a foreach container with a filespec of Generic*.csv (on the assumption that files are moved or renamed after they have been processed)?

    This is the other idea I put forward earlier. Using an expression was fine at first (sometimes I prefer this method as if a file is missed you may not want to load them), when things were simply the date, but seems the goal posts have moved since. 🙂

    Thom~

    Excuse my typos and sometimes awful grammar. My fingers work faster than my brain does.
    Larnu.uk

  • Phil Parkin - Thursday, September 28, 2017 6:47 AM

    Rather than using a complex expression, why not use a foreach container with a filespec of Generic*.csv (on the assumption that files are moved or renamed after they have been processed)?

    Thanks, Foreach worked.

  • Thom A - Thursday, September 28, 2017 6:55 AM

    This is the other idea I put forward earlier. Using an expression was fine at first (sometimes I prefer this method as if a file is missed you may not want to load them), when things were simply the date, but seems the goal posts have moved since. 🙂

    So you did ... I only skimmed the thread and missed that. I always use this method, on the assumption that if a file is resident in my 'ToBeProcessed' folder, then it needs to be processed 🙂

    The absence of evidence is not evidence of absence.
    Martin Rees

    You can lead a horse to water, but a pencil must be lead.
    Stan Laurel

  • Phil Parkin - Thursday, September 28, 2017 6:59 AM

    Thom A - Thursday, September 28, 2017 6:55 AM

    This is the other idea I put forward earlier. Using an expression was fine at first (sometimes I prefer this method as if a file is missed you may not want to load them), when things were simply the date, but seems the goal posts have moved since. 🙂

    So you did ... I only skimmed the thread and missed that. I always use this method, on the assumption that if a file is resident in my 'ToBeProcessed' folder, then it needs to be processed 🙂

    Generally I agree. I do, however, have a daily file from an Insurer that is cumulative. If, for whatever reason, the server doesn't run the file on that day, the last thing i want to do is run it the following day, as I might then overwrite the previous. I learnt that lesson the hard way, so I'm little bit of a skeptical now on completely relying on simply looping. 🙂

    Thom~

    Excuse my typos and sometimes awful grammar. My fingers work faster than my brain does.
    Larnu.uk

Viewing 15 posts - 1 through 15 (of 18 total)

You must be logged in to reply to this topic. Login to reply