Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.01.27;
Скачать: [xml.tar.bz2];

Вниз

Не получается писать в файл.   Найти похожие ветки 

 
BigBadMutuh   (2003-01-17 19:04) [0]

Нужно записать в файл большой объём текста (>255 символов). WideString и AnsiString выдают ошибку. Попробовал разбить текст на части:

procedure TMain.HTML1Click(Sender: TObject);
var
C: integer;
F: TFileStream;
S: String;
begin
F:=TFileStream.Create("index.html",fmCreate);
F.Seek(0,soFromBeginning);
S:="Первый кусок текста";
F.Write(S,Length(S));
S:="Второй кусок текста";
F.Write(S,Length(S));
F.Free;
end;

Но даже если записывать только 1 слово, оно пишется в непонятной кодировке.
Вопросы:
1)Как можно записать сразу большой текст, не разбивая его на части?
2)Почему возникает проблема с кодировкой?


 
gsu   (2003-01-17 19:07) [1]

1. F.WriteBuffer(S,SizeOf(s));
2. файл то двоичный


 
gsu   (2003-01-17 19:08) [2]

для строк используй TStringList


 
BigBadMutuh   (2003-01-17 19:17) [3]

А можешь мне в коде исправить? А то я видимо опять что-то не так сделал...не компилится.


 
gsu   (2003-01-17 19:24) [4]

эх, код то правильный, делаешь не то, вот:
begin
var
F: TStringList;
S: String;
begin
F:=TStringList.Create;
S:="1 кусок";
F.Add(S);
S:="2 кусок";
F.Add(S);
f.SaveToFile("D:\index.html");
F.Free;
end;


 
Zmei-Gorin   (2003-01-17 20:00) [5]

и не будет работать...

procedure TMain.HTML1Click(Sender: TObject);
var
C: integer;
F: TFileStream;
S: String;
// для второго способа
i:integer;
begin
F:=TFileStream.Create("index.html",fmCreate);
F.Seek(0,soFromBeginning);
S:="Первый кусок текста";

//первый способ
F.Write(pchar(S),Length(S));

S:="Второй кусок текста";

//второй способ
for i:= 1 to length(s) do
F.Write(S[i],1);
F.Free;
end;



 
gsu   (2003-01-17 20:11) [6]

>> и не будет работать...
Уверен, проверь ка


 
mmm...mmm   (2003-01-17 20:18) [7]

В какой тип файла?
Судя по описанию TXT. А не проще ли обычными Writeln() или BlockWrite()?


 
BigBadMutuh   (2003-01-17 22:07) [8]

файл - index.html (судя по коду).Хотя может и проще, писать сначала в txt, а потом переименовывать его в txt. Правильно так будет?


 
BigBadMutuh   (2003-01-17 22:08) [9]

И ещё : можно ли как то сделать, чтоб не разбивать текст на куски, а то он большой...там кусков 10 будет...


 
TTCustomDelphiMaster   (2003-01-17 22:34) [10]

Все пишется, все работает...
var
F: TextFile;
s: string;
begin
s := StringOfChar("A", 600);
AssignFile(F, "c:\1.html");
Rewrite(F);
Writeln(F, S);
CloseFile(F);
end;


 
BigBadMutuh   (2003-01-17 22:38) [11]

2TTCustomDelphiMaster
Судя по help"у в результате мы получим букву "А" 600 раз. Это несколько не то что мне требуется :).


 
TTCustomDelphiMaster   (2003-01-17 22:41) [12]

В результате мы получим файл в который записана строка длинной 600 символов. Разве не это требуется?


 
BigBadMutuh   (2003-01-17 22:45) [13]

Требуется записать не одинаковые символы, а определённый текст.


 
TTCustomDelphiMaster   (2003-01-17 22:50) [14]

А че трудно присвоить переменной s текст?


 
BigBadMutuh   (2003-01-17 22:55) [15]

В этом случае Дельфя пожалуется, что переменная не может содержать более 255 символов.


 
BigBadMutuh   (2003-01-17 22:57) [16]

gsu, твой код работает, но очень хочется грузить весь текст одним куском.


 
E_Dimon   (2003-01-17 23:21) [17]

>В этом случае Дельфя пожалуется, что переменная не может содержать более 255 символов.
Да по-моему и String подойдет или PChar.

S:=Copy(.......)


 
BigBadMutuh   (2003-01-17 23:34) [18]

Я про стринг и говорю. Он врод не может содержать текст (заисключением одинаковых символов) длиннее чем 255 символов. Пробовал копировать туда больше - Дельфя ругается ;(. Впрочем уже сделал так, как советовал gsu.


 
Eraser@YYY   (2003-01-18 01:07) [19]

Ограничиваются по длине только паскаль-строки. String - логический тип зависит от директивы $H. По умолчанию String это динамически распределяемые масивы символов, тип AnsiString максимальная длина которых ограничивается только наличием памяти.


 
oomneeq   (2003-01-18 03:21) [20]

>Я про стринг и говорю. Он врод не может содержать текст (заисключением одинаковых символов) длиннее чем 255

Это круто!
"заисключением одинаковых символов"
Это круто!

Где такое вычитал?

Я без злобы,
Но почитывай хотя бы хэлп. Это даже быстрей сделать чем в форум вопрос запостить.

Успехов тебе!

но "заисключением одинаковых символов" - Это круто!


 
Юрий Зотов   (2003-01-18 06:46) [21]

> BigBadMutuh

Может... это... лучше книжки почитать, а не спорить? А то Вы тут, извините, ТАКОГО нагородили, что просто смешно. Жванецкий отдыхает.


 
TTCustomDelphiMaster   (2003-01-18 09:24) [22]


> В этом случае Дельфя пожалуется, что переменная не может
> содержать более 255 символов.


Не строковая переменная, а строковая константа. Если ты вставляешь текст в программу то делай так
s := "Строка длинной до 255 символов" + "Строка длинной до 255 символов";
Но лучше не извращайся, а читай из текст из файла.


 
Anatoly Podgoretsky   (2003-01-18 09:39) [23]

Не пора ли временно не "программировать" а заняться чтением книжек, лучше для начального возраста, потом посерьезнее, если пройдешь первый этап.


 
mate   (2003-01-18 10:13) [24]

> s := "Строка длинной до 255 символов" + "Строка длинной до 255 символов";

Ты уверен что это будет работать?
Я делал S:=...+...+..+...
при этом length(...+...+..+...)>>255
а затем
ShellExecute(..,open,Pchar(ss),...)
то появлялась ошибка о размере String не больше 255.


 
TTCustomDelphiMaster   (2003-01-18 10:29) [25]

Ну вы блин даете...


 
BigBadMutuh   (2003-01-18 11:51) [26]


String types
Type Maximum length Memory required Used for
ShortString 255 characters 2 to 256 bytes backward compatibility
AnsiString ~2^31 characters 4 bytes to 2GB 8-bit (ANSI) characters, DBCS ANSI, MBCS ANSI, etc.
WideString ~2^30 characters 4 bytes to 2GB Unicode characters; multi-user servers and multi-language applications
AnsiString, sometimes called the long string, is the preferred type for most purposes.

Вот это написано в help"е. Я это видел и видимо неправильно понял. При попытке использовать String, AnsiString или WideString Delphi очень громко ругалась, что я пытаюсь в неё запихнуть более 255 символов.
А про одинаковые символы я написал имея ввиду вот это
s := StringOfChar("A", 600); .

2AnatolyPodgoretsky
Книжка умная у меня есть. Читаю пока. А вы наверно перед тем как взяться за написание программ прочитали их штук 10. Помоему легче всего понять чтото на практике.


 
Anatoly Podgoretsky   (2003-01-18 12:22) [27]

Методом научного втыка :-)
Ну ну


 
BigBadMutuh   (2003-01-18 13:36) [28]

Без научного втыка никак. Также как и без теории. :)
Ответы на свои вопросы я получил. Прогу доделал. Всем спасибо.


 
gsu   (2003-01-18 13:42) [29]

так какого размера string ?
смотри, а то так и умрешь неучем (-:|~


 
BigBadMutuh   (2003-01-19 23:45) [30]

Умирать мне пока рано...

String это динамически распределяемые масивы символов, тип AnsiString максимальная длина которых ограничивается только наличием памяти.


 
Anatoly Podgoretsky   (2003-01-20 01:21) [31]

А если у тебя 3 гб?


 
diks   (2003-01-20 01:39) [32]

1: Почему тебе из файла не читается?
2: Кусков может и много но надежно!
3:i: TextFile;
s: string;
begin
s := StringOfChar("A", 600);
AssignFile(i, "c:\1.html");
Writeln(i, S);
CloseFile(i);
end;
Да побей ты его!


 
Батник   (2003-01-20 04:48) [33]

Почитай про тип STRING в Delphi - это не то что было в Pascal-e - это тип с управляемым временем жизни.

попробуй
F.Writebuffer(S[1],Length(S));






Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2003.01.27;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.52 MB
Время: 0.057 c
3-86664
775
2003-01-06 17:30
2003.01.27
BLOB has been modified


4-87214
plaha999
2002-12-10 13:35
2003.01.27
Обработка сообщений в HOOKке


6-87001
Maksss
2002-11-28 21:20
2003.01.27
Пример Чата из Delphi5


1-86873
Marsello
2003-01-20 08:37
2003.01.27
Базы данных InterBase


1-86907
cult
2003-01-16 14:25
2003.01.27
Адрес окна по его хэндлу





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский