Имя пользователя:
Пароль:
 | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - [решено] Работа с строками

Ответить
Настройки темы
C/C++ - [решено] Работа с строками

Аватара для crashtuak

Старожил


Сообщения: 467
Благодарности: 25


Конфигурация

Профиль | Отправить PM | Цитировать


Такая вот проблема: Надо работать с строками, например получить переменную INI = GetCurrentDir()+"\ini\options.ini"- так я делал в Visual Basic ("GetCurrentDir()" - получаем путь к ехе нашей программы, "\ini\options.ini" - кусок недостающего пути к ini файлу, тоесть наш ini файл лежал в папке ini, которая в свою очередь лежала возле нашей программы, а в переменной INI мы получали полный путь "C:\myprog\ini\options.ini"). Но в с++ так делать нельзя. Подскажите, пожалуйста, как решить мой вопрос.

Отправлено: 11:18, 24-03-2009

 

Аватара для crashtuak

Старожил


Сообщения: 467
Благодарности: 25

Профиль | Отправить PM | Цитировать


Delirium, я же С++ учу два дня. Огромное спасибо, а то я бы долго свой способ реализовывал

-------
Мне надо не так много "Полезных сообщений", чтоб сровнять их количество с моими постами :).


Отправлено: 08:25, 25-03-2009 | #11



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

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


Аватара для crashtuak

Старожил


Сообщения: 467
Благодарности: 25

Профиль | Отправить PM | Цитировать


Цитата Delirium:
что то мудрите вы сильно...
что мешает написать
Код:
string mystring = @"C:\temp";
знак @ показывает, что это символьная переменная и можно использовать одиночные слеши.
Также есть функция Replace.
Код:
string mystring = "C:\temp";
mystring.Replace("\\", "\\\\");
на выходе получим C:\\temp »
Ех, можна вопросик? К в AnsiString С++ билдере Replace неработает. Как быть то?

-------
Мне надо не так много "Полезных сообщений", чтоб сровнять их количество с моими постами :).


Отправлено: 09:28, 25-03-2009 | #12


Аватара для crashtuak

Старожил


Сообщения: 467
Благодарности: 25

Профиль | Отправить PM | Цитировать


Блин, вот код:
Код: Выделить весь код
void  RunWait(AnsiString EXEFILE);
void  RunWait(AnsiString EXEFILE)
{
char* command = EXEFILE.c_str();
STARTUPINFO si;
PROCESS_INFORMATION pi;
ZeroMemory( &si, sizeof(si) );
si.cb = sizeof(si);
ZeroMemory( &pi, sizeof(pi) );
if(CreateProcess(NULL, command, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi))
{
WaitForSingleObject(pi.hProcess, INFINITE);
}
CloseHandle( pi.hProcess );
CloseHandle( pi.hThread  );
}
void __fastcall TForm1::Button1Click(TObject *Sender)
{
AnsiString exec=GetCurrentDir()+"\ShowCmdParam.exe /param1 /param2";
exec=AnsiReplaceStr(exec, "\\", "\\\\");
Label1->Caption= exec;
RunWait("E:\\DPSelecter\\Debug\\ShowCmdParam.exe /sdasf /asfsdgfrdg");
}
ShowCmdParam с ключами /param1 /param2 не запускается, тоесть AnsiReplaceStr(exec, "\\", "\\\\") бестолку, и без AnsiReplaceStr(exec, "\\", "\\\\") не запускается ShowCmdParam с ключами /param1 /param2. ShowCmdParam с ключами /sdasf /asfsdgfrdg запускается нормально. Как же все таки запустить AnsiString, который включает в себя GetCurrentDir() и тому подобное (ну переменные с текстом и тд)? Помогите пожалуйста!!!!!!!!!!!!!!

-------
Мне надо не так много "Полезных сообщений", чтоб сровнять их количество с моими постами :).


Отправлено: 10:24, 25-03-2009 | #13


Ветеран


Сообщения: 3806
Благодарности: 824

Профиль | Отправить PM | Цитировать


Цитата Delirium:
что то мудрите вы сильно... »
а сам?! - Надо вникнуть в вопрос, а не давать рецепты не разобравшись.

crashtuak, не нужно вам ничего подменять - литералы со слэшем имеют особое значение только в коде программы - в памяти строки хранятся в обычном виде (без всяких удвоений \). Т.е. часть пути, которую указываете в коде явно "\ini\options.ini" надо набрать с двойным слэшем, а результаты работы функций никак преобразовывать не надо.

Отправлено: 10:42, 25-03-2009 | #14


Аватара для crashtuak

Старожил


Сообщения: 467
Благодарности: 25

Профиль | Отправить PM | Цитировать


Busla, спасибо, наконец то нубу сказали что сделать! . А я то ломаю голову, уже запарился блин. Большое спасибо, все работает.

Цитата Busla:
Цитата Delirium:
что то мудрите вы сильно... »
а сам?! - Надо вникнуть в вопрос, а не давать рецепты не разобравшись. »
Busla, в том что Delirium "намудрил", виноват я, потому что он не знал, что строки с слэшел нужны мне для CreateProcess, а есле бы он знал, то возможно посоветовал бы что то другое.

-------
Мне надо не так много "Полезных сообщений", чтоб сровнять их количество с моими постами :).


Последний раз редактировалось crashtuak, 25-03-2009 в 11:46.


Отправлено: 11:29, 25-03-2009 | #15

pva pva вне форума

Аватара для pva

Ветеран


Сообщения: 1180
Благодарности: 279

Профиль | Отправить PM | Цитировать


Цитата Delirium:
что мешает написать
Код: Выделить весь код
string mystring = @"C:\temp"; »
Это на каком языке и каким компилятором? я удивился записи, собрал билдером
Код: Выделить весь код
#include <string>
using namespace std;

int main()
{
    string s1 = @"c:\temp";

    return s1.size();
}
тот утверждает что я ошибаюсь:
Код: Выделить весь код
D:\temp\3>bcc32 1.cpp
Borland C++ 5.6 for Win32 Copyright (c) 1993, 2002 Borland
1.cpp:
Error E2206 1.cpp 6: Illegal character '@' (0x40) in function main()
*** 1 errors in Compile ***
Это сообщение посчитали полезным следующие участники:

Отправлено: 19:02, 25-03-2009 | #16


Аватара для Delirium

Ветеран


Сообщения: 5624
Благодарности: 936

Профиль | Отправить PM | Цитировать


Цитата pva:
Это на каком языке и каким компилятором? я удивился записи, собрал билдером »
C#, .NET Framework. Пользуюсь этим постоянно.

Согласен, я предложил неверный для crashtuak вариант. Я подумал, что ему просто надо строку получить с 2-мя слешами, а не то, что он пытается запустить команду в преобразованной строке.

-------

Пройденные курсы:
[Microsoft №10174 Sharepoint], [SharePoint]
Мои проекты:[CheckAdmins], [NetSend7], [System Uptime], [Remote RAdmin LogViewer],[Netdom GDI], [Holidays - напоминалка о днях рождения]

А я офис-гуру :)


Отправлено: 01:21, 26-03-2009 | #17



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - [решено] Работа с строками

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
StringRegExp - как получить содержимое между 2-мя строками evg64 AutoIt 2 05-12-2009 01:19
Какое событие соответствует перемещению между строками ListView malev AutoIt 2 22-10-2009 15:32
Разное - [решено] Работа программ. 8Toxa8 Microsoft Windows 2000/XP 2 20-06-2008 23:58
CMD/BAT - [решено] Работа со строками в cmd-файлах melato Скриптовые языки администрирования Windows 3 30-01-2007 08:52
Помогите разобратся со строками в С++ Guest Программирование и базы данных 12 22-05-2004 04:49




 
Переход