2 / 2 / 1
Регистрация: 24.11.2013
Сообщений: 77
1

Посимвольное считывание из файла в char-массив

05.05.2014, 22:08. Показов 3759. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Делал что-то похожее :
C++
1
2
3
4
5
6
7
8
AnsiString str;
char s[10240];
Form1->Memo1->Lines->LoadFromFile(имя файла);
for(int i=0;i<Form1->Memo1->Lines->Count;i++){
str=Memo1->Lines->Strings[i];
int l=str.Length();
for(int j=0;j<l;j++){
strcpy(s,str.c_str());}}
Но все таки хотелось бы сделать в консольном режиме, а там про Memo даже не слыхали
Должно выйти что-нибудь такое :
C++
1
2
3
4
char a[10240];
FILE *FileIn;
FileIn.fopen(имя файла,rb);
while !eof(FileIn){fread(a,1,1,FileIn);}
Ну и запись в файл тоже надо как-то организовать.

Заранее спасибо
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.05.2014, 22:08
Ответы с готовыми решениями:

Посимвольное считывание с файла и запись в массив
Всем привет, подскажите, правильно ли я выполняю посимвольное(Нужно считывать, не зная заранее...

Посимвольное считывание из файла в массив int
Вообщем есть файл с числами(там всегда будут числа). Примерно такого содержания Нужно по...

Считывание из файла в массив char
Всем привет , нужно считать из файла типа { node: 23421341 node: 234234123 node: 35fsdfsdf0...

Считывание из файла в char' овский массив
Да вопрос боян, но у меня почему-то все символы программа считывает, как один и тот же символ....

11
25 / 25 / 14
Регистрация: 05.05.2014
Сообщений: 115
05.05.2014, 23:09 2
1. Можно выдрать из файла в string, a дальше в массив char:
C++
1
2
3
4
5
6
7
8
9
10
#include <string>
#include <fstream>
 
void main(){
        std::string data = "";              // данные
        std::string file = "output.txt";            // имя файла
        std::ifstream out_file(file);
        out_file >> data;                   // file to string
        out_file.close();
}
2. Запись string в файл:
C++
1
2
3
4
5
6
7
8
9
10
11
#include <string>
#include <fstream>
 
 
void main(){
    std::string data = "asdasdasd";     // данные
    std::string file = "output.txt";            // имя файла
    std::ofstream out_file(file);
    out_file << data;                   // string to file
    out_file.close();
}
0
return (true);
1976 / 1111 / 221
Регистрация: 19.04.2011
Сообщений: 2,345
06.05.2014, 07:58 3
C++
1
2
3
4
5
6
 int fh=FileOpen("èìÿ ôàéëà", fmOpenRead);
 int fsize=FileSeek(fh,0,2);
 char *buffer = new char[fsize];
 FileSeek(fh,0,0);
 FileRead(fh, buffer, fsize);
 FileClose(fh);
Запись аналогично FileWrite()
1
2 / 2 / 1
Регистрация: 24.11.2013
Сообщений: 77
06.05.2014, 17:29  [ТС] 4
srin, файл предположительно будет очень большой, а string ведь не резиновый...
0
1122 / 793 / 101
Регистрация: 01.02.2011
Сообщений: 1,874
Записей в блоге: 1
06.05.2014, 17:38 5
prog63 Насколько файл большой и какие действия будут предприниматься с прочитанным буфером?
0
2 / 2 / 1
Регистрация: 24.11.2013
Сообщений: 77
06.05.2014, 18:16  [ТС] 6
kzru_hunter, файл может быть больше 30 мб
операции с буфером: поиск и замена символов, копирование в другие массивы, проверка совпадения(вхождения другого массива в буфер), запись в файл и многое другое
0
1122 / 793 / 101
Регистрация: 01.02.2011
Сообщений: 1,874
Записей в блоге: 1
06.05.2014, 18:45 7
Цитата Сообщение от prog63 Посмотреть сообщение
проверка совпадения(вхождения другого массива в буфер)
ну тут по-моему только с помощью отображения файла на память; вприципе не сложно, нужно использовать функци CreateFileMapping, MapViewOfFile, UnMapViewOfFile, CloseHandle (описание на msdn'е)

Цитата Сообщение от prog63 Посмотреть сообщение
поиск и замена символов
замена на то же кол-во символов? если нет, то тут я затрудняюсь чего либо советовать.
0
2 / 2 / 1
Регистрация: 24.11.2013
Сообщений: 77
08.05.2014, 08:56  [ТС] 8
Цитата Сообщение от mimicria Посмотреть сообщение
Запись аналогично FileWrite()
С записью тоже проблемы...
C++
1
2
3
4
5
int FileOut=FileOpen(FileOutName,fmOpenWrite);
int foutsize=FileSeek(FileOut,0,2);
FileSeek(FileOut,0,0);
FileWrite(FileOut, buffer, foutsize);
FileClose(FileOut);
Такой код файл просто не создает
0
return (true);
1976 / 1111 / 221
Регистрация: 19.04.2011
Сообщений: 2,345
08.05.2014, 09:15 9
C++
1
2
3
4
int FileOut=FileCreate(FileOutName);
// bufsize вы должны вычислить до этого, это размер буфера записи, а не созданного пустого файла
FileWrite(FileOut, buffer, bufsize);
FileClose(FileOut);
0
2 / 2 / 1
Регистрация: 24.11.2013
Сообщений: 77
08.05.2014, 19:28  [ТС] 10
Цитата Сообщение от mimicria Посмотреть сообщение
bufsize вы должны вычислить до этого, это размер буфера записи, а не созданного пустого файла
Точно.

Добавлено через 2 часа 56 минут
Цитата Сообщение от mimicria Посмотреть сообщение
int FileOut=FileCreate(FileOutName);
// bufsize вы должны вычислить до этого, это размер буфера записи, а не созданного пустого файла
FileWrite(FileOut, buffer, bufsize);
FileClose(FileOut);
Есть одна проблема: что бы я не ложил в ячейки массива ('\n' , '\r' , '\n\r' , '\r\n' или '0'), никаких отдельных строк в файле не наблюдается- т.е. символ перевода строки просто игнорируется.
В чем проблема ?
0
return (true);
1976 / 1111 / 221
Регистрация: 19.04.2011
Сообщений: 2,345
08.05.2014, 19:46 11
Там всё остальное текстовые данные?
Может тогда нет смысла заморачиваться с массивом байт и пользоваться строками?
0
2 / 2 / 1
Регистрация: 24.11.2013
Сообщений: 77
08.05.2014, 21:44  [ТС] 12
Такой код тоже не помог :
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
if (FileExists(FileOutName)){std:remove(FileOutName);}
ofstream FileOutCL(FileOutName);FileOutCL.close();
ofstream FileOutACL;
int regold=0;
for (int reg=0;reg<=finsize;reg++){if ((int)BufferIn[reg]==10){
char* BufferOut=new char[reg-regold-1];
for(int reg2=0;reg2<reg;reg2++){BufferOut[reg2]=BufferIn[reg2+regold];}
FileOutACL.open(FileOutName,ios::app);FileOutACL<<"\n";FileOutACL.close();
int FileOut=FileCreate(FileOutName);
FileWrite(FileOut, BufferOut, reg-regold-1);
FileClose(FileOut);
regold+=reg+1;
}}
Добавлено через 2 минуты
Цитата Сообщение от mimicria Посмотреть сообщение
Там всё остальное текстовые данные?
Может тогда нет смысла заморачиваться с массивом байт и пользоваться строками?
Во первых, строки работают медленнее, чем массивы.
Во вторых, для последующих операций потребуется именно массив.
В третьих, строки не резиновые
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.05.2014, 21:44
Помогаю со студенческими работами здесь

Посимвольное считывание файла
Как считать файл посимвольно? Файл состоит из 1-й строки и включает в себя цифры разделённые...

Посимвольное считывание из файла
Сообствено, задание: посимвольно считать данные из файла f и записать их также посимвольно в файл...

Посимвольное считывание из файла
Добрый вечер уважаемые формучане. Помогите найти ошибку в коде программы, реализующей алгоритм...

Посимвольное считывание из файла.
Как по символьно считывать данные из файла? Добавлено через 32 минуты или это сделать не...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru