Example #1
0
    private clsZipCode getZipCodeInformationAtRecordNumber(string zipCodeToSearch)
    {
        string pathFileNameBinary = Path.Combine(Application.StartupPath,
                                                 "ZipCodes_1990Census_sortedAscending.bin");
        const int recordLength = 109;

        clsZipCode zipCode = new clsZipCode();

        using (FileStream fs = new FileStream(pathFileNameBinary, FileMode.Open))
            using (BinaryReader br = new BinaryReader(fs))
            {
                long numberOfRecords = br.BaseStream.Length / recordLength;

                long start  = 0;
                long middle = numberOfRecords / 2;
                long end    = numberOfRecords;

                bool found = false;
                while (start <= end)
                {
                    long recordPos = middle * recordLength;
                    br.BaseStream.Seek(recordPos, SeekOrigin.Begin);
                    zipCode.BinaryDeserialize(br);

                    if (String.Compare(zipCode.ZipCode, zipCodeToSearch) == 0)
                    {
                        found = true;
                        break;
                    }
                    else if (String.Compare(zipCode.ZipCode, zipCodeToSearch) < 0)
                    {
                        start  = middle + 1;
                        middle = (end + start) / 2;
                    }
                    else
                    {
                        end    = middle - 1;
                        middle = (start + end) / 2;
                    }
                }

                if (found == false)
                {
                    showMessage("The Zip Code " + zipCodeToSearch + " was not found.");
                    return(null);
                }
            }
        return(zipCode);
    }