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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.04.2011, 23:49   #1
Crabobass
Пользователь
 
Регистрация: 06.03.2011
Сообщений: 23
По умолчанию question TfileStream

Код:
var
    f:TFileStream;
    a:array [0..14] of Integer;
    stch,stnech:string;
    i,ch,nech:integer;
begin
    ch:=0;
    nech:=0;
     For i:=0 to 14 do
      begin
        randomize;
        a[i]:=random(50);
      end;
     For i:=0 to 14 do
      begin
      if odd(a[i])=true then
      nech:=nech+1;
      if odd(a[i])=false then
      ch:=ch+1;
      end;
      stch:=('Number of even elements ='+inttostr(ch));
    stnech:=('Number of odd elements ='+inttostr(nech));
    f:=TFileStream.create('D:\Programms\Laba4(stream)\file.txt',FmCreate or FmOpenwrite);
    f.Position:=0;
    f.Write(stch,sizeof(stch));
    f.Free;
end;
в файл записывается вот такая вот абракадабра: ЊF#

что не так?
Crabobass вне форума Ответить с цитированием
Старый 02.04.2011, 23:54   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

строки так не пишут.
надо писать так:
Код:
Stream.Write(String[1],Length(String)*SizeOf(Char));
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 02.04.2011, 23:58   #3
Crabobass
Пользователь
 
Регистрация: 06.03.2011
Сообщений: 23
По умолчанию

Благодарю. Теперь всё ок.
Crabobass вне форума Ответить с цитированием
Старый 03.04.2011, 00:05   #4
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Потому что ты записываешь не текст а поток.
И читать его надо тоже как поток.

Если нужен текст то TStringList
Человек_Борща вне форума Ответить с цитированием
Старый 03.04.2011, 00:29   #5
Crabobass
Пользователь
 
Регистрация: 06.03.2011
Сообщений: 23
По умолчанию

Спасибо, теперь понятно.
Crabobass вне форума Ответить с цитированием
Старый 03.04.2011, 00:33   #6
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

стоп, уточнение не совсем верное, то что поток ничего не меняет.

главное то что у вас строка(причем не константа) а строки как и объекты хранятся указателями, его вы и записывали в файл.

просто Write/WriteLn смотрят что вы передали string как параметр(и далее по сути пишут так как я сказал, ну WriteLn еще и конец строки пишет)

TStringList тоже не панацея.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 03.04.2011, 00:42   #7
chertovich
Форумчанин
 
Аватар для chertovich
 
Регистрация: 26.07.2009
Сообщений: 489
По умолчанию

Правильно было сказано, а я добавлю, что при операциях с массивами (а строка это массив символов) нужно указывать начальный элемент, для строки это Str[1], для других массивов (обычно с 0) Buff[0]
Если в глубине души вы программист, то, следуя своим наклонностям, вы захотите написать кусок кода.
chertovich вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Question Damien_kz БД в Delphi 2 11.02.2011 21:14
Question about RSS Gauss PHP 1 14.12.2010 23:55
Not hard question hunter_92 Общие вопросы C/C++ 1 03.04.2010 18:30
Lookup Question london735 Microsoft Office Excel 5 26.10.2009 08:18
MS Visio VBA question to profesional rawas Microsoft Office Excel 4 17.03.2009 16:56