• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

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

    Запись на курс до 25 апреля. Получить промодоступ ...

Выгрузка данных в CSV

  • Автор темы Serduko
  • Дата начала
S

Serduko

выгружайте в CSV - в чем вопрос-то?
Выгружаю, автоматом переносит строки, как можно исправить?
<div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">Код</div></div><div class="sp-body"><div class="sp-content">
Код:
Const Path = "D:\"
Const sc = ";"

Dim s As New NotesSession
Dim db As NotesDatabase
Dim v As NotesView
Dim col As NotesDocumentCollection
Dim doc As NotesDocument
Dim temp As NotesDocument
Dim arr(1 To 57) As String 
Dim csvstr As String
Dim i As Integer
Dim rtitem As NotesRichTextItem
Dim Stream As NotesStream

Set db = s.Currentdatabase
Set v = db.Getview("ByNum3")
'Set col = v.Getalldocumentsbykey("RKCK", true)
'Set doc = col.Getfirstdocument()
Set doc = v.Getfirstdocument()

Set temp = db.Createdocument()
Set rtitem = New NotesRichTextItem(temp, "list")

While Not doc Is Nothing

arr(1) = doc.CorFrom(0)
.....
.....
arr(52) = doc.Data_reg(0)

For i=1 To UBound(arr)
If i <> UBound(arr) Then
csvstr = csvstr + arr(i) + sc
Else
csvstr = csvstr + arr(i)
End If
Next

Call rtitem.AddNewline(1)
Call rtitem.AppendText(csvstr)

Set doc = v.Getnextdocument(doc)
Wend

Set stream=s.CreateStream 
Call Stream.Open(Path + db.Filename + ".csv")
Call Stream.WriteText(rtitem.text)
Call Stream.Close 
Call temp.Remove(True)
вопрос решен - отказался от ричтекста
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 941
609
BIT
215
arr(1) = doc.CorFrom(0) ..... ..... arr(52) = doc.Data_reg(0)
такие вещи проще решать через forall с именем поля определённым вне цикла
Код:
forall el in arr
csvstr = csvstr + doc.GetItemValue (el)(0) + sc
end forall


Добавлено: и списсок поле инициализировать из строки, типа:
s={fldName1;....;fldNameN}
arr=split (s,{;})

Добавлено: а последний ";" отрезать после цикла типа Left (cvsstr;Len(cvsstr)-1)
что касается перевода каретки - notesStream.WriteText( text$ , EOL_CRLF)
читать в хэлпе
а выводить из РТ - считаю извращением - пишите параллельно
 
S

Serduko

А как убрать, переход в строке? Т.е. в некоторых филдах есть переход на следующую строку, что соответственно портит файл.
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 941
609
BIT
215
а менять-то на что? и в каких полях такое? (тип) может просто нерпавильно выволите содержимое? (код где)
 
S

Serduko

Поля типа "текст", вывожу правильно, ошибки быть не может. Сдвигается(т.е. переходит на следующую с середины) только одна строка в файле.
 
S

Serduko

Решил таким образом:

Код:
ForAll a In arr
If StrLeft(a,strEnter,1) <> "" Then
If StrRight(a,strEnter,1) <> "" Then
a = StrLeft(a,strEnter,1)+ " " + StrRight(a,strEnter,1)
Else
a = StrLeft(a,strEnter,1)
End If
End If
End ForAll
 
S

Serduko

Можно, чуть уменьшит код. :facepalm:
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 941
609
BIT
215
Поля типа "текст"
зависит от того, что текс м.б. РТ, и как получали текст из поля
и вводили туды переводы кареток или нет...
а ваще в нотусне перевод каретки - Chr(10)
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!