Ejemplo n.º 1
0
def process_file(fname, schemafile):
    table = None
    for line in open(fname):
        if not table:
            m = title_re.search(line)
            if m:
                table = Table(name=m.group(1))
        if table and not table.version:
            m = version_re.search(line)
            if m:
                table.version = m.group(1)
        m = variable_re.search(line)
        if m:
            v = Variable()
            (position, name, desc, vtype, column) = m.group(1, 2, 3, 4, 5)
            oname = name
            count = 2
            while name in [v.name for v in table.vars]:
                name = "{}{}".format(oname, count)
                count += 1
            v.define_from_row([position, name, desc, vtype])
            if "-" in column:
                v.column = [int(x) for x in column.split("-")]
            table.add_variable(v)

    schemafile.write('#define SPEC_FILE "{}"\n'.format(fname))
    table.write_sql_scanner(schemafile)
Ejemplo n.º 2
0
    def load_table_schema_from_census_txt_spec(self, *, filename, prefix=""):
        """Read a single table from a txt file."""
        table = None
        for (ll, line) in enumerate(dopen(filename), 1):
            if ll > self.MAXLINES:
                if (table == None) or len(table.vars()) == 0:
                    logging.info(
                        "{} is not a Census text specification".format(
                            filename))
                    return None

            # Get a table name if we do not have one
            if not table:
                m = TXT_TITLE_RE.search(line)
                if m:
                    table = Table(name=m.group(1))
                    table.add_comment("Parsed from {}".format(filename))
                    continue
            # Get the table version if we do not have one
            if table and not table.version:
                m = TXT_VERSION_RE.search(line)
                if m:
                    table.version = m.group(1)
                    continue
            # Is this a variable name within the table?
            m = VARIABLE_RE.search(line)
            if m:
                (position, name, desc, vtype, column) = m.group(1, 2, 3, 4, 5)
                oname = name
                count = 2
                v = Variable(position=row[0],
                             name=row[1],
                             desc=row[2],
                             vtype=row[3])
                while name in [v.name for v in table.vars()]:
                    name = "{}{}".format(oname, count)
                    count += 1
                if "-" in column:
                    v.column = [int(x) for x in column.split("-")]
                table.add_variable(v)
        if len(table.vars()) == 0:
            return None
        self.add_table(table)