Чтение данных из текстового файла

Системная платформа - продукт для комплексной автоматизации процессов предприятия от Wonderware.

Чтение данных из текстового файла

Сообщение CalmWhirlpool » Вт июн 24, 2014 11:46 pm

Добрый вечер, Господа!
Задача в общем состоит в следующем:
1. Сохранение параметров переменных в файл.txt (по нажатии пользователем кнопки).
С вопросом записи параметров в файл особых проблем не возникло, использовал System.IO.Streamwriter...
Запись в файл происходит построчно с разделителем "," между переменными :
1,2,3,4,5,6,7,8
9,10,11,12...

2. Считывание параметров и запись в массивы (опять же по нажатии кнопки)...
А вот со считыванием немного заморочился... Дело в том что параметров накапливается около 100 строк и нужно их правильно разобрать...
т.е. считать первую строку, разобрать ее и присвоить значение этих переменных массивам с индексом "1": a[1]=1, b[1]=2, c[1]=3 и т.д....
соответственно для второй строки - a[2]=9, b[2]=10, c[2]=11...
вот тут и состоит проблема (. Не могу правильно разобрать строки...

Буду очень признателен, если приведете пример скрипта, наверняка многие с этим сталкивались...
CalmWhirlpool
 
Сообщения: 13
Зарегистрирован: Чт окт 25, 2012 12:54 am

Re: Чтение данных из текстового файла

Сообщение Steelman63 » Ср июн 25, 2014 12:05 pm

это уже интеллектуальная собственность получается...
такое только за пиво/коньяк (а лучше вместе) :)
Steelman63
 
Сообщения: 313
Зарегистрирован: Ср авг 29, 2012 3:42 pm

Re: Чтение данных из текстового файла

Сообщение Steelman63 » Ср июн 25, 2014 1:19 pm

пример по теме из BTL:

If Me.BTL.Debug Then
LogCustom("BTL Debug", System.String.Format("{0}._BTL.SaveState.Execute script executing", Me.Tagname));
EndIf;

Dim sr as System.IO.StreamReader;
Dim delimStr As String;
Dim delimiter[1] As System.Char;
Dim words As String;
Dim columns[1] As System.String;
Dim saveFile as System.IO.FileInfo;
Me.State.LoadCmd = False;

try
'Determine if we have a valid unc or have to fall back to the default directory
unc = System.String.Format("{0}\{1}_State.txt", saveDir.FullName, Me.Tagname);
saveFile = New System.IO.FileInfo(unc);

If saveDir.Exists And saveFile.Exists Then
sr = System.IO.File.OpenText(unc);
'Read the file until EOF is reached
while sr.Peek() > -1
line = sr.ReadLine();
delimStr = ",";
delimiter[] = delimStr.ToCharArray();
'Convert the Line to columns from the csv line
columns[] = line.Split(delimiter[]);
x.BindTo(System.String.Format("Me.{0}", columns[1])); 'Link to the Attribute
x = columns[2]; 'Set the value on the Attribute
EndWhile;
sr.Close(); 'Close the State file
EndIf;
catch
LogError(System.String.Format("{0}._BTL.SaveState.Execute script: Unexpected error encountered. Error: {1}", Me.Tagname, error.Message));
endtry;
Steelman63
 
Сообщения: 313
Зарегистрирован: Ср авг 29, 2012 3:42 pm

Re: Чтение данных из текстового файла

Сообщение CalmWhirlpool » Ср июн 25, 2014 7:23 pm

Благодарю, попробую разобраться! ))
CalmWhirlpool
 
Сообщения: 13
Зарегистрирован: Чт окт 25, 2012 12:54 am

Re: Чтение данных из текстового файла

Сообщение Steelman63 » Ср июн 25, 2014 8:14 pm

рекомендую начать разбираться с BTL, там многое по скриптам можно почерпнуть :

https://wwresource.wonderware.com/adfs/ls/?wa=wsignin1.0&wreply=https%3a%2f%2fwdnresource.wonderware.com%2ftracking%2f&wct=2014-06-25T13%3a12%3a33Z&wctx=64dd9551-78df-4c0f-a6dd-3ff3ec28ea83

The BTL (Base Template Library) is provided as a free utility for Application Server galaxy designers as a way to increase customer knowledge of best practices and to decrease the time required to get a galaxy functioning properly within customers' environments.
It contains numerous preconfigured Application Server objects that possess the most common functionality galaxy designers build into their solutions. The application includes a User Guide and other important documentation.
After you unzip the file, import the ww.nasc.btl.modeling.aaSLIB custom script file before working with the library.
Steelman63
 
Сообщения: 313
Зарегистрирован: Ср авг 29, 2012 3:42 pm

Re: Чтение данных из текстового файла

Сообщение skom » Чт июн 26, 2014 4:50 pm

Я разбор делал при помощи регулярных выражений, но их надо сначала курить долго и внимательно, чтобы понять как это работает.
skom
 
Сообщения: 173
Зарегистрирован: Вт окт 02, 2007 5:25 pm

Re: Чтение данных из текстового файла

Сообщение CalmWhirlpool » Чт июн 26, 2014 7:09 pm

Не думал, что с чтением файлов будет такая заморочка... На всякий случай выкладываю свои скрипты... В скрипте на чтение пока работает только с одной строкой, разбирает ее и раскидывает по переменным... не получается пока прочитать все строки и раскидать по соответствующим массивам... может кто увидит косяк....
На досуге надо будет, конечно, поподробнее ознакомится с BTL и регулярными выражениями....
P.S. Отдельное спасибо Steelman'у на за пример кода :D


'Запись параметров в текстовый файл
dim sw as System.IO.StreamWriter;

if System.IO.File.Exists("C:\MyFile.txt") then
sw = System.IO.File.AppendText("C:\MyFile.txt");
else
sw = System.IO.File.CreateText("C:\MyFile.txt");
endif;

'sw.WriteLine("БУ| X | Y | k | α | sX | xY | Px | M ");
sw.WriteLine(Me.Current_BlockNr+"/"+Me.Current_X+"/"+Me.Current_Y+"/"+Me.Current_Angle+"/"+Me.Current_Sign_X+"/"+Me.Current_Sign_Y+"/"+Me.Current_Px+"/"+Me.Current_M+"/"+Me.Current_Koef+"/");
sw.Close();



'Чтение параметров из файла
dim sr as System.IO.StreamReader;
dim line as string;
dim delimstr as string;
dim delimetr[1] as System.Char;
dim columns[9] as System.String;
dim i as integer;

'открытие файла
sr = System.IO.File.OpenText("c:\MyFile.txt");

'чтение файла до EOF
while sr.Peek() >-1

line = sr.Readline();

'чтение строки до разделителя "/"
delimstr="/";
delimetr=delimstr.ToCharArray();

'разбиение строки на колонки
columns[]=line.Split(delimetr[]);

for each i in columns[]

Me.Arr_X_FW[StringToIntg(columns[i])] = columns[2];
Me.Arr_Y_FW[StringToIntg(columns[i])] = columns[3];
Me.Arr_Angle[StringToIntg(columns[i])] = columns[4];
Me.Arr_Sign_X[StringToIntg(columns[i])] = columns[5];
Me.Arr_Sign_Y[StringToIntg(columns[i])] = columns[6];
Me.Arr_Px[StringToIntg(columns[i])] = columns[7];
Me.Arr_M[StringToIntg(columns[i])] = columns[8];
Me.Arr_Koef[StringToIntg(columns[i])] = columns[9];

next;
endwhile;
sr.Close();
CalmWhirlpool
 
Сообщения: 13
Зарегистрирован: Чт окт 25, 2012 12:54 am


Вернуться в Wonderware System Platform

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 25