Сообщение от
Евгений Кислов
Опишите, пожалуйста, проблему так, чтобы я и другие пользователи смогли ее понять.
Выложите ваш проект, с которым можно воспроизвести проблему.
Проект слишком большой чтобы его выкладывать, в нем еще капаться придется.
Могу выложить функцию преобразования и результат.
Код:
FUNCTION_BLOCK create_csv_file
VAR_INPUT
made: BOOL;
file_data: POINTER TO struct_bin_file_record;
END_VAR
VAR_OUTPUT
done: BOOL;
csv_result: WSTRING(10000);
END_VAR
VAR
t_state: INT;
run: R_TRIG;
i: INT;
t_wstring: WSTRING;
END_VAR
VAR CONSTANT
devider: WSTRING := ",";
new_liner: WSTRING := "$N";
ender: WSTRING := "$P";
END_VAR
run(CLK:=made);
CASE t_state OF
0: //======================================= wait for execute =====
IF run.Q THEN
t_state := 1;
done := FALSE;
csv_result := STRING_TO_WSTRING('Перемещение,Давление,Усилие$N');
END_IF
1: //======================================= create file =====
FOR i:=0 TO file_data^.table_point DO
t_wstring := REAL_TO_WSTRING(file_data^.table[i].len);
StrConcatW ( ADR(t_wstring) , ADR(csv_result) , SIZEOF(csv_result) );
StrConcatW ( ADR(devider) , ADR(csv_result) , SIZEOF(csv_result) );
t_wstring := REAL_TO_WSTRING(file_data^.table[i].pres);
StrConcatW ( ADR(t_wstring) , ADR(csv_result) , SIZEOF(csv_result) );
StrConcatW ( ADR(devider) , ADR(csv_result) , SIZEOF(csv_result) );
t_wstring := REAL_TO_WSTRING(file_data^.table[i].force);
StrConcatW ( ADR(t_wstring) , ADR(csv_result) , SIZEOF(csv_result) );
StrConcatW ( ADR(devider) , ADR(csv_result) , SIZEOF(csv_result) );
StrConcatW ( ADR(new_liner) , ADR(csv_result) , SIZEOF(csv_result) );
END_FOR
t_state := 2;
2: //======================================= write to buffer =====
t_wstring := " , , ,$N";
StrConcatW ( ADR(t_wstring) , ADR(csv_result) , SIZEOF(csv_result) );
t_wstring := REAL_TO_WSTRING(file_data^.result_Lenght);
StrConcatW ( ADR(t_wstring) , ADR(csv_result) , SIZEOF(csv_result) );
StrConcatW ( ADR(devider) , ADR(csv_result) , SIZEOF(csv_result) );
t_wstring := REAL_TO_WSTRING(file_data^.result_Preasure);
StrConcatW ( ADR(t_wstring) , ADR(csv_result) , SIZEOF(csv_result) );
StrConcatW ( ADR(devider) , ADR(csv_result) , SIZEOF(csv_result) );
t_wstring := REAL_TO_WSTRING(file_data^.result_Force);
StrConcatW ( ADR(t_wstring) , ADR(csv_result) , SIZEOF(csv_result) );
StrConcatW ( ADR(devider) , ADR(csv_result) , SIZEOF(csv_result) );
StrConcatW ( ADR(ender) , ADR(csv_result) , SIZEOF(csv_result) );
done := TRUE;
t_state := 0;
END_CASE
результат всего этого в переменной в кодесисе вот такой:
ууу.png
а в экселе вот такой
kkk.png
Проблема в том что он что-то лишнее в конце добавляет.
Гипотетически это конечно может делать функция записи в файл, но другие файлы она ок записывает......
И еще проблема в том, что полученный фал открывает эксель, а ворд, блокнот и другие не открывают.
Вот может подскажете нужное преобразование, а не стринг_встринг.