This works for getting a c string out of the CScalar:
```

name_buffer = (<CBaseBinaryScalar*>GetResultValue(names.get().\

GetScalar(batch_row_index)).get()).value

name = <char *>name_buffer.get().data()

```

On Tue, Apr 13, 2021 at 10:43 PM, Xander Dunn < [email protected] > wrote:

> 
> Here is an example code snippet from a .pyx file that successfully
> iterates through a CRecordBatch and ensures that the timestamps are
> ascending:
> 
> ```
> 
> while batch_row_index < batch.get().num_rows():
> 
> timestamp = GetResultValue(times.get().GetScalar(batch_row_index))
> 
> new_timestamp = <CTimestampScalar*>timestamp.get()
> 
> current_timestamp = timestamps[name]
> 
> if current_timestamp > new_timestamp.value:
> 
> abort()
> 
> batch_row_index += 1
> 
> ```
> 
> 
> 
> However, I'm having difficulty operating on the values in a column of
> string type. Unlike CTimestampScalar, there is no CStringScalar. Although
> there is a StringScalar type in C++, it isn't defined in the Cython
> interface. There is a `CStringType` and a `c_string` type.
> 
> ```
> 
> while batch_row_index < batch.get().num_rows():
> 
> name = GetResultValue(names.get().GetScalar(batch_row_index))
> 
> name_string = <CStringType*>name.get() # This is wrong
> 
> printf("%s\n", name_string) # This prints garbage
> 
> if name_string == b"Xander": # Doesn't work
> 
> print("found it")
> 
> batch_row_index += 1
> 
> ```
> 
> How do I get the string value as a C type and compare it to other strings?
> 
> 
> 
> 
> Thanks,
> 
> Xander
>

Reply via email to