int main() { // Define string and record reader types. We will read from std::cin which // is of type std::istream. We use a single-pass record reader. typedef seqan::RecordReader<std::istream, seqan::SinglePass<> > TRecordReader; int res = 0; // Used to store I/O results. // Create RecordReader reading from standard input. TRecordReader reader(std::cin); // Read the file line by line. while (!atEnd(reader)) { // Read first column: The key. seqan::CharString key; res = readUntilChar(key, reader, ','); if (res != 0) return 1; goNext(reader); // Skip TAB. // Read second column: The value. seqan::CharString value; res = readLine(value, reader); // EOL will not be stored in value. if (res != 0) return 1; // Print ${key} -> ${value}. std::cout << key << " -> " << value << std::endl; } return 0; }
bool parseRegion(Region & region, seqan::CharString const & regionString) { seqan::Stream<seqan::CharArray<char const *> > stream(begin(regionString, seqan::Standard()), end(regionString, seqan::Standard())); seqan::RecordReader<seqan::Stream<seqan::CharArray<char const *> >, seqan::SinglePass<> > reader(stream); // Parse out sequence name. seqan::CharString buffer; int res = readUntilChar(buffer, reader, ':'); if (res != 0 && res != seqan::EOF_BEFORE_SUCCESS) return 1; // Parse error. region.seqName = buffer; if (atEnd(reader)) return true; // Done after parsing the sequence name. goNext(reader); // Skip ':'. // Parse out begin position. clear(buffer); while (!atEnd(reader) && value(reader) != '-') { if (!isdigit(value(reader)) && value(reader) != ',') return false; // Error parsing. if (isdigit(value(reader))) appendValue(buffer, value(reader)); goNext(reader); } if (empty(buffer)) return false; if (!lexicalCast2(region.beginPos, buffer)) return false; if (region.beginPos <= 0) return false; region.beginPos -= 1; // Adjust to 0-based. if (atEnd(reader)) return true; goNext(reader); // Skip '-'. // Parse out end position. clear(buffer); while (!atEnd(reader)) { if (!isdigit(value(reader)) && value(reader) != ',') return false; // Error parsing. if (isdigit(value(reader))) appendValue(buffer, value(reader)); goNext(reader); } if (empty(buffer)) return false; if (!lexicalCast2(region.endPos, buffer)) return false; if (region.endPos <= 0) return false; return atEnd(reader); }
int main(int argc,char * argv[]) { int fd,offset=0,bytesread,readchar; char buff[1024]; char line[1024]; if(argc < 3) { fd = 0; } else { fd = open(argv[2],READ); } //get lines from file, print them if they match pattern //no regex support required(thank god) bytesread = read(fd,buff,1024); //printf("fd = %d,buff = %s,bytes read = %d\r\n",fd,buff,bytesread); do { //printf("\r\nBefore: buff: %s\r\n line: %s\r\n offset: %d\r\n",buff,line,offset); readchar = readUntilChar(buff,line,'\n',&offset); //printf("Chars read %d",readchar); if (offset == 1024) { //we have a split line to handle offset = 0; bytesread = read(fd,buff,1024); if (bytesread < 1024) { buff[bytesread] = '\0'; } readchar = readUntilChar(buff,line+readchar,'\n',&offset); } if (grep(argv[1],line)==1) { printf("%s\r\n",line); } }while(readchar != -1 ); }