By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
440,092 Members | 1,597 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 440,092 IT Pros & Developers. It's quick & easy.

file deletion in a directory with some conditions .

P: n/a
aki

Hi All,

I describe the problem as below.

A directory( path known) , contains 0 to any number of files .
The file names are with following structure :

OMCID_NETYPE_NENAME_NAMEOFTHEAPPLIEDFILE_APPLYDATE _trans.csv
For example :

4_TC_TC_48_NoSTConfiguration_1971-1-1_trans.csv

where
OMCID =4
NETYPE= TC
NENAME= TC_48
NAMEOFTHEAPPLIEDFILE=NoSTConfiguration
APPLYDATE=1971-1-1

i have to perform delete operation on the file with matching three
fields .
OMCID , NETYPE, NENAME (All three known )

Could somebody try to answer the problem . or tel how to proceed

Regards
Aki
Jul 31 '08 #1
Share this Question
Share on Google+
8 Replies


P: n/a
aki wrote:
>
Hi All,

I describe the problem as below.

A directory( path known) , contains 0 to any number of files .
The file names are with following structure :

OMCID_NETYPE_NENAME_NAMEOFTHEAPPLIEDFILE_APPLYDATE _trans.csv
For example :

4_TC_TC_48_NoSTConfiguration_1971-1-1_trans.csv

where
OMCID =4
NETYPE= TC
NENAME= TC_48
NAMEOFTHEAPPLIEDFILE=NoSTConfiguration
APPLYDATE=1971-1-1

i have to perform delete operation on the file with matching three
fields .
OMCID , NETYPE, NENAME (All three known )

Could somebody try to answer the problem . or tel how to proceed
Firstly C doesn't have *any* support for directories, so you may want to
ask in a group for your system like comp.unix.programmer.

Secondly, once you get a list of all the files in your directory, you
need to match the OMCID, NETYPE, and NENAME fields of these names with
your criteria. If you don't want to write code to do this, you can use
a regular expression library, which is not a part of Standard C but is
nevertheless included with most major implementations. This will
relieve you of the tedium of writing the string comparison code and the
possibilities of bugs, testing, etc. A further advantage is that using
this method you can easily adapt your code to match any criteria with
just a few simple changes. Custom code may need major additions and
restructuring.

Another possibility, if your program will be restricted to suitable
systems, is to use the system's delete file command. The Unix command
for this, 'rm' has built-in support for file globbing and pattern
matching. For further details ask in a group for your system.

In summary while this can be easily done in fully portable C (provided
the list of file names is somehow gathered, since ISO C has no support
for reading directories), a more robust solution would be to use a
pattern matching library. If you are on a POSIX system investigate
regex.h and glob.h.

Jul 31 '08 #2

P: n/a
On Jul 31, 6:10*am, santosh <santosh....@gmail.comwrote:
aki wrote:
Hi All,
* I describe the problem as below.
A directory( path known) , contains *0 to any number of files .
The file names are *with following structure :
OMCID_NETYPE_NENAME_NAMEOFTHEAPPLIEDFILE_APPLYDATE _trans.csv
For example :
4_TC_TC_48_NoSTConfiguration_1971-1-1_trans.csv
where
*OMCID =4
NETYPE= TC
NENAME= TC_48
NAMEOFTHEAPPLIEDFILE=NoSTConfiguration
APPLYDATE=1971-1-1
i have to perform delete operation on the file with matching *three
fields .
OMCID , NETYPE, NENAME (All three known )
Could somebody try to answer the problem . or tel how to proceed

Firstly C doesn't have *any* support for directories, so you may want to
ask in a group for your system like comp.unix.programmer.

Secondly, once you get a list of all the files in your directory, you
need to match the OMCID, NETYPE, and NENAME fields of these names with
your criteria. If you don't want to write code to do this, you can use
a regular expression library, which is not a part of Standard C but is
nevertheless included with most major implementations. This will
relieve you of the tedium of writing the string comparison code and the
possibilities of bugs, testing, etc. A further advantage is that using
this method you can easily adapt your code to match any criteria with
just a few simple changes. Custom code may need major additions and
restructuring.

Another possibility, if your program will be restricted to suitable
systems, is to use the system's delete file command. The Unix command
for this, 'rm' has built-in support for file globbing and pattern
matching. For further details ask in a group for your system.

In summary while this can be easily done in fully portable C (provided
the list of file names is somehow gathered, since ISO C has no support
for reading directories), a more robust solution would be to use a
pattern matching library. If you are on a POSIX system investigate
regex.h and glob.h.
Adding to what Santosh told:
If you are on a Linux box and use are using Libc4 or Libc5, you can
use functions scandir() and alphasort()
to obtain directory listing. you need to look for header files
dirent.h

I am not sure about its portability to other systems :(

For more information,

http://www.gnu.org/software/libtool/...ectory-Content
Jul 31 '08 #3

P: n/a
Ajay wrote:
On Jul 31, 6:10*am, santosh <santosh....@gmail.comwrote:
>aki wrote:
Hi All,
I describe the problem as below.
A directory( path known) , contains *0 to any number of files .
The file names are *with following structure :
OMCID_NETYPE_NENAME_NAMEOFTHEAPPLIEDFILE_APPLYDATE _trans.csv
For example :
4_TC_TC_48_NoSTConfiguration_1971-1-1_trans.csv
where
OMCID =4
NETYPE= TC
NENAME= TC_48
NAMEOFTHEAPPLIEDFILE=NoSTConfiguration
APPLYDATE=1971-1-1
i have to perform delete operation on the file with matching *three
fields .
OMCID , NETYPE, NENAME (All three known )
Could somebody try to answer the problem . or tel how to proceed
[ ... ]
Adding to what Santosh told:
If you are on a Linux box and use are using Libc4 or Libc5, you can
use functions scandir() and alphasort()
to obtain directory listing. you need to look for header files
dirent.h

I am not sure about its portability to other systems :(
They are not very portable at all. They are also deprecated by at least
one standard. A more portable solution is to use
opendir/readdir/closedir along with the facilities defined in regex.h.
All of these are standardised by POSIX and hence fairly portable.

For further discussions of these functions the OP should consider
posting on comp.unix.programmer, where there is a higher likelyhood of
receiving better, more accurate, peer reviewed answers, as there are
far more active Unix/POSIX experts there than here.

<snip>

Jul 31 '08 #4

P: n/a
santosh <sa*********@gmail.comwrites:
[...]
Another possibility, if your program will be restricted to suitable
systems, is to use the system's delete file command. The Unix command
for this, 'rm' has built-in support for file globbing and pattern
matching. For further details ask in a group for your system.
[...]

The remove() function is standard in ISO C.

<OT>No, Unix 'rm' doesn't have built-in support for file globbing and
pattern matching; that's handled by the shell.</OT>

--
Keith Thompson (The_Other_Keith) ks***@mib.org <http://www.ghoti.net/~kst>
Nokia
"We must do something. This is something. Therefore, we must do this."
-- Antony Jay and Jonathan Lynn, "Yes Minister"
Aug 2 '08 #5

P: n/a
On 2 Aug 2008 at 23:32, Keith Thompson wrote:
santosh <sa*********@gmail.comwrites:
>Another possibility, if your program will be restricted to suitable
systems, is to use the system's delete file command. The Unix command
for this, 'rm' has built-in support for file globbing and pattern
matching. For further details ask in a group for your system.

No, Unix 'rm' doesn't have built-in support for file globbing and
pattern matching; that's handled by the shell.
But system() goes via /bin/sh, so the effect is the same.

If the user is using fork()/exec() directly, then again he can use
/bin/sh -c to execute rm and get globbing.

Aug 3 '08 #6

P: n/a
Antoninus Twink <no****@nospam.invalidwrites:
On 2 Aug 2008 at 23:32, Keith Thompson wrote:
>santosh <sa*********@gmail.comwrites:
>>Another possibility, if your program will be restricted to suitable
systems, is to use the system's delete file command. The Unix command
for this, 'rm' has built-in support for file globbing and pattern
matching. For further details ask in a group for your system.

No, Unix 'rm' doesn't have built-in support for file globbing and
pattern matching; that's handled by the shell.
[snip information more appropriate for a Unix group]

I don't normally respond to AT, but in this case he has quoted me in a
deliberately misleading manner. I had surrounded my remarks about the
'rm' command with "<OT>" and "</OT"tags. AT deleted those tags,
giving the false impression that I care as little about topicality as
he does.

--
Keith Thompson (The_Other_Keith) ks***@mib.org <http://www.ghoti.net/~kst>
Nokia
"We must do something. This is something. Therefore, we must do this."
-- Antony Jay and Jonathan Lynn, "Yes Minister"
Aug 3 '08 #7

P: n/a
In article <ln************@nuthaus.mib.org>,
Keith Thompson <ks***@mib.orgwrote:
>Antoninus Twink <no****@nospam.invalidwrites:
>On 2 Aug 2008 at 23:32, Keith Thompson wrote:
>>santosh <sa*********@gmail.comwrites:
Another possibility, if your program will be restricted to suitable
systems, is to use the system's delete file command. The Unix command
for this, 'rm' has built-in support for file globbing and pattern
matching. For further details ask in a group for your system.

No, Unix 'rm' doesn't have built-in support for file globbing and
pattern matching; that's handled by the shell.
[snip information more appropriate for a Unix group]

I don't normally respond to AT, but in this case he has quoted me in a
deliberately misleading manner. I had surrounded my remarks about the
'rm' command with "<OT>" and "</OT"tags. AT deleted those tags,
giving the false impression that I care as little about topicality as
he does.
God almighty, we couldn't have that, now could we?

Geez, what small lives you people live.

Aug 4 '08 #8

P: n/a
In article <sl*******************@nospam.invalid>,
Antoninus Twink <no****@nospam.invalidwrote:
>On 2 Aug 2008 at 23:32, Keith Thompson wrote:
>santosh <sa*********@gmail.comwrites:
>>Another possibility, if your program will be restricted to suitable
systems, is to use the system's delete file command. The Unix command
for this, 'rm' has built-in support for file globbing and pattern
matching. For further details ask in a group for your system.

No, Unix 'rm' doesn't have built-in support for file globbing and
pattern matching; that's handled by the shell.

But system() goes via /bin/sh, so the effect is the same.

If the user is using fork()/exec() directly, then again he can use
/bin/sh -c to execute rm and get globbing.
Off topic. Not portable. Cant discuss it here. Blah, blah, blah.

As far as the standard is concerned, system() could go via /keith/is/god.

Aug 4 '08 #9

This discussion thread is closed

Replies have been disabled for this discussion.