Replacing words in a file


 
Thread Tools Search this Thread
Top Forums Programming Replacing words in a file
# 1  
Old 04-06-2006
Replacing words in a file

I'm trying to write a program that will open an existing file supplied by the command line argument and then replace words with "We" or "we" by "I" and "a" or "A" by "The". When I run the program it reads the file, changes the word but re writes it on a new line with only the replaced words not the whole sentence. Would anyone be able to help me? I also have to use open and read not fopen for example.

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

#define BUFFERSIZE      4096

 main(int ac, char *av[])
{
        int     in_fd, n_chars;
        char    buf[BUFFERSIZE];
        char x;

        if ( ac != 2 ){
                fprintf( stderr, "usage: %s source destination\n", *av);
                exit(1);
        }
                                        

        if ( (in_fd=open(av[1], O_RDWR)) == -1 )
        	printf("Cannot open ", av[1]);


	while ( (n_chars = read(in_fd , buf, BUFFERSIZE)) > 0 ){


	for  (x=0; x<n_chars; x++)
	{


		if (buf[x] ==  'W') if (buf[x+1] == 'e') if (buf[x+2]=' ')
			{
				lseek(in_fd, 0, SEEK_CUR);
				write(in_fd, "I", strlen("I"));
			}
		if (buf[x] == 'w') if (buf[x+1] == 'e') if (buf[x+2]=' ')
			{
				lseek(in_fd, 0, SEEK_CUR);
				write(in_fd, "I", strlen("I"));
			}
		if (buf[x] == 'A') if (buf[x+1] == ' ')
			{
				lseek(in_fd, 0, SEEK_CUR);
				write(in_fd, "The", strlen("The"));
			}
		if (buf[x] == 'a') if (buf[x+2] == ' ')
			{
				lseek(in_fd, 0, SEEK_CUR);
				write(in_fd, "the", strlen("the"));
			}	
                write( in_fd, &buf[x], 1 );			
	}

	}
        if ( n_chars == -1 )
        	printf("Read error from ", av[1]);
        if ( close(in_fd) == -1)
                printf("Error closing files","");




}

# 2  
Old 04-07-2006
Welcome to the Forum !!! Smilie Smilie Smilie
Quote:
I'm trying to write a program that will open an existing file supplied by the command line argument and then replace words with "We" or "we" by "I" and "a" or "A" by "The". When I run the program it reads the file, changes the word but re writes it on a new line with only the replaced words not the whole sentence. Would anyone be able to help me? I also have to use open and read not fopen for example.
Yes it would rewrite on the newline and that too with only the replaced words not the whole sentence.
In your code where have you, instructed to write the whole sentence? Only the replacement is effected as follows
Quote:
write(in_fd, "I", strlen("I"));
try the following code,
not well tested, can be optimized, would server only as an example or starter;modify input/output file accordingly

Code:
# include<stdio.h>

int main()
{
 FILE *fpr, *fpw;
 int ch1, ch2, ch3;

 if( ((fpr=fopen("src", "r")) == NULL) || ((fpw=fopen("dest", "w")) == NULL ))
 {
    exit(1);
 }
  while( (ch1=fgetc(fpr)) != EOF )
  {
     if( (ch2=fgetc(fpr)) == EOF )
     {
        break;
     }
     if( (ch3=fgetc(fpr)) == EOF )
     {
        break;
     }
     if( (ch1=='W' && ch2=='e' && ch3==' ') || (ch1=='w' && ch2=='e' && ch3==' ') )
     {
        fprintf(fpw, "%s", "I ");
        continue;
     }
   else if( (ch1=='a' && ch2==' ') || (ch1=='A' && ch2==' ') )
     {
        fprintf(fpw, "%s", "The ");
        ungetc(ch3, fpr);
        continue;
     }
     else
     {
        fprintf(fpw, "%c",ch1);
        ungetc(ch3, fpr);
        ungetc(ch2, fpr);
     }
  }
  if(ch1 != EOF)
     fprintf(fpw, "%c",ch1);
  if(ch2 != EOF)
     fprintf(fpw, "%c",ch2);
  if(ch3 != EOF)
     fprintf(fpw, "%c",ch3);
  fclose(fpr);
  fclose(fpw);
}

>cat src
we source of power
We ultimate source of power
of all that a possible
neutral of all A neurons

>cat dest
I source of power
I ultimate source of power
of all that The possible
neutral of all The neurons
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Replace particular words in file based on if finds another words in that line

Hi All, I need one help to replace particular words in file based on if finds another words in that file . i.e. my self is peter@king. i am staying at north sydney. we all are peter@king. How to replace peter to sham if it finds @king in any line of that file. Please help me... (8 Replies)
Discussion started by: Rajib Podder
8 Replies

2. UNIX for Dummies Questions & Answers

Replace the words in the file to the words that user type?

Hello, I would like to change my setting in a file to the setting that user input. For example, by default it is ONBOOT=ON When user key in "YES", it would be ONBOOT=YES -------------- This code only adds in the entire user input, but didn't replace it. How do i go about... (5 Replies)
Discussion started by: malfolozy
5 Replies

3. Shell Programming and Scripting

How count the number of two words associated with the two words occurring in the file?

Hi , I need to count the number of errors associated with the two words occurring in the file. It's about counting the occurrences of the word "error" for where is the word "index.js". As such the command should look like. Please kindly help. I was trying: grep "error" log.txt | wc -l (1 Reply)
Discussion started by: jmarx
1 Replies

4. UNIX for Dummies Questions & Answers

Replacing word and Capitalize words after

I have an assignment and I am not sure what to do. In Unix, I use PuTTY change the semicolon (;) to a period, and capitalize the first letter of the word immediately after it. I know change command is M-% and "." so only one semicolon is changed but I am not sure how to... (1 Reply)
Discussion started by: kathrut43
1 Replies

5. Shell Programming and Scripting

Splitting concatenated words in input file with words from the same file

Dear all, I am working with names and I have a large file of names in which some words are written together (upto 4 or 5) and their corresponding single forms are also present in the word-list. An example would make this clear annamarie mariechristine johnsmith johnjoseph smith john smith... (8 Replies)
Discussion started by: gimley
8 Replies

6. Shell Programming and Scripting

Replacing words in file

Hello All Probably this is very simple for you but I cant figure it out I have to replace "No Header" with "Output Field Names" I/P file <ATTRIBUTE NAME ="Header Options" VALUE ="No Header"/> O/P needed <ATTRIBUTE NAME ="Header Options" VALUE = "Output Field Names"> (4 Replies)
Discussion started by: Pratik4891
4 Replies

7. Shell Programming and Scripting

Splitting Concatenated Words in Input File with Words from a Master File

Hello, I have a complex problem. I have a file in which words have been joined together: Theboy ranslowly I want to be able to correctly split the words using a lookup file in which all the words occur: the boy ran slowly slow put child ly The lookup file which is meant for look up... (21 Replies)
Discussion started by: gimley
21 Replies

8. Shell Programming and Scripting

Replacing words

Hi, I have am using a file that contains names that I want to replace. Basically file 1 looks like this jack joe james john I have another file (file 2) that looks like this jack 2345 joe 6848 james 3342 john 3432 Basically I want to replace column1 from file1... (4 Replies)
Discussion started by: kylle345
4 Replies

9. Shell Programming and Scripting

Replacing words in a fast way

Hi, I have a file that looks like this: br0 br0 br1 br10 br11 br12 br13 br14 br15 br15 br2 br2 br3 br4 br5 br6 br7 (5 Replies)
Discussion started by: phil_heath
5 Replies

10. Shell Programming and Scripting

Sed replacing words with abbreviations

I really hate to do this, but I am completely stumped. I have to create a sed script that will change the abbreviations in a file to the full word. I really just have no idea where to start. All I want is a starting point as well no actual complete answer. Thank you for your time in advance. ... (4 Replies)
Discussion started by: mauler123
4 Replies
Login or Register to Ask a Question