![]() |
|
|
#1
|
|||
|
|||
|
У меня вопрос есть .txt файл пример содержимого:
Код:
aaa:bbb ccc:ddd eee:fff логин:пароль Нужно на дельфи (при нажатии на кнопку) чтобы данные заносились в combobox (скорее всего циклом for) как 'ААА - BBB' (Где AAA - login, BBB - пароль, в .txt логин:пароль) т.е. цикл for берёт данные разделяет их и записывает. Огромное спасибо тому, кто поможет. |
|
#2
|
|||
|
|||
|
можно структуры использовать или для текстов TStrings, TStringList
Последний раз редактировалось beavi5, 28.04.2010 в 19:51. |
|
#3
|
|||
|
|||
|
Код:
procedure ParseTextFile(AFileName : String; ACombo : TComboBox);
var
I : Integer;
Buf : String;
Lst : TStringList;
begin
If ACombo = Nil Then Raise Exception.Create('No ComboBox passed.');
If Not FileExists(AFileName) Then Raise Exception.Create('File doesn''t exists!');
ACombo.Items.Clear;
Lst := TStringList.Create;
Try
Lst.LoadFromFile(AFileName);
For I := 0 to Lst.Count-1 Do
Begin
If Pos(':',Lst[i]) <> 0
Then
Begin
Buf := StringReplace(Lst[i],':',' - ',[]);
ACombo.Items.Add(Buf);
End
Else
ShowMessage(Format('Skipped line %d : %s',[I,Lst[i]]));
End;
Finally
Lst.Free;
End;
end;1. Сделано только простое преобразование строки. Без разбора. Если нужен именно разбор, то то место, где StringRelpace надо заменить на что-то типа: Код:
var
SepPos : Integer;
UserName, Password : String;
begin
SepPos := Pos(':',Lst[i]);
UserName := Copy(Lst[i],1,SepPos-1);
Passwrod := Copy(Lst[i],SepPos+1,Length(Lst[i])-SepPos+1);
end;2. A вообще, такие вещи лучше хранить в xml. И читать удобнее (глазами), и править руками и парсить проще (исп. компонент TXMLDocument). |
|
#4
|
|||
|
|||
|
Быть может не в тему но всё же спрошу:
Как написать в .dll (Delphi 7, DLL Wizard) функцию, которая будет возвращать в программу StringsList (точнее itemы в comboBox), а программа просто будет вызывать функцию с параметром ? В .dll пишу функцию по аналогу: Код:
function additemsf(ACombo : TComboBox) : TStringList; cdecl;
var
I : Integer;
Buf : String;
Lst : TStringList;
begin
ACombo.Items.Clear;
Lst := TStringList.Create;
Lst.Add('MyItem1');
Lst.Add('MyItem2');
Try
For I := 0 to Lst.Count-1 Do
Begin
ACombo.Items.Add(Lst[i]);
End;
Finally
Lst.Free;
End;
end;additemsf(ComboBox1); |
|
#5
|
|||
|
|||
|
Ну так и писать. просто пометь ее как export. ну и в секции экспорта укажи. со строками можно обойтись только этим.
|
|
#6
|
|||
|
|||
|
На то что я написал выше выдаёт ошибку из-за ACombo : TComboBox, не подскажете как поправить ?
|
|
#7
|
|||
|
|||
|
Проблема решена.
|