#python #excel
#python #excel
Вопрос:
Я хочу выгрузить [3-4 строки вместе] некоторые данные на лист Excel.
Я мог бы выгрузить одну строку на основе некоторых критериев [например, если строка начинается с // или /* ], но в случае, когда строки начинаются с /* и после 3-4 предложений заканчиваются * / .
Только первая строка, которая начинается с /*, и последняя строка, которая заканчивается */, могут выполнять дамп.
Я не могу справиться с этой ситуацией, пожалуйста, помогите.
Ниже приведен мой код:-
fileopen = open("test.c")
for var in fileopen:
if var.startswith("//"):
var1 = var1 var
continue
if var.startswith("/*"):
var1 = var1 var
continue
else:
continue
worksheet.write(i, 5,var1,cell_format)
Примечание: — В приведенном выше коде будет проблема с отступом. Поскольку я не знаю, как правильно поместить код в stack over flow, поэтому, пожалуйста, игнорируйте эту проблему.
Например:-
/* Проверьте, что для
вариантов i386, использующих 3DNow, генерируются правильные инструкции предварительной выборки данных! инструкции предварительной выборки с предварительной выборкой или SSE с
подсказками по местоположению. */
Я хочу выгрузить все данные сразу с помощью скрипта python, но я мог бы выгрузить только «Первую строку», которая начинается с /* .
Любое предложение, пожалуйста!!!
Заранее спасибо.
Комментарии:
1. Это python, верно? Пользователи Excel без каких-либо знаний python не смогут вам ответить, и может пройти некоторое время, прежде чем кто-то увидит ваш вопрос. Если да, то вам также необходимо добавить тег python. В противном случае добавьте любые соответствующие теги.
2. Используйте следующую строку из ostermiller для построения необходимого регулярного выражения: ostermiller.org/findcomment.html
3. Да, я хочу выгрузить данные в лист Excel с помощью скрипта Python.
4. Спасибо David C. Rankin за ваше предложение. но он не работает в python, выдает ошибку типа «Недопустимое выражение».
Ответ №1:
import re
fileopen = open("test.c")
# Convert file to a string
source_code = ""
for var in fileopen:
source_code = var
# Find the first comment from the source code
pattern = r'//.*?$|/*.*?*/|'(?:\.|[^\'])*'|"(?:\.|[^\"])*"'
var1 = re.search(pattern, source_code, re.DOTALL | re.MULTILINE).group() # first comment
var1 = unicode(var1, errors='ignore')
worksheet.write(i, 5, var1, cell_format)
Комментарии:
1. Большое спасибо за ответ. он работает нормально, но не соответствует моим требованиям. Поскольку мне нужно получить строку комментариев, прежде чем статистика фактического кода C. Если комментарии между кодом, которые не должны появляться, и если в запросе нет комментариев [до фактического запуска], тогда контроллер должен выйти.. Вот и все!!
2. @AnshuSharma, обновил код для поиска только по первому комментарию, поскольку нет определенного способа предсказать, где начинается ваш C-код. Надеюсь, это поможет 🙂
3. Спасибо @ user1492071:, Я сделал то же самое, но получил ошибку «UnicodeDecodeError: кодек ‘utf8’ не может декодировать байт 0xff в позиции 18: недопустимый начальный байт» . Любое предложение, пожалуйста???
4. @AnshuSharma, ошибка, безусловно, возникает из-за модуля взаимодействия с Excel, который вы не указали. Вы можете легко игнорировать недопустимые байты с помощью
unicode(var1, errors='ignore')
5. Еще раз спасибо @ user1492071.я добавил unicode (var1, errors =’ignore’) этот код, но все равно получаю ту же ошибку. и еще один вопрос, как указать модуль интерфейса Excel ??. я импортировал xlsxwriter python pkg. Это нормально??
Ответ №2:
Этот VBA считывает текстовый файл и выгружает все строки комментариев на первый лист
Public Sub test()
Dim iFN As Integer
Dim sLine As String
Dim iMultiple As Integer
Dim sComment As String
Dim iRow As Integer
iFN = FreeFile()
iMultiple = 0
sComment = ""
iRow = 1
'Change this path as required
Open "d:tempxl.txt" For Input As #iFN
While Not EOF(iFN)
sLine = ""
Line Input #iFN, sLine
If iMultiple = 1 Then
sComment = sComment amp; sLine
If Left(sLine, 2) = "*/" Then
iMultiple = 0
End If
Else
If Left(sLine, 2) = "//" Then
sComment = sLine
ElseIf Left(sLine, 2) = "/*" Then
sComment = sLine
iMultiple = 1
End If
End If
If iMultiple = 0 And Trim(sComment) <> "" Then
ThisWorkbook.Worksheets(1).Cells(iRow, 1).Value2 = sComment
iRow = iRow 1
sComment = ""
End If
Wend
Close #iFN
MsgBox "Done!"
End Sub
Комментарии:
1. Я считаю, что для op требуется решение на python.