Link to home
Start Free TrialLog in
Avatar of Richard Teasdale
Richard TeasdaleFlag for United Kingdom of Great Britain and Northern Ireland

asked on

stripping elements of different length from a file name java

Hi: As a company we get a lot of orders sent in csv format by email. I use  a third party  program called 'attachment save'  which runs in outlook and saves all attachments to a particular directory. Since it is not unknown for the files from different customers to have the same name, the program adds the date. Thus an attached file j031251.csv  is saved as J0312512016-01-27 12-11.csv .
I then use java to pick out files from a certain customer (in this case always has "wp201" in his filename:

for (int i = 0; i < files.length; i++) {
            fileName = files(i).getName();   // (i put in brackets not parenthesis)
            if(fileName.contains("WP201")){
            //rename file to take date & time off    
             String abc = new String(fileName);
             String xyz = new String(abc.substring(0,(abc.length()-20))+abc.substring((abc.length()-4),abc.length()))  ;            
            //end rename file to take date & time off    
               
                File currentFile = new File(dir + "\\" + abc);
                           success = currentFile.renameTo(new File(dew + "\\" + xyz));
                if(success){        
                    System.out.println("File Copied: "+ currentFile);
                    currentFile.delete();
                }
                else System.out.println("NOT Copied: " + currentFile);          
           }
        }    
Which strips out the date and puts the file in a specific folder. It does this by counting back from the end of the file; easy as the date is always 16 characters.
However, now another customer wants special treatment; but his file is the same as a lot of other peoples files. 'Attachment save' will allow me to insert the senders address like so: "J031251XXXcustomer.co.ukYYY2016-01-27 12-11.csv", where I insert XXX and YYY as delimiters, but can choose anything. Is there a way of stripping out everything after the XXX but BEFORE the ".csv"? This is because , of course, customer addresses will be of different length and file types will be different.
Avatar of krakatoa
krakatoa
Flag of United Kingdom of Great Britain and Northern Ireland image

Is there a way of stripping out everything after the XXX but BEFORE the ".csv"?

- I'm just curious to ask why you'd want to insert the YYY element for this exceptional case(s), but then strip it out again . . . maybe I have misunderstood smthg.
Avatar of Richard Teasdale

ASKER

No; I agree we do not need the YYY; just there as a delimiter for my purposes. Thanks!
ASKER CERTIFIED SOLUTION
Avatar of krakatoa
krakatoa
Flag of United Kingdom of Great Britain and Northern Ireland image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
I most certainly do! May be easy for you but not for a numbnuts like me!
Thank you very much for your prompt and able assistance.
Lucky strike on my part - (I mean I thought I might have read between the lines that it was something more dynamic (after all, you said the file type can change too)). But hey, if it works, great. ;)
the file type does change but the range is limited so I can knock out a few  blocks to cover the range of type. Thanks again
..but if you are still there, can I change it to cover a range of file types in one pass - ie pick up the last three characters, hold, then add back?
I think you might like to re-open your question, as it looks to me as if a stronger and more flexible fix is needed - perhaps using a Regular Expression.


OR you might like to consider putting it up for a Gig,so that a seasoned expert can provide a proper fix. ;)
can I change it to cover a range of file types in one pass - ie pick up the last three characters, hold, then add back?

Yes, with one tiny change to Krakatoa's answer above...

s = s.substring(0, s.indexOf("XXX")) + s.substring(s.lastIndexOf("."));

Open in new window