Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.09.2013, 22:21   #1
Lana21
Пользователь
 
Аватар для Lana21
 
Регистрация: 10.09.2013
Сообщений: 11
По умолчанию Текстовый файл. Что я делаю не так?

Здравствуйте.
У меня вот такой код, который должен записывать строку в текстовый файл:
Код:
var
S : TStrings;
begin
S := TStringList.Create();
S.LoadFromFile('Filename.txt');
S.Strings[1] := 'Test';
S.Add('Test');
S.SaveToFile('Filename.txt');
S.Free; 
end;
Однако, когда я пытаюсь этот код запустить, вылетает следующее сообщение об ошибке:
Цитата:
List index out of bounds(1)
Вопрос: что я делаю не так?
Lana21 вне форума Ответить с цитированием
Старый 21.09.2013, 22:24   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

S.Strings[1] := 'Test'; заменяет содержимое второй строки. Если строк меньше 2-х, то и будет List index out of bounds(1)
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 21.09.2013, 22:32   #3
kta87
Форумчанин
 
Аватар для kta87
 
Регистрация: 22.02.2010
Сообщений: 912
По умолчанию

Filename.txt - должен быть хотя бы из 2 строк. Нумерация строк в TStringList начинается с нуля, т.е. заменяя верхнюю строку нужно
Код:
S.Strings[0] := 'Test';
kta87 вне форума Ответить с цитированием
Старый 21.09.2013, 22:41   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

S.Strings[0] := 'Test'; - тоже возможна ошибка, если изначально файл пустой (имеет нулевую длину). Лучше Add('Test'); Предварительно удалить все строки, если нужно
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 22.09.2013, 09:07   #5
kta87
Форумчанин
 
Аватар для kta87
 
Регистрация: 22.02.2010
Сообщений: 912
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
S.Strings[0] := 'Test'; - тоже возможна ошибка
Конечно возможна, причем та же как у ТС в пером посте, но я же написал что бы не допускали загрузки из пустого файла, тогда все будет нормально.
kta87 вне форума Ответить с цитированием
Старый 22.09.2013, 17:53   #6
Lana21
Пользователь
 
Аватар для Lana21
 
Регистрация: 10.09.2013
Сообщений: 11
По умолчанию

Спасибо, разобралась, надо было просто в текстовом файле создать строки.

А вот еще проблема:
Вот этот код, должен записывать значение переменной в текстовый файл:
Код:
var
F : TStrings;
begin
IndStr := IndStr + 1;{IndStr и IndKey это глобальные переменные, объявленные в разделе public}
F := TStringList.Create();
F.LoadFromFile('Prey.txt');
F.Strings[IndStr] := IndKey;
F.Add(IndKey);
F.SaveToFile('Prey.txt');
F.Free;
end;
Однако, когда я его запускаю, ничего не происходит. Что я делаю не так?
Lana21 вне форума Ответить с цитированием
Старый 22.09.2013, 19:10   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

скорее всего происходит. только файл Prey.txt находится там, где находится рабочий каталог программы, а не там, где Вы его ожидаете увидеть.
Используйте ПОЛНЫЙ путь к тестовому файлу...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 22.09.2013, 22:36   #8
саша40
Участник клуба
 
Регистрация: 12.09.2012
Сообщений: 1,030
По умолчанию

Prey может создатся не только в рабочем котологе(полный путь до него: ExtractFilePath(ParamStr(0)), а даже в папке Windows , лучше использовать полный путь.
Что нужно программисту: Компьютер, Среда программирование, Воображение, Прямые руки, Мозги, Знания этой среды программирования.
Программист-это профессия, а программирование-это моё хобби.
саша40 вне форума Ответить с цитированием
Старый 22.09.2013, 22:44   #9
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
может создатся не только в рабочем котологе(полный путь до него: ExtractFilePath(ParamStr(0))
Каталог екзешника далеко не всегда рабочий
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 22.09.2013, 23:18   #10
Lana21
Пользователь
 
Аватар для Lana21
 
Регистрация: 10.09.2013
Сообщений: 11
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
скорее всего происходит. только файл Prey.txt находится там, где находится рабочий каталог программы, а не там, где Вы его ожидаете увидеть.
Используйте ПОЛНЫЙ путь к тестовому файлу...
Цитата:
Сообщение от саша40 Посмотреть сообщение
Prey может создатся не только в рабочем котологе(полный путь до него: ExtractFilePath(ParamStr(0)), а даже в папке Windows , лучше использовать полный путь.
Текстовый файл у меня лежит в одном каталоге с проектом Delphi, там же, куда сохраняется и .exe при компилировании. Я так уже делала и все работало, так что дело не в этом.
Lana21 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Что не так делаю? ratqa Общие вопросы C/C++ 2 13.12.2012 16:54
Что не так я делаю? volha_alina Паскаль, Turbo Pascal, PascalABC.NET 2 23.05.2012 13:05
Что я делаю не так rj-45 Microsoft Office Excel 7 22.11.2011 10:21
Что не так делаю? L6go1as Общие вопросы C/C++ 5 28.10.2011 07:54
Объсните что не так делаю Crudelis Общие вопросы C/C++ 4 10.06.2010 00:26