0564395ec363631f2ff8d295da6f6b50f873fda4 braney Mon Jan 24 17:01:53 2022 -0800 more chromAlias work: some name changes and support for the new genark chromAlias format diff --git src/inc/fieldedTable.h src/inc/fieldedTable.h index 8b7bf6b..573248a 100644 --- src/inc/fieldedTable.h +++ src/inc/fieldedTable.h @@ -1,93 +1,98 @@ /* fieldedTable - a table composed of untyped strings in memory. Includes names for each * field. This is a handy way of storing small-to-medium tab-separated files that begin * with a "#list of fields" line among other things. */ #ifndef FIELDEDTABLE_H #define FIELDEDTABLE_H struct fieldedRow /* An array of strings with a little extra info, can be hung on a list. */ { struct fieldedRow *next; char **row; // Array of strings int id; // In the file case this is the line of file row starts in }; struct fieldedTable /* A table with a name for each field. */ { struct fieldedTable *next; char *name; /* Often the file name */ struct lm *lm; /* All allocations done out of this memory pool. */ int fieldCount; /* Number of fields. */ char **fields; /* Names of fields. */ struct fieldedRow *rowList; /* list of parsed out fields. */ struct fieldedRow **cursor; /* Pointer to where we add next item to list. */ int rowCount; /* Number of rows. */ boolean startsSharp; /* Whether first line starts with a # char */ }; struct fieldedTable *fieldedTableNew(char *name, char **fields, int fieldCount); /* Create a new empty fieldedTable with given name, often a file name. */ void fieldedTableFree(struct fieldedTable **pTable); /* Free up memory resources associated with table. */ struct fieldedRow *fieldedTableAdd(struct fieldedTable *table, char **row, int rowSize, int id); /* Create a new row and add it to table. Return row. */ struct fieldedRow *fieldedTableAddHead(struct fieldedTable *table, char **row, int rowSize, int id); /* Create a new row and add it to start of table. Return row. */ struct fieldedTable *fieldedTableFromTabFile(char *fileName, char *url, char *requiredFields[], int requiredCount); /* Read table from tab-separated file with a #header line that defines the fields. Ensures * all requiredFields (if any) are present. The url is just used for error reporting and * should be the same as fileName for most purposes. This is used by edwSubmit though which * first copies to a local file, and we want to report errors from the url. */ struct fieldedTable *fieldedTableReadTabHeader(struct lineFile *lf, char *requiredFields[], int requiredCount); /* Read in first line of file treating it as a fieldedTable header line. * Use lineFileNextRowTab(lf, row, table->fieldCount) on a row you provide * that is table->fieldCount sized */ void fieldedTableToTabFile(struct fieldedTable *table, char *fileName); /* Write out a fielded table back to file */ void fieldedTableToTabFileWithId(struct fieldedTable *table, char *fileName, char *idField, int startId); /* Write out a fielded table back to file. If idField is non-NULL it will be added * to the start of each output line as a steadily incrementing integer starting with startId. */ void fieldedTableResetRowIds(struct fieldedTable *table, int startId); /* Redo ID's in table to be incrementing numbers starting with startId */ boolean fieldedTableColumnIsNumeric(struct fieldedTable *table, int fieldIx); /* Return TRUE if field has numeric values wherever non-null */ double fieldedTableMaxInCol(struct fieldedTable *table, int colIx); /* Figure out total and count columns from context and use them to figure * out maximum mean value */ int fieldedTableMaxColChars(struct fieldedTable *table, int colIx); /* Calculate the maximum number of characters in a cell for a column */ void fieldedTableSortOnField(struct fieldedTable *table, char *field, boolean doReverse); /* Sort on field. Distinguishes between numerical and text fields appropriately. */ int fieldedTableMustFindFieldIx(struct fieldedTable *table, char *field); /* Find index of field in table's row. Abort if field not found. */ int fieldedTableFindFieldIx(struct fieldedTable *table, char *field); /* Return index of field in a table's row or -1 if not found */ struct hash *fieldedTableIndex(struct fieldedTable *table, char *field); /* Return hash of fieldedRows keyed by values of given field */ struct hash *fieldedTableUniqueIndex(struct fieldedTable *table, char *field); /* Return hash of fieldedRows keyed by values of given field, which must be unique. */ +struct fieldedTable *fieldedTableAttach(struct lineFile *lf, char *requiredFields[], int requiredCount); +/* Read table from tab-separated file with a #header line that defines the fields + * from already open lineFile.. Ensures all requiredFields (if any) are present. + * should be NULL for most purposes. */ + #endif /* FIELDEDTABLE_H */