Сколько из C++ поддерживается в Objective C ++

Я не уверен, что официальный DynamoDB-Local поддерживает это по умолчанию, и кажется, что вам нужен собственный скрипт, который импортирует CSV в DynamodB, однако вы можете создать собственное изображение для ваших нужд. Так, например, вы можете начать с простого Dockerfile использования amazon/dynamodb-local, а затем добавить скрипт Python, который будет отвечать за импорт CSV-файлов, поэтому шаги могут выглядеть следующим образом:

  • Смонтировать CSV в контейнер может быть внутри /docker-entrypoint-initdb.d
  • Создайте сценарий entrypoint.sh, чтобы использовать его в качестве точки входа для контейнера, а также он проверит, есть ли какие-либо файлы csv внутри /docker-entrypoint-initdb.d, чтобы передать его в скрипт Python - код , добавленный ниже - который загрузит его в DynamodB, например, как показано ниже (взято из точки входа mongodb ):
        for f in /docker-entrypoint-initdb.d/*; do
            case "$f" in
                # if csv file pass it to the python script
                *.csv) echo "[110]: running $f"; . "$f" ;;
                *)    echo "[110]: ignoring $f" ;;
            esac
            echo
        done
[ 1120]
  • Следующий код не был протестирован или создан мной, я только что скопировал его по следующей ссылке Импортируйте CSV-файл в таблицу DynamoDB, используя boto (пакет Python) , вы можете изменить его так, как считаете нужным, или создать собственный сценарий. Или, если у вас есть более подходящее предложение, дайте мне знать, чтобы обновить ответ.

  • boto поддерживает DynamodB-Local, как описано в следующем ответе , что означает, что вы можете изменить скрипт, чтобы он работал с DynamodB Local

    • blockquote>
    import boto
    
    MY_ACCESS_KEY_ID = 'copy your access key ID here'
    MY_SECRET_ACCESS_KEY = 'copy your secrete access key here'
    
    
    def do_batch_write(items, table_name, dynamodb_table, dynamodb_conn):
        '''
        From https://gist.github.com/griggheo/2698152#file-gistfile1-py-L31
        '''
        batch_list = dynamodb_conn.new_batch_write_list()
        batch_list.add_batch(dynamodb_table, puts=items)
        while True:
            response = dynamodb_conn.batch_write_item(batch_list)
            unprocessed = response.get('UnprocessedItems', None)
            if not unprocessed:
                break
            batch_list = dynamodb_conn.new_batch_write_list()
            unprocessed_list = unprocessed[table_name]
            items = []
            for u in unprocessed_list:
                item_attr = u['PutRequest']['Item']
                item = dynamodb_table.new_item(
                        attrs=item_attr
                )
                items.append(item)
            batch_list.add_batch(dynamodb_table, puts=items)
    
    
    def import_csv_to_dynamodb(table_name, csv_file_name, colunm_names, column_types):
        '''
        Import a CSV file to a DynamoDB table
        '''        
        dynamodb_conn = boto.connect_dynamodb(aws_access_key_id=MY_ACCESS_KEY_ID, aws_secret_access_key=MY_SECRET_ACCESS_KEY)
        dynamodb_table = dynamodb_conn.get_table(table_name)     
        BATCH_COUNT = 2 # 25 is the maximum batch size for Amazon DynamoDB
    
        items = []
    
        count = 0
        csv_file = open(csv_file_name, 'r')
        for cur_line in csv_file:
            count += 1
            cur_line = cur_line.strip().split(',')
    
            row = {}
            for colunm_number, colunm_name in enumerate(colunm_names):
                row[colunm_name] = column_types[colunm_number](cur_line[colunm_number])
    
            item = dynamodb_table.new_item(
                        attrs=row
                )           
            items.append(item)
    
            if count % BATCH_COUNT == 0:
                print 'batch write start ... ', 
                do_batch_write(items, table_name, dynamodb_table, dynamodb_conn)
                items = []
                print 'batch done! (row number: ' + str(count) + ')'
    
        # flush remaining items, if any
        if len(items) > 0: 
            do_batch_write(items, table_name, dynamodb_table, dynamodb_conn)
    
    
        csv_file.close() 
    
    
    def main():
        '''
        Demonstration of the use of import_csv_to_dynamodb()
        We assume the existence of a table named `test_persons`, with
        - Last_name as primary hash key (type: string)
        - First_name as primary range key (type: string)
        '''
        colunm_names = 'Last_name First_name'.split()
        table_name = 'test_persons'
        csv_file_name = 'test.csv'
        column_types = [str, str]
        import_csv_to_dynamodb(table_name, csv_file_name, colunm_names, column_types)
    
    
    if __name__ == "__main__":
        main()
        #cProfile.run('main()') # if you want to do some profiling
    

    Содержимое test.csv (должно находиться в той же папке, что и скрипт Python):

    John,Doe
    Bob,Smith
    Alice,Lee
    Foo,Bar
    a,b
    c,d
    e,f
    g,h
    i,j
    j,l
    

    6
    задан rlbond 11 April 2009 в 23:40
    поделиться

    6 ответов

    Весь C ++ поддерживается в Objective C ++. Можно использовать ускорение, но вам, возможно, придется перенести некоторые вещи, зависящие от платформы.

    10
    ответ дан 8 December 2019 в 02:46
    поделиться

    Следует отметить, что вы не можете просто делать все, что вы можете делать в C ++ в Objective-C ++. Например, вы не можете вызывать виртуальные функции на объектах C ++ из класса Objective-C. Как только вы вызываете функцию C / C ++, вы можете делать все, что захотите.

    4
    ответ дан 8 December 2019 в 02:46
    поделиться

    Цель C ++ - это расширенный набор C ++. Все, что вы можете сделать в C / C ++, может быть сделано в Obj-C ++. Часть «Objective» содержит, помимо прочего, систему обмена сообщениями Smalltalk-esque и другие дополнения к C ++.

    3
    ответ дан 8 December 2019 в 02:46
    поделиться

    Можно ли использовать такие вещи, как шаблоны в Objective-C ++.

    Да, но вам нужно позаботиться о том, как смешивать типы и интерфейсы между чистыми слоями C ++ и кодом Objective-C ++. Помните о границах между слоями, где вам нужно будет преобразовать такие типы, как std :: string в NSString и т. Д.

    Например, вы можете реализовать основной игровой движок на чистом C ++, и просто реализуйте свои контроллеры и код GUI на Objective-C ++. Тогда код Obj-C ++ является связующим звеном между чистым движком C ++ и Какао.

    Думаю, действительно вопрос в том, могу ли я использовать ускорение?

    Учитывая, что iPhone OS является подмножеством OS X, которая по-прежнему обеспечивает полную Уровень POSIX, большинство библиотек Boost должны работать нормально. Это должно быть похоже на написание кода Дарвина.

    В Objective-C ++ существует ряд ограничений, о которых следует знать (взяты непосредственно из Справочного руководства Objective-C 2.0 ):

    • вы не можете используйте синтаксис Objective-C для вызова объекта C ++
    • , вы не можете добавлять конструкторы или деструкторы к объекту Objective-C
    • , вы не можете использовать ключевые слова this и self взаимозаменяемо
    • иерархии классов разделены; класс C ++ не может наследовать от класса Objective-C, а класс Objective-C не может наследовать от класса C ++
    • , исключение, созданное в коде Objective-C, не может быть обнаружено в коде C ++ и, наоборот, исключение, созданное в C ++ код не может быть пойман в коде Objective-C.
    13
    ответ дан 8 December 2019 в 02:46
    поделиться

    C++ objects in Objective C will NOT necessarily act like in C++. For example constructors and destructors are not automatically called and (i think) that you can't implement virtual methods...

    2
    ответ дан 8 December 2019 в 02:46
    поделиться

    Boost is useful but it is also a large overhead to add to a project.

    Make sure you really need it before you go adding it.

    For Regex support: RegexLite.

    For everything else: Cocoa.

    1
    ответ дан 8 December 2019 в 02:46
    поделиться