def METHOD_NAME(self):
    """Reads ArcGIS dbf file
    Returns
    -------
    w : libpysal.weights.W
        A ``libpysal.weights.W`` object.
    Raises
    ------
    StopIteration
        Raised at the EOF.
    ValueError
        Raised when the weights data structure is incorrect.
    TypeError
        Raised when the IDs are not integers.
    Examples
    --------
    Type ``dir(w)`` at the interpreter to see what methods are supported.
    Open an ArcGIS ``.dbf`` file and read it into a PySAL weights object.
    >>> import libpysal
    >>> w = libpysal.io.open(
    ...     libpysal.examples.get_path('arcgis_ohio.dbf'), 'r', 'arcgis_dbf'
    ... ).read()
    Get the number of observations from the header.
    >>> w.n
    88
    Get the mean number of neighbors.
    >>> w.mean_neighbors
    5.25
    Get neighbor distances for a single observation.
    >>> w[1] == dict({2: 1.0, 11: 1.0, 6: 1.0, 7: 1.0})
    True
    """
    if self.pos > 0:
        raise StopIteration
    id_var = self.file.header[1]
    startPos = len(self.file.header)
    if startPos == 3:
        startPos = 0
    elif startPos == 4:
        startPos = 1
    else:
        msg = "Wrong structure, a weights '.dbf' "
        msg += "file requires at least three data columns."
        raise ValueError(msg)
    self.varName = id_var
    id_type = int
    id_spec = self.file.field_spec[startPos]
    if id_spec[0] != "N":
        raise TypeError("The data type for IDs should be integer.")
    self.id_var = id_var
    weights = {}
    neighbors = {}
    for row in self.file:
        i, j, w = tuple(row)[startPos:]
        i = id_type(i)
        j = id_type(j)
        w = float(w)
        if i not in weights:
            weights[i] = []
            neighbors[i] = []
        weights[i].append(w)
        neighbors[i].append(j)
        self.pos = self.file.pos
    w = W(neighbors, weights)
    return w