Поведение субъекта с преобразованием

Вы можете открыть и прочитать файл .csv, используя функции fopen, fscanf, но важно проанализировать данные. Самый простой способ проанализировать данные с помощью разделителя. В случае .csv разделитель равен ','.

Предположим, что ваш файл data1.csv выглядит следующим образом:

A,45,76,01
B,77,67,02
C,63,76,03
D,65,44,04

вы можете токенизировать данные и хранить в массиве символов, а затем использовать функцию atoi () и т. д. для соответствующих преобразований

FILE *fp;
char str1[10], str2[10], str3[10], str4[10];

fp = fopen("G:\\data1.csv", "r");
if(NULL == fp)
{
    printf("\nError in opening file.");
    return 0;
}
while(EOF != fscanf(fp, " %[^,], %[^,], %[^,], %s, %s, %s, %s ", str1, str2, str3, str4))
{
    printf("\n%s %s %s %s", str1, str2, str3, str4);
}
fclose(fp);

[^,], ^ -it инвертирует логику, означает соответствие любой строке, которая не содержит запятой, а затем последней, говорит, чтобы совместить запятую, завершившую предыдущую строку.

1
задан alekop 20 February 2019 в 06:49
поделиться

1 ответ

Краткий ответ - нет, нет способа вернуть преобразованный объект поведения.

Сначала нужно определить выход, на который вы хотите повлиять, а затем выяснить, какие входы влияют на него. map пойдет между ними. Например:

myTextField.rx.text.orEmpty
    .map { [110].trimmingCharacters(in: CharacterSet.whitespaces)
    .bind(to: username)
    .disposed(by: disposeBag)

Если вы хотите, чтобы имя пользователя было выходным, или

username.asObservable() // I'm not sure if the asObservable() is actually necessary at the moment. Check that.
    .map { [111].trimmingCharacters(in: CharacterSet.whitespaces)
    .bind(to: myLabel.rx.text)
    .disposed(by: disposeBag)

, если вы хотите, чтобы имя пользователя было входным.

Для создания username просто используйте let username = BehaviorSubject<String>()

0
ответ дан Daniel T. 20 February 2019 в 06:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: