удаление лишнего пробелма в строке
|
Квазимодо |
Отправлено: Четверг, 12 Февраля 2009, 15:50 |
Участник
Группа: Участник
Сообщений: 162
Регистрация: 25.11.2003
Пользователь №: 6223
|
Хорошо, немного поправим этот if, в котором все крутится: Код if(length>49) { printf("\nERROR!"); return 0; } else { strncpy(buf,str,49); int j=0; for (i=0;i<length;i++) { if ((str[i]==' ')&&(str[i+1]==' ')) { offset=length-(i+1); if (i==0) {j++; offset--;}; printf("\noffset->%d",offset); strncpy(buf+i+1-j,str+i+2,offset); j++; } offset=0; }
(переменная j подсчитывает количество обнаруженных двойных пробелов). Ты просто начало буфера каждый раз затираешь. P.S. В следующий раз, когда пришлешь программу, пожалуйста, выделяй код тегом - тут же кнопка "Код" есть. А то воспринимается как-то не очень. |
|
Форум: Программирование
· Просмотр сообщения: #90894
· Ответов: 7
· Просмотров: 17718
|
удаление лишнего пробелма в строке
|
Квазимодо |
Отправлено: Вторник, 10 Февраля 2009, 17:45 |
Участник
Группа: Участник
Сообщений: 162
Регистрация: 25.11.2003
Пользователь №: 6223
|
shplint, что-то не соображу, что эта программа должна делать - удалять пробелы из строк (т.е. чтобы они оставались по одному)? Если да, то ты в Код strncpy(buf,str,offset); копируешь в выходной буфер (buf) не хвост, а голову строки. А на хвост у тебя будет указывать str+i+2. |
|
Форум: Программирование
· Просмотр сообщения: #90853
· Ответов: 7
· Просмотров: 17718
|
Пролема с кодом
|
Квазимодо |
Отправлено: Пятница, 17 Октября 2008, 8:49 |
Участник
Группа: Участник
Сообщений: 162
Регистрация: 25.11.2003
Пользователь №: 6223
|
Ошибки в линковке пошли... Тогда напиши, pls, на какой ящик тебе прислать версии файлов psapi.h и psapi.lib из Platform SDK для Windows 2003 (.h запишешь в Include, а .lib - в Lib). Насколько я понимаю, у тебя Visual C++. Значит, придется зайти в меню Project -> Settings -> Link - там в Project Options указаны подключенные библиотеки (*.lib). Добавишь в этот список еще и psapi.lib. |
|
Форум: Программирование
· Просмотр сообщения: #89983
· Ответов: 6
· Просмотров: 17436
|
Пролема с кодом
|
Квазимодо |
Отправлено: Четверг, 16 Октября 2008, 14:37 |
Участник
Группа: Участник
Сообщений: 162
Регистрация: 25.11.2003
Пользователь №: 6223
|
Да, функция вернет названия (без путей). Но она, опять-таки, определена в psapi.h. Обычно этот файл есть в MS Platform SDK, но у тебя, как я понял, его нет, так что текст psapi.h можешь получить хотя бы здесь и записать его в директорию Include своего компилятора. |
|
Форум: Программирование
· Просмотр сообщения: #89977
· Ответов: 6
· Просмотров: 17436
|
Пролема с кодом
|
Квазимодо |
Отправлено: Четверг, 16 Октября 2008, 9:17 |
Участник
Группа: Участник
Сообщений: 162
Регистрация: 25.11.2003
Пользователь №: 6223
|
shplint, 1. Функции EnumProcesses, EnumProcessModules и GetModuleFileNameEx (а не GetModuleFileEx) определены в инклюде psapi.h, который у тебя не подключен. 2. С этим кодом очень возможно получить Access Violation - память под массивы PidProcess, hProc вообще не выделяется. |
|
Форум: Программирование
· Просмотр сообщения: #89972
· Ответов: 6
· Просмотров: 17436
|
Помогите с формулой
|
Квазимодо |
Отправлено: Четверг, 16 Октября 2008, 8:53 |
Участник
Группа: Участник
Сообщений: 162
Регистрация: 25.11.2003
Пользователь №: 6223
|
J.L., судя по объединенной формуле, у тебя второе условие (J4="Б") проверяется, только когда J4="А", но K4 не равно ни "Ш", ни "Л", т.е. оно не может быть верным. А чтобы оно проверялось, придется вставить условие у2 перед последней закрывающей скобкой в у1 - что-то вроде:
=ЕСЛИ(J4="А";ЕСЛИ(K4="Ш";L4-(L4*2);ЕСЛИ(K4="Л";L4+(L4*2)));ЕСЛИ(J4="Б";ЕСЛИ(K4="Ш";L4-(L4*4);ЕСЛИ(K4="Л";L4+(L4*2))))). |
|
Форум: Microsoft/Office Excel
· Просмотр сообщения: #89970
· Ответов: 2
· Просмотров: 6189
|
Проблема с "диспетчером задач"
|
Квазимодо |
Отправлено: Четверг, 25 Сентября 2008, 9:34 |
Участник
Группа: Участник
Сообщений: 162
Регистрация: 25.11.2003
Пользователь №: 6223
|
В реестре (HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\System, параметр DisableTaskMgr), случайно, не стоит 1? |
|
Форум: Microsoft Windows XP
· Просмотр сообщения: #89768
· Ответов: 11
· Просмотров: 12133
|
Помогите (пожалуйста) связать файлы в папке с их ж
|
Квазимодо |
Отправлено: Четверг, 25 Сентября 2008, 9:13 |
Участник
Группа: Участник
Сообщений: 162
Регистрация: 25.11.2003
Пользователь №: 6223
|
Попробуем уточнить. Значит, есть какой-то лист в книге, а в нем должен быть столбец с гиперссылками на файлы с документами (в тексте гиперссылки - только название, т.е. штамповый код, но в адресе, конечно, полный путь). Файлы раскиданы по разным папкам на диске (т.е. хорошо бы сделать окно, в котором можно выбрать файл из любого места). Так? |
|
Форум: Microsoft/Office Excel
· Просмотр сообщения: #89766
· Ответов: 1
· Просмотров: 6198
|
История изменений документа
|
Квазимодо |
Отправлено: Среда, 13 Августа 2008, 10:58 |
Участник
Группа: Участник
Сообщений: 162
Регистрация: 25.11.2003
Пользователь №: 6223
|
А для этого документа делали общий доступ (через "Сервис" -> "Доступ к книге")? Если да, то журнал изменений там ведется, а если нет, то - увы... |
|
Форум: Microsoft/Office Excel
· Просмотр сообщения: #89107
· Ответов: 1
· Просмотров: 27635
|
проблемы с функцией СЛЧИС
|
Квазимодо |
Отправлено: Среда, 09 Апреля 2008, 10:30 |
Участник
Группа: Участник
Сообщений: 162
Регистрация: 25.11.2003
Пользователь №: 6223
|
iggipop, не знаю, устроит ли такой вариант, но можно определить свою функцию (VBA), что-то вроде: Код Function f() As Double f = Rnd End Function , а в формулы подставлять не СЛЧИС(), а f(). Тогда эти формулы не будут реагировать на пересчет, а случайное число можно менять, имитируя изменение ячейки (например, двойной щелк мышкой, а затем Enter). |
|
Форум: Microsoft/Office Excel
· Просмотр сообщения: #88206
· Ответов: 2
· Просмотров: 6760
|
Посчитать стаж
|
Квазимодо |
Отправлено: Пятница, 04 Апреля 2008, 16:15 |
Участник
Группа: Участник
Сообщений: 162
Регистрация: 25.11.2003
Пользователь №: 6223
|
arturhome, попробуем так. Пусть в ячейке A1 начальная дата, в A2 - конечная, и дата в A2 больше, чем в A1. Тогда количество полных лет рассчитывается по формуле:
=ЦЕЛОЕ(ГОД(A2)-ГОД(A1)-ЕСЛИ(ДАТА(ГОД(A1);МЕСЯЦ(A2);ДЕНЬ(A2))<A1;1;0))
(т.е. если день, который был в первой дате, еще не наступил во второй, то из числа полных лет нужно вычесть 1; ЦЕЛОЕ() использовано, чтобы формат ячейки не менялся на дату).
Количество месяцев:
=ЦЕЛОЕ(МЕСЯЦ(A2)-МЕСЯЦ(A1)-ЕСЛИ(ДЕНЬ(A2)<ДЕНЬ(A1);1;0)+ЕСЛИ(ДАТА(ГОД(A1);МЕСЯЦ(A2);ДЕНЬ(A2))<A1;12;0))
(если не прошло полного месяца, уменьшаем на 1; если количество лет уже уменьшено на 1, добавляем 12).
Количество дней (без выделения недель):
=ЕСЛИ(ДЕНЬ(A2)>ДЕНЬ(A1);ДЕНЬ(A2)-ДЕНЬ(A1);ЦЕЛОЕ(A2-ДАТА(ГОД(A2)-ЕСЛИ(МЕСЯЦ(A2)=1;1;0);ЕСЛИ(МЕСЯЦ(A2)=1;12;МЕСЯЦ(A2)-1);ДЕНЬ(A1))))
(если день во воторй дате больше, чем в первой, берем разницу; если меньше, то делаем промежуточную дату - день месяца, предшествующего второй дате, но число из первой; разница между этой датой и конечной и есть количество дней).
Количество недель и дней можно сосчитать, поделив последнее число на 7 с остатком. (функции =ЦЕЛОЕ() и =ОСТАТ())) |
|
Форум: Microsoft/Office Excel
· Просмотр сообщения: #88183
· Ответов: 4
· Просмотров: 11688
|
Помажите чайнику
|
Квазимодо |
Отправлено: Понедельник, 24 Марта 2008, 9:34 |
Участник
Группа: Участник
Сообщений: 162
Регистрация: 25.11.2003
Пользователь №: 6223
|
Ага... Первое подозрение - что у тебя включено Option Explicit, а переменная j не определена. Или не задано значение перед входом в цикл. Но лучше все же вышли файл мне (alex_i собак electra-n тчк ru). |
|
Форум: Microsoft/Office Excel
· Просмотр сообщения: #88107
· Ответов: 7
· Просмотров: 8958
|
Обнавления данных из SQL в Excel
|
Квазимодо |
Отправлено: Пятница, 21 Марта 2008, 16:49 |
Участник
Группа: Участник
Сообщений: 162
Регистрация: 25.11.2003
Пользователь №: 6223
|
Может, эта статья из MS KB не имеет отношения к твоей проблеме, но все же: что стоит в параметре реестра, описанном в конце статьи (QuerySecurity), если он вообще задан, - случайно, не 1? |
|
Форум: Microsoft/Office Excel
· Просмотр сообщения: #88097
· Ответов: 2
· Просмотров: 7012
|
Помажите чайнику
|
Квазимодо |
Отправлено: Пятница, 21 Марта 2008, 16:43 |
Участник
Группа: Участник
Сообщений: 162
Регистрация: 25.11.2003
Пользователь №: 6223
|
А можно подробнее, что именно не получается? Выскакивают ошибки при выполнении? Неправильные значения в тех ячейках, где ВПР()? Еще что-то? А то как-то не протелепатировать... |
|
Форум: Microsoft/Office Excel
· Просмотр сообщения: #88096
· Ответов: 7
· Просмотров: 8958
|
Помажите чайнику
|
Квазимодо |
Отправлено: Вторник, 18 Марта 2008, 14:47 |
Участник
Группа: Участник
Сообщений: 162
Регистрация: 25.11.2003
Пользователь №: 6223
|
arturhome, а на что этот код ругался? Вроде бы перетащил с твоего кода... А вообще-то, если у тебя список идет до первой пустой строки, то цикл уже будет не For, а While (что-то вроде Код While Not IsEmpty(Worksheets("Лист1").Cells(j,1).Value) ... 'твои действия j=j+1 Wend ). Вместо Cells(j,1) подставишь что-то свое, если список у тебя не в первом столбце. |
|
Форум: Microsoft/Office Excel
· Просмотр сообщения: #88081
· Ответов: 7
· Просмотров: 8958
|
Помажите чайнику
|
Квазимодо |
Отправлено: Вторник, 18 Марта 2008, 11:50 |
Участник
Группа: Участник
Сообщений: 162
Регистрация: 25.11.2003
Пользователь №: 6223
|
arturhome, а твой макрос что должен делать? Печатать все листы из книги и после печати каждого листа увеличивать на 1 номер в ячейке I11 листа "AIDS"? Тогда лучше попробовать другой цикл: Код For Each Ws In ActiveWorkbook.Worksheets If Ws.Name <> "AIDS" Then 'это чтобы пропустить печать самого листа AIDS Ws.PrintOut Copies:=1, Collate:=True Sheets("AIDS").Select Range("I11").Select If IsNumeric(ActiveCell.Value) Then ActiveCell.Value = ActiveCell.Value + 1 End If End If Next |
|
Форум: Microsoft/Office Excel
· Просмотр сообщения: #88079
· Ответов: 7
· Просмотров: 8958
|
Задачка на Паскале.
|
Квазимодо |
Отправлено: Среда, 05 Марта 2008, 15:06 |
Участник
Группа: Участник
Сообщений: 162
Регистрация: 25.11.2003
Пользователь №: 6223
|
Fomik, по-моему, не обязательно. Достаточно сделать так: для отрезка AB определить целочисленные переменные x1, x2 (координаты точек, при этом x1<x2, т.е. либо x1:=x( A ), x2:=x( B ), либо наоборот; x1 - самая левая точка отрезка AB, если считать, что координатная ось идет слева направо) и булевую Flag12 (если координата точки A меньше, чем B, то True, иначе False). Аналогично, для отрезка CD вводим переменные x3, x4 (x3<x4) и Flag34. А дальше проверяем попадание координат x1 и x2 в промежуток между x3 и x4 (если (x1-x3)*(x1-x4)<=0, то эта точка попадает на отрезок CD, иначе нет; аналогично для x2), т.е. алгоритм такой, какой приведен в моем предыдущем сообщении. |
|
Форум: Программирование
· Просмотр сообщения: #87962
· Ответов: 12
· Просмотров: 19043
|
Сохранение в формате Dbf
|
Квазимодо |
Отправлено: Вторник, 04 Марта 2008, 12:25 |
Участник
Группа: Участник
Сообщений: 162
Регистрация: 25.11.2003
Пользователь №: 6223
|
Тогда попробуем писать в DBF через ADO (ActiveX Data Objects). Вот процедурка для начала (тут в таблице всего 2 столбца и 5 строк, но ты сделаешь, как надо) : Код Sub Macro1() Dim conn, path, cmd, fs path = "c:\projects\" Set fs = CreateObject("Scripting.FileSystemObject") Set conn = CreateObject("ADODB.Connection") conn.Open ("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & path & ";Extended Properties=dBase IV") If Not (fs.FileExists(path & "таблица_1.dbf")) Then conn.Execute "CREATE TABLE таблица_1 (ID int, INFO char(30))" End If For i = 1 To 5 'это для примера cmd = "INSERT INTO таблица_1 VALUES (" & Cells(i + 1, 1) & ",'" & Cells(i + 1, 2) & "')" conn.Execute cmd Next conn.Close Set conn = Nothing Set fs = Nothing End Sub Здесь проверяется, существует ли файл DBF, и если нет, то он создается (для этого и нужен объект файловой системы fs), а если уже есть, то в него дописываются записи из текущего листа. Хотя, если у тебя есть Visual FoxPro, возможно, лучше сделать наоборот - открывать книгу Excel и писать в базу оттуда. А то где DBF-файлы, там, скорее всего, есть и индексы, а с ними лучше из фокса. |
|
Форум: Microsoft/Office Excel
· Просмотр сообщения: #87949
· Ответов: 4
· Просмотров: 12431
|
Сохранение в формате Dbf
|
Квазимодо |
Отправлено: Понедельник, 03 Марта 2008, 12:03 |
Участник
Группа: Участник
Сообщений: 162
Регистрация: 25.11.2003
Пользователь №: 6223
|
Детский вопрос, но: пустых строчек в сохраняемом листе нет? |
|
Форум: Microsoft/Office Excel
· Просмотр сообщения: #87941
· Ответов: 4
· Просмотров: 12431
|
Задачка на Паскале.
|
Квазимодо |
Отправлено: Понедельник, 03 Марта 2008, 11:45 |
Участник
Группа: Участник
Сообщений: 162
Регистрация: 25.11.2003
Пользователь №: 6223
|
Кстати, малость уточним: на координатной прямой или плоскости? Если прямой, то векторы AB и CD всегда коллинеарны, а алгоритм можно придумать что-то вроде этого: 1. Определим, какой из отрезков меньше по длине (AB или CD). Допустим, выяснилось, что AB, и при этом x(A)<=x(B), x(С)<=x(D) (x(Y) - координата точки Y). Тогда 2. определим, попадают ли точки A и B внутрь отрезка CD. 3. Если не попадает ни одна, отрезки не пересекаются. 4. Если А не попадает, а B попадает, то отрезок пересечения - CB. 5. Если A попадает, а B нет, то отрезок пересечения - AD. 6. Если и А, и B попали, то весь отрезок AB находится внутри отрезка CD. Если же точки A,B,C,D на плоскости (а не на прямой), то shplint несколько упростил: речь ведь о пересечени отрезков, а не прямых, т.е. найденная точка пересечения еще должна попасть внутрь каждого отрезка. |
|
Форум: Программирование
· Просмотр сообщения: #87940
· Ответов: 12
· Просмотров: 19043
|
Семейство функций exec
|
Квазимодо |
Отправлено: Среда, 27 Февраля 2008, 9:38 |
Участник
Группа: Участник
Сообщений: 162
Регистрация: 25.11.2003
Пользователь №: 6223
|
Попробуй так: Код execlp("cmd.exe","cmd.exe","/c","dir","c:\\command\\programm1",NULL); (в путях по два обратных слэша). |
|
Форум: Программирование
· Просмотр сообщения: #87905
· Ответов: 21
· Просмотров: 30918
|
Семейство функций exec
|
Квазимодо |
Отправлено: Вторник, 26 Февраля 2008, 11:12 |
Участник
Группа: Участник
Сообщений: 162
Регистрация: 25.11.2003
Пользователь №: 6223
|
shplint, нет такого файла dir.exe, а есть командный процессор (cmd.exe), и в него через командную строку передается твой dir. Поэтому строку Код execl("dir.exe","dir.exe",NULL); придется заменить на Код execlp("cmd.exe","cmd.exe","/c","dir",NULL); В данном случае execl p используется, чтобы искать cmd.exe не только в текущей директории, но и в тех, которые прописаны в переменной PATH (в том числе в системной, где он на самом деле и есть). |
|
Форум: Программирование
· Просмотр сообщения: #87898
· Ответов: 21
· Просмотров: 30918
|
Семейство функций exec
|
Квазимодо |
Отправлено: Пятница, 22 Февраля 2008, 12:35 |
Участник
Группа: Участник
Сообщений: 162
Регистрация: 25.11.2003
Пользователь №: 6223
|
Админ, IMHO, на твой вопрос: Цитата Не понятно, что тебе непонятно в этих функциях? , ответ такой: им преподают C++ примерно как заочникам, "галопом по Европам". Не вдаваясь в теорию (хотя бы про указатели, объявления прототипов функций и прочее), сразу требуют практику (судя по соседней теме, очень ускоренно - сейчас относительно простые примеры, а через полгода - уже обмен сообщениями по TCP/IP). Ко мне недавно двое программистов-второкурсников (с дневного!) приходили с заданиями - пока тоже под DOS (на ASM, файловые функции, тоже все сжато до безобразия, даже задачу препод внятно не поставил), а до чего через полгода дойдут - кто его знает... shplint, ты недавно спрашивал: Цитата Я непонимаю в execl(argv[0],argv[0],"ONE","TWO","THREE",NULL) то, что стоит в скобочках. argv[0]-путь к пограмме, а остальное зачем "ONE","TWO","THREE",NULL . Так вот, эти "ONE", "TWO", "THREE" взяты только для примера - это аргументы, которые вызывающая программа передает вызываемой через командную строку. В примере выбрана функция execl, т.е. тот вариант функции exec, который требует передачи параметров командной строки списком. Если ты посмотришь объявление функции execl в инклюде process.h, то увидишь там многоточие в конце, т.е. количество параметров заранее неизвестно. Поэтому и нужен NULL в конце, чтобы функция execl могла определить, сколько всего параметров. Если бы в примере была функция execv, то ты явно определял бы массив из указателей char* и заводил бы в него указатели на строки argv[0] и остальные параметры. |
|
Форум: Программирование
· Просмотр сообщения: #87872
· Ответов: 21
· Просмотров: 30918
|
Семейство функций exec
|
Квазимодо |
Отправлено: Пятница, 22 Февраля 2008, 9:23 |
Участник
Группа: Участник
Сообщений: 162
Регистрация: 25.11.2003
Пользователь №: 6223
|
Ну, я увидел вот это: Цитата Еще непонятно вот что в примере(см. ниже) строчка execvp("CHILD.EXE",argv);void main(int argc,char **argv) зачем в ф. main применено указатель на указателе и подумал, что ты спрашиваешь, почему применен указатель на указатель, а не указатель на массив, как обычно. Тогда объясни, пожалуйста, о чем ты спрашивал. |
|
Форум: Программирование
· Просмотр сообщения: #87866
· Ответов: 21
· Просмотров: 30918
|
Новые ответы Нет новых ответов Горячая тема (Есть ответы) Горячая тема (Нет ответов) |
Опрос (Есть ответы) Опрос (Нет ответов) Закрытая тема Тема перемещена |
|
|
© Copyright by WinCity.Ru 2001 - 2008 | Обратная связьУслуги веб-хостинга предоставлены компанией MTW.RU
|
|