I actually want to find words starting with a and ending with b in a
text file and put the output in a file. So there will be no spaces
between the words. .
All of these text searches you have asked about can be solved
by a simple technique called a "state machine".
set state to 0
while (inchar = getc()) != EOF { /* beginning of a line */
if machinestate is 0 {
if inchar is 'a' {
store inchar for later output
set machinestate to 1;
} else if inchar is '\n'
set machinestate to 0;
else
set machinestate to 99;
} else if machinestate is 1 { /* 'a' detected at beginning of line */
if inchar is '\n' {
discard saved input characters
set machinestate to 0;
} else if inchar is 'b' {
store inchar for later output
set machinestate to 2;
} else {
discard saved input characters
set machinestate to 99;
}
} else if machinestate is 2 { /* 'ab' detected at beginning of line */
if inchar is '\n' {
discard saved input characters
set machinestate to 0;
} else if inchar is 'c' {
store inchar for later output
set machinestate to 3;
} else {
discard saved input characters
set machinestate to 99;
}
} else if machinestate is 3 { /* 'abc' detected at beginning of line */
if inchar is '\n' {
discard saved input characters
set machinestate to 0;
} else if inchar is 'x' {
store inchar for later output
set machinestate to 4;
} else if inchar is a word character {
store inchar for later output
set machinestate to 3;
} else {
discard saved input characters
set machinestate to 99;
}
} else if machinestate is 4 { /* 'abc'*'x' detected */
if inchar is '\n' {
discard saved input characters
set machinestate to 0;
} else if inchar is 'y' {
store inchar for later output
set machinestate to 5;
} else if inchar is 'x' {
store inchar for later output
set machinestate to 4;
} else if inchar is a word character {
store inchar for later output
set machinestate to 3;
} else {
discard saved input characters
set machinestate to 99;
}
} else if machinestate is 5 { /* 'abc'*'xy' detected */
if inchar is '\n' {
discard saved input characters
set machinestate to 0;
} else if inchar is 'z' {
save inchar for later output
set machinestate to 6;
} else if inchar is 'x' {
save inchar for later output
set machinestate to 4;
} else if inchar is a word character {
store inchar for later output
set machinestate to 3;
} else {
discard saved input characters
set machinestate to 99;
}
} else if machinestate is 6 { /* 'abc'*'xyz' detected */
if inchar is '\n' {
output saved input characters
discard saved input characters
set machinestate to 0;
} else if inchar is 'x' {
save inchar for later output
set machinestate to 4;
} else if inchar is a word character {
machinestate inchar for later output
set machinestate to 3;
} else {
discard saved input characters
set machinestate to 99;
}
} else if inchar is '\n' /* machinestate must be 99 here. */
set machinestate to 0;
else
set machinestate to 99;
}
/* EOF reached */
if machinestate is 6 {
output saved input characters
discard saved input characters
} if machinestate is not 0 {
discard saved input characters
}