Страница 2 из 2 ПерваяПервая 12
Показано с 11 по 15 из 15

Тема: CSV памагити

  1. #11
    Супер Модератор Аватар для Евгений Кислов
    Регистрация
    27.01.2015
    Адрес
    Москва
    Сообщений
    12,060

    По умолчанию

    После того, как сформируете csv_result - скопируйте его в ARRAY [0...10000] OF WORD и посмотрите содержимое.
    Это должно прояснить ситуацию - отследите, что находится после символов вашей строки в буфере в этот момент.

  2. #12

    По умолчанию

    Цитата Сообщение от Евгений Кислов Посмотреть сообщение
    После того, как сформируете csv_result - скоруйте его в ARRAY [0...10000] OF WORD и посмотрите содержимое.
    Это должно прояснить ситуацию - отследите, что находится после символов вашей строки в буфере в этот момент.
    Сейчас сделаю

    А вот эта конструукция csv_result := OSU.CP1251_TO_UNICODE(' Перемещение,Давление,Усилие$N');
    будет нормально работать? меня немного смущает $N

  3. #13
    Супер Модератор Аватар для Евгений Кислов
    Регистрация
    27.01.2015
    Адрес
    Москва
    Сообщений
    12,060

    По умолчанию

    Цитата Сообщение от Raikkonen Посмотреть сообщение
    Сейчас сделаю

    А вот эта конструукция csv_result := OSU.CP1251_TO_UNICODE(' Перемещение,Давление,Усилие$N');
    будет нормально работать? меня немного смущает $N
    Да, нормально.

  4. #14

    По умолчанию

    sss.png

    Вот такой вот текст.
    Первый NUL является 60 символом, и в массиве WORD там реально 0
    Второй NUL является 80 символом и массиве WORD там тоже 0

    НО после 80 символа еще есть значения, которые неизвестно откуда берутся, но уже не отображаются.
    Похоже сейчас буду считать длину........


    ЛЮБОПЫТНЫЙ ФАКТ!!! после 80 символа 0 идут 17 19 0

    Пошел писать прогу с подсчетом длины
    Последний раз редактировалось Raikkonen; 06.12.2021 в 14:30.

  5. #15

    По умолчанию

    Сейчас ФБ выглядит вот так


    Код:
    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);
    	csv_lenght: DINT;
    END_VAR
    VAR
    	t_state: INT;
    	run: R_TRIG;
    	i: INT;
    	t_wstring: WSTRING;
    END_VAR
    VAR CONSTANT
    	devider: WSTRING := ",";
    	new_liner: WSTRING := "$N";
    END_VAR
    
    run(CLK:=made);
    
    CASE t_state OF
    	
    	0: //======================================= wait for execute =====
    		IF run.Q THEN
    			t_state := 1;
    			done := FALSE;
    			csv_result := OSU.CP1251_TO_UNICODE(' Перемещение,Давление,Усилие$N');
    			csv_result[0] := 16#FEFF;
    			csv_lenght := StrLenW(ADR(csv_result));
    		END_IF
    
    		
    	1: //======================================= create file =====
    		FOR i:=0 TO file_data^.table_point DO
    			
    			t_wstring := OSU.CP1251_TO_UNICODE( OSU.REAL_TO_STRING_FORMAT(file_data^.table[i].len, 3, OSU.DOT) );
    			StrConcatW ( ADR(t_wstring) , ADR(csv_result) , SIZEOF(csv_result) );
    			StrConcatW ( ADR(devider) , ADR(csv_result) , SIZEOF(csv_result) );
    			csv_lenght := csv_lenght + StrLenW(ADR(t_wstring)) + 1;
    			
    			t_wstring := OSU.CP1251_TO_UNICODE( OSU.REAL_TO_STRING_FORMAT(file_data^.table[i].pres, 1, OSU.DOT) );
    			StrConcatW ( ADR(t_wstring) , ADR(csv_result) , SIZEOF(csv_result) );
    			StrConcatW ( ADR(devider) , ADR(csv_result) , SIZEOF(csv_result) );
    			csv_lenght := csv_lenght + StrLenW(ADR(t_wstring)) + 1;
    			
    			t_wstring := OSU.CP1251_TO_UNICODE( OSU.REAL_TO_STRING_FORMAT(file_data^.table[i].force, 0, OSU.DOT) );
    			StrConcatW ( ADR(t_wstring) , ADR(csv_result) , SIZEOF(csv_result) );
    			csv_lenght := csv_lenght + StrLenW(ADR(t_wstring));
    			
    			StrConcatW ( ADR(new_liner) , ADR(csv_result) , SIZEOF(csv_result) );
    			csv_lenght := csv_lenght + 1;
    		END_FOR
    		t_state := 2;
    
    
    	2: //======================================= write to buffer =====
    		t_wstring := " , , ,$N";
    		StrConcatW ( ADR(t_wstring) , ADR(csv_result) , SIZEOF(csv_result) );
    		csv_lenght := csv_lenght + StrLenW(ADR(t_wstring));
    		
    		t_wstring := OSU.CP1251_TO_UNICODE( OSU.REAL_TO_STRING_FORMAT(file_data^.result_Lenght, 3, OSU.DOT) );
    		StrConcatW ( ADR(t_wstring) , ADR(csv_result) , SIZEOF(csv_result) );
    		StrConcatW ( ADR(devider) , ADR(csv_result) , SIZEOF(csv_result) );
    		csv_lenght := csv_lenght + StrLenW(ADR(t_wstring)) + 1;
    			
    		t_wstring := OSU.CP1251_TO_UNICODE( OSU.REAL_TO_STRING_FORMAT(file_data^.result_Preasure, 1, OSU.DOT) );
    		StrConcatW ( ADR(t_wstring) , ADR(csv_result) , SIZEOF(csv_result) );
    		StrConcatW ( ADR(devider) , ADR(csv_result) , SIZEOF(csv_result) );
    		csv_lenght := csv_lenght + StrLenW(ADR(t_wstring)) + 1;
    			
    		t_wstring := OSU.CP1251_TO_UNICODE( OSU.REAL_TO_STRING_FORMAT(file_data^.result_Force, 0, OSU.DOT) );
    		StrConcatW ( ADR(t_wstring) , ADR(csv_result) , SIZEOF(csv_result) );
    		csv_lenght := csv_lenght + StrLenW(ADR(t_wstring));
    		
    		csv_result[csv_lenght] := 16#0000;
    		csv_lenght := csv_lenght + 1;
    		
    		done := TRUE;
    		t_state := 0;
    		
    END_CASE

    и работает на 6+ !!!
    спасибо большое!!!
    глядишь еще и эффективнее работает, потому что теперь в файл записывается известный размер

Страница 2 из 2 ПерваяПервая 12

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •