mirror of
https://github.com/johnkerl/miller.git
synced 2026-07-21 02:23:20 +00:00
partial-match iterate
This commit is contained in:
parent
41a082cf5f
commit
f9a80f55b6
4 changed files with 53 additions and 0 deletions
|
|
@ -89,6 +89,7 @@ TEST_MULTIPLE_CONTAINERS_SRCS = \
|
|||
lib/mlrutil.c lib/mlr_globals.c lib/string_builder.c \
|
||||
containers/lrec.c containers/header_keeper.c containers/sllv.c \
|
||||
containers/slls.c \
|
||||
containers/string_array.c \
|
||||
containers/hss.c \
|
||||
containers/lhmsi.c \
|
||||
containers/lhmss.c \
|
||||
|
|
|
|||
|
|
@ -22,3 +22,30 @@ void string_array_free(string_array_t* parray) {
|
|||
free(parray->strings);
|
||||
free(parray);
|
||||
}
|
||||
|
||||
string_array_t* string_array_from_line(char* line, char ifs) {
|
||||
if (*line == 0) // empty string splits to empty array
|
||||
return string_array_alloc(0);
|
||||
|
||||
int num_commas = 0;
|
||||
|
||||
for (char* p = line; *p; p++)
|
||||
if (*p == ifs)
|
||||
num_commas++;
|
||||
|
||||
string_array_t* parray = string_array_alloc(num_commas + 1);
|
||||
|
||||
char* start = line;
|
||||
int i = 0;
|
||||
for (char* p = line; *p; p++) {
|
||||
if (*p == ifs) {
|
||||
*p = 0;
|
||||
p++;
|
||||
parray->strings[i++] = start;
|
||||
start = p;
|
||||
}
|
||||
}
|
||||
parray->strings[i++] = start;
|
||||
|
||||
return parray;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -10,5 +10,6 @@ typedef struct _string_array_t {
|
|||
|
||||
string_array_t* string_array_alloc(int length);
|
||||
void string_array_free(string_array_t* parray);
|
||||
string_array_t* string_array_from_line(char* line, char ifs);
|
||||
|
||||
#endif // STRING_ARRAY_H
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@
|
|||
#include "lib/mlrutil.h"
|
||||
#include "containers/slls.h"
|
||||
#include "containers/sllv.h"
|
||||
#include "containers/string_array.h"
|
||||
#include "containers/hss.h"
|
||||
#include "containers/lhmsi.h"
|
||||
#include "containers/lhmss.h"
|
||||
|
|
@ -98,6 +99,28 @@ static char* test_sllv() {
|
|||
return NULL;
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------
|
||||
static char* test_string_array() {
|
||||
string_array_t* parray = string_array_from_line(mlr_strdup_or_die(""), ',');
|
||||
mu_assert_lf(parray->length == 0);
|
||||
string_array_free(parray);
|
||||
|
||||
parray = string_array_from_line(mlr_strdup_or_die("a"), ',');
|
||||
mu_assert_lf(parray->length == 1);
|
||||
mu_assert_lf(streq(parray->strings[0], "a"));
|
||||
|
||||
parray = string_array_from_line(mlr_strdup_or_die("c,d,a,e,b"), ',');
|
||||
mu_assert_lf(parray->length == 5);
|
||||
|
||||
mu_assert_lf(streq(parray->strings[0], "c"));
|
||||
mu_assert_lf(streq(parray->strings[1], "d"));
|
||||
mu_assert_lf(streq(parray->strings[2], "a"));
|
||||
mu_assert_lf(streq(parray->strings[3], "e"));
|
||||
mu_assert_lf(streq(parray->strings[4], "b"));
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------
|
||||
static char* test_hss() {
|
||||
|
||||
|
|
@ -624,6 +647,7 @@ static char* test_dheap() {
|
|||
static char * run_all_tests() {
|
||||
mu_run_test(test_slls);
|
||||
mu_run_test(test_sllv);
|
||||
mu_run_test(test_string_array);
|
||||
mu_run_test(test_hss);
|
||||
mu_run_test(test_lhmsi);
|
||||
mu_run_test(test_lhmss);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue