Removing empty lines

H

happytoday

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 .
 
A

Alexander Bartolich

happytoday said:
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 }

--
 
A

Alexander Bartolich

happytoday said:
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 }

--
 
K

Keith Thompson

happytoday said:
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.
 
J

J. J. Farrell

happytoday said:
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?
 
O

osmium

happytoday said:
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.
 
E

Eric Sosman

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.
 
K

Kenny McCormack

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...
 
M

Malcolm McLean

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.
 
A

Anand Hariharan

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
 
M

mt

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) (e-mail address removed)  <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"

Haha... I like that
 
B

BartC

happytoday said:
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 .

Haven't written any C for a while, tried this:

#include <stdio.h>
#include <stdlib.h>

int main(int nargs, char** args) {
FILE *infile,*outfile;
int c,lastc='\n';

if (nargs<2) {
infile=stdin;
puts("(Reading from stdin)");
}
else {
infile=fopen(args[1],"r");
if (infile==0) {
printf("Can't find %s\n",args[1]);
exit(0);
}
printf("(Reading from %s\n",args[1]);
}
outfile=stdout;

while(1) {
c=fgetc(infile);
if (c==EOF) break;
if (c!='\n' || lastc!='\n') fputc(c,outfile);
lastc=c;
}

if (infile==stdin) fclose(infile);
if (outfile==stdout) fclose(outfile);

}

This sends output to stdout, rather than overwrite the input file (which is
tricky to do, as well as being a bad idea unless a backup scheme is in
place).
 
T

tm

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...

You really hit the spot.

I could easily proof your theory by suggesting Seed7. :)


Greetings Thomas Mertes

--
Seed7 Homepage: http://seed7.sourceforge.net
Seed7 - The extensible programming language: User defined statements
and operators, abstract data types, templates without special
syntax, OO with interfaces and multiple dispatch, statically typed,
interpreted or compiled, portable, runs under linux/unix/windows.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,769
Messages
2,569,578
Members
45,052
Latest member
LucyCarper

Latest Threads

Top