[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.c

Removing empty lines

happytoday

7/21/2011 7:35:00 PM

It was required to remove empty lines using C program . Either to be
run like :

../nnoemptylines < textfile


or accept location of the file as a full path from the user dialog to
accept .


14 Answers

John Gordon

7/21/2011 8:58:00 PM

0

In <dd3fce00-b8a2-4758-9184-dd2bb5fe89f8@e7g2000vbj.googlegroups.com> happytoday <ehabaziz2001@gmail.com> writes:

> It was required to remove empty lines using C program . Either to be
> run like :

> ./nnoemptylines < textfile

> or accept location of the file as a full path from the user dialog to
> accept .

You haven't actually asked a question. What do you want?

--
John Gordon A is for Amy, who fell down the stairs
gordon@panix.com B is for Basil, assaulted by bears
-- Edward Gorey, "The Gashlycrumb Tinies"

Alexander Bartolich

7/21/2011 10:42:00 PM

0

happytoday wrote:
> It was required to remove empty lines using C program . Either to be
> run like :
>
> ./nnoemptylines < textfile
>
>
> or accept location of the file as a full path from the user dialog to
> accept .

1 #include <unistd.h>
2 int main()
3 {
4 extern char **environ;
5 static char* const argv[3] = { "/bin/sed", "/^$/d", 0 };
6 return execve(argv[0], argv, environ);
7 }

--

Alexander Bartolich

7/21/2011 10:43:00 PM

0

happytoday wrote:
> It was required to remove empty lines using C program . Either to be
> run like :
>
> ./nnoemptylines < textfile

$ nl -ba nnoemptylines.c
1 #include <unistd.h>
2 int main()
3 {
4 extern char **environ;
5 static char* const argv[3] = { "/bin/sed", "/^$/d", 0 };
6 return execve(argv[0], argv, environ);
7 }

--

Keith Thompson

7/22/2011 12:08:00 AM

0

happytoday <ehabaziz2001@gmail.com> writes:
> It was required to remove empty lines using C program . Either to be
> run like :
>
> ./nnoemptylines < textfile
>
>
> or accept location of the file as a full path from the user dialog to
> accept .

One common answer to questions like this is to ask the questioner
to supply the e-mail address of his or her instructor, so we can
submit our solutions directly.

--
Keith Thompson (The_Other_Keith) kst-u@mib.org <http://www.ghoti.ne...
Nokia
"We must do something. This is something. Therefore, we must do this."
-- Antony Jay and Jonathan Lynn, "Yes Minister"

J. J. Farrell

7/22/2011 12:44:00 AM

0

happytoday wrote:
> It was required to remove empty lines using C program . Either to be
> run like :
>
> ./nnoemptylines < textfile
>
>
> or accept location of the file as a full path from the user dialog to
> accept .

So? Do you have a question about C?

osmium

7/22/2011 12:58:00 AM

0

"happytoday" wrote:

> It was required to remove empty lines using C program . Either to be
> run like :
>
> ./nnoemptylines < textfile
>
>
> or accept location of the file as a full path from the user dialog to
> accept .

It is extremely unlikely that you will get any actual help until you post
code of an attempt, however misguided, that you have made at solving the
problem. Lacking that, you will simply get abuse and misleading advice.


Eric Sosman

7/22/2011 1:17:00 AM

0

On 7/21/2011 3:35 PM, happytoday wrote:
> It was required to remove empty lines using C program . Either to be
> run like :
>
> ./nnoemptylines< textfile
>
>
> or accept location of the file as a full path from the user dialog to
> accept .

One essential ingredient will be a means to determine whether
a particular line is or is not empty. Starting with the observation
that a string is empty if and only if all its substrings are empty,
you could use something like

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int isEmpty(const char *string) {
int all_are_empty = 1; /* optimistic start */
for (size_t p = 0; p < strlen(string); ++p) {
for (size_t q = p; q < strlen(string); ++q) {
char *temp = malloc(q - p + 1);
if (temp == NULL) {
fputs("Out of memory!\n", stderr);
abort();
}
memcpy(temp, string + p, q - p);
temp[q - p] = '\0';
all_are_empty &= isEmpty(temp);
free(temp);
}
}
return all_are_empty;
}

This solution is efficient because it's recursive.

--
Eric Sosman
esosman@ieee-dot-org.invalid

gazelle

7/22/2011 1:31:00 AM

0

In article <98s08fFe8aU1@mid.individual.net>,
osmium <r124c4u102@comcast.net> wrote:
>"happytoday" wrote:
>
>> It was required to remove empty lines using C program . Either to be
>> run like :
>>
>> ./nnoemptylines < textfile
>>
>>
>> or accept location of the file as a full path from the user dialog to
>> accept .
>
>It is extremely unlikely that you will get any actual help until you post
>code of an attempt, however misguided, that you have made at solving the
>problem. Lacking that, you will simply get abuse and misleading advice.

And when you do post code, it (*) will just get worse.

(*) The abuse and misleading advice.

--
(This discussion group is about C, ...)

Wrong. It is only OCCASIONALLY a discussion group
about C; mostly, like most "discussion" groups, it is
off-topic Rorsharch [sic] revelations of the childhood
traumas of the participants...

Malcolm McLean

7/22/2011 3:29:00 AM

0

On Jul 21, 10:35 pm, happytoday <ehabaziz2...@gmail.com> wrote:
> It was required to remove empty lines using C program . Either to be
> run like :
>
> ./nnoemptylines < textfile
>
> or accept location of the file as a full path from the user dialog to
> accept .
>
The spec is almost impossible.

../noemptylines < textfile redirects textfile to stdin. So if the
program is invoked thusly, it needs to read in lines from stdin, check
if they are non-blank, and then echo them to stdout. So far so good.
The problem is that
../noemptyfiles

should set up a dialogue with the user. So you want to print something
like
"Hello user, please enter the name of the file from which ypu wish to
remove blanks"
The user enters
textfile
"Thank you, do you wish to overwrite the file?"

etc

The problem is that there's no easy way to know whether stdin is
directed from a file or coming from a keyboard. That's deliberate. We
don't generally want programs making this distinction. I'm sure that
on your particular system there will besome operating call, probably
poorly documented, which you can make. But it's inappropriate and bad
practice to use it for a ultility program like a deblanker.

I'd throw the spec back, with this objection.

--
Roll up, roll up, free source code
http://www.malcolmmclean.site...

Anand Hariharan

7/22/2011 2:24:00 PM

0

On Jul 21, 10:29 pm, Malcolm McLean <malcolm.mcle...@btinternet.com>
wrote:
> On Jul 21, 10:35 pm, happytoday <ehabaziz2...@gmail.com> wrote:> It was required to remove empty lines using C program . Either to be
> > run like :
>
> > ./nnoemptylines < textfile
>
> > or accept location of the file as a full path from the user dialog to
> > accept .
>
> The spec is almost impossible.
>

FWIW, while the point you make below is valid, I doubt if that is what
the OP intended.



> ./noemptylines < textfile redirects textfile to stdin. So if the
> program is invoked thusly, it needs to read in lines from stdin, check
> if they are non-blank, and then echo them to stdout. So far so good.
> The problem is that
> ./noemptyfiles
>
> should set up a dialogue with the user. So you want to print something
> like
> "Hello user, please enter the name of the file from which ypu wish to
> remove blanks"
> The user enters
> textfile
> "Thank you, do you wish to overwrite the file?"
>
> etc
>
> The problem is that there's no easy way to know whether stdin is
> directed from a file or coming from a keyboard. That's deliberate. We
> don't generally want programs making this distinction. I'm sure that
> on your particular system there will besome operating call, probably
> poorly documented, which you can make. But it's inappropriate and bad
> practice to use it for a ultility program like a deblanker.
>

POSIX provides a 'isatty()' that allows programs to make such a
distinction.


- Anand