On Wed, May 1, 2019, 11:44 PM Nitish Saboo <nitish.sabo...@gmail.com> wrote:

> Hi Jusitn,
>
> I realised I have value_len field in my arguments.I did this :
>
> func Nitish(key *C.char, value *C.char, value_len C.size_t){
>
> f.WriteString(C.GoString(key)+ ":")
> s := C.GoStringN(value, C.int(value_len))
> //fmt.Println(s)
>
> f.WriteString(s)
> f.WriteString("\n")
>
> }
> Am I doing it correctly?
>

Yea the intent was that you already had the value and value_len being
passed into your callback. So you can split the value as needed by
converting it with GoStringN()


> Thanks
>
> On Wed, May 1, 2019 at 4:40 PM Nitish Saboo <nitish.sabo...@gmail.com>
> wrote:
>
>> Hi Justin,
>>
>> As you had suggested:
>> ****************************************
>> You could use something like this:
>> https://play.golang.org/p/fcE2UJEUFPy
>>
>> That example has the option of only converting a fixed number of bytes
>> from the C string to the Go string, if you know how big the prefix is.
>> *************************************************
>>
>>
>> I made the following changes to my function:
>>
>> func Nitish(key *C.char, value *C.char, value_len C.size_t){
>>
>> f.WriteString(C.GoString(key)+ ":")
>> value1 := C.CString(C.GoString(value))
>> value_len1 := C.size_t(value1)
>> // If we know the max size of characters
>> // that we are looking for, then we can
>> // limit how many we need to convert from
>> // the C string
>> const maxLen = 40
>> if value_len1 > maxLen {
>> value_len1 = C.size_t(maxLen)
>> }
>>
>> s := C.GoStringN(value, C.int(value_len1))
>> //fmt.Println(s)
>>
>> parts := strings.SplitN(s, " ", 2)
>> //fmt.Println(parts[0])
>> f.WriteString(parts[0])
>> f.WriteString("\n")
>>
>> }
>>
>> *value *field is pointer to strings in C.I am getting the following
>> error:
>>
>> # command-line-arguments
>> ./main.go:109:24: cannot convert value1 (type *_Ctype_char) to type
>> _Ctype_ulong
>> makefile:6: recipe for target 'main' failed
>> make: *** [main] Error 2
>>
>> I am new to cgo.I know I am making a silly mistake to fetch the value of
>> value1.Can you please point it out ?
>>
>> Thanks,
>> Nitish
>>
>> On Wed, May 1, 2019 at 3:10 PM Nitish Saboo <nitish.sabo...@gmail.com>
>> wrote:
>>
>>> Actually, this is what is happening:
>>>
>>> func Nitish(key *C.char, value *C.char, value_len C.size_t){
>>>
>>>    f.WriteString(C.GoString(key)+ ":")
>>>    f.WriteString(C.GoString(value))
>>>    f.WriteString("\n")
>>>
>>> }
>>>
>>> This callback method is getting called from C code multiple times.
>>>
>>> I am planning to write  the key, value pairs in a file.But the 'value' 
>>> field is getting appended with the previous value in the buffer.
>>>
>>> These are the contents that are getting written to the file.Please see the 
>>> following from bottom to top.If you see for every key field (bottom to 
>>> top), image/gif and then 'Fp5PpR2roT6uPnte47' is getting appended as I 
>>> continue writing key-values to the file.
>>>
>>> But I need only the first word from the value field.
>>>
>>> Actual:
>>>
>>> sentfileid: -       Fp5PpR2roT6uPnte47      image/gif
>>> sentmimetype: Fp5PpR2roT6uPnte47      image/gif
>>> rcvdfileid: image/gif
>>>
>>> Expected:
>>>
>>> sentfileid: -
>>> sentmimetype: Fp5PpR2roT6uPnte47
>>> rcvdfileid: image/gif
>>>
>>> Please let me know how can I achieve this ?
>>>
>>> Thanks
>>>
>>>
>>>
>>> On Wed, May 1, 2019 at 11:25 AM Nitish Saboo <nitish.sabo...@gmail.com>
>>> wrote:
>>>
>>>> Hi,
>>>> I have this method:
>>>>
>>>> func CallBack(key *C.char, value *C.char, value_len C.size_t){
>>>>
>>>>     }
>>>>
>>>> and the *value* parameter in the arguments is containing the given
>>>> string  'Fp5PpR2roT6uPnte47      image/gif'.
>>>> I want to extract only first word from the string.Let me know how can I
>>>> do this.
>>>>
>>>> I don't want  to split the string into a slice of individual characters.
>>>>
>>>> Thanks
>>>>
>>>> On Wed, May 1, 2019 at 6:27 AM Justin Israel <justinisr...@gmail.com>
>>>> wrote:
>>>>
>>>>>
>>>>>
>>>>> On Wednesday, May 1, 2019 at 7:06:47 AM UTC+12, Nitish Saboo wrote:
>>>>>>
>>>>>> Apologies.I did this 'strings.Split(C.GoString(*C.char),"").
>>>>>> I am getting 'Incompatible types' compilation error.
>>>>>>
>>>>>
>>>>> Are you literally doing this?
>>>>>     strings.Split(C.GoString(*C.char),"")
>>>>>
>>>>> Something like this should be working correctly:
>>>>>
>>>>>     someCArr := getSomeCArr()
>>>>>     chars := strings.Split(C.GoString(someCArr),"")
>>>>>
>>>>> Is your goal to split the string into a slice of individual
>>>>> characters? Because that is what your delim suggests.
>>>>>
>>>>>
>>>>>> Thanks
>>>>>>
>>>>>>
>>>>>> On Wed, May 1, 2019 at 12:30 AM Nitish Saboo <nitish...@gmail.com>
>>>>>> wrote:
>>>>>>
>>>>>>> Hi,
>>>>>>>
>>>>>>> I want to convert *C.char to array of strings in Go.
>>>>>>> I want to do this because I want the first word from the
>>>>>>> string.Strings are getting appended to *C.char and I want the first 
>>>>>>> word of
>>>>>>> the string.
>>>>>>> I am doing it using 'strings.Split(C.GoString(*C.char))[0]', but it
>>>>>>> is giving error.
>>>>>>> Can someone correct me here ?
>>>>>>>
>>>>>>> Thanks
>>>>>>>
>>>>>>> --
>>>>>>> You received this message because you are subscribed to the Google
>>>>>>> Groups "golang-nuts" group.
>>>>>>> To unsubscribe from this group and stop receiving emails from it,
>>>>>>> send an email to golan...@googlegroups.com.
>>>>>>> For more options, visit https://groups.google.com/d/optout.
>>>>>>>
>>>>>> --
>>>>> You received this message because you are subscribed to the Google
>>>>> Groups "golang-nuts" group.
>>>>> To unsubscribe from this group and stop receiving emails from it, send
>>>>> an email to golang-nuts+unsubscr...@googlegroups.com.
>>>>> For more options, visit https://groups.google.com/d/optout.
>>>>>
>>>>

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to