Esempio n. 1
0
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;
}
Esempio n. 2
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);
}
Esempio n. 3
0
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 );
}