Exemplo n.º 1
0
 /// <summary>
 /// Returns the next record in the iteration.
 /// </summary>
 /// <returns></returns>
 private IRecord Next()
 {
     if (curFileReader == null || !curFileReader.MoveNext())
     {
         NextFile();
     }
     return(curFileReader == null ? null : curFileReader.Current);
 }
Exemplo n.º 2
0
 public bool MoveNext()
 {
     if (reader.MoveNext())
     {
         currentRecord = Next();
         return(currentRecord != null);
     }
     return(false);
 }
Exemplo n.º 3
0
        private IRecord Next()
        {
            if (_currentRecord != null)
            {
                IRecord tmp = _currentRecord;
                _currentRecord = null;
                return(tmp);
            }
            else
            if (_currentRecord == null)
            {
                if (_nextRecord != null)
                {
                    _currentRecord = _nextRecord;
                    CopyErrors(_currentErrors, _nextErrors);
                    _nextRecord = null;
                }
                if (!_reader.MoveNext())
                {
                    return((_currentRecord != null) ? Next() : null);
                }

                try
                {
                    _nextRecord = _reader.Current;
                }
                catch (Exception e)
                {
                    if (_currentRecord != null)
                    {
                        String recCntlNum = _currentRecord.GetControlNumber();
                        throw new MarcException("Couldn't get next record after " + (recCntlNum != null ? recCntlNum : "") + " -- " + e.ToString());
                    }
                    else
                    {
                        throw new MarcException("Marc record couldn't be read -- " + e.ToString());
                    }
                }


                while (RecordsMatch(_currentRecord, _nextRecord))
                {
                    _currentRecord = CombineRecords(_currentRecord, _nextRecord, _idsToMerge);
                    MergeErrors(_currentErrors, _nextErrors);
                    if (_reader.MoveNext())
                    {
                        try
                        {
                            _nextRecord = _reader.Current;
                        }
                        catch (Exception e)
                        {
                            var recCntlNum = _currentRecord.GetControlNumber();
                            throw new MarcException("Couldn't get next record after " + (recCntlNum != null ? recCntlNum : "") + " -- " + e.ToString());
                        }
                    }
                    else
                    {
                        _nextRecord = null;
                    }
                }
                return(Next());
            }
            return(null);
        }