Вы можете открыть и прочитать файл .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 инвертирует логику, означает соответствие любой строке, которая не содержит запятой, а затем последней, говорит, чтобы совместить запятую, завершившую предыдущую строку.
Краткий ответ - нет, нет способа вернуть преобразованный объект поведения.
Сначала нужно определить выход, на который вы хотите повлиять, а затем выяснить, какие входы влияют на него. 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>()